Parser, генератор для Java со следующими требованиями - PullRequest
4 голосов
/ 04 мая 2009

Я ищу генератор синтаксического анализатора для Java, который выполняет следующие функции: Мой языковой проект довольно прост и содержит только небольшой набор токенов.

Вывод в чистом READABLE Java-коде, чтобы я мог его изменить (поэтому я не буду использовать ANTLR) Зрелая библиотека, которая будет работать и работать как минимум с Java 1.4

Я посмотрел на следующие, и они могут работать: JavaCC, Jlex, Ragel?

Ответы [ 7 ]

4 голосов
/ 04 мая 2009

Может быть, вы ищете парсер комбинаторы вместо парсера генераторы ? См. этот документ и JParsec .

Это действительно плохая идея редактировать сгенерированный код парсера - намного проще отредактировать файл грамматики, а затем перекомпилировать его. Если вы не делаете это в образовательных целях, в этом случае ANTLR гордится тем, что генерирует довольно читаемый код для такого мощного генератора синтаксического анализатора.

2 голосов
/ 04 мая 2009

Вы должны использовать Крысы ... Таким образом, вам не нужно разделять лексер и парсер, а затем, если вы хотите расширить свой проект, это будет тривиально. Это в Java, а затем вы можете обработать свой AST в Java ...

1 голос
/ 05 февраля 2010

Взгляните на SableCC . Sablecc - это простой в использовании генератор синтаксических анализаторов, который принимает грамматику вашего языка как EBNF без смешанного кода действия и генерирует синтаксический анализатор Java, который создает синтаксическое дерево, которое можно просмотреть с помощью посетителя узла дерева. SableCC мощный, но гораздо более простой в использовании, чем ANTLR, JavaCC, yacc и т. Д. Он также не требует отдельного лексера. Создание вашего языкового процессора означает расширение класса посетителя, сгенерированного из вашей грамматики, и переопределение его методов, которые вызываются, когда синтаксический конструктор встречается с синтаксическим анализатором. Для каждого правила грамматики XYZ у посетителя будет метод inAXYZ (Node xyz) .... outAXYZ (Node xyz), вызываемый, когда синтаксический анализатор соответствует правилу.

1 голос
/ 05 мая 2009

Может быть ANTLR сделает это за вас. Это хороший генератор синтаксического анализатора с прекрасной книгой , доступной для документации.

1 голос
/ 04 мая 2009

У меня был хороший опыт SableCC .

Он работает не так, как большинство генераторов, так как вам предоставляется модель AST / Visitor, которую вы расширяете (посредством наследования).

Я не могу комментировать «качество» его кода с точки зрения читабельности (с тех пор, как я его использовал), но у него есть то качество, при котором вам не нужно читать код при все. Просто код в вашем подклассе.

0 голосов
/ 04 мая 2009

Мы используем JavaCC для нашего (а также довольно небольшого языка) и довольны им.

0 голосов
/ 04 мая 2009

Для такого простого языка может быть достаточно JFlex . Он похож на JLex, но быстрее (что также может означать, что он менее читабелен, но я не видел вывод JLex).

Это лексер, а не парсер, но он построен для легкого взаимодействия с CUP или BYacc / J . И опять же, для простого языка может быть проще написать собственный синтаксический анализатор (я делал это раньше).

...