IPB
ЛогинПароль:

> ВНИМАНИЕ!

Прежде чем задать вопрос, смотрите FAQ.
Рекомендуем загрузить DRKB.

 
 Ответить  Открыть новую тему 
> Конвертация кодов
Провинциалка
сообщение 8.12.2011 23:11
Сообщение #1


Пионер
**

Группа: Пользователи
Сообщений: 57
Пол: Женский
Реальное имя: Ольга

Репутация: -  2  +


Здравствуйте! Очень нуждаюсь в помощи настоящих знатоков языков программирования Delphi и C++.
Дело в том что я должна решить задачу по следующей теме: Конвертирование программ с одного языка программирования на другой Delphi < > C++

Я её понимаю так что нужно написать программу, конвертирующую код с одного языка программирования на другой, а именно с Delphi на C++. А как это сделать, ума не приложу. Просмотрела здесь массу похожих тем, ничего толкового не нашла. Не знаю даже от чего оттолкнуться.
Подскажите хорошую идею
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
IUnknown
сообщение 8.12.2011 23:24
Сообщение #2


a.k.a. volvo877
*****

Группа: Пользователи
Сообщений: 1 013
Пол: Мужской

Репутация: -  627  +


Самая хорошая идея - посмотреть, как это делает утилита PtoC, чтоб было от чего отталкиваться. Заодно почитать здесь: Readme
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Провинциалка
сообщение 9.12.2011 0:11
Сообщение #3


Пионер
**

Группа: Пользователи
Сообщений: 57
Пол: Женский
Реальное имя: Ольга

Репутация: -  2  +


Не судите меня строго, но боюсь, что мне сложно будет разобраться в этом море информации. Особенно если учесть, что google перевел страницу на русский так как будто её писал русскоговорящий китаец. Если не трудно, объясните как работает ptoc354

Добавлено через 5 мин.
Пойду спать, завтра с новыми силами начну усиленно вдумываться в материал
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Lapp
сообщение 9.12.2011 7:19
Сообщение #4


Уникум
*******

Группа: Модераторы
Сообщений: 6 823
Пол: Мужской
Реальное имя: Лопáрь (Андрей)

Репутация: -  159  +


Цитата(Провинциалка @ 9.12.2011 1:11) *
Не судите меня строго

Оля, с чего ты взяла, что кто-то вообще судит?.. smile.gif Я, например, как всегда, очень рад человеку, который работатет сам.

Послушай, я хочу не то, чтоб предостеречь, но хотя бы упомянуть некоторые вещи..
При переводе с Паскаля на Си подводных камней мало (хотя есть). Прога получится корявая, но задача все же разрешимая. Обратная же задача.. Она тоже разрешима, но пота и крови придется пролить поболе - если, конечно, замахиваться на полную функциональность. Поэтому..

Я рекомендую начать с того, что просто сопоставить эти языки. Грубо говоря, есть три части.
1. Что есть и там, и там (скажем, оператор присваивания).
2. То, что есть только в Си и нет в Паскале (например, значение оператора присваивания).
3. То, чего нет в Си, но есть в Паскале (например, with).
Все это аккуратно выписать в две (на самом деле больше) колонки и пронумеровать, а также попытаться расположить в порядке возрастания сложности. А потом начинать осуществлять по пунктам..

А кроме того, тебе волей-неволей придется сделать часть работы компилятора (анализировать структуру программы). Это тоже надо попытаться обдумать.

Короче, я что хочу сказать? Что тут полно работы ДО программирования. Начни с того, что возьми несложный код и попытайся его перевести вручную..

Да, и еще один вопросик к тебе - сама прога-то на каком языке будет? на Дельфи, судя пр разделу, который ты выбрала? Надеюсь, ты не собираешься ее по ходу дела конвертировать туда обратно как подопытного кролика.. smile.gif


--------------------
я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Провинциалка
сообщение 9.12.2011 11:28
Сообщение #5


