Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Общие вопросы по программированию, компьютерный форум
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 18.03.2017, 13:20   #1
Kef1r
Форумчанин
 
Регистрация: 13.05.2016
Сообщений: 111
По умолчанию Как создать конвертер (Переводчик) кода языков программирования?

Здравствуйте, дали мне тему на курсач. "Конвертер кода". Нужно сделать программу для перевода кода с Pascal на C# и наоборот. Выглядеть она будет как 2 текстовых поля и кнопочка "Конвертировать". Приступил я, вроде все шло неплохо, пока не добрался до функций. Поясню:
в паскале объявление функции выглядит так:
Код:
function sum(x, y: integer): integer;
а в C# так:
Код:
int sum( int x, int y )
.
Так вот проблема в том, что в C# тип функции пишется в начале, а в Pascal'е в конце.
Та же проблема и при объявлении переменных. В C#
Код:
int x, int y
. B Pascal'e
Код:
x,y:integer
Что с этим делать я не знаю, может быть нужно как-то считывать строку в обратном порядке. Короче говоря я в ступоре.
Может у кого есть идеи, как это можно реализовать? Это бы очень мне помогло.
Программу делаю в Windows Form.

Последний раз редактировалось Kef1r; 18.03.2017 в 14:18.
Kef1r вне форума Ответить с цитированием
Старый 18.03.2017, 13:28   #2
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

Обычно во всех задачах связанных с формальными языками (компиляторы, интерпретаторы, конвертеры, утилиты для рефакторинга, ...) не делают всё сразу, а разделяют на несколько этапов.

Сначала парсинг и создание какой-то удобной структуры/дерева (например AST), а потом уже проход по нему для выполнения самой задачи (генерация кода, ...)
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Старый 18.03.2017, 14:16   #3
Kef1r
Форумчанин
 
Регистрация: 13.05.2016
Сообщений: 111
По умолчанию

Цитата:
Сообщение от Alex11223 Посмотреть сообщение
Обычно во всех задачах связанных с формальными языками (компиляторы, интерпретаторы, конвертеры, утилиты для рефакторинга, ...) не делают всё сразу, а разделяют на несколько этапов.

Сначала парсинг и создание какой-то удобной структуры/дерева (например AST), а потом уже проход по нему для выполнения самой задачи (генерация кода, ...)
Это конечно верно, но как правильная и удобная структура программы поможет мне решить задачу, которую я описал выше?
Kef1r вне форума Ответить с цитированием
Старый 18.03.2017, 14:46   #4
Pavia
Лис
Старожил
 
Аватар для Pavia
 
Регистрация: 18.09.2015
Сообщений: 2,409
По умолчанию

Она вам поможит так как выводить вы сможете в прлизвольном порядке слов.

Вам надо освоить рекурсию или автомат с магазинной(стековой) памятью. При помощи них можно развернуть в обратном порядке.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
У дзен программиста программа делает то что он хотел, а не то что он написал .

Последний раз редактировалось Вадим Мошев; 18.03.2017 в 14:55.
Pavia вне форума Ответить с цитированием
Старый 18.03.2017, 15:03   #5
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,695
По умолчанию

Цитата:
Это конечно верно, но как правильная и удобная структура программы поможет мне решить задачу, которую я описал выше?
Прямо. Т.к. у вас будет токен заголовок функции с параметрами (например) и пофиг прямо это потом записывать прямо, обратно или косо...
p51x вне форума Ответить с цитированием
Старый 18.03.2017, 15:07   #6
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

Я ж сказал как.
Не надо ничего с целыми строками типа "x, y: int" делать на этапе генерации кода.

Надо разделить на токены, потом создать дерево (AST или хотя бы CST) и ходить по нему, генерировать код.

https://en.wikipedia.org/wiki/Compiler

Pragmatic Bookshelf Publishing Language Implementation Patterns, Create Your Own Domain-Specific.pngAho - Compilers - Principles, Techniques, and Tools 2e.pdf - Foxit Reader 2017-03-18 14.05.46.png
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Старый 18.03.2017, 15:19   #7
Kef1r
Форумчанин
 
Регистрация: 13.05.2016
Сообщений: 111
По умолчанию

Спасибо, буду пробовать.
Kef1r вне форума Ответить с цитированием
Старый 18.03.2017, 16:05   #8
Kef1r
Форумчанин
 
Регистрация: 13.05.2016
Сообщений: 111
По умолчанию

Можно вопрос не по теме: на сколько бы вы оценили сложность этой программы (1-минимум, 5-максимум). Просто интересно)
Kef1r вне форума Ответить с цитированием
Старый 18.03.2017, 16:11   #9
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

Зависит от того какое подмножество языка нужно поддерживать.

Легче компилятора, не нужно париться с машинными кодами или байт кодом, переводить циклы/if'ы в goto и т.п. )

Вообще если не нужно всё реализовывать самому с нуля, то для парсинга можно взять библиотеку типа ANTLR (генерация парсера из грамматики).
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Старый 18.03.2017, 16:51   #10
Kef1r
Форумчанин
 
Регистрация: 13.05.2016
Сообщений: 111
По умолчанию

Цитата:
Сообщение от Alex11223 Посмотреть сообщение
Зависит от того какое подмножество языка нужно поддерживать.
Нужно переводить код с Pascal'a в C#(консоль) и наоборот.
Kef1r вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
как создать свой языковый переводчик? midoxxx Помощь студентам 20 09.10.2016 16:58
Сколько языков программирования в кс 1.6 ? Pekky Свободное общение 19 15.06.2015 00:48
Теория языков программирования Tesmont Помощь студентам 1 03.02.2011 13:40
Как компиляторы для языков программирования пишутся на самих себе? bullvinkle Свободное общение 29 19.03.2010 15:47
совмещение 2-х языков программирования fis Общие вопросы Delphi 5 30.01.2007 20:13