27.11.2014 Aufrufe

Automaten, Formale Sprachen und Berechenbarkeit I

Automaten, Formale Sprachen und Berechenbarkeit I

Automaten, Formale Sprachen und Berechenbarkeit I

MEHR ANZEIGEN
WENIGER ANZEIGEN

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.

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!