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