2008-12-03 4 views
1

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

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

ответ

1

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

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

+0

Ну, говоря от имени (JFlex) и быстрого взгляда на документации, которую я бы говорят, что это только лексер, а часть синтаксического анализа отсутствует. – 2008-12-03 16:20:50

1

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

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

3

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

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

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

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

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

Смежные вопросы