LINUX.ORG.RU

OCaml Menhir Felix - Нужна помощь


0

0

Нужно бы по-быстрому написать компилятор некоторого языка (похож на javascript).
Хотел было использовать OCaml (OCamlYacc). Раньше с этим чудом не работал. Но вот тут обнаружил ещё Menhir - генератор парсеров для OCaml-а LR(1), а также некий Felix(http://felix.sourceforge.net/).

>> Felix is a modern statically typed, modular programming language which targets shared libraries rather than programs. It features automatic generation of event driven, cooperatively multitasked programs written in algorithmic style. It is hybrid functional, procedural and object oriented system

Felix также имеет средства для написания парсеров GLR.

Кто может использовал, что-то из выше перечисленного. Кто что может посоветовать?

anonymous

Ответ на: комментарий от imp

А посмотрю, спасибо за совет.
Тока как там со скоростью? Какие достоинства и недостатки такого подхода?

anonymous
()

OCamlYacc использовал. От обычного Yacc/Bison не отличается почти ничем (ну, кроме того что OCaml вместо С, что несомненно хорошо).

В OCaml ещё можно использовать Camlp4 для генерации LL1 парсеров.

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

>Тока как там со скоростью? Какие достоинства и недостатки такого подхода?

Вряд ли ьы заметишь отличие по скорости от Yacc - Haskell очень быстрый если его компилить через GHC.

+ Можно собрать как либу и экспортировать C интерфейс через FFI
+ Писать на Haskell'е - гораздо проще чем грамматики и отлаживать.
+ Нормальные сообщения об ошибках - проще понять где что пошло не так + можно отрегулировать их
+ Синтаксис похож на ocaml - раз ты его знаешь тебе будет несложно.
+ Можно парсить не только предиктивные грамматики.

Parsec is an industrial strength, monadic parser combinator library for Haskell. It can parse context-sensitive, infinite look-ahead grammars but it performs best on predictive (LL[1]) grammars. Combinator parsing is well known in the literature and offers several advantages to YACC or event-based parsing.

imp ★★
()

Я писал компилятор "паскалеподобное -> вирутальная стековая машина" на Ocaml-е. Для синтаксического анализа использовал как раз ocamlyacc. Особых затруднений не возникало. Хотя субъективно предпочитаю рукописные анализаторы методом нисходящего спуска

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

Parsec на самом деле порядочный тормоз, happy/alex намного быстрее. Советую использовать их, если есть опыт с yacc

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