Formale Sprachen und Komplexit¨ at
Sommersemester 2019
Kontextfreie Sprachen: Teil I
Prof. Dr. David Sabel
LFE Theoretische Informatik
Inhalts¨ ubersicht
Operationen auf Kontextfreien Grammatiken Normalformen f¨ ur CFGs: Chomsky-Normalform und Greibach-Normalform
Widerlegen der Kontextfreiheit: Pumping-Lemma
Lemma (Pumping-Lemma f¨ur CFLs)
SeiLeine kontextfreie Sprache. Dann gibt es eine Zahln∈N>0, sodass jedes Wortz∈L, das Mindestl¨angenhat (d. h.|z| ≥n), alsz=uvwxygeschrieben werden kann, so dass gilt:
|vx| ≥1
|vwx| ≤n
f¨ur allei≥0:uviwxiy∈L.
Abschlusseigenschaften kontextfreier Sprachen
Kontextfreie Sprachen
Zur Erinnerung:
Kontextfreie Sprachen (CFLs) werden von einer kontextfreien Grammatik (CFG) erzeugt
Das sind die Typ 2-Grammatiken
Bedingung: Alle linken Seiten der Produktionen bestehen aus
genau einer Variablen.
Motivation
Kontextfreie Sprachen sind insbesondere n¨ utzlich um Sprachen mit Klammerungen zu beschreiben
Die Syntax von Programmiersprachen wird meist mit einer kontextfreien Grammatik angegeben.
Beispiele:
G = ({E, M, Z }, {+, ∗, (, )} ∪ {0, . . . , 9}, P, E) mit P = {E → M | E + M,
M → Z | M ∗ Z, Z → N | (E), N → 1D | . . . | 9D, D → 0D | . . . | 9D | ε}
L = {a
jb
j| j ∈
N} ist kontextfrei: Produktionen
{S → ε | T, T → aT b | ab} mit S als Startsymbol erzeugen L
Einfache Operationen auf CFGs
Wir definieren Operationen auf CFGs, die die erzeugte Sprache unver¨ andert lassen
Die Operationen werden sp¨ ater (als Hilfsmittel)
wiederverwendet.
Inlining von Produktionen
Lemma (Inlining von Produktionen) Sei G = (V, Σ, P, S) eine CFG und
A
→ uB v ∈ P ,
B
→
w1| . . . |
wnalle Regeln mit
Bals linker Seite
und sei G
0= (V, Σ, P \ {A → uBv} ∪ {A → uw
1v | . . . | uw
nv}, S ).
Dann erzeugen G und G
0dieselbe Sprache, d. h. L(G) = L(G
0).
Beweis: Das folgt, indem die Syntaxb¨ aume zur Ableitung mit G bzw. G
0modfiziert werden:
tausche alle Baumabschnitte
A
u B
w
iv
durch
A
u w
iv
(im Syntaxbaum mit G) (im Syntaxbaum mit G
0)
Inlining von Produktionen
Lemma (Inlining von Produktionen) Sei G = (V, Σ, P, S) eine CFG und
A
→ uB v ∈ P ,
B
→
w1| . . . |
wnalle Regeln mit
Bals linker Seite
und sei G
0= (V, Σ, P \ {A → uBv} ∪ {A → uw
1v | . . . | uw
nv}, S ).
Dann erzeugen G und G
0dieselbe Sprache, d. h. L(G) = L(G
0).
Beweis: Das folgt, indem die Syntaxb¨ aume zur Ableitung mit G bzw. G
0modfiziert werden:
tausche alle Baumabschnitte
A
u B
w
iv
durch
A
u w
iv
Sharing von Satzformen mit neuen Produktionen
Lemma (Sharing von Satzformen mit neuen Produktionen) Sei G eine CFG mit G = (V, Σ, P ∪ {A · →
w1· · ·
wn}, S).
Seien
B1, . . . ,
Bnneue Variablen (d. h. V ∩ {B
1, . . . , B
n} = ∅) und sei G
0= (V ∪{B ·
1, . . . ,
Bn}, Σ, P ∪{A→B ·
1· · ·
Bn,
B1→w
1, . . . ,
Bn→w
n}, S).
Dann gilt L(G) = L(G
0).
Beweis:
“⊆”: Konstruiere aus S ⇒
∗Gw Ableitung S ⇒
∗G0w
0: ¨ Ubersetze jeden Schritt uAv ⇒
Guw
1· · ·wnv in uAv ⇒
G0uB
1· · ·Bnv ⇒
nG0uw
1· · ·wnv.
“⊇”: Betrachte den Syntaxbaum f¨ ur S ⇒
∗G0w.
Identifiziere die Anwendungen der Regeln
A→
B1· · ·Bn,
Bi→
wi, und
modifziere Syntaxbaum durch Anwendung der Regel
A→
w1· · ·wn.
Lese Ableitung S ⇒
∗Gw ab.
Elimination der Links-Rekursion (1)
Definition (links- bzw. rechts-rekursive Produktion
Eine Produktion nennt man
links-rekursiv, wenn sie von der Form A→
Auist, und
rechts-rekursiv, wenn sie von der Form A→ uA
ist, wobei in beiden F¨ allen u eine Satzform ist.
Elimination der Links-Rekursion (2)
Lemma (Elimination von Links-Rekursion)
Sei G = (V, Σ, P, S), P = P
0∪ {A · → Au
1| · · · | Au
n| w
1| · · · | w
m}
| {z }
P00
eine CFG mit
P
00sind alle Produktionen in P mit A als linker Seite und die Satzformen w
1, . . . , w
mbeginnen alle nicht mit A.
Es gilt L(G) = L(G
0) f¨ ur G
0= (V ∪{B · }, Σ, P
0∪ P
000, S) mit B neue Variable und P
000= {A → w
1B | · · · | w
mB | w
1| · · · | w
m,
B → u
1| . . . | u
n| u
1B | . . . | u
nB}
Beweis: Ausf¨ uhrlicher Beweis im Skript Wesentliche Idee:
Ersetze Linksableitungsschritte mit G: x
1Ax
2⇒
∗Gx
1w
ru
f(1)· · · u
f(k)x
2durch Rechtsableitungsschritte mit G
0: x
1Ax
2⇒
∗G0x
1w
ru
f(1)· · · u
f(k)x
2Normalformen
Normalformen von Grammatiken fordern eine spezielle Form der Produktionen
N¨ utzlich, wenn man Grammatiken analysiert oder Algorithmen auf Grammatiken formuliert
Man muss dann nur diese Form (statt aller erlaubten) von Produktionen betrachten
Wir betrachten zwei Normalformen
Chomsky-NormalformGreibach-Normalform
Die Chomsky-Normalform
Definition (Chomsky-Normalform)
Eine CFG G = (V, Σ, P, S) mit ε 6∈ L(G) ist in
Chomsky-Normalform,wenn f¨ ur A →
w∈ P gilt:
w=a∈ Σ oder
w=BCmit B, C ∈ V .
Beispiel:
Die CFG G = ({A}, {(, ), [, ]}, {A → (A) | () | [A] | [] | A A}, A) ist
nichtin Chomsky-Normalform
(nur die Produktion A → A A passt zum vorgeschriebenen Format). Die CFG G
0= ({A, B, C, D, E, F, G}, {(, ), [, ]}, P, A) mit
P = {A → BF | BC | DG | DE | AA,
B → (, C →), D → [, E →], F → AC, G → AE}
ist in Chomsky-Normalform (und erzeugt die gleiche Sprache wie G).
Die Chomsky-Normalform
Definition (Chomsky-Normalform)
Eine CFG G = (V, Σ, P, S) mit ε 6∈ L(G) ist in
Chomsky-Normalform,wenn f¨ ur A →
w∈ P gilt:
w=a∈ Σ oder
w=BCmit B, C ∈ V . Beispiel:
Die CFG G = ({A}, {(, ), [, ]}, {A → (A) | () | [A] | [] | A A}, A) ist
nichtin Chomsky-Normalform
(nur die Produktion A → A A passt zum vorgeschriebenen Format).
Die CFG G
0= ({A, B, C, D, E, F, G}, {(, ), [, ]}, P, A) mit P = {A → BF | BC | DG | DE | AA,
B → (, C →), D → [, E →], F → AC, G → AE}
ist in Chomsky-Normalform (und erzeugt die gleiche Sprache wie G).
Eigenschaften der Chomsky-Normalform
Sei G eine CFG in Chomsky-Normalform, dann gilt:
Syntaxb¨ aume zu Ableitungen mit G sind immer
Bin¨arb¨aumeAbleitungen eines Worts w ∈ L(G) bestehen immer genau aus 2 · |w| − 1 Ableitungsschritten.
Beispiel:
G
0= ({A, B, C, D, E, F, G}, {(, ), [, ]}, P, A) mit P = {A → BF | BC | DG | DE | AA,
B → (, C →), D → [, E →], F → AC, G → AE}
Ableitung von ([]([])):
A⇒BF
⇒ (F ⇒ (AC ⇒ (AAC ⇒ (DEAC ⇒ ([EAC
⇒ ([]AC ⇒ ([]BF C ⇒ ([](F C ⇒ ([](ACC ⇒ ([](DECC
⇒ ([]([ECC ⇒ ([]([]CC ⇒ ([]([])C ⇒ ([]([]))
Eigenschaften der Chomsky-Normalform (2)
Der Syntaxbaum dazu:
A B
(
F A
A D
[
E ]
A B
(
F A D
[
E ]
C )
C )
Herstellen der Chomsky-Normalform
Jede CFG (mit ε 6∈ L(G)) kann in Chomsky-Normalform gebracht werden. Das Verfahren geht in mehreren Schritten vor:
1
Entfernen von ε-Produktionen (kennen wir bereits)
2
Entfernen von Einheitsproduktionen (Produktionen A → B)
3
Sharen aller Terminale a in rechten Seiten, die nicht nur aus a bestehen durch neue Produktionen A → a
4
Alle Produktionen A → B
1· · · B
mmit m > 2 in mehrere
zerlegen: A → B
1C
1, C
1→ B
2C
3, . . . , C
m−2→ B
m−1B
mEntfernen von Einheitsproduktionen
Intuitiv ist klar, dass A → B entfernt werden kann:
Wenn erst A → B, dann B → w angewendet wird, kann man auch gleich A → w anwenden.
Algorithmisch zu beachten:
Eliminiere in der richtigen Reihenfolge:
WennA→B undB →C, dann ist Ersetzen von A→B durchA→C nicht zielf¨uhrend.
ZyklenA→B undB→Am¨ussen vorher entfernt werden!
Algorithmus 5: Entfernen von Einheitsproduktionen
Eingabe:Eine CFGG= (V,Σ, P, S) Beginn
Erzeuge ger. GraphD= (V, E), mit(A, B)∈Ef¨ur jede Einheitsp.A→B∈P; solangees einen Zyklus(A1, A2), . . . ,(An−1, An),(An, A1)∈Egibt tue
P :=P\ {A1→A2, . . . , An−1→An, An→An}; /* entferne zykl. Regeln */
P :=P[A1/A2, . . . , A1/An]; /* ersetze alle Vorkommen vonAidurchA1f¨uri= 2, . . . , n*/
V :=V\ {A2, A3, . . . , An}; /* l¨oscheA2, . . . , An*/
S:=S[A1/A2, . . . , A1/An]; /* ersetze Startsymbol durchA1, falls esAi,2≤i≤nwar */
E:=E\ {(A1, A2), . . . ,(An−1, An),(An, A1)}; /* entferne Zyklus aus Graph */
E:=E[A1/A2, . . . , A1/An]; /* ersetzeAidurchA1f¨uri= 2, . . . , nin anderen Kanten */
SortiereDtopologisch und nummeriere die Variablen inV durch (und benenne entsprechend inE, P, Sum), so dass gilt:Ai→Aj implizierti < j;
SeiV ={A1, . . . , Ak};
f¨uri=kbis1tue
wennAi→Aj∈P dann
seienAj→w1, . . . , Aj→wmalle Produktionen mitAjals linker Seite;
P :=P∪ {Ai→w1, . . . , Ai→wm};
P :=P\ {Ai→Aj};
Gib die so entstandene Grammatik alsG0aus;
Korrektheit von Algorithmus 5 (1)
Satz
Algorithmus 5 berechnet bei Eingabe einer CFG G mit ε 6∈ L(G) eine CFG G
0, die keine Einheitsproduktionen hat, sodass gilt L(G) = L(G
0). Wenn G keine ε-Produktionen hat, dann hat auch G
0keine ε-Produktionen.
Beweis: Wir zeigen:
1
Das Entfernen eines Zyklus ver¨ andert die erzeugte Sprache nicht
2
Das Entfernen einer Einheitsproduktion A
i→ A
jin der
r¨ uckw¨ arts-laufenden f¨ ur-Schleife ¨ andert die erzeugte Sprache nicht.
bereits gezeigt, da die Operation
”Inlining von Produktionen“
korrekt.
3
Der Algorithmus terminiert und f¨ uhrt nie Einheits- oder
ε-Produktionen ein.
Korrektheit von Alg. 5: Entfernen von Zyklen ist korrekt
Beweisskizze (ausf¨ uhrlicher Beweis im Skript):
Habe G = (V, Σ, P, S) Zyklus A
1→ A
2, . . . , A
n−1→ A
n, A
n→ A
1Sei G
0= (V
0, Σ, P
0, S
0) die Grammatik nach Entfernen des Zyklus.
Sei σ die Substitution {A
i7→ A
1| i ∈ {2, . . . , n}}.
” L(G) ⊆ L(G
0)“:
Zeige mit Induktion ¨ubern, dass f¨ur allew1, w2∈(Σ∪V)∗ gilt:
Wennw1⇒nG w2, dann σ(w1)⇒∗G0 σ(w2).
” L(G
0) ⊆ L(G)“:
Zeige mit Induktion ¨ubern, dass f¨urw∈(Σ∪V0)∗ undw0∈Σ∗ gilt:
Wennw⇒nG0 w0∈Σ∗. dannw⇒∗G w0.
Korrektheit von Alg. 5: Terminierung
Algorithmus 5 terminiert, denn
Die Solange-Schleife terminiert, da jede Iteration die Anzahl der Zyklen strikt verkleinert.
Die f¨ ur-Schleife terminiert offensichtlich.
Es werden keine Einheitsproduktionen eingef¨ uhrt:
Da die Produktionen topologisch sortiert behandelt werden:
Wenn A
i→ A
jentfernt wird, wurden
vorheralle Einheitsproduktionen A
j→ A
kentfernt. D.h. zu diesem Zeitpunkt gilt: f¨ ur alle Produktionen A
j→ w besteht w nicht nur aus einer Variablen.
Es werden keine ε-Produktionen eingef¨ uhrt:
offensichtlich.
Algorithmus 6: Herstellen der Chomsky-NF
Eingabe:CFGGmitε6∈L(G)
Ausgabe:CFGG0in Chomsky-Normalform mitL(G) =L(G0) Beginn
Entferne dieε-Produktionen inGmit Algorithmus 1 und entferne anschließend die Einheitsproduktionen mit Algorithmus 5;
SeiG0= (V0,Σ, P0, S0)die entstandene Grammatik;
f¨ur allea∈Σtue
/* F¨uhre neue VariableAaf¨uraein, und ersetze Vorkommen vonadurch das Nichtterminal */
G0:= (V0∪{A· a},Σ,{A→w[Aa/a]|A→w∈P0und|w|>1}
∪{A· →w|A∈w∈P0und|w|= 1} ·∪ {Aa→a},S)
/* Nun sind alle Regeln von der FormA→aoderA→B1· · ·Bmmitm≥2 */
f¨ur alleA→B1· · ·Bm∈P0mitm >2tue SeienC1, . . . , Cm−2neue Variablen;
V0:=V0∪{C· 1, . . . , Cm−2};
/* Ersetze inP0die ProduktionA→B1· · ·Bmdurch neue Regeln */
P0:=(P0\ {A→B1· · ·Bm})
∪{A→B1C1} ∪ {Ci→Bi+1Ci+1|f¨uri= 1, . . . , m−3} ∪ {Cm−2→Bm−1Bm};
Theorem
F¨ ur CFGs G mit ε 6∈ L(G) berechnet Algorithmus 6 eine
¨ aquivalente CFG in Chomsky-Normalform.
Beweis:
Die Schritte
” Entferne der ε-Produktionen und Entfernen von Einheitsproduktionen haben wir als korrekt gezeigt.
Die Schritte
” Einf¨ uhren von Produktionen A → a “ und Behandlung von A → B
1· · · B
msind Instanzen der korrekten Operation
” Sharing von Satzformen mit neuen Variablen“
Verifiziere, dass danach alle Produktionen die gew¨ unschte
Form haben.
Beispiel: Chomsky-Normalform berechnen
G
0= ({A, B, C, D, S}, {0, 1}, P
0, S) mit
P
0= {S → 1A, A → AB, A → DA, A → ε,
B → 0, B → 1, C → AAA, D → 1AC}.
Schritt 1: Entfernen der ε-Produktionen
G
0= ({A, B, C, D, S}, {0, 1}, P
0, S) mit
P
0= {S → 1A, A → AB, A → DA, A → ε, B → 0, B → 1, C → AAA, D → 1AC}.
Menge W der Variablen, die ε herleiten: W = {A, C} da A → ε und C → AAA
Starte mit
G
1= ({A, B, C, D, S}, {0, 1}, P
1, S)
P
1= {S → 1A, A → AB, A → DA, B → 0, B → 1, C → AAA, D → 1AC}.
Hinzuf¨ ugen von Produktionen f¨ ur Vorkommen von A und C
P
1= {S → 1A,
S→1, A→ AB,
A→B, A→ DA,
A→D,B → 0, B → 1, C → AAA,
C→AA, C→A,D → 1AC,
D→1A, D→1C, D→1}.Schritt 1: Entfernen der ε-Produktionen
G
0= ({A, B, C, D, S}, {0, 1}, P
0, S) mit
P
0= {S → 1A, A → AB, A → DA, A → ε, B → 0, B → 1, C → AAA, D → 1AC}.
Menge W der Variablen, die ε herleiten:
W = {A, C } da A → ε und C → AAA
Starte mit
G
1= ({A, B, C, D, S}, {0, 1}, P
1, S)
P
1= {S → 1A, A → AB, A → DA, B → 0, B → 1, C → AAA, D → 1AC }.
Hinzuf¨ ugen von Produktionen f¨ ur Vorkommen von A und C
P
1= {S → 1A,
S→1, A→ AB,
A→B, A→ DA,
A→D,B → 0, B → 1, C → AAA,
C→AA, C→A,D → 1AC,
D→1A, D→1C, D→1}.Schritt 1: Entfernen der ε-Produktionen
G
0= ({A, B, C, D, S}, {0, 1}, P
0, S) mit
P
0= {S → 1A, A → AB, A → DA, A → ε, B → 0, B → 1, C → AAA, D → 1AC}.
Menge W der Variablen, die ε herleiten:
W = {A, C } da A → ε und C → AAA Starte mit
G
1= ({A, B, C, D, S}, {0, 1}, P
1, S)
P
1= {S → 1A, A → AB, A → DA, B → 0, B → 1, C → AAA, D → 1AC }.
Hinzuf¨ ugen von Produktionen f¨ ur Vorkommen von A und C
P
1= {S → 1A,
S→1, A→ AB,
A→B, A→ DA,
A→D,B → 0, B → 1, C → AAA,
C→AA, C→A,D → 1AC,
D→1A, D→1C, D→1}.Schritt 1: Entfernen der ε-Produktionen
G
0= ({A, B, C, D, S}, {0, 1}, P
0, S) mit
P
0= {S → 1A, A → AB, A → DA, A → ε, B → 0, B → 1, C → AAA, D → 1AC}.
Menge W der Variablen, die ε herleiten:
W = {A, C } da A → ε und C → AAA Starte mit
G
1= ({A, B, C, D, S}, {0, 1}, P
1, S)
P
1= {S → 1A, A → AB, A → DA, B → 0, B → 1, C → AAA, D → 1AC }.
Hinzuf¨ ugen von Produktionen f¨ ur Vorkommen von A und C
P
1= {S → 1A,
S→1, A→ AB,
A→B, A→ DA,
A→D,B → 0, B → 1, C → AAA,
C→AA, C→A,Schritt 2: Entfernen der Einheitsproduktionen (1)
P
1= {S → 1A, S → 1, A → AB, A → B, A → DA, A → D, B → 0, B → 1 C → AAA, C → AA, C → A,
D → 1AC, D → 1A, D → 1C, D → 1}.
Der gerichtete Graph ist
D
= ({S, A, B, C, D},{(A, B),(A, D),(C, A)}).Es gibt keine Zyklen, wir erhalten P
2=P
1Topologisches Sortieren und Umbenennen der Variablen, sodass
” A
i →A
jimpliziert i < j“ gilt, erfordert eine Umbenennung, welche die Beziehungen
” A < B“,
” A < D“,
” C < A“ erzeugt.
Wir w¨ ahlen Umbenennung ρ mit ρ(C) = A
1, ρ(A) = A
2, ρ(B) = A
3, ρ(D) = A
4, ρ(S) = A
5.
Das liefert uns G
3= ({A1, A
2, A
3, A
4, A
5},Σ, P3, A
5)mit
P
3 ={A5 →1A2, A
5 →1, A2 →A
2A
3, A
2 →A
3, A
2 →A
4A
2,
A
2 →A
4, A
3→0, A3 →1, A1→A
2A
2A
2, A
1 →A
2A
2,
Schritt 2: Entfernen der Einheitsproduktionen (1)
P
1= {S → 1A, S → 1, A → AB, A → B, A → DA, A → D, B → 0, B → 1 C → AAA, C → AA, C → A,
D → 1AC, D → 1A, D → 1C, D → 1}.
Der gerichtete Graph ist
D = ({S, A, B, C, D}, {(A, B), (A, D), (C, A)}).
Es gibt keine Zyklen, wir erhalten P
2=P
1Topologisches Sortieren und Umbenennen der Variablen, sodass
” A
i →A
jimpliziert i < j“ gilt, erfordert eine Umbenennung, welche die Beziehungen
” A < B“,
” A < D“,
” C < A“ erzeugt.
Wir w¨ ahlen Umbenennung ρ mit ρ(C) = A
1, ρ(A) = A
2, ρ(B) = A
3, ρ(D) = A
4, ρ(S) = A
5.
Das liefert uns G
3= ({A1, A
2, A
3, A
4, A
5},Σ, P3, A
5)mit
P
3 ={A5 →1A2, A
5 →1, A2 →A
2A
3, A
2 →A
3, A
2 →A
4A
2,
A
2 →A
4, A
3→0, A3 →1, A1→A
2A
2A
2, A
1 →A
2A
2,
Schritt 2: Entfernen der Einheitsproduktionen (1)
P
1= {S → 1A, S → 1, A → AB, A → B, A → DA, A → D, B → 0, B → 1 C → AAA, C → AA, C → A,
D → 1AC, D → 1A, D → 1C, D → 1}.
Der gerichtete Graph ist
D = ({S, A, B, C, D}, {(A, B), (A, D), (C, A)}).
Es gibt keine Zyklen, wir erhalten P
2= P
1Topologisches Sortieren und Umbenennen der Variablen, sodass
” A
i →A
jimpliziert i < j“ gilt, erfordert eine Umbenennung, welche die Beziehungen
” A < B“,
” A < D“,
” C < A“ erzeugt.
Wir w¨ ahlen Umbenennung ρ mit ρ(C) = A
1, ρ(A) = A
2, ρ(B) = A
3, ρ(D) = A
4, ρ(S) = A
5.
Das liefert uns G
3= ({A1, A
2, A
3, A
4, A
5},Σ, P3, A
5)mit
P
3 ={A5 →1A2, A
5 →1, A2 →A
2A
3, A
2 →A
3, A
2 →A
4A
2,
A
2 →A
4, A
3→0, A3 →1, A1→A
2A
2A
2, A
1 →A
2A
2,
Schritt 2: Entfernen der Einheitsproduktionen (1)
P
1= {S → 1A, S → 1, A → AB, A → B, A → DA, A → D, B → 0, B → 1 C → AAA, C → AA, C → A,
D → 1AC, D → 1A, D → 1C, D → 1}.
Der gerichtete Graph ist
D = ({S, A, B, C, D}, {(A, B), (A, D), (C, A)}).
Es gibt keine Zyklen, wir erhalten P
2= P
1Topologisches Sortieren und Umbenennen der Variablen, sodass
” A
i→ A
jimpliziert i < j“ gilt, erfordert eine Umbenennung, welche die Beziehungen
” A < B“,
” A < D“,
” C < A“ erzeugt.
Wir w¨ ahlen Umbenennung ρ mit ρ(C) = A
1, ρ(A) = A
2, ρ(B) = A
3, ρ(D) = A
4, ρ(S) = A
5.
Das liefert uns G
3= ({A1, A
2, A
3, A
4, A
5},Σ, P3, A
5)mit
P
3 ={A5 →1A2, A
5 →1, A2 →A
2A
3, A
2 →A
3, A
2 →A
4A
2,
A
2 →A
4, A
3→0, A3 →1, A1→A
2A
2A
2, A
1 →A
2A
2,
Schritt 2: Entfernen der Einheitsproduktionen (1)
P
1= {S → 1A, S → 1, A → AB, A → B, A → DA, A → D, B → 0, B → 1 C → AAA, C → AA, C → A,
D → 1AC, D → 1A, D → 1C, D → 1}.
Der gerichtete Graph ist
D = ({S, A, B, C, D}, {(A, B), (A, D), (C, A)}).
Es gibt keine Zyklen, wir erhalten P
2= P
1Topologisches Sortieren und Umbenennen der Variablen, sodass
” A
i→ A
jimpliziert i < j“ gilt, erfordert eine Umbenennung, welche die Beziehungen
” A < B“,
” A < D“,
” C < A“ erzeugt.
Wir w¨ ahlen Umbenennung ρ mit ρ(C) = A
1, ρ(A) = A
2, ρ(B) = A
3, ρ(D) = A
4, ρ(S) = A
5.
Das liefert uns G
3= ({A1, A
2, A
3, A
4, A
5},Σ, P3, A
5)mit
P
3 ={A5 →1A2, A
5 →1, A2 →A
2A
3, A
2 →A
3, A
2 →A
4A
2,
A
2 →A
4, A
3→0, A3 →1, A1→A
2A
2A
2, A
1 →A
2A
2,
Schritt 2: Entfernen der Einheitsproduktionen (1)
P
1= {S → 1A, S → 1, A → AB, A → B, A → DA, A → D, B → 0, B → 1 C → AAA, C → AA, C → A,
D → 1AC, D → 1A, D → 1C, D → 1}.
Der gerichtete Graph ist
D = ({S, A, B, C, D}, {(A, B), (A, D), (C, A)}).
Es gibt keine Zyklen, wir erhalten P
2= P
1Topologisches Sortieren und Umbenennen der Variablen, sodass
” A
i→ A
jimpliziert i < j“ gilt, erfordert eine Umbenennung, welche die Beziehungen
” A < B“,
” A < D“,
” C < A“ erzeugt.
Wir w¨ ahlen Umbenennung ρ mit ρ(C) = A
1, ρ(A) = A
2, ρ(B) = A
3, ρ(D) = A
4, ρ(S) = A
5.
Das liefert uns G
3= ({A
1, A
2, A
3, A
4, A
5}, Σ, P
3, A
5) mit
P
3= {A
5→ 1A
2, A
5→ 1, A
2→ A
2A
3, A
2→ A
3, A
2→ A
4A
2,
A
2→ A
4, A
3→ 0, A
3→ 1, A
1→ A
2A
2A
2, A
1→ A
2A
2,
Schritt 2: Entfernen der Einheitsproduktionen (2)
P
3= {A
5→ 1A
2, A
5→ 1, A
2→ A
2A
3, A
2→ A
3, A
2→ A
4A
2, A
2→ A
4, A
3→ 0, A
3→ 1, A
1→ A
2A
2A
2, A
1→ A
2A
2, A
1→ A
2, A
4→ 1A
2A
1, A
4→ 1A
2, A
4→ 1A
1, A
4→ 1}.
Nun l¨ auft die F¨ ur-Schleife f¨ ur i von 5 bis 1:
F¨uri= 5, i= 4, i= 3gibt es jeweils keine Produktion der FormAi→Aj. F¨uri= 2 wirdA2→A3ersetzt durchA2→0, A2→1, und es wird A2→A4 ersetzt durchA2→1A2A1, A2→1A2, A2→1A1 und A2→1. Danach ist
P4={A5→1A2, A5→1, A2→A2A3, A2→0, A2→1, A2→A4A2, A2→1A2A1, A2→1A2, A2→1A1, A3→0, A3→1,
A1→A2A2A2, A1→A2A2, A1→A2, A4→1A2A1, A4→1A2, A4→1A1, A4→1}.
F¨uri= 1 wirdA1→A2ersetzt durchA1→A2A3, A1→0,A1→1, A1→A4A2,A1→1A2A1,A1→1A2 undA1→1A1.
Schritt 2: Entfernen der Einheitsproduktionen (2)
P
3= {A
5→ 1A
2, A
5→ 1, A
2→ A
2A
3, A
2→ A
3, A
2→ A
4A
2, A
2→ A
4, A
3→ 0, A
3→ 1, A
1→ A
2A
2A
2, A
1→ A
2A
2, A
1→ A
2, A
4→ 1A
2A
1, A
4→ 1A
2, A
4→ 1A
1, A
4→ 1}.
Nun l¨ auft die F¨ ur-Schleife f¨ ur i von 5 bis 1:
F¨uri= 5, i= 4, i= 3gibt es jeweils keine Produktion der FormAi→Aj. F¨uri= 2 wirdA2→A3ersetzt durchA2→0, A2→1, und es wird A2→A4 ersetzt durchA2→1A2A1, A2→1A2, A2→1A1 und A2→1. Danach ist
P4={A5→1A2, A5→1, A2→A2A3, A2→0, A2→1, A2→A4A2, A2→1A2A1, A2→1A2, A2→1A1, A3→0, A3→1,
A1→A2A2A2, A1→A2A2, A1→A2, A4→1A2A1, A4→1A2, A4→1A1, A4→1}.
F¨uri= 1 wirdA1→A2ersetzt durchA1→A2A3, A1→0,A1→1, A1→A4A2,A1→1A2A1,A1→1A2 undA1→1A1.
Schritt 2: Entfernen der Einheitsproduktionen (2)
P
3= {A
5→ 1A
2, A
5→ 1, A
2→ A
2A
3, A
2→ A
3, A
2→ A
4A
2, A
2→ A
4, A
3→ 0, A
3→ 1, A
1→ A
2A
2A
2, A
1→ A
2A
2, A
1→ A
2, A
4→ 1A
2A
1, A
4→ 1A
2, A
4→ 1A
1, A
4→ 1}.
Nun l¨ auft die F¨ ur-Schleife f¨ ur i von 5 bis 1:
F¨uri= 5, i= 4, i= 3gibt es jeweils keine Produktion der FormAi→Aj. F¨uri= 2 wirdA2→A3ersetzt durchA2→0, A2→1, und es wird A2→A4 ersetzt durchA2→1A2A1, A2→1A2, A2→1A1 und A2→1. Danach ist
P4={A5→1A2, A5→1, A2→A2A3, A2→0, A2→1, A2→A4A2, A2→1A2A1, A2→1A2, A2→1A1, A3→0, A3→1,
A1→A2A2A2, A1→A2A2, A1→A2, A4→1A2A1, A4→1A2, A4→1A1, A4→1}.
F¨uri= 1 wirdA1→A2ersetzt durchA1→A2A3, A1→0,A1→1, A1→A4A2,A1→1A2A1,A1→1A2 undA1→1A1.
Schritt 2: Entfernen der Einheitsproduktionen (2)
P
3= {A
5→ 1A
2, A
5→ 1, A
2→ A
2A
3, A
2→ A
3, A
2→ A
4A
2, A
2→ A
4, A
3→ 0, A
3→ 1, A
1→ A
2A
2A
2, A
1→ A
2A
2, A
1→ A
2, A
4→ 1A
2A
1, A
4→ 1A
2, A
4→ 1A
1, A
4→ 1}.
Nun l¨ auft die F¨ ur-Schleife f¨ ur i von 5 bis 1:
F¨uri= 5, i= 4, i= 3gibt es jeweils keine Produktion der FormAi→Aj. F¨uri= 2 wirdA2→A3ersetzt durchA2→0, A2→1, und es wird A2→A4 ersetzt durchA2→1A2A1, A2→1A2, A2→1A1 und A2→1. Danach ist
P4={A5→1A2, A5→1, A2→A2A3, A2→0, A2→1, A2→A4A2, A2→1A2A1, A2→1A2, A2→1A1, A3→0, A3→1,
A1→A2A2A2, A1→A2A2, A1→A2, A4→1A2A1, A4→1A2, A4→1A1, A4→1}.
F¨uri= 1 wirdA1→A2ersetzt durchA1→A2A3, A1→0,A1→1, A1→A4A2,A1→1A2A1,A1→1A2 undA1→1A1.
Schritt 2: Entfernen der Einheitsproduktionen (3)
Daher ist die Grammatik nach Entfernen der Einheitsproduktionen:
G
5= (V
5, Σ, P
5, A
5) mit V
5= {A
1, A
2, A
3, A
4, A
5} und P
5= {A
5→ 1A
2, A
5→ 1, A
2→ A
2A
3, A
2→ 0, A
2→ 1,
A
2→ A
4A
2, A
2→ 1A
2A
1, A
2→ 1A
2, A
2→ 1A
1, A
3→ 0,
A
3→ 1, A
1→ A
2A
2A
2, A
1→ A
2A
2, A
1→ A
2A
3, A
1→ 0,
A
1→ 1, A
1→ A
4A
2, A
1→ 1A
2A
1, A
1→ 1A
2, A
1→ 1A
1,
A
4→ 1A
2A
1, A
4→ 1A
2, A
4→ 1A
1, A
4→ 1}.
Schritt 3: Terminalsymbole durch neue Produktionen darstellen
F¨ uge B
0→ 0 und B
1→ 1 hinzu und ersetze in rechten Seiten mit Wortl¨ ange > 1:
P
6= {B
0→ 0, B
1→ 1, A
5→ B
1A
2, A
5→ 1, A
2→ A
2A
3, A
2→ 0, A
2→ 1, A
2→ A
4A
2, A
2→ B
1A
2A
1, A
2→ B
1A
2,
A
2→ B
1A
1, A
3→ 0, A
3→ 1, A
1→ A
2A
2A
2, A
1→ A
2A
2, A
1→ A
2A
3, A
1→ 0, A
1→ 1, A
1→ A
4A
2, A
1→ B
1A
2A
1, A
1→ B
1A
2, A
1→ B
1A
1, A
4→ B
1A
2A
1,
A
4→ B
1A
2, A
4→ B
1A
1, A
4→ 1}.
Schritt 4: Rechte Seiten zerlegen
Zerlege rechte Seiten mit Wortl¨ ange > 2:
Ergibt G
7= (V
7, Σ, P
7, A
5), wobei
V
7= {A
1, A
2, A
3, A
4, A
5, B
0, B
1, C
1, C
2, C
3, C
4}
P
7= {B
0→ 0, B
1→ 1, A
5→ B
1A
2, A
5→ 1, A
2→ A
2A
3, A
2→ 0, A
2→ 1, A
2→ A
4A
2, A
2→ B
1C
1C
1→ A
2A
1,
A
2→ B
1A
2, A
2→ B
1A
1, A
3→ 0, A
3→ 1, A
1→ A
2C
2, C
2→ A
2A
2, A
1→ A
2A
2, A
1→ A
2A
3, A
1→ 0, A
1→ 1, A
1→ A
4A
2, A
1→ B
1C
3, C
4→ A
2A
1, A
1→ B
1A
2, A
1→ B
1A
1, A
4→ B
1C
4, C
4→ A
2A
1, A
4→ B
1A
2, A
4→ B
1A
1, A
4→ 1}.
Alle Schritte beendet, G
7ist in Chomsky-Normalform
Greibach-Normalform
Definition (Greibach-Normalform)
Ein CFG G = (V, Σ, P, S) mit ε 6∈ L(G) ist in
Greibach-Normalform, falls alle Produktionen in
P von der Form A → aB
1B
2. . . B
jmit j ≥ 0, A, B
1, . . . , B
j∈ V und a ∈ Σ sind.
Bemerkungen:
benannt nach Sheila A. Greibach
Regul¨ are Grammatiken sind Spezialfall der Greibach-NF:
Dort ist nur j = 0 oder j = 1 erlaubt.
Algorithmus 7: Herstellen der Greibach-Normalform
Eingabe:CFGG= ({A1, . . . , An},Σ, P, Ai)in Chomsky-NF mitε6∈L(G) Ausgabe:CFGG0in Greibach-Normalform mitL(G) =L(G0)
Beginn
f¨uri= 1bisntue f¨urj= 1bisi−1tue
f¨ur alleAi→Aju∈P tue
SeienAj→w1| · · · |wmalle Regeln inP mitAj als linker Seite;
ErsetzeAi→AjudurchAi→w1u| . . .|wmuinP;
wennAi→Aiu∈P dann
Eliminiere die Regel mit der Operation
”Elimination der Links-Rekursion“;
SeiBidie dabei neu erzeugte Variable;
f¨uri=n−1bis1tue
f¨ur alleAi→Aju∈P,j > itue
SeienAj→w1| · · · |wmalle Regeln mitAjals linker Seite;
ErsetzeAi→AjudurchAi→w1u| · · · |wmuinP;
f¨uri= 1bisntue
f¨ur alleBi→Aju∈P tue
SeienAj→w1| · · · |wmalle Regeln mitAjals linker Seite;
Ziel der geschachtelten F¨ur-Schleife: Es gibtAi→Ajunur f¨urj > i Ersetzen der RegelnAi→Ajumiti > j
Ersetzen der RegelnAi→Aiu
Nun gilt f¨urAi→Ajustetsj > i.
Damit gilt f¨urAn→u:ubeginnt mit Zeichen ausΣ. N¨achste Schleife: Ersetze alleAi→Ajumitj > i
w1, . . . , wm fangen mit Zeichen aus Σ an, da Schleife absteigend l¨auft! Behandle die neuen Regeln mit
Bials linker Seite.
Algorithmus 7: Herstellen der Greibach-Normalform
Eingabe:CFGG= ({A1, . . . , An},Σ, P, Ai)in Chomsky-NF mitε6∈L(G) Ausgabe:CFGG0in Greibach-Normalform mitL(G) =L(G0)
Beginn
f¨uri= 1bisntue f¨urj= 1bisi−1tue
f¨ur alleAi→Aju∈P tue
SeienAj→w1| · · · |wmalle Regeln inP mitAj als linker Seite;
ErsetzeAi→AjudurchAi→w1u| . . .|wmuinP;
wennAi→Aiu∈P dann
Eliminiere die Regel mit der Operation
”Elimination der Links-Rekursion“;
SeiBidie dabei neu erzeugte Variable;
f¨uri=n−1bis1tue
f¨ur alleAi→Aju∈P,j > itue
SeienAj→w1| · · · |wmalle Regeln mitAjals linker Seite;
ErsetzeAi→AjudurchAi→w1u| · · · |wmuinP;
f¨uri= 1bisntue
f¨ur alleBi→Aju∈P tue
SeienAj→w1| · · · |wmalle Regeln mitAjals linker Seite;
Ziel der geschachtelten F¨ur-Schleife: Es gibtAi→Ajunur f¨urj > i
Ersetzen der RegelnAi→Ajumiti > j
Ersetzen der RegelnAi→Aiu
Nun gilt f¨urAi→Ajustetsj > i.
Damit gilt f¨urAn→u:ubeginnt mit Zeichen ausΣ. N¨achste Schleife: Ersetze alleAi→Ajumitj > i
w1, . . . , wm fangen mit Zeichen aus Σ an, da Schleife absteigend l¨auft! Behandle die neuen Regeln mit
Bials linker Seite.