parboiled - это библиотека Java с открытым исходным кодом, выпущенная под лицензией Apache . Он обеспечивает поддержку определения парсеров PEG непосредственно в исходном коде Java.
Разработчики) | Матиас Дениц |
---|---|
Первый выпуск | 12 ноября 2009 г . |
Стабильный выпуск | 1.3.1 / 24 июня 2019 г . [1] |
Репозиторий | |
Написано в | Ява |
Операционная система | Кроссплатформенность |
Лицензия | Лицензия Apache 2.0 |
Веб-сайт | пропаренный |
parboiled обычно используется в качестве альтернативы для регулярных выражений или генераторов парсеров (таких как ANTLR или JavaCC ), особенно для небольших и средних приложений.
Помимо предоставления конструкций для определения грамматики, parboiled реализует полный рекурсивный анализатор спуска с поддержкой построения абстрактного синтаксического дерева , сообщения об ошибках синтаксического анализа и восстановления после ошибок синтаксического анализа.
Пример
Поскольку синтаксический анализ с помощью parboiled не требует отдельной фазы лексирования, и нет специального синтаксиса, который нужно изучить для определения грамматики, parboiled позволяет сравнительно легко быстро создавать собственные синтаксические анализаторы.
Рассмотрим следующий классический пример "калькулятора" с этими правилами в простой псевдонотации.
- Выражение ← Срок (('+' / '-') Срок ) *
- Срок ← Фактор (('*' / '/') Фактор ) *
- Фактор ← Число / '(' Выражение ')'
- Число ← [0-9] +
С помощью parboiled это описание правила можно преобразовать непосредственно в следующий код Java:
import org.parboiled.BaseParser ;открытый класс CalculatorParser расширяет BaseParser < Object > { public Rule Expression () { последовательность возврата ( Term (), ZeroOrMore ( Sequence ( FirstOf ( '+' , '-' ), Term () ) ) ); } общественное правило Term () { return Sequence ( Factor (), ZeroOrMore ( Sequence ( FirstOf ( '*' , '/' ), Factor () ) ) ); } общедоступный фактор правила () { return FirstOf ( Number (), Sequence ( '(' , Expression (), ')' ) ); } общедоступный номер правила () { return OneOrMore ( CharRange ( '0' , '9' )); } }
Класс определяет правила синтаксического анализатора для языка (но без каких-либо действий), которые можно использовать для синтаксического анализа фактического ввода с помощью такого кода:
Строка input = "1 + 2" ; CalculatorParser parser = пропаренный . createParser ( CalculatorParser . класс ); ParsingResult > Результат = ReportingParseRunner . запустить ( синтаксический анализатор . выражение (), ввод ); Строка parseTreePrintOut = ParseTreeUtils . printNodeTree ( результат ); Система . из . println ( parseTreePrintOut );
Смотрите также
Рекомендации
- ^ "Список изменений" . Пропаренный . 24 июня 2019 . Проверено 7 января 2020 года .
Внешние ссылки
- Официальный сайт с пропаркой
- Пример полного парсера Java 6, написанного с использованием parboiled