Генератор парсеров Earley для Java
Я ищу генератор парсера Earley, который способен генерировать выходной код Java, то есть генерирует код Java для лексера и анализатора и позволяет включать действия (реализованные в виде кода Java), которые выполняются для правил грамматики.
Я посмотрел на два генератора парсеров Earley, которые генерируют Java-код ( Pep и PEN), но ни один из них не позволяет встраивать действия в грамматику.
3 ответа
Если я понял ваш вопрос, под "внедрением действий в грамматику" вы подразумеваете вставку семантических действий в грамматику, чтобы они выполнялись "inline" (например, на этапе синтаксического анализа, когда ввод обрабатывается).
Парсеры Earley не подходят для этого, потому что они допускают любые (даже неоднозначные) языковые грамматики без контекста. Смотрите: http://en.wikipedia.org/wiki/Earley_algorithm
В основном: для данного выполнения и данного состояния парсер Earley содержит все возможные состояния синтаксического анализа. Традиционный подход (например, Yacc/Bison) заключается в выполнении семантического действия после завершения правила или частичного ввода. Но при разборе неоднозначной грамматики (например, с конфликтом "уменьшить / уменьшить") парсер Earley позаботится об обоих "сокращениях", но из-за своей неоднозначности не будет знать, какое действие следует выполнить.
Обычный способ использовать парсеры Earley - это проанализировать входные данные и в итоге получить лес деревьев синтаксического анализа, для которых вы позже выполните желаемые действия (например, отбрасывание тех, кого вы знаете, недопустимо, или применение к ним некоторых семантических действий).
Тем не менее, было проведено некоторое исследование по этой теме, пытавшееся выполнить некоторые действия встроенным (извините, нашел только эту ссылку) http://www.springerlink.com/content/602270808666074p/
похоже, что ни один из них не позволяет встраивать действия в грамматику.
Вообще говоря, не стоит вставлять действия прямо в грамматику. Лучше, если действия отделены от грамматики.