Yacc эквивалент для Java - PullRequest
       28

Yacc эквивалент для Java

27 голосов
/ 28 октября 2009

Я работаю над проектом по компиляции на Java. Лексический анализ выполнен (с использованием jflex), и мне интересно, какой yacc-подобный инструмент будет лучшим (наиболее эффективным, простым в использовании и т. Д.) Для проведения синтаксического анализа и почему.

Ответы [ 5 ]

18 голосов
/ 28 октября 2009

Если вам конкретно нужно поведение, подобное YACC (управляемое таблицей), я знаю только одно: CUP .

В мире Java кажется, что все больше людей склоняются к анализаторам рекурсивного спуска, таким как ANTLR или JavaCC .

А эффективность редко является причиной выбора генератора синтаксического анализатора.

5 голосов
/ 28 октября 2009

В прошлом я использовал ANLTR как для лексера, так и для парсера, и домашняя страница JFlex сообщает, что он может взаимодействовать с ANTLR. Я бы не сказал, что онлайн-документация ANTLR - это здорово. Я закончил тем, что инвестировал в «Окончательный справочник по ANTLR» , который значительно помог.

3 голосов
/ 13 ноября 2012

Существует также JACC.

Jacc примерно настолько близок к yacc, насколько это возможно, но он реализован на чистой Java и генерирует анализатор Java.

Хорошо взаимодействует с jFlex

http://web.cecs.pdx.edu/~mpj/jacc/

3 голосов
/ 28 октября 2009

GNU Bison имеет интерфейс Java,

http://www.gnu.org/software/bison/manual/html_node/Java-Bison-Interface.html

Вы можете использовать его для генерации кода Java.

2 голосов
/ 28 октября 2009

Другим вариантом будет GOLD Parser .

В отличие от многих альтернатив, анализатор GOLD генерирует таблицы синтаксического анализа из грамматики и помещает их в двоичный неисполняемый файл. Каждый поддерживаемый язык имеет механизм, который читает двоичные таблицы и анализирует ваш исходный файл.

Я не использовал реализацию Java специально, но использовал движок Delphi с довольно хорошими результатами.

...