Пионер
**

Группа: Пользователи
Сообщений: 57
Пол: Женский
Реальное имя: Ольга

Репутация: -  2  +


Спасибо!
Отвечу по порядку:
1.
Цитата
Обратная же задача.. Она тоже разрешима, но пота и крови придется пролить поболе

Если имеется ввиду конвертация не с Delphi на С++ , а с С++ на Delphi - то здесь однозначно Delphi на С++.
Если же речь идет о том, что программа должна уметь делать и то и другое - тут скажу что это лишнее.
2.
Цитата
если, конечно, замахиваться на полную функциональность

Учитель посоветовал сделать программку, переводящую не слишком сложный код!
3.
Цитата
сама прога-то на каком языке будет?
- это на усмотрение, но мне почему-то кажется что легче на Delphi/
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
IUnknown
сообщение 14.12.2011 11:25
Сообщение #6


a.k.a. volvo877
*****

Группа: Пользователи
Сообщений: 1 013
Пол: Мужской

Репутация: -  627  +


Что-то темка приутихла...

Провинциалка, если бы передо мной стояла задача написать программу, конвертирующую исходник с Дельфи (будем говорить, с Паскаля) на С++, то я бы поступил так: пишется парсер, который перегоняет исходник программы в некий список инструкций. Скажем, фрагмент
x := x + 5;
y := f(x);
записывался бы так:
(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 придется хранить имя, список параметров, и тип возвращаемого значения подпрограммы), циклы (тогда будут храниться начальное/конечно значения, шаг и тело цикла - сами инструкции, в виде списка инструкций, как я показал выше), или операторы условия (хранящиеся точно так же, как и обычное выражение, в виде дерева)...

А потом - просто проходить по этому построенному списку, и операции, сохраненные в нем записывать, используя синтаксис С. Это может быть, кстати, не только С, а и любой другой императивный язык (с функциональными все гораздо сложнее - там этот подход не пройдет smile.gif ). Есть только несколько вещей, которые уникальны для Паскаля, и с ними надо будет проводить дополнительную работу:
1. Оператор with, о котором выше упомянул Андрей. Потребует перед названиями переменных добавлять полный путь к ним в Сишном коде. Для этого и ссылки на переменные/поля, а не просто их имена.
2. Вложенные подпрограммы. Для этого и нужен список параметров. В Сях нет такой фишки, поэтому придется к списку параметров внутренней подпрограммы добавлять список параметров внешней для нее подпрограммы.

Я понимаю, что это сразу выглядит очень сложно. Но
1) никто и не обещал, что будет легко - задача не из простых, корректно конвертировать программу с одного языка на другой.
2) это сложно, когда оно написано, а ты этого еще не понимаешь. Попробуй нарисовать то, что я набросал, на листке бумаги - ты сразу поймешь, что я имел в виду.

Для реализации всего вышеописанного я бы воспользовался вариантными записями. То есть, часть такой записи:

type
PTItem = ^TItem;
TItem = record
next : PTItem;
case instr: TInstructionType of
insAssign : (src : PExpressionTree; dest : PListItem);
insLoop : ( {поля, необходимые для описания циклов} );
insCondition : ( {поля, необходимые для описания условных выражений} );
{ ... и так далее }
end;


Еще раз повторю: задача - не из простых, ты видела объем кода PtoC? Так что на написание программы, которая будет хотя бы простые тексты конвертировать, у тебя уйдет не один день. И даже не неделя...Жаль, времени мало, написать свой вариант и проверить все предположения - некогда, но если будут вопросы - задавай обязательно, вместе будем разбираться...
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
TarasBer
сообщение 14.12.2011 11:48
Сообщение #7


Злостный любитель
*****

Группа: Пользователи
Сообщений: 1 755
Пол: Мужской

Репутация: -  62  +


Короче, сразу начинай с книги дракона.


--------------------
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Провинциалка
сообщение 14.12.2011 23:29
Сообщение #8


Пионер
**

Группа: Пользователи
Сообщений: 57
Пол: Женский
Реальное имя: Ольга

Репутация: -  2  +


Здравствуйте!
Да, объём PtoC я видела. Мягко говоря впечатляет. Скажу честно - сложно. Кто вообще интересно понимает что там написано? (К тому же я ещё и "немка")
Ваш пост я распечатала, сейчас перечитываю вновь буквально по слогам, т.к. я обязана понять вашу мысль. Ну и досталась же мне тема - конвертация!
Была сегодня на консультации у преподавателя - было уточнено много моментов, один из главных - возможности программы могут ограничиваться переводом самых простеньких программ, в противном случае будут оставаться куски непереведенного текста. Это немного радует. Работа мною уже начата (оформлен интерфейс программы) и продолжается. А без ваших советов, мне так и так не разобраться, поэтому часто придется обращаться. Буквально скоро.
Цитата
Короче, сразу начинай с книги дракона

Эту книгу можно скачать по ссыслке, которая http://groups.google.com/group/sellme-dev/...bbc6c83649aaf56 ?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
TarasBer
сообщение 15.12.2011 9:19
Сообщение #9


Злостный любитель
*****

Группа: Пользователи
Сообщений: 1 755
Пол: Мужской

Репутация: -  62  +


Цитата(Провинциалка @ 14.12.2011 23:29) *

Да, объём PtoC я видела. Мягко говоря впечатляет. Скажу честно - сложно. Кто вообще интересно понимает что там написано? (К тому же я ещё и "немка")

Конечно, сложно. Потому что конвертёр - это уже почти готовый компилятор. Придумай своя язык, напиши конвертёр в LLVM и компилятор готов.
Цитата

Была сегодня на консультации у преподавателя - было уточнено много моментов, один из главных - возможности программы могут ограничиваться переводом самых простеньких программ,

А, ну тогда просто заменяй = на ==, = на :=, begin и end на {}


--------------------
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Провинциалка
сообщение 15.12.2011 21:43
Сообщение #10


Пионер
**

Группа: Пользователи
Сообщений: 57
Пол: Женский
Реальное имя: Ольга

Репутация: -  2  +


Цитата
А, ну тогда просто заменяй = на ==, = на :=, begin и end на {}

Да, мне и он так посоветовал, да и у меня самой были подозрения так делать. Сейчас вот пока создала интерфейс конвертера. С кнопкой "Сохранить" проблема, не подскажете как исправить?


Прикрепленные файлы
Прикрепленный файл  _________.rar ( 11.57 килобайт ) Кол-во скачиваний: 298
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Провинциалка
сообщение 17.12.2011 0:42
Сообщение #11


Пионер
**

Группа: Пользователи
Сообщений: 57
Пол: Женский
Реальное имя: Ольга

Репутация: -  2  +


Здравствуйте. С кнопкой "Сохранить" разобралась. Подскажите, пожалуйста, как правильно должен выглядеть код для кнопки «Перевести на С++» (procedure TForm1.Button3Click(Sender: TObject); ) , чтобы при нажатии на неё в шапке поля Мемо2 появлялись две строки с определенным текстом?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Krjuger
сообщение 23.12.2011 0:14
Сообщение #12


Профи
****

Группа: Пользователи
Сообщений: 652
Пол: Мужской
Реальное имя: Алексей

Репутация: -  20  +


Ну вы покажите,как вы вообще это делаете(преобразование),я вот гадать не умею, каким все таки вы способом это реализовали.Если в общих чертах то вы должны из одного мемо сначала считать всю информацию,затем сохранить ее в таком виде,который требуется для вашей функции/процедуры перевода,получить результат и вывести его в другой Мемо результата.Более наглядно без некоторых уточнений с вашей стороны вртяли получится.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0

 



- Текстовая версия 28.03.2024 16:24
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"