Wir betrachten als Beispiel die bekannte Grammatik für arithmetische Ausdrücke von OBERON-0 , so wie sie in der Ausgabedatei von bison erscheint:
rule 35 Expression -> SimpleExpression
rule 36 Expression -> SimpleExpression Relop
SimpleExpression
rule 37-42 Relop -> eqsy | neqsy | ltsy | lesy | gtsy | gesy
rule 43 SimpleExpression -> SimpleExpression Op1 Term
rule 44 SimpleExpression -> Term
rule 45 SimpleExpression -> Sign Term
rule 46-47 Sign -> addop | subop
rule 48-50 Op1 -> addop | subop | orop
rule 51 Term -> Factor Op2 Term
rule 52 Term -> Factor
rule 53-56 Op2 -> multop | divop | andop | modop
rule 57 Factor -> lpar Expression rpar
rule 58 Factor -> integer
rule 59 Factor -> ident
rule 60 Factor -> notsy Factor
Für die weitere Übersetzung kann man viele Knoten entfernen, die nur
dafür sorgen, daß Präzedenzen eingehalten werden.
Dieser abstrakte Programmbaum enthält jetzt nicht mehr die Informationen, die nur für die syntaktische Analyse benötigt wurden. In unserem Beispiel ergibt sich:
Expression = UnaryExpression |
BinaryExpression |
Integer | Ident
Unary Expression :: UnOp Expression
Integer :: INTEGER
Ident :: CHAR*
UnOp = addsy | subsy | notsy
Selector = (ident | Expression)*
BinaryExpression :: Expression BinOp Expression
BinOp = neqsy | ltsy | lesy | gtsy | gesy |
addop | subop | andop | orop |
modop | multop | divop
Prof. Dr. Reinhard Völler