Библиотека шаблонов грамматики выражения разбора (PEGTL) представляет собой библиотеку сочетающих комбинаторов C ++ с нулевой зависимостью C ++ для создания анализаторов в соответствии с грамматикой экспрессии (PEG).
Во время разработки новой крупной версии основная филиал может пройти несовместимые изменения. Для стабильного опыта, пожалуйста, загрузите последний выпуск, а не использовать основную филиал.
По вопросам и предложениям, касающимся PEGTL, историй успеха или неудач, а также любых других видов обратной связи, пожалуйста, не стесняйтесь открывать обсуждение, проблему или запрос на притяжение или свяжитесь с авторами в taocpp(at)icemx.net .
Грамматики написаны как регулярный код C ++, созданный с помощью программирования шаблонов (не матрица мета-программирования), т.е. вложенные матрицы матриц, которые естественным образом соответствуют индуктивному определению ПЭГ (и других подходах к борьбе с парсером).
Включен комплексный набор правил синхронизации, которые могут быть объединены и расширены пользователем, а также механизмы для отладки грамматики, а также для прикрепления пользовательских действий к правилам грамматики. Вот пример того, как правило грамматики выражения разбора реализуется как класс C ++ с PEGTL.
// PEG rule for integers consisting of a non-empty
// sequence of digits with an optional sign:
// sign ::= '+' / '-'
// integer ::= sign? digit+
// The same parsing rule implemented with the PEGTL:
using namespace tao ::pegtl ;
struct sign : one< ' + ' , ' - ' > {};
struct integer : seq< opt< sign >, plus< digit > > {};ПЭГ поверхностно похожи на грамматики без контекста (CFG), однако более детерминированный характер ПЭГ приводит к некоторым очень важным различиям. Включенный грамматический анализ находит несколько типичных ошибок в ПЭГ, включая рекурсию левой.
PEGTL предназначен для того, чтобы быть «худой и средней», основной библиотека состоит из примерно 6000 строк кода. Акцент делается на простоту и эффективность, предпочитая хорошо настроенный простой подход к сложным оптимизациям.
PEGTL в основном связан с комбинаторами синтаксического анализа и правилами грамматики, а также предоставление пользователю библиотеки (возможность) полного контроля над всеми другими аспектами прогона разбора. Независимо от того, предприняты ли/какие действия, и какие структуры данных создаются во время прогоначнения, полностью зависит от пользователя.
Включены некоторые примеры для типичной ситуации, такие как последовательности эскапинга в строках, создание общей структуры данных JSON и оценка арифметических выражений на лету.
Благодаря использованию шаблонов программирования и специализаций шаблонов можно писать грамматику один раз и использовать ее несколькими способами с различными (семантическими) действиями в различных (или одинаковых) прогонах анализа.
С формализмом ПЭГ разделение на стадии лексера и синхронизации обычно сбрасывается - все делается в одной грамматике. Правила выражаются в C ++ в качестве матриц -экземпляров, и задача компилятора - оптимизировать грамматики PEGTL.
Каждый коммит автоматически проверяется с несколькими архитектурами, операционными системами, компиляторами и их версиями.
Каждый коммит проверяется с помощью GCC и дезинфицирующих средств Clang, статического анализатора Clang и clang-tidy . Кроме того, мы используем CodeQL для сканирования (безопасности).
Покрытие кода автоматически измеряется, и модульные тесты охватывают 100% кода библиотеки Core (для выпусков).
Выпуски выполняются в соответствии с семантическим управлением версиями. Несовместимые изменения API могут происходить только между основными версиями.
В оценке всех вкладов здесь находятся люди, которые напрямую внесли свой вклад в PEGTL и/или его развитие.
PEGTL является частью искусства C ++.
Copyright (C) 2007-2023 Даниэль Фрей и доктор Колин Хирш
PEGTL является сертифицированным программным обеспечением с открытым исходным кодом. Он имеет лицензию в соответствии с условиями лицензии на программное обеспечение Boost, версия 1.0 воспроизведена здесь.
Лицензия на программное обеспечение Boost - Версия 1.0 - 17 августа 2003 г.
Настоящим предоставляется разрешение, бесплатно, любому человеку или организации, получающим копию программного обеспечения и сопровождающую документацию, охватывающую эту лицензию («Программное обеспечение») для использования, воспроизведения, отображения, распределения, выполнения и передачи программного обеспечения, и подготовки производных работ и разрешения третьих организаций, которым предоставлено программное обеспечение, все подчиняется следующему: к следующему: следующему: следующему
Уведомления об авторском праве в программном обеспечении и все это заявление, включая приведенный выше грант лицензии, это ограничение и следующее отказ от ответственности, должны быть включены во все копии программного обеспечения, полностью или частично, и все производные работы программного обеспечения, если такие копии или производные работы не находятся исключительно в форме машинного объектного кода, генерируемых процессом исходного языка.
Программное обеспечение предоставляется «как есть», без гарантии любого рода, явного или подразумеваемого, включая, помимо прочего, гарантии товарной пригодности, пригодности для определенной цели, титула и отсутствия нарушения. Ни в коем случае владельцы авторских прав или кто -либо, кто распространяет программное обеспечение, не несет ответственности за любые убытки или другую ответственность, будь то в контракте, деликте или ином случае, возникающих из или в связи с программным обеспечением или использования или других сделок в программном обеспечении.