![]() |
Прежде чем задать вопрос, смотрите FAQ.
Рекомендуем загрузить DRKB.
![]() |
Провинциалка |
![]()
Сообщение
#1
|
![]() Пионер ![]() ![]() Группа: Пользователи Сообщений: 57 Пол: Женский Реальное имя: Ольга Репутация: ![]() ![]() ![]() |
Здравствуйте! Очень нуждаюсь в помощи настоящих знатоков языков программирования Delphi и C++.
Дело в том что я должна решить задачу по следующей теме: Конвертирование программ с одного языка программирования на другой Delphi < > C++ Я её понимаю так что нужно написать программу, конвертирующую код с одного языка программирования на другой, а именно с Delphi на C++. А как это сделать, ума не приложу. Просмотрела здесь массу похожих тем, ничего толкового не нашла. Не знаю даже от чего оттолкнуться. Подскажите хорошую идею |
![]() ![]() |
IUnknown |
![]()
Сообщение
#2
|
![]() a.k.a. volvo877 ![]() ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 1 013 Пол: Мужской Репутация: ![]() ![]() ![]() |
Что-то темка приутихла...
Провинциалка, если бы передо мной стояла задача написать программу, конвертирующую исходник с Дельфи (будем говорить, с Паскаля) на С++, то я бы поступил так: пишется парсер, который перегоняет исходник программы в некий список инструкций. Скажем, фрагмент x := x + 5;записывался бы так: (instr:insAssign; src:(ссылка1); dest:(ссылка2); next:(instr:insAssign; src:(ссылка3); dest:(ссылка4); next:NIL); next:NIL) , где ссылка1 - это адрес того элемента списка переменных, который содержит описание переменной X, то же самое - для переменной Y ее адрес хранит ссылка3. Или адрес переменной-структуры с указанием имени поля. Это все надо продумать... А ссылка2 и ссылка4 - это деревья, которые и хранят само выражение. Тоже в таком же виде, не имена переменных, а ссылки на их описания... Точно в таком же стиле можно описывать любые конструкции языка, будь то подпрограммы (тогда вместо src/dest придется хранить имя, список параметров, и тип возвращаемого значения подпрограммы), циклы (тогда будут храниться начальное/конечно значения, шаг и тело цикла - сами инструкции, в виде списка инструкций, как я показал выше), или операторы условия (хранящиеся точно так же, как и обычное выражение, в виде дерева)... А потом - просто проходить по этому построенному списку, и операции, сохраненные в нем записывать, используя синтаксис С. Это может быть, кстати, не только С, а и любой другой императивный язык (с функциональными все гораздо сложнее - там этот подход не пройдет ![]() 1. Оператор with, о котором выше упомянул Андрей. Потребует перед названиями переменных добавлять полный путь к ним в Сишном коде. Для этого и ссылки на переменные/поля, а не просто их имена. 2. Вложенные подпрограммы. Для этого и нужен список параметров. В Сях нет такой фишки, поэтому придется к списку параметров внутренней подпрограммы добавлять список параметров внешней для нее подпрограммы. Я понимаю, что это сразу выглядит очень сложно. Но 1) никто и не обещал, что будет легко - задача не из простых, корректно конвертировать программу с одного языка на другой. 2) это сложно, когда оно написано, а ты этого еще не понимаешь. Попробуй нарисовать то, что я набросал, на листке бумаги - ты сразу поймешь, что я имел в виду. Для реализации всего вышеописанного я бы воспользовался вариантными записями. То есть, часть такой записи: type Еще раз повторю: задача - не из простых, ты видела объем кода PtoC? Так что на написание программы, которая будет хотя бы простые тексты конвертировать, у тебя уйдет не один день. И даже не неделя...Жаль, времени мало, написать свой вариант и проверить все предположения - некогда, но если будут вопросы - задавай обязательно, вместе будем разбираться... |
![]() ![]() |
![]() |
Текстовая версия | 3.07.2025 12:28 |