Генератор парсера Эрли для Java

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

Я посмотрел на два генератора парсеров Эрли, которые генерируют код Java (Пеп и РУЧКА) но ни один из них, похоже, не позволяет встраивать действия в грамматику.

Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
1
0
2 223
3

Ответы 3

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

Он тесно работает с ЧАШКА, который немного ближе к действиям.

Судя по названию (JFlex) и беглому просмотру документации, я бы сказал, что это всего лишь лексер, а часть синтаксического анализа отсутствует.

Frank Grimm 03.12.2008 19:20

Конечно, я добавил ссылку CUP, которая может быть немного ближе.

Josh 03.12.2008 21:20

Ура, попробую CUP вместе с JFlex.

Frank Grimm 04.12.2008 11:23

Я знаю, что это было давным-давно, но разве CUP не для создания парсера LALR? Алгоритм Эрли предназначен для общего CFG, не так ли? Я случайно искал ответ на исходный вопрос ОП, и кажется, что ответ по-прежнему «нет такой вещи», как и год спустя.

artif 26.01.2010 05:54

none of them seems to allow embedding actions into the grammar.

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

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

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

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

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

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

Другие вопросы по теме