Automaten, Formale Sprachen und Berechenbarkeit I
Automaten, Formale Sprachen und Berechenbarkeit I
Automaten, Formale Sprachen und Berechenbarkeit I
Erfolgreiche ePaper selbst erstellen
Machen Sie aus Ihren PDF Publikationen ein blätterbares Flipbook mit unserer einzigartigen Google optimierten e-Paper Software.
1. KONTEXTFREIE GRAMMATIKEN 73<br />
Beispiel 3.6<br />
Wir werden im folgenden zeigen, wie man die Grammatik aus Abb. 3.6 (a) in Greibach-Normalform<br />
überführt:<br />
1. Schritt: Zunächst legen wir eine Reihenfolge auf den Variablen der Grammatik fest: S <<br />
A < B (wir haben die Regeln der Grammatik bereits gemäß dieser Reihenfolge sortiert).<br />
Im ersten Schritt sorgen wir nun dafür, daß auf der rechten Seite aller Regeln einer Variablen<br />
X als erstes Symbol entweder ein Terminalzeichen oder eine Variable Y mit Y > X<br />
vorkommt.<br />
Dazu gehen wir der Reihe nach die Regeln der Variablen S, A <strong>und</strong> B durch:<br />
S: Die (einzigen) Regel für S ist bereits in der gewünschten Form (das erste Symbol<br />
der rechten Seite ist A <strong>und</strong> es gilt A > S).<br />
A: Die Regel A → AA hat noch nicht die gewünschte Form, da A ≯ A (die Regel<br />
ist linksrekursiv). Deshalb führen wir eine Rotation der Regeln für A (Lemma 3.15)<br />
durch mit A α = {A}, A β = {a} <strong>und</strong> der neuen Variablen C. Dann erhalten wir die<br />
Grammatik aus Abb. 3.6 (b).<br />
In dieser Grammatik haben nun auch die Regeln für A die gewünschte Form.<br />
B: Die Regel B → SA hat noch nicht die gewünschte Form, da S < B. Um diese<br />
Regel in die gewünschte Form zu bringen, substituieren wir S in dieser Regel durch<br />
seine rechten Seiten (Lemma 3.14). Wir erhalten also die Regel B → ABA. Diese<br />
Regel ist leider immer noch nicht in der gewünschten Form 2 . Wir substituieren also<br />
nochmals (diesmal die rechten Seiten von A) für das erste A <strong>und</strong> erhalten die zwei<br />
Regeln B → aBA <strong>und</strong> B → aCBA. Nach diesen beiden Schritten erhalten wir die<br />
Grammatik aus Abb. 3.6 (c).<br />
Diese Grammatik ist bereits in der Form, die wir im 1. Schritt erreichen wollten. Insbesondere<br />
sind die ersten Zeichen der rechten Seiten von B bereits Terminalzeichen.<br />
Es hätte auch passieren können, daß nach der Substitution von A auf der rechten Seite von B<br />
eine Regel der Form B → Bα entsteht. Diese Linksrekursion hätten wir wieder durch Rotation<br />
beseitigen müssen.<br />
2. Schritt: Im zweiten Schritt sorgen wir dafür, daß in allen Regeln für S, A <strong>und</strong> B das erste<br />
Zeichen auf der rechten Seite ein Terminalzeichen ist. Für die letzte Variable muß dies<br />
nach dem ersten Schritt bereits der Fall sein. Für die anderen Variablen erreichen wir<br />
dies, indem wir von unten nach oben (also in umgekehrter Reihenfolge der Variablen)<br />
substituieren.<br />
Im Beispiel müssen wir nur noch das erste A in der rechten Seite von S durch Substitution<br />
beseitigen. Wir erhalten die Grammatik aus Abb. 3.7 (d).<br />
3. Schritt Als letztes müssen wir noch die Regeln für die neu hinzugefügten Variablen betrachten.<br />
Im Beispiel müssen wir also die Variable A in den rechten Seiten von C substituieren<br />
<strong>und</strong> erhalten die Grammatik aus Abb. 3.7 (e).<br />
2 Die Regel B → ABA ist aber schon etwas „besser“, als B → SA, da A > S.