Генератор парсеров Earley для Java - PullRequest
1 голос
/ 03 декабря 2008

Я ищу генератор Earley , который может генерировать выходной код Java, то есть генерирует Java-код для лексера и парсера и позволяет включать действия (реализуется как код Java), которые выполняются для правил грамматики.

Я посмотрел на два генератора парсеров Earley, которые генерируют код Java ( Pep и PEN ) но ни один из них не позволяет встраивать действия в грамматику.

Ответы [ 3 ]

4 голосов
/ 24 октября 2012

Если я понял ваш вопрос, под «встраиванием действий в грамматику» вы подразумеваете вставку семантических действий в грамматику, чтобы они выполнялись «inline» (например, на этапе синтаксического анализа, когда ввод анализируется).

Парсеры Earley для этого не подходят, потому что они допускают любые (даже неоднозначные) языковые грамматики без контекста. Смотри: http://en.wikipedia.org/wiki/Earley_algorithm

В основном: для данного выполнения и данного состояния парсер Earley содержит все возможных состояний синтаксического анализа. Традиционный подход (например, Yacc / Bison) заключается в выполнении семантического действия после завершения правила или частичного ввода. Но при разборе неоднозначной грамматики (например, с конфликтом «уменьшить / уменьшить») и анализатор Earley позаботится об обоих «сокращениях», но из-за своей неоднозначности не будет знать, какое действие следует выполнить.

Обычный способ использовать парсеры Earley - это проанализировать входные данные и получить лес синтаксического анализа, на котором вы позже выполните желаемые действия (например, отбрасывание тех, кого вы знаете, недопустимо, или применение к ним некоторых семантических действий) .

Тем не менее, было проведено некоторое исследование по этой теме, пытавшееся выполнить некоторые действия в строке (извините, нашел только эту ссылку) http://www.springerlink.com/content/602270808666074p/

1 голос
/ 15 апреля 2011

ни один из них не позволяет встраивать действия в грамматику.

Вообще говоря, не стоит вставлять действия прямо в грамматику. Лучше, если действия отделены от грамматики.

1 голос
/ 03 декабря 2008

Не уверен, что это ответ, но один из генераторов сканера, который я регулярно использую, - JFlex , который выводит код Java.

Он работает в тесном контакте с CUP , что немного ближе к действиям.

...