![]() |
|
Модераторы: Daevaorn |
![]()
|
|
| СтудентИзРоссии |
|
||||
|
Новичок Профиль Группа: Участник Сообщений: 49 Регистрация: 13.11.2006 Репутация: нет Всего: нет |
Добрый день.
Необходимо транслировать прогрумма на Pascal в программу на C. Необходимо: 1) Пропарсить секцию var; 2) Пропарсить присваивание. 3) Пропарсить комментарии. 4) Пропарсить функцию. 5) Пропарсить присваивание на вид арифметического значения (проверить его). 6) Пропарсить IF где фигурирует арифметические значения. 7) Если есть ошибки, то вывести их. Если кто-нибудь когда-нибудь делал, что-нибудь похожее, пожалуйста, дайте совет с чего начать, как подобраться к решению этой задачи. p.s. Курсовая. Пример. Pascal:
Результат, который должен получиться после трансляции Pascal -> C:
|
||||
|
|||||
| Void |
|
|||
![]() λcat.lolcat ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2206 Регистрация: 16.11.2004 Где: Zürich Репутация: 40 Всего: 173 |
Писал такой транслятор.
Генератор парсеров (flex+bison, Coco/R, ANTLR…) и формальную грамматику Паскаля (неплохой вариант есть в этом стандарте) в руки и вперёд. Конкретные советы можно давать, когда появятся конкретные вопросы. Это сообщение отредактировал(а) Void - 29.1.2007, 18:10 -------------------- “Coming back to where you started is not the same as never leaving.” — Terry Pratchett |
|||
|
||||
| СтудентИзРоссии |
|
||||
|
Новичок Профиль Группа: Участник Сообщений: 49 Регистрация: 13.11.2006 Репутация: нет Всего: нет |
Конкретный вопрос: подскажите алгоритм парсинга следующего кода:
Для перевода его в код на C. |
||||
|
|||||
| SerpentVV |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 52 Регистрация: 27.11.2006 Где: Астрахань Репутация: 1 Всего: 1 |
Конечные автоматы тебе помогут...
Алгоритм показать - это фактически его за тебя написать... А это достаточно кропотливая работа... |
|||
|
||||
| СтудентИзРоссии |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 49 Регистрация: 13.11.2006 Репутация: нет Всего: нет |
За что хоть уцепиться? Куда копать? С чего начать? Выше дали большущий доумент спецификации Pascal, но он к сожалению на английском, мало что понятно, да и объём слишком большой, если есть возможность, подскажите реализацию. |
|||
|
||||
| Void |
|
|||
![]() λcat.lolcat ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2206 Регистрация: 16.11.2004 Где: Zürich Репутация: 40 Всего: 173 |
Курсовая по какому предмету-то? У меня есть смутное подозрение, что теорию синтаксического анализа и трансляции вам в каком-то объёме должны были дать. Я не знаю, какие у вас конкретные требования к этой курсовой. Синтаксический разбор — достаточно объёмная и нудная вещь, которую можно и нужно автоматизировать. Этим занимаются генераторы парсеров, которые я перечислил. Однако, если нет понятия о том, что такое формальная грамматика, они мало чем помогут. Для ручного кодирования (если таковы требования) наилучшим образом, на мой взгляд, подходит метод рекурсивного спуска. Читать «Компиляторы. Принципы, технологии, инструменты» Ахо, Сети, Ульмана (aka «Книга Дракона»). Ничего более доступного и в то же время полного по этой теме не написано. -------------------- “Coming back to where you started is not the same as never leaving.” — Terry Pratchett |
|||
|
||||
| СтудентИзРоссии |
|
||||
|
Новичок Профиль Группа: Участник Сообщений: 49 Регистрация: 13.11.2006 Репутация: нет Всего: нет |
Курсовая по предмету "Программирование на С", теории трансляторов не было, понятий формальная грамматика тоже не было. Исходя из этой информации получается, что требуется "ручная" трансляция. Не могли бы ли Вы привести пример рекурсивного спуска по какой-либо части Pascal кода с трансляцией его в код на С? Хотя бы на примере:
|
||||
|
|||||
| Romikgy |
|
|||
![]() Любитель-программер ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7326 Регистрация: 11.5.2005 Где: Porto Franco Odes sa Репутация: 8 Всего: 146 |
имхо примерно так
типа название проги , оно не надо для проги вообще int заменяем на [10] { a = 123; } для основных скобок именно с точкой заменяется на int main() { } в конце получаем
-------------------- Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. |
|||
|
||||
| jonie |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5613 Регистрация: 21.8.2005 Где: Владимир Репутация: 15 Всего: 118 |
бог в помощь... я когда-то даавно парился с переводм pascal->asm .. но сорцы потерял (у нас было в курсе Основы трансляторов и чета там).
Карпов. Классическая теория компиляторов. Учебное пособие. Методическое пособие : Формальные грамматики. Основы построения трансляторов. Кампаниец,Маньков, Филатов. мб че пригодится... -------------------- Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет... |
|||
|
||||
| jonie |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5613 Регистрация: 21.8.2005 Где: Владимир Репутация: 15 Всего: 118 |
еще добросил каталог ссыл на сопуствующие сайтики : там
-------------------- Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет... |
|||
|
||||
| Бонифаций |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 827 Регистрация: 15.9.2005 Где: Brisbane Репутация: 1 Всего: 40 |
В линуксах есть такая утилита p2c которая транслирует исходный код с дюжины диалектов паскаля в c.
Проще взять и посмотреть как она делает. http://directory.fsf.org/p2c.html -------------------- Бонифаций. |
|||
|
||||
| СтудентИзРоссии |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 49 Регистрация: 13.11.2006 Репутация: нет Всего: нет |
Всем спасибо за советы, часть этого хозяйства успешно написана:
http://forum.vingrad.ru/index.php?showtopi...t&p=1039136 |
|||
|
||||
![]()
|
| Правила форума "С++:Общие вопросы" | |
|
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |