Aufgabe
|
Token-Strom transformieren in einen Syntaxbaum
|
| |
Spezifikation
|
Kontextfreie Grammatik
|
| |
Verarbeitung
|
mit Kellerautomaten
|
|
LL-Analyse, top down, rekursiver Abstieg
|
|
LR-Analyse, bottom up
|
| |
Generatoren
|
|
Eingabe
|
kontextfreie LL- oder LR-Grammatik
|
| |
Ausgabe
|
Transformationsprogramm: Token-Folge in Programmbaum
|
|
parse :: [Token] -> ProgramTree
|
| |
Beispiel
|
ClassDefinition ::= ClassSy Identifier
ExtendsClause
LeftBrace ClassBody RightBrace
ExtendsClause ::= [ ExtendsSy Identifier ]
[ ImplementsSy IdentifierList ]
ClassBody ::= ...
|
| |
|
Parser entwickelt man nicht per Hand
|
|
Ausnahme: Einfache Parser mit rekursivem Abstieg (recursive descent)
|
|
Generatoren: yacc, bison, CUP, JavaCC, happy, ...
|
| |
yacc, bison, CUP, happy
|
bottom up Parser
LALR(1) Parser
|
| |