Конвертация кодов |
Прежде чем задать вопрос, смотрите FAQ.
Рекомендуем загрузить DRKB.
Конвертация кодов |
Провинциалка |
8.12.2011 23:11
Сообщение
#1
|
Пионер Группа: Пользователи Сообщений: 57 Пол: Женский Реальное имя: Ольга Репутация: 2 |
Здравствуйте! Очень нуждаюсь в помощи настоящих знатоков языков программирования Delphi и C++.
Дело в том что я должна решить задачу по следующей теме: Конвертирование программ с одного языка программирования на другой Delphi < > C++ Я её понимаю так что нужно написать программу, конвертирующую код с одного языка программирования на другой, а именно с Delphi на C++. А как это сделать, ума не приложу. Просмотрела здесь массу похожих тем, ничего толкового не нашла. Не знаю даже от чего оттолкнуться. Подскажите хорошую идею |
IUnknown |
8.12.2011 23:24
Сообщение
#2
|
a.k.a. volvo877 Группа: Пользователи Сообщений: 1 013 Пол: Мужской Репутация: 627 |
|
Провинциалка |
9.12.2011 0:11
Сообщение
#3
|
Пионер Группа: Пользователи Сообщений: 57 Пол: Женский Реальное имя: Ольга Репутация: 2 |
Не судите меня строго, но боюсь, что мне сложно будет разобраться в этом море информации. Особенно если учесть, что google перевел страницу на русский так как будто её писал русскоговорящий китаец. Если не трудно, объясните как работает ptoc354
Добавлено через 5 мин. Пойду спать, завтра с новыми силами начну усиленно вдумываться в материал |
Lapp |
9.12.2011 7:19
Сообщение
#4
|
Уникум Группа: Модераторы Сообщений: 6 823 Пол: Мужской Реальное имя: Лопáрь (Андрей) Репутация: 159 |
Не судите меня строго Оля, с чего ты взяла, что кто-то вообще судит?.. Я, например, как всегда, очень рад человеку, который работатет сам. Послушай, я хочу не то, чтоб предостеречь, но хотя бы упомянуть некоторые вещи.. При переводе с Паскаля на Си подводных камней мало (хотя есть). Прога получится корявая, но задача все же разрешимая. Обратная же задача.. Она тоже разрешима, но пота и крови придется пролить поболе - если, конечно, замахиваться на полную функциональность. Поэтому.. Я рекомендую начать с того, что просто сопоставить эти языки. Грубо говоря, есть три части. 1. Что есть и там, и там (скажем, оператор присваивания). 2. То, что есть только в Си и нет в Паскале (например, значение оператора присваивания). 3. То, чего нет в Си, но есть в Паскале (например, with). Все это аккуратно выписать в две (на самом деле больше) колонки и пронумеровать, а также попытаться расположить в порядке возрастания сложности. А потом начинать осуществлять по пунктам.. А кроме того, тебе волей-неволей придется сделать часть работы компилятора (анализировать структуру программы). Это тоже надо попытаться обдумать. Короче, я что хочу сказать? Что тут полно работы ДО программирования. Начни с того, что возьми несложный код и попытайся его перевести вручную.. Да, и еще один вопросик к тебе - сама прога-то на каком языке будет? на Дельфи, судя пр разделу, который ты выбрала? Надеюсь, ты не собираешься ее по ходу дела конвертировать туда обратно как подопытного кролика.. -------------------- я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой |
Провинциалка |
9.12.2011 11:28
Сообщение
#5
|
Пионер Группа: Пользователи Сообщений: 57 Пол: Женский Реальное имя: Ольга Репутация: 2 |
Спасибо!
Отвечу по порядку: 1. Цитата Обратная же задача.. Она тоже разрешима, но пота и крови придется пролить поболе Если имеется ввиду конвертация не с Delphi на С++ , а с С++ на Delphi - то здесь однозначно Delphi на С++. Если же речь идет о том, что программа должна уметь делать и то и другое - тут скажу что это лишнее. 2. Цитата если, конечно, замахиваться на полную функциональность Учитель посоветовал сделать программку, переводящую не слишком сложный код! 3. Цитата сама прога-то на каком языке будет? - это на усмотрение, но мне почему-то кажется что легче на Delphi/ |
IUnknown |
14.12.2011 11:25
Сообщение
#6
|
a.k.a. volvo877 Группа: Пользователи Сообщений: 1 013 Пол: Мужской Репутация: 627 |
Что-то темка приутихла...
Провинциалка, если бы передо мной стояла задача написать программу, конвертирующую исходник с Дельфи (будем говорить, с Паскаля) на С++, то я бы поступил так: пишется парсер, который перегоняет исходник программы в некий список инструкций. Скажем, фрагмент 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? Так что на написание программы, которая будет хотя бы простые тексты конвертировать, у тебя уйдет не один день. И даже не неделя...Жаль, времени мало, написать свой вариант и проверить все предположения - некогда, но если будут вопросы - задавай обязательно, вместе будем разбираться... |
TarasBer |
14.12.2011 11:48
Сообщение
#7
|
Злостный любитель Группа: Пользователи Сообщений: 1 755 Пол: Мужской Репутация: 62 |
Короче, сразу начинай с книги дракона.
-------------------- |
Провинциалка |
14.12.2011 23:29
Сообщение
#8
|
Пионер Группа: Пользователи Сообщений: 57 Пол: Женский Реальное имя: Ольга Репутация: 2 |
Здравствуйте!
Да, объём PtoC я видела. Мягко говоря впечатляет. Скажу честно - сложно. Кто вообще интересно понимает что там написано? (К тому же я ещё и "немка") Ваш пост я распечатала, сейчас перечитываю вновь буквально по слогам, т.к. я обязана понять вашу мысль. Ну и досталась же мне тема - конвертация! Была сегодня на консультации у преподавателя - было уточнено много моментов, один из главных - возможности программы могут ограничиваться переводом самых простеньких программ, в противном случае будут оставаться куски непереведенного текста. Это немного радует. Работа мною уже начата (оформлен интерфейс программы) и продолжается. А без ваших советов, мне так и так не разобраться, поэтому часто придется обращаться. Буквально скоро. Цитата Короче, сразу начинай с книги дракона Эту книгу можно скачать по ссыслке, которая http://groups.google.com/group/sellme-dev/...bbc6c83649aaf56 ? |
TarasBer |
15.12.2011 9:19
Сообщение
#9
|
Злостный любитель Группа: Пользователи Сообщений: 1 755 Пол: Мужской Репутация: 62 |
Да, объём PtoC я видела. Мягко говоря впечатляет. Скажу честно - сложно. Кто вообще интересно понимает что там написано? (К тому же я ещё и "немка") Конечно, сложно. Потому что конвертёр - это уже почти готовый компилятор. Придумай своя язык, напиши конвертёр в LLVM и компилятор готов. Цитата Была сегодня на консультации у преподавателя - было уточнено много моментов, один из главных - возможности программы могут ограничиваться переводом самых простеньких программ, А, ну тогда просто заменяй = на ==, = на :=, begin и end на {} -------------------- |
Провинциалка |
15.12.2011 21:43
Сообщение
#10
|
Пионер Группа: Пользователи Сообщений: 57 Пол: Женский Реальное имя: Ольга Репутация: 2 |
Цитата А, ну тогда просто заменяй = на ==, = на :=, begin и end на {} Да, мне и он так посоветовал, да и у меня самой были подозрения так делать. Сейчас вот пока создала интерфейс конвертера. С кнопкой "Сохранить" проблема, не подскажете как исправить? Прикрепленные файлы _________.rar ( 11.57 килобайт ) Кол-во скачиваний: 299 |
Провинциалка |
17.12.2011 0:42
Сообщение
#11
|
Пионер Группа: Пользователи Сообщений: 57 Пол: Женский Реальное имя: Ольга Репутация: 2 |
Здравствуйте. С кнопкой "Сохранить" разобралась. Подскажите, пожалуйста, как правильно должен выглядеть код для кнопки «Перевести на С++» (procedure TForm1.Button3Click(Sender: TObject); ) , чтобы при нажатии на неё в шапке поля Мемо2 появлялись две строки с определенным текстом?
|
Krjuger |
23.12.2011 0:14
Сообщение
#12
|
Профи Группа: Пользователи Сообщений: 652 Пол: Мужской Реальное имя: Алексей Репутация: 20 |
Ну вы покажите,как вы вообще это делаете(преобразование),я вот гадать не умею, каким все таки вы способом это реализовали.Если в общих чертах то вы должны из одного мемо сначала считать всю информацию,затем сохранить ее в таком виде,который требуется для вашей функции/процедуры перевода,получить результат и вывести его в другой Мемо результата.Более наглядно без некоторых уточнений с вашей стороны вртяли получится.
|
Текстовая версия | 4.05.2024 17:20 |