WikiDer > Parser-Generator

Parsergenerator

EIN Parser-Generator, ebenfalls Compiler-Compiler genannt, ist ein Programm, das hilft, a Compiler (oder Dolmetscher).

Basierend auf einer Spezifikation von a formale Grammatik (oft in BNF oder EBNF), erstellt ein Parser-Generator ein komplettes Parser für die angegebenen Grammatik. Darüber hinaus bieten viele Parsergeneratoren die Möglichkeit, zusätzlich zu einem Parser, der in Compilern verwendet wird, andere Funktionen zu generieren. Betrachten Sie zum Beispiel a lexer oder ein Übersetzer, der eine konkrete Syntaxbaum in einen abstrakten Syntaxbaum übersetzt.

Eigenschaften

Obwohl die Funktionsweise und Funktionalität von Parser-Generatoren stark variieren kann, haben sie alle eine Reihe von Merkmalen gemeinsam:

Spezifikation
Sie arbeiten auf der Grundlage einer Spezifikation von a kontextfreie Grammatik. Dies wird durch eine Variante des spezifiziert EBNF-Notation.
Parser
Sie generieren Quellcode für einen funktionierenden Parser für die angegebene Grammatik.
Syntaxbaum
Der generierte Parser gibt die Ergebnisse von a . zurück analysieren in Form eines Syntaxbaums.

Aktionen

Im Allgemeinen können Parsergeneratoren in zwei Typen unterteilt werden: Generatoren namens Aktionen in der Spezifikation und Generatoren zulassen, wo dies nicht erlaubt ist.

Aktionen sind Fragmente von Programmcode, die mit einem bestimmten Fließband verbunden sein. Wenn der Parser eine Produktionsregel verwendet, um ein Fragment der Eingabe zu erkennen, wird der angegebene Programmcode ausgeführt.

Wenn ein Parser-Generator Aktionen unterstützt, ist es möglich, zusätzliche Funktionen hinzuzufügen (z Syntaxbaum, Typprüfung oder sogar Codegenerierung) in der Spezifikation.

Einige Parser-Generatoren

Die folgende Tabelle vergleicht einige der bekannteren Parser-Generatoren:

NameParser-TypAusgabespracheAktionenZusätzliche FunktionalitätWebseite
ANTLRLL(*)C, C , Cis, Java, PythonJa, Javalexerantlr.org
BisonLALR, GLRC, C ja, C/C -Bison auf www.gnu.org
Coco/RLL(k)C, C , Cis, Java und andereja, vielfältiglexer, unterstützung für AttributbewertungCoco/R auf ssw.uni-linz.ac.at
GOLDLALRC, C , Cis, Java, Monteur und andereNein-Gold auf www.devincook.com
glücklichLALR, GLRHaskellJa, Haskell-Glücklich auf haskell.org
JavaCCLL(k)JavaJa, Javalexer, zusätzlich Baumbauerjavacc.org
SableCCLALRJava, C, C , Cis, OCaml, PythonNeinLexer, CST->AST-Übersetzer, Baumläufersablecc.org
YaccLALRCJa, C--

Siehe auch