Bei einer kontextfreien Grammatik bestehen die linken Seiten aller Produktionen jeweils nur aus einer einzigen Variablen. Für die rechten Seiten der Produktionen bestehen dagegen keine Einschränkungen.
Oft ist es wünschenswert, dass auch die rechten Seiten eine bestimmte Form haben. Durch geeignete Umformung der Grammatik ist es möglich, die rechten Seiten der Produktionen in eine bestimmte Form zu bringen, ohne dass sich die von der Grammatik erzeugte Sprache ändert. Beispielsweise lassen sich bei Bedarf alle Kettenproduktionen, also Produktionen der Form XY beseitigen.
Ein solcher Prozess wird als Normalisierung bezeichnet. Zunächst führen wir eine Basis-Normalisierung durch. Nach weiteren Normalisierungsschritten stehen am Ende die Chomsky-Normalform oder die Greibach-Normalform für kontextfreie Grammatiken.
Definition: Zwei Grammatiken G und G' werden als äquivalent bezeichnet, wenn sie dieselbe Sprache erzeugen, d.h. wenn gilt
L(G) = L(G')
Beispiel: Die Grammatik G0 mit den Produktionen
S | aSb | ε |
und die Grammatik G1 mit den Produktionen
S | C | |
C | D | |
E | ab | |
D | S | aSb | aF | ε |
sind äquivalent, denn beide erzeugen die Sprache { anbn | n ∈ ℕ0 }, wenn auch letztere auf etwas umständliche Weise.
Definition: Sei G = (V, T, P, S) eine kontextfreie Grammatik und sei A = V ∪ T. Eine Variable X ∈ V heißt
Satz: Zu jeder kontextfreien Grammatik G = (V, T, P, S) gibt es eine äquivalente kontextfreie Grammatik G' = (V', T, P', S) ohne nutzlose Variablen.
Beweis: Sei w ein Wort mit w ∈ L(G). Dann gibt es eine Ableitungsfolge S w. Jede Variable, die in den Ableitungsschritten auftritt, ist erreichbar und produktiv. In keiner Ableitungsfolge kann eine nutzlose Variable vorkommen.
G' geht aus G hervor, indem aus V alle nutzlosen Variablen entfernt werden und aus P alle Produktionen, in denen nutzlose Variablen vorkommen.
Beispiel: In der Grammatik G1 ist die Variable E nicht erreichbar und die Variable F nicht produktiv, beide Variablen sind also nutzlos. Diese Variablen und die zugehörigen Produktionen werden daher entfernt. Es verbleibt die Grammatik G2:
S | C | |
C | D | |
D | S | aSb | ε |
Definition: Sei G = (V, T, P, S) eine Grammatik und sei A = V ∪ T. Eine Variable X ∈ V heißt rekursiv, wenn
X uXv
mit u, v ∈ A* gilt.
Beispiel: In der Grammatik G3 des obigen Beispiels ist das Startsymbol S rekursiv.
Satz: Zu jeder Grammatik G = (V, T, P, S) gibt es eine äquivalente Grammatik G' = (V', T, P', S'), deren Startsymbol S' nicht rekursiv ist.
Beweis: Die Grammatik G' geht aus der Grammatik G hervor, indem ein neues Startsymbol S' zur Menge der Variablen V hinzugefügt wird und die neue Produktion S'S zur Menge der Produktionen P hinzugefügt wird.
Beispiel: Indem die angegebene Vorgehensweise auf die Grammatik G2 angewendet wird, ergibt sich folgende Grammatik G3, deren Startsymbol S' nicht rekursiv ist:
S' | S | |
S | C | |
C | D | |
D | S | aSb | ε |
Definition: Sei G = (V, T, P, S) eine kontextfreie Grammatik. Eine Produktion der Form
X | ε |
mit X ∈ V wird als Epsilon-Produktion bezeichnet.
Satz: Zu jeder kontextfreien Grammatik G = (V, T, P, S) gibt es eine äquivalente kontextfreie Grammatik G' = (V, T, P', S')
Beweis: Die kontextfreie Grammatik G wird durch folgendes Verfahren in die Grammatik G' umgeformt.
Vε = { X ∈ V | X ε }
führe die Produktion Yuv zusätzlich ein
führe die Produktion S'ε ein
Beispiel: In der Grammatik G3 hatten wir Schritt 1 des Verfahrens bereits durchgeführt. In Schritt 2 bestimmen wir nun Vε = { S', S, C, D }. In Schritt 3 entfernen wir die Produktion Dε. In Schritt 4 finden wir DaSb als einzige Produktion mit der dort angegebenen Eigenschaft und führen daher die Produktion Dab neu ein. Und in Schritt 5 schließlich führen wir noch die Produktion S'ε ein, da S' ∈ Vε.
Das Ergebnis ist die Grammatik G4:
S' | S | ε | |
S | C | |
C | D | |
D | S | aSb | ab |
Definition: Sei G = (V, T, P, S) eine kontextfreie Grammatik. Eine Produktion der Form
X | Y |
mit X, Y ∈ V wird als Kettenproduktion bezeichnet.
Satz: Zu jeder kontextfreien Grammatik G = (V, T, P, S) gibt es eine äquivalente kontextfreie Grammatik G' = (V', T, P', S) ohne Kettenproduktionen.
Beweis: Ein Sonderfall von Kettenproduktionen sind Zyklen von Kettenproduktionen. Diese Zyklen werden zuerst entfernt.
Zyklen von Kettenproduktionen entfernen
Wenn die Grammatik einen Zyklus der Form
X0 → X1, X1 → X2, ... , Xk-1 → X0, k ∈ ℕ
enthält, so lassen sich die Variablen Xi alle ineinander überführen und brauchen daher nicht unterschieden zu werden. Es werden daher die Produktionen des Zyklus entfernt und alle weiteren Vorkommen der Xi in G durch einen einzigen Repräsentanten ersetzt (falls das Startsymbol S im Zyklus vorkommt, durch S).
Kettenproduktionen entfernen
Jede Kettenproduktion XY wird in der Weise umgeformt, dass für Y die aus Y direkt ableitbaren rechten Seiten eingesetzt werden, so lange, bis keine Kettenproduktionen mehr vorhanden sind.
Beispiel:
In der Grammatik G4 ist SC, CD, DS ein Zyklus von Kettenproduktionen. Wir entfernen die Produktionen des Zyklus und ersetzen alle weiteren Vorkommen von S und D durch C. Das Ergebnis ist die Grammatik G5:
S' | C | ε | |
C | aCb | ab |
Die Kettenproduktion S'C entfernen wir, indem für deren rechte Seite C die aus C direkt ableitbaren Wörter einsetzen. Es ergibt sich die Grammatik G6:
S' | aCb | ab | ε | |
C | aCb | ab |
Die eben beschriebenen Umformungen lassen sich zusammen anwenden, diesen Prozess bezeichnen wir als Basis-Normalisierung:
Definition: Sei G = (V, T, P, S) eine kontextfreie Grammatik. Wir bezeichnen die Grammatik als basis-normalisiert, wenn sie keine keine nutzlosen Variablen, kein rekursives Startsymbol, keine Epsilon-Produktionen außer Sε und keine Kettenproduktionen enthält.
Beispiel: Die obige Grammatik G6 ist basis-normalisiert.
Eine basis-normalisierte kontextfreie Grammatik lässt sich durch weitere Normalisierungsschritte in die Chomsky-Normalform oder in die Greibach-Normalform umformen.
Weiter mit: [Chomsky-Normalform] [Greibach-Normalform] oder [up]