WikiDer > Parser-Generator
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:
| Name | Parser-Typ | Ausgabesprache | Aktionen | Zusätzliche Funktionalität | Webseite |
|---|---|---|---|---|---|
| ANTLR | LL(*) | C, C , Cis, Java, Python | Ja, Java | lexer | antlr.org |
| Bison | LALR, GLR | C, C | ja, C/C | - | Bison auf www.gnu.org |
| Coco/R | LL(k) | C, C , Cis, Java und andere | ja, vielfältig | lexer, unterstützung für Attributbewertung | Coco/R auf ssw.uni-linz.ac.at |
| GOLD | LALR | C, C , Cis, Java, Monteur und andere | Nein | - | Gold auf www.devincook.com |
| glücklich | LALR, GLR | Haskell | Ja, Haskell | - | Glücklich auf haskell.org |
| JavaCC | LL(k) | Java | Ja, Java | lexer, zusätzlich Baumbauer | javacc.org |
| SableCC | LALR | Java, C, C , Cis, OCaml, Python | Nein | Lexer, CST->AST-Übersetzer, Baumläufer | sablecc.org |
| Yacc | LALR | C | Ja, C | - | - |