Geist

Spirit ist ein objektorientiertes rekursives Abstieg-Parsergenerator-Framework mithilfe von Template-Meta-Programmiertechniken
Jetzt downloaden

Geist Ranking & Zusammenfassung

Anzeige

  • Rating:
  • Lizenz:
  • Boost Software Licen...
  • Preis:
  • FREE
  • Name des Herausgebers:
  • Joel de Guzman
  • Website des Verlags:
  • http://www.boost.org/doc/libs/1_35_0/libs/spirit/index.html

Geist Stichworte


Geist Beschreibung

Spirit ist ein objektorientiertes rekursives Abstiegsparsergenerator-Framework, das mithilfe von Template-Meta-Programmierungstechniken implementiert ist Spirit ist ein rekursionsabstößliches objektorientiertes Parsergenerator-Framework, das mit Template-Meta-Programmierungstechniken implementiert ist. Ausdrucksvorlagen ermöglichen es uns, die Syntax der erweiterten Backus-Normal-Form (EBNF) vollständig in C ++ anzunähern. Das Spirit-Framework ermöglicht es, eine Zielgrammatik ausschließlich in C ++ zu schreiben. Inline-EBNF-Grammatikspezifikationen können sich mit einem anderen C ++ - Code frei mischen, und sind dank der generativen Leistung von C ++ - Templates sofort ausführbar. Im Rückblick müssen herkömmliche Compiler-Compiler oder Parser-Generatoren einen zusätzlichen Übersetzungsschritt aus dem Quell-EBNF-Code auf C oder C ++ - Code ausführen. Ein einfaches EBNF-Grammatik-Snippet: Gruppen :: = '(' Expression ')' Faktor :: = Ganzzahl | Gruppensend :: = Faktor (('*' Faktor) | ('/' Faktor)) * Ausdruck :: = Term (('¹' Term) | ('-' Term)) * Wird anhand der Spirits angenähert In diesem Code-Snippet: Gruppe = '(' >> Ausdruck >> ')'; Faktor = Ganzzahl | Gruppe; Begriff = Faktor >> * (('*' >> Faktor) | ('/' >> Faktor)); Expression = Begriff >> * (('+' >>-Term) | ('-' >> Begriff)); Durch die Magie der Ausdrucksvorlagen ist dies einwandfrei gültiger und ausführbarer C ++ - Code. Der Produktionsregelausdruck ist in der Tat ein Objekt, das über eine Mitgliedsfunktionsanalyse verfügt, die die Arbeit mit einem Quellcode ergibt, der in der in der Grammatik geschriebenen Grammatik geschrieben wurde, die wir gerade erklärt haben. Ja, es ist ein Taschenrechner. Wir vereinfachen nun, indem wir die Typdeklarationen überspringen und die Definition der Regel in der Regel in der Rolle des Faktors aufgerufen haben. Die Ausdrücke des Produktionsregels in unserer Grammatikspezifikation, traditionell als Startsymbol bezeichnet, kann Eingaben erkennen, z. B.: 12345 -12345 +123451 + 21 * 21/2 + 3/41 + 2 + 3 + 41 * 2 * 3 * 4 (1 + 2) * (3 + 4) (-1 + 2) * (3 + -4) 1 + ((6 * 200) - 20) / 6 (1 + (2 + (3 + ( 4 + 5))) Sicherlich haben wir einige Änderungen an der ursprünglichen EBNF-Syntax durchgeführt. Dies geschieht, um den C ++-Syntax-Regeln anzupassen. Am bekanntesten sehen wir die Fülle von Schicht >> Betreiber. Da es keine "leeren" Operatoren in C ++ gibt, ist es einfach nicht möglich, so etwas zu schreiben: ein Bie, das in der Mathematik-Syntax zu sehen ist, um beispielsweise Multiplikation zu verstehen oder in unserem Fall, wie in der EBNF-Syntax zu sehen ist, um Sequenzierung (B sollte einem folgen). Das Framework verwendet stattdessen den Operator von Shift >>. Wir nehmen den Operator >>, mit den Pfeilen, die auf das Recht zeigen, zu bedeuten, "folgt". Also schreiben wir: A >> BDer Alternative Operator | und die Klammern () bleiben wie. Der Zuweisungsoperator = wird anstelle von EBNFs :: = verwendet. Nicht zuletzt wird der Kleene-Stern *, der früher ein Postfix-Operator in EBNF war, ein Präfix. Anstelle von: A * // ... in der EBNF-Syntax, schreiben wir: * a // ... in Spirit.sus Es gibt keine Postfix-Stars, "*", in C / C ++. Schließlich künnen wir jede Regel mit dem allgegenwärtigen Semikolon, ";". Was ist neu in dieser Version: · Eine ganzzahlige Überlauffehler behoben, um zu verhindern, dass sie auf bestimmte große Ganzzahlen analysiert. Dieser Fehler wurde von Michael Andersen NEX gemeldet und behoben


Geist Zugehörige Software