Definition (Ableitung) 6.1.1
Sei eine Grammatik mit Startsymbol .
Die Ableitung eines Wortes ist eine Sequenz
von Wortformen mit
und .
Das folgende Beispiel ist Beispiel 3.22 aus dem Buch von Aho und Ullman.
Wir betrachten die klassische kontextfreie Grammatik für arithmetische Ausdrücke
mit Klammerung:
wobei das Startsymbol ist.
Hier ist ein Beispiel einer Ableitung von von
der obigen Grammatik.
Insbesondere ist es eine Linksableitung, das heißt, in jedem
Schritt wird das am weitesten links stehende Nichtterminal expandiert.
In der Tat reicht es, nur die Nummer der angewandten Regel
anzugeben (da ja klar ist, welches Nichtterminal expandiert werden muss).
Die obige Ableitung kann also kompakt durch die Zahlenfolge
23465124646 repräsentiert werden.
Betrachten wir im Folgenden ein weiteres Beispiel einer Ableitung,
in diesem Falle eine Rechtsableitung, in der in jedem
Schritt das am weitesten rechts stehende Nichtterminal expandiert wird:
Rechtsableitungen können auch kompakt als Zahlenfolge
repräsentiert werden. Allerdings geben wir Rechtsableitungen immer
in umgekehrter Reihenfolge an, also von hinten nach vorne, in diesem Falle
also nicht 2351... sondern 64642641532.
Beachten Sie, dass wir es hier mit einer eindeutigen Grammatik
zu tun haben, es also nur einen Syntaxbaum gibt:
Rechtsableitung und Linksableitung sowie deren Codierung als Zahlenfolge
spiegeln also nur zwei verschiedene Weisen wieder, den Baum auszugeben.
def treeToLeftDerivation (tree): print tree.ruleAtRoot (bzw. drucke nur die Nummer der Regel) for child in tree.children (from left ro right): treeToLeftDerivation(child)def treeToRightDerivation (tree): for child in tree.children (from left ro right): treeToLeftDerivation(child) print tree.ruleAtRoot (bzw. drucke nur die Nummer der Regel)
Beachten Sie, dass wir in beiden Fällen die Liste Kinder von links nach rechts
durchgehen.