Die PEGTL-Bibliothek (Parsing Expression Grammatar Template) ist eine C ++ -Haell-Combinator-Kombinationskombinationsbibliothek mit C ++ -Header, um Parsers gemäß einer Parsing-Expression-Grammatik (PEG) zu erstellen.
Während der Entwicklung einer neuen Hauptversion kann die Hauptzweig inkompatiblen Änderungen durchführen. Für eine stabile Erfahrung laden Sie bitte die neueste Version herunter, anstatt die Hauptzweig zu verwenden.
Für Fragen und Vorschläge zu PEGTL, Erfolgs- oder Misserfolgsgeschichten und jede andere Art von Feedback können Sie bitte eine Diskussion, ein Problem oder eine Pull -Anfrage eröffnen oder die Autoren bei taocpp(at)icemx.net kontaktieren.
Grammatiken werden als regulärer C ++-Code geschrieben, der mit Vorlagenprogrammierung (nicht Vorlagen-Meta-Programmierung) erstellt wurde, dh verschachtelte Vorlagen-Instanziationen, die natürlich der induktiven Definition von PEGs (und anderen Ansätzen des Parser-Combinators) entsprechen.
Eine umfassende Reihe von Parser-Regeln, die vom Benutzer kombiniert und erweitert werden können, ist ebenso enthalten, ebenso wie Mechanismen zum Debuggen von Grammatiken und zum Anbringen von benutzerdefinierten Aktionen an Grammatikregeln. Hier ist ein Beispiel dafür, wie eine Parsing -Expression -Grammatikregel als C ++ - Klasse mit dem PEGTL implementiert wird.
// 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 > > {};PEGs sind oberflächlich ähnlich wie kontextfreie Grammatiken (CFGs), die deterministischere Natur von PEGs führt jedoch zu einigen sehr wichtigen Unterschieden. Die eingeschlossene Grammatikanalyse ergibt mehrere typische Fehler in den Stiften, einschließlich der linken Rekursion.
Die PEGTL ist so konzipiert, dass sie "schlank und gemein" ist. Die Kernbibliothek besteht aus ca. 6000 Codezeilen. Der Schwerpunkt liegt auf Einfachheit und Effizienz und bevorzugt einen gut abgestimmten einfachen Ansatz gegenüber komplizierten Optimierungen.
Der PEGTL befasst sich hauptsächlich mit den Parsen -Kombinators und den Grammatikregeln und gibt dem Benutzer der Bibliothek (die Möglichkeit) die volle Kontrolle über alle anderen Aspekte eines Parsing -Laufs. Ob/welche Maßnahmen ergriffen werden und ob/welche Datenstrukturen während eines Parsen -Laufs erstellt werden, liegt ganz dem Benutzer.
Eingeschlossen sind einige Beispiele für typische Situationen wie unablässige Fluchtsequenzen in Saiten, der Aufbau einer generischen JSON-Datenstruktur und die Bewertung von arithmetischen Ausdrücken im Fliegen.
Durch die Verwendung von Vorlagenprogrammierungs- und Vorlagenspezialisierungen ist es möglich, einmal eine Grammatik zu schreiben und sie auf verschiedene Weise mit unterschiedlichen (semantischen) Aktionen in verschiedenen (oder gleichen) Parsen zu verwenden.
Mit dem PEG -Formalismus wird die Trennung in Lexer- und Parser -Stufen normalerweise fallen - alles wird in einer einzigen Grammatik geschehen. Die Regeln werden in C ++ als Vorlagen -Instanziationen ausgedrückt, und es ist die Aufgabe des Compiler, PEGTL -Grammatiken zu optimieren.
Jeder Commit wird automatisch mit mehreren Architekturen, Betriebssystemen, Compilern und Versionen davon getestet.
Jedes Komitee wird mit den GCC- und Clang-Desinfektionsmitteln, dem statischen Analysator von Clang und clang-tidy überprüft. Darüber hinaus verwenden wir CODEQL, um (Sicherheits-) Probleme zu scannen.
Die Codeabdeckung wird automatisch gemessen und die Unit -Tests decken 100% des Kernbibliothekscode (für Veröffentlichungen) ab.
Veröffentlichungen werden gemäß der semantischen Versioning durchgeführt. Inkompatible API -Änderungen dürfen nur zwischen den Hauptversionen auftreten.
Bei der Wertschätzung aller Beiträge sind hier die Menschen, die direkt zum PEGTL und/oder seiner Entwicklung beigetragen haben.
Der PEGTL ist Teil der Kunst von C ++.
Copyright (C) 2007-2023 Daniel Frey und Dr. Colin Hirsch
Die PEGTL ist zertifizierte Open -Source -Software. Es ist unter den Bestimmungen der Boost -Software -Lizenz, Version 1.0, hier zu lizenziert.
Boost -Softwarelizenz - Version 1.0 - 17. August 2003
Die Erlaubnis wird hiermit einer Person oder Organisation, die eine Kopie der Software und eine von dieser Lizenz (der "Software") erfasste Person oder Organisation kostenlos erteilt, um die Software zu verwenden, zu reproduzieren, zu verteilt, zu verteilen, auszuführen und die Software zu übertragen, und die Ableitungen der Software zuzulassen, an die die Software zugelassen wird, an die die Software ausgesetzt ist.
Die Copyright-Mitteilungen in der Software und diese gesamte Aussage, einschließlich der oben genannten Lizenzzustände, dieser Einschränkung und der folgenden Haftungsausschluss, müssen in alle Kopien der Software oder teilweise aufgenommen werden, und alle abgeleiteten Arbeiten der Software, es sei denn, solche Kopien oder Ableitungen sind ausschließlich in Form von maschinellem Executable-Objekt-Code, das durch einen Quellensprachenprozessor generiert wird.
Die Software wird "wie es ist" ohne Garantie jeglicher Art, ausdrücklich oder stillschweigend bereitgestellt, einschließlich, aber nicht beschränkt auf die Gewährleistung der Marktgängigkeit, die Eignung für einen bestimmten Zweck, einen bestimmten Zweck und die Nichtverletzung. In keinem Fall sind die Inhaber des Urheberrechts oder Personen, die die Software verteilen, für Schäden oder andere Haftungen, sei es in Vertrag, unerlaubter Handlung oder anderweitig, aus oder im Zusammenhang mit der Software oder der Verwendung oder anderen Geschäften in der Software.