Parser, генератор для Java со следующими требованиями

StackOverflow https://stackoverflow.com/questions/821501

Вопрос

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

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

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

Это было полезно?

Решение

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

Другие советы

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

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

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

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

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

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

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top