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

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


person vuzun    schedule 28.10.2009    source источник


Ответы (5)


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

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

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

person kdgregory    schedule 28.10.2009
comment
Сложность: CUP больше не поддерживается, а CUP 2 находится в стадии бета-тестирования. Все еще в порядке? - person minopret; 27.12.2012
comment
@minopret - я не использовал CUP более десятка лет, но если не было серьезной неисправленной ошибки, то все должно быть в порядке, даже если его активно не поддерживать. Однако, если вам не нужно поведение, подобное YACC, я бы посмотрел на ANTLR. - person kdgregory; 30.12.2012
comment
Я работаю над создателем файла уценки GitHub (.md), который берет файл кода, написанный на любом языке, и создает для него файл .md. Я делаю это на Java. Могут ли эти программы работать с любым языком или только с Java? - person Mike Warren; 11.02.2017
comment
@MikeWarren - генераторы синтаксических анализаторов могут создать синтаксический анализатор для любого языка с обычной грамматикой. Это включает в себя большинство языков программирования. Однако создание грамматики с нуля — нетривиальная задача, особенно если вы с ней не знакомы. Я бы поискал заранее написанные грамматики для различных инструментов и выбрал бы инструмент, который (1) имеет вывод, который вам нравится, и (2) имеет наибольшее количество грамматик, которые вы можете адаптировать. - person kdgregory; 12.02.2017

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

person toolkit    schedule 28.10.2009
comment
По моему опыту, ANTLR на сегодняшний день является самым популярным инструментом Java для лексирования/парсинга. - person Dónal; 28.10.2009

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

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

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

person ZZ Coder    schedule 28.10.2009

Есть еще жак.

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

Он хорошо взаимодействует с jFlex

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

person CaTalyst.X    schedule 13.11.2012

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

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

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

person Steve N    schedule 28.10.2009