Пропаренный (Java) - Parboiled (Java)

пропаренная библиотека
Разработчики)Матиас Дениц
изначальный выпуск12 ноября 2009 г.; 11 лет назад (2009-11-12)
Стабильный выпуск
1.3.1 / 24 июня 2019 г.; 16 месяцев назад (2019-06-24)[1]
Репозиторий Отредактируйте это в Викиданных
Написано вЯва
Операционная системаКроссплатформенность
ЛицензияЛицензия Apache 2.0
Интернет сайтпропаренный.org

пропаренный это открытый исходный код Ява библиотека выпущена под Лицензия Apache. Он обеспечивает поддержку для определения ПЭГ парсеры прямо в исходном коде Java.

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

Помимо создания конструкций для определения грамматики, parboiled реализует полную парсер рекурсивного спуска при поддержке абстрактное синтаксическое дерево построение, сообщение об ошибках синтаксического анализа и восстановление после ошибок анализа.

Пример

Поскольку парсинг с parboiled не требует отдельного лексика Этап, и нет специального синтаксиса для изучения определения грамматики. parboiled позволяет сравнительно легко быстро создавать собственные синтаксические анализаторы.

Рассмотрим следующий классический пример «калькулятора» с этими правилами в простой псевдонотации.

ВыражениеСрок ((‘+’ / ‘-’) Срок)*
СрокФактор (('*' / '/') Фактор)*
ФакторЧисло / '(' Выражение ')'
Число ← [0-9]+

С помощью parboiled это описание правила можно напрямую перевести в следующий код Java:

импорт org.parboiled.BaseParser;общественный учебный класс КалькуляторПарсер расширяет BaseParser<Объект> {    общественный Правило Выражение() {        возвращаться Последовательность(                Срок(),                ZeroOrБольше(                        Последовательность(                                Первый из('+', '-'),                                Срок()                        )                )        );    }    общественный Правило Срок() {        возвращаться Последовательность(                Фактор(),                ZeroOrБольше(                        Последовательность(                                Первый из('*', '/'),                                Фактор()                        )                )        );    }    общественный Правило Фактор() {        возвращаться Первый из(                Число(),                Последовательность('(', Выражение(), ')')        );    }    общественный Правило Число() {        возвращаться Один или больше(CharRange('0', '9'));    }}

Класс определяет правила синтаксического анализатора для языка (но без каких-либо действий), которые можно использовать для синтаксического анализа фактического ввода с помощью такого кода:

Нить Вход = "1+2";КалькуляторПарсер парсер = Пропаренный.createParser(КалькуляторПарсер.учебный класс);ParsingResult<?> результат = ReportingParseRunner.пробег(парсер.выражение(), Вход);Нить parseTreePrintOut = ParseTreeUtils.printNodeTree(результат); Система.из.println(parseTreePrintOut);

Смотрите также

Рекомендации

  1. ^ "Журнал изменений". Пропаренный. 24 июня 2019 г.,. Получено 7 января, 2020.

внешняя ссылка