Я работаю над проектом компилятора на Java. Лексический анализ выполнен (с использованием jflex), и мне интересно, какой инструмент, подобный yacc, будет лучше всего (наиболее эффективен, прост в использовании и т. д.) для проведения синтаксического анализа и почему.
Эквивалент Yacc для Java
Ответы (5)
Если вам конкретно нужно поведение, подобное YACC (управляемое таблицей), я знаю только одно: CUP а>.
В мире Java все больше людей склоняются к парсерам с рекурсивным спуском, таким как ANTLR или JavaCC.
И эффективность редко является причиной для выбора генератора синтаксических анализаторов.
В прошлом я использовал ANLTR как для лексера, так и для парсера, и на домашней странице JFlex говорится, что он может взаимодействовать с ANTLR. Я бы не сказал, что онлайн-документация ANTLR настолько хороша. В итоге я вложился в "Полный справочник ANTLR", который значительно помог.
GNU Bison имеет интерфейс Java,
http://www.gnu.org/software/bison/manual/html_node/Java-Bison-Interface.html
Вы можете использовать его для создания кода Java.
Есть еще жак.
Jacc максимально близок к yacc, но он реализован на чистой Java и генерирует анализатор Java.
Он хорошо взаимодействует с jFlex
http://web.cecs.pdx.edu/~mpj/jacc/
Другим вариантом может быть GOLD Parser.
В отличие от многих альтернатив, синтаксический анализатор GOLD генерирует таблицы синтаксического анализа из грамматики и помещает их в двоичный неисполняемый файл. Каждый поддерживаемый язык имеет механизм, который читает двоичные таблицы и анализирует ваш исходный файл.
Я не использовал реализацию Java специально, но использовал движок Delphi с довольно хорошими результатами.