LINUX.ORG.RU

разработка компилятора pascal


0

0

Доброго времени суток ЛОР. Перейду к делу, стоит задача разработать компилятор для упрощенного подобия языка pascal. Весь вопрос состоит в том на чем лучше решить данную задачу. Как вариант можно на Си знания позволяют, но чувствую дело с синтаксическим анализатором затянется, есть еще мысль использовать функциональщину (знание Haskell + немного Scheme) там вроде с этим попроще. Так что посоветуете, что использовать?
Спасибо.


я бы посоветовал смотреть в сторону Perl.

Сейчас тут посоветуют лисп, но я в лиспе не бум-бум, поэтому промолчу:)

golodranez ★★★★
()

> Как вариант можно на Си знания позволяют, но чувствую дело с синтаксическим анализатором затянется

f?lex, (yacc|bison)? Чему там затягиваться, я не понимать.

есть еще мысль использовать функциональщину (знание Haskell + немного Scheme)

Тоже мысль, parsec (http://legacy.cs.uu.nl/daan/parsec.html) вроде как неплох для haskell'я.

kemm
()
Ответ на: комментарий от golodranez

спасибо за совет, но если lisp я хоть знаю поверхностно, то в perl полный 0

shk
() автор топика
Ответ на: комментарий от shk

> Кстати как вариант СИ + lisp в одном проекте это вобще совместимо?

Вообще совместимо. Но зачем это в рамках данной задачи — я не совсем понимаю.

kemm
()
Ответ на: комментарий от tailgunner

> Ocaml

В списке языков, знакомых ТС, окамла не было. 8)) Хотя учитывая знание хаскелля, выучить его никаких проблем не составит.

kemm
()
Ответ на: комментарий от tailgunner

Плюсую окамл, и как пример компилятора на окамл - MTASC.

vga ★★
()
Ответ на: комментарий от kemm

>> Ocaml

В списке языков, знакомых ТС, окамла не было. 8))

И что? :)

Весь вопрос состоит в том на чем лучше решить данную задачу.

По-моему, Ocaml подходит лучше - проще Хаскеля, технологичнее Схемы.

tailgunner ★★★★★
()
Ответ на: комментарий от tailgunner

ocaml

Он еще жив? Года 2 назад присматривался к нему, но отсутствие толковой документации и неживучесть сообщества оттолкнула меня

shk
() автор топика
Ответ на: комментарий от tailgunner

> И что? :)

Это я так неуклюже оправдываюсь, что его не назвал. 8))

kemm
()
Ответ на: комментарий от shk

>> ocaml

Он еще жив?

В общем, да. Но я его для себя ботаю, поэтому его жизнеспособностью особо не заморачиваюсь. Впрочем, судя по fprog, люди пользуются.

tailgunner ★★★★★
()
Ответ на: комментарий от kemm

> parsec (http://legacy.cs.uu.nl/daan/parsec.html) вроде как неплох для haskell'я.

Кстати, есть его аналог fparsec для f# [http://www.quanttec.com/fparsec/]. Там монады/workflows - все из себя функциональное. Сам же язык f# похож на окамл, и простые окамловые файлы даже читаются. Ну, и конечно, есть еще стандартные lex/yacc для f#. Главный минус - завязка на mono (или dotnet по желанию).

dave ★★★★★
()

Используй lex+yacc. С их помощью лексический и синтаксический анализатор можно сделать очень быстро и без заморочек. Останется только семантический анализатор и генератор кода написать.

aldayneko
()

теория автоматов тебе в руки и впереть, там ничего сложного

enep ★★★★★
()

Хаскелль для таких вещей, по моему, вполне хорош. Для разбора исходников можно использовать parsec или alex + happy. Последними я не пользовался, но GHC для разбора исходных текстов использует именно их.

Есть биндинги к LLVM.

Shimuuar
()

на ассемблере пишешь форт, на форте - лисп, на лиспе строишь простую реализацию паскаля, а уж на этом паскале делаешь компилятор паскаля и компилируешь им предыдущую реализацию паскаля.

volh ★★
()
Ответ на: комментарий от volh

>на ассемблере пишешь форт

Сначала надо компилятор ассемблера написать в машинных кодах. Только так можно достигнуть просветления.

anonymous
()

>стоит задача разработать компилятор для упрощенного подобия языка pascal.

«Позор джунглям!»(c) Маугли :) Давным-давно её решил сам Вирт:

Н. Вирт «Алгоритмы + структуры данных = программы» (pdf, 15.49 MB) http://ooart.ru/books/algoritmy-struktury-dannyh-programmy-n-virt

Язык PL0 (стр.319-390)

Компилятор должен компилировать себя сам! Поэтому - паскаль ;) anonymous

anonymous-у +1

quickquest ★★★★★
()
Ответ на: комментарий от anonymous

>Сначала надо компилятор ассемблера написать в машинных кодах.

компилятор ассемблера


смишно.

volh ★★
()
Ответ на: комментарий от anonymous

> Компилятор должен компилировать себя сам! Поэтому - паскаль ;)

Причём именно тот паскаль, который он будет компилировать. Если fpc сможет скомпилировать требуемый диалект, то проблема бутстрапа будет решена.

const86 ★★★★★
()

Есть, например, интерпретатор Паскаля, называется PascalScript. Там решён большой кусок задачи.

den73 ★★★★★
()

Как вариант можно на Си знания позволяют, но чувствую дело

с синтаксическим анализатором затянется ...


Транслятор за тебя восстанавливать семантику программы не будет.
Она записана в виде того синтаксиса, который допустим грамматикой,
то есть - правилами языка.

Почитай по формальным грамматикам и способам их использования:
http://www.wl.unn.ru/~ragozin/Compiler/compil/QWEST.HTM
http://www.eltech.ru/misc/LGA_2007_FINAL/Allpage/content.htm
и книгу Серебрякова (она есть в списке источников первого автора).

pacify ★★★★★
()

См. также сайт, который создал Смагин Дмитрий, E-mail: exmortis@yandex.ru,
http://exmortis.narod.ru/
Исходники компиляторов,Паскаль.
P.S. Успехов в труде и обороне.

pacify ★★★★★
()

Однозначно LLVM, что ограничивает выбор инструментов - Си, С++ или OCaml. Написать парсер для чего-то паскалеподобного можно элементарно на любом языке, особенно если lex+yacc использовать. Генерацию кода проще всего было бы на OCaml, но и на C++ будет не слишком сложно.

anonymous
()
Ответ на: комментарий от anonymous

Опа, и в самом деле есть биндинги llvm для Haskell.

anonymous
()

Спасибо друзья за ваши советы, ушел читать доки по Ocaml.

shk
() автор топика

Нужны языки с мощными возможностями по обработке структур данных. Я таких знаю несколько - Scala, Groovy.

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

С другой стороны учить язык только для одной задачи - дело доступное только если есть время

vertexua ★★★★★
()

для разбора синтаксиса посмотри Styx http://www.speculate.de/styx/ . когда я пробовал сделать компилятор pascal-like языка в C-код, Styx для меня оказался удобнее чем flex+bison.

inoremap ★★
()
Ответ на: комментарий от anonymous

>Однозначно LLVM, что ограничивает выбор инструментов - Си, С++ или OCaml.

Возможно, я туплю, но что мешает нагенерить LLVMовского кода ручками без всяких биндингов, а затем просто запускать LLVM для кодогенерации?

V_L_A_D ★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.