| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C/C++: Общие вопросы > Трансляция: Pascal -> C |
| Автор: СтудентИзРоссии 29.1.2007, 16:47 | ||||
| Добрый день. Необходимо транслировать прогрумма на Pascal в программу на C. Необходимо: 1) Пропарсить секцию var; 2) Пропарсить присваивание. 3) Пропарсить комментарии. 4) Пропарсить функцию. 5) Пропарсить присваивание на вид арифметического значения (проверить его). 6) Пропарсить IF где фигурирует арифметические значения. 7) Если есть ошибки, то вывести их. Если кто-нибудь когда-нибудь делал, что-нибудь похожее, пожалуйста, дайте совет с чего начать, как подобраться к решению этой задачи. p.s. Курсовая. Пример. Pascal:
Результат, который должен получиться после трансляции Pascal -> C:
|
| Автор: Void 29.1.2007, 18:09 |
| Писал такой транслятор. Генератор парсеров (flex+bison, Coco/R, ANTLR…) и формальную грамматику Паскаля (неплохой вариант есть в http://www.moorecad.com/standardpascal/iso7185.pdf) в руки и вперёд. Конкретные советы можно давать, когда появятся конкретные вопросы. |
| Автор: СтудентИзРоссии 30.1.2007, 09:43 | ||||
Конкретный вопрос: подскажите алгоритм парсинга следующего кода:
Для перевода его в код на C. |
| Автор: SerpentVV 30.1.2007, 15:15 |
| Конечные автоматы тебе помогут... Алгоритм показать - это фактически его за тебя написать... А это достаточно кропотливая работа... |
| Автор: СтудентИзРоссии 30.1.2007, 16:19 | ||
За что хоть уцепиться? Куда копать? С чего начать? Выше дали большущий доумент спецификации Pascal, но он к сожалению на английском, мало что понятно, да и объём слишком большой, если есть возможность, подскажите реализацию. |
| Автор: Void 30.1.2007, 17:54 |
Курсовая по какому предмету-то? У меня есть смутное подозрение, что теорию синтаксического анализа и трансляции вам в каком-то объёме должны были дать. Я не знаю, какие у вас конкретные требования к этой курсовой. Синтаксический разбор — достаточно объёмная и нудная вещь, которую можно и нужно автоматизировать. Этим занимаются генераторы парсеров, которые я перечислил. Однако, если нет понятия о том, что такое формальная грамматика, они мало чем помогут. Для ручного кодирования (если таковы требования) наилучшим образом, на мой взгляд, подходит метод рекурсивного спуска. Читать «Компиляторы. Принципы, технологии, инструменты» Ахо, Сети, Ульмана (aka «Книга Дракона»). Ничего более доступного и в то же время полного по этой теме не написано. |
| Автор: СтудентИзРоссии 30.1.2007, 22:29 | ||||
Курсовая по предмету "Программирование на С", теории трансляторов не было, понятий формальная грамматика тоже не было. Исходя из этой информации получается, что требуется "ручная" трансляция. Не могли бы ли Вы привести пример рекурсивного спуска по какой-либо части Pascal кода с трансляцией его в код на С? Хотя бы на примере:
|
| Автор: Romikgy 30.1.2007, 23:09 | ||
| имхо примерно так типа название проги , оно не надо для проги вообще int заменяем на [10] { a = 123; } для основных скобок именно с точкой заменяется на int main() { } в конце получаем
|
| Автор: jonie 31.1.2007, 01:27 |
| бог в помощь... я когда-то даавно парился с переводм pascal->asm .. но сорцы потерял (у нас было в курсе Основы трансляторов и чета там). http://e-jonie.narod.ru/files/karpov_kompilteory.rar http://e-jonie.narod.ru/files/formal_gramma.rar http://e-jonie.narod.ru/files/osnovi_translatorov.rar мб че пригодится... |
| Автор: jonie 31.1.2007, 21:57 |
| еще добросил каталог ссыл на сопуствующие сайтики : http://e-jonie.narod.ru/links/compile.xml |
| Автор: Бонифаций 2.2.2007, 01:14 |
| В линуксах есть такая утилита p2c которая транслирует исходный код с дюжины диалектов паскаля в c. Проще взять и посмотреть как она делает. http://directory.fsf.org/p2c.html |
| Автор: СтудентИзРоссии 23.2.2007, 13:22 |
| Всем спасибо за советы, часть этого хозяйства успешно написана: http://forum.vingrad.ru/index.php?showtopic=137295&view=findpost&p=1039136 |