解析式グラマーテンプレートライブラリ(PEGTL)は、解析式文法(PEG)に従ってパーサーを作成するためのゼロ依存性C ++ヘッダーのみのパーサーコンビネーターライブラリです。
新しいメジャーバージョンの開発中、メインブランチは互換性のない変更を実行できます。安定したエクスペリエンスについては、メインブランチを使用するのではなく、最新リリースをダウンロードしてください。
PEGTL、成功または失敗のストーリー、その他のフィードバックに関する質問や提案については、ディスカッション、問題、プルリクエストを自由に開くか、 taocpp(at)icemx.netの著者に連絡してください。
グラマーは、テンプレートプログラミング(テンプレートメタプログラミングではなく)で作成された通常のC ++コード、つまりPEGの帰納的定義(および他のパーサーコービネーターアプローチ)に自然に対応するネストされたテンプレートインスタンス化として作成されます。
ユーザーが組み合わせて拡張できるパーサールールの包括的なセットは、文法のデバッグや文法ルールにユーザー定義のアクションを添付するためのメカニズムと同様に含まれています。ペグトルのC ++クラスとして解析式の式文法ルールがどのように実装されるかの例を次に示します。
// 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)に似ていますが、ペグのより決定的な性質は非常に重要な違いを生じさせます。含まれる文法分析では、左再帰を含むPEGのいくつかの典型的なエラーが見つかります。
PEGTLは「リーンと平均」になるように設計されており、コアライブラリは約6000行のコードで構成されています。シンプルさと効率性に重点が置かれており、複雑な最適化よりもよく調整された単純なアプローチを好みます。
PEGTLは、ほとんどの場合、コンビネーターと文法規則の解析に関係しており、ライブラリのユーザーに解析走行の他のすべての側面を完全に制御することに関心があります。アクションが実行されるかどうか、および解析の実行中にデータ構造が作成されるかどうかは、完全にユーザー次第です。
文字列のエスケープシーケンスを無効にする、一般的なJSONデータ構造の構築、算術表現のオンザフライ評価など、典型的な状況のいくつかの例が含まれています。
テンプレートプログラミングとテンプレートの専門化を使用することで、文法を一度書いて、異なる(または同じ)解析の実行で異なる(セマンティック)アクションで複数の方法で使用することが可能です。
PEG形式では、通常、レクサーとパーサーの段階への分離が削除されます。すべてが単一の文法で行われます。ルールはC ++でテンプレートのインスタンス化として表現されており、PEGTL文法を最適化するのはコンパイラのタスクです。
各コミットは、複数のアーキテクチャ、オペレーティングシステム、コンパイラ、およびバージョンで自動的にテストされます。
各コミットは、GCCおよびClang Sanitizers、Clangの静的アナライザー、 clang-tidyで確認されます。さらに、CodeQLを使用して(セキュリティ)問題をスキャンします。
コードカバレッジが自動的に測定され、単体テストではコアライブラリコードの100%(リリース用)がカバーされます。
リリースは、セマンティックバージョンに従って行われます。互換性のないAPIの変更は、主要バージョン間でのみ発生することができます。
ここでのすべての貢献を認めて、PEGTLおよび/またはその開発に直接貢献した人々がいます。
PEGTLはC ++の芸術の一部です。
Copyright(c)2007-2023 Daniel FreyとDr. Colin Hirsch
PEGTLは、認定されたオープンソースソフトウェアです。 Boost Softwareライセンスの条件でライセンスされています。バージョン1.0はここに再現されています。
ブーストソフトウェアライセンス - バージョン1.0- 2003年8月17日
ここで許可は、ソフトウェアのコピーを入手し、このライセンスの対象となるドキュメント(「ソフトウェア」)の対象となるドキュメント(「ソフトウェア」)を入手するために、ソフトウェアのデリバティブ作業を使用、複製、表示、表示、分散、実行、およびソフトウェアの準備を準備し、ソフトウェアがサードパーティを許可するために、ソフトウェアのデリバティブ作業を許可して、すべての人に無料で許可されます。
上記のライセンス助成金、この制限、および以下の免責事項を含む、ソフトウェアの著作権とこの声明全体は、ソフトウェアのすべてのコピーに含まれている必要があります。そのようなコピーまたはデリバティブ作業は、ソフトウェアのすべてのデリバティブ作業は、ソース言語プロセッサによって生成された機械消費可能なオブジェクトコードのみである場合を除きます。
このソフトウェアは、商品性、特定の目的への適合性、タイトル、および非侵害の保証を含むがこれらに限定されない、明示的または黙示的なものを保証することなく、「現状のまま」提供されます。いかなる場合でも、著作権所有者またはソフトウェアを配布する人は、契約、不法行為、またはその他、ソフトウェア、またはソフトウェアの使用またはその他の取引に関連する、またはその他に関連するものであれ、損害またはその他の責任について責任を負いません。