Пропаренный (Java) - Parboiled (Java)
Эта статья поднимает множество проблем. Пожалуйста помоги Улучши это или обсудите эти вопросы на страница обсуждения. (Узнайте, как и когда удалить эти сообщения-шаблоны) (Узнайте, как и когда удалить этот шаблон сообщения)
|
Разработчики) | Матиас Дениц |
---|---|
изначальный выпуск | 12 ноября 2009 г. |
Стабильный выпуск | 1.3.1 / 24 июня 2019 г.[1] |
Репозиторий | |
Написано в | Ява |
Операционная система | Кроссплатформенность |
Лицензия | Лицензия Apache 2.0 |
Интернет сайт | пропаренный |
пропаренный это открытый исходный код Ява библиотека выпущена под Лицензия 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);
Смотрите также
Рекомендации
- ^ "Журнал изменений". Пропаренный. 24 июня 2019 г.,. Получено 7 января, 2020.
внешняя ссылка
Этот компьютерная библиотека -связанная статья является заглушка. Вы можете помочь Википедии расширяя это. |