• Keine Ergebnisse gefunden

KontextfreieSprachen:TeilI FormaleSprachenundKomplexit¨at

N/A
N/A
Protected

Academic year: 2021

Aktie "KontextfreieSprachen:TeilI FormaleSprachenundKomplexit¨at"

Copied!
86
0
0

Wird geladen.... (Jetzt Volltext ansehen)

Volltext

(1)

Formale Sprachen und Komplexit¨ at

Sommersemester 2019

Kontextfreie Sprachen: Teil I

Prof. Dr. David Sabel

LFE Theoretische Informatik

(2)

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

ur allei0:uviwxiyL.

Abschlusseigenschaften kontextfreier Sprachen

(3)

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.

(4)

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

j

b

j

| j ∈

N

} ist kontextfrei: Produktionen

{S → ε | T, T → aT b | ab} mit S als Startsymbol erzeugen L

(5)

Einfache Operationen auf CFGs

Wir definieren Operationen auf CFGs, die die erzeugte Sprache unver¨ andert lassen

Die Operationen werden sp¨ ater (als Hilfsmittel)

wiederverwendet.

(6)

Inlining von Produktionen

Lemma (Inlining von Produktionen) Sei G = (V, Σ, P, S) eine CFG und

A

→ uB v ∈ P ,

B

w1

| . . . |

wn

alle Regeln mit

B

als linker Seite

und sei G

0

= (V, Σ, P \ {A → uBv} ∪ {A → uw

1

v | . . . | uw

n

v}, S ).

Dann erzeugen G und G

0

dieselbe Sprache, d. h. L(G) = L(G

0

).

Beweis: Das folgt, indem die Syntaxb¨ aume zur Ableitung mit G bzw. G

0

modfiziert werden:

tausche alle Baumabschnitte

A

u B

w

i

v

durch

A

u w

i

v

(im Syntaxbaum mit G) (im Syntaxbaum mit G

0

)

(7)

Inlining von Produktionen

Lemma (Inlining von Produktionen) Sei G = (V, Σ, P, S) eine CFG und

A

→ uB v ∈ P ,

B

w1

| . . . |

wn

alle Regeln mit

B

als linker Seite

und sei G

0

= (V, Σ, P \ {A → uBv} ∪ {A → uw

1

v | . . . | uw

n

v}, S ).

Dann erzeugen G und G

0

dieselbe Sprache, d. h. L(G) = L(G

0

).

Beweis: Das folgt, indem die Syntaxb¨ aume zur Ableitung mit G bzw. G

0

modfiziert werden:

tausche alle Baumabschnitte

A

u B

w

i

v

durch

A

u w

i

v

(8)

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

, . . . ,

Bn

neue 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 ⇒

G

w Ableitung S ⇒

G0

w

0

: ¨ Ubersetze jeden Schritt uAv ⇒

G

uw

1· · ·wn

v in uAv ⇒

G0

uB

1· · ·Bn

v ⇒

nG0

uw

1· · ·wn

v.

“⊇”: Betrachte den Syntaxbaum f¨ ur S ⇒

G0

w.

Identifiziere die Anwendungen der Regeln

A

B1· · ·Bn

,

Bi

wi

, und

modifziere Syntaxbaum durch Anwendung der Regel

A

w1· · ·wn

.

Lese Ableitung S ⇒

G

w ab.

(9)

Elimination der Links-Rekursion (1)

Definition (links- bzw. rechts-rekursive Produktion

Eine Produktion nennt man

links-rekursiv, wenn sie von der Form A

Au

ist, und

rechts-rekursiv, wenn sie von der Form A

→ uA

ist, wobei in beiden F¨ allen u eine Satzform ist.

(10)

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

00

sind alle Produktionen in P mit A als linker Seite und die Satzformen w

1

, . . . , w

m

beginnen 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

1

B | · · · | w

m

B | w

1

| · · · | w

m

,

B → u

1

| . . . | u

n

| u

1

B | . . . | u

n

B}

Beweis: Ausf¨ uhrlicher Beweis im Skript Wesentliche Idee:

Ersetze Linksableitungsschritte mit G: x

1

Ax

2

G

x

1

w

r

u

f(1)

· · · u

f(k)

x

2

durch Rechtsableitungsschritte mit G

0

: x

1

Ax

2

G0

x

1

w

r

u

f(1)

· · · u

f(k)

x

2

(11)

Normalformen

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-Normalform

Greibach-Normalform

(12)

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=BC

mit B, C ∈ V .

Beispiel:

Die CFG G = ({A}, {(, ), [, ]}, {A → (A) | () | [A] | [] | A A}, A) ist

nicht

in 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).

(13)

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=BC

mit B, C ∈ V . Beispiel:

Die CFG G = ({A}, {(, ), [, ]}, {A → (A) | () | [A] | [] | A A}, A) ist

nicht

in 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).

(14)

Eigenschaften der Chomsky-Normalform

Sei G eine CFG in Chomsky-Normalform, dann gilt:

Syntaxb¨ aume zu Ableitungen mit G sind immer

Bin¨arb¨aume

Ableitungen 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 ⇒ ([]([]))

(15)

Eigenschaften der Chomsky-Normalform (2)

Der Syntaxbaum dazu:

A B

(

F A

A D

[

E ]

A B

(

F A D

[

E ]

C )

C )

(16)

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

m

mit m > 2 in mehrere

zerlegen: A → B

1

C

1

, C

1

→ B

2

C

3

, . . . , C

m−2

→ B

m−1

B

m

(17)

Entfernen 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!

(18)

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 vonAidurchA1uri= 2, . . . , n*/

V :=V\ {A2, A3, . . . , An}; /* l¨oscheA2, . . . , An*/

S:=S[A1/A2, . . . , A1/An]; /* ersetze Startsymbol durchA1, falls esAi,2inwar */

E:=E\ {(A1, A2), . . . ,(An−1, An),(An, A1)}; /* entferne Zyklus aus Graph */

E:=E[A1/A2, . . . , A1/An]; /* ersetzeAidurchA1uri= 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;

(19)

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

0

keine ε-Produktionen.

Beweis: Wir zeigen:

1

Das Entfernen eines Zyklus ver¨ andert die erzeugte Sprache nicht

2

Das Entfernen einer Einheitsproduktion A

i

→ A

j

in 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.

(20)

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

1

Sei G

0

= (V

0

, Σ, P

0

, S

0

) die Grammatik nach Entfernen des Zyklus.

Sei σ die Substitution {A

i

7→ A

1

| i ∈ {2, . . . , n}}.

” L(G) ⊆ L(G

0

)“:

Zeige mit Induktion ¨ubern, dass f¨ur allew1, w2∈(Σ∪V) gilt:

Wennw1nG 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.

(21)

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

j

entfernt wird, wurden

vorher

alle Einheitsproduktionen A

j

→ A

k

entfernt. 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.

(22)

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 VariableAauraein, 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 FormAaoderAB1· · ·Bmmitm2 */

f¨ur alleA→B1· · ·Bm∈P0mitm >2tue SeienC1, . . . , Cm−2neue Variablen;

V0:=V0∪{C· 1, . . . , Cm−2};

/* Ersetze inP0die ProduktionAB1· · ·Bmdurch neue Regeln */

P0:=(P0\ {A→B1· · ·Bm})

∪{A→B1C1} ∪ {Ci→Bi+1Ci+1|f¨uri= 1, . . . , m−3} ∪ {Cm−2→Bm−1Bm};

(23)

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

m

sind Instanzen der korrekten Operation

” Sharing von Satzformen mit neuen Variablen“

Verifiziere, dass danach alle Produktionen die gew¨ unschte

Form haben.

(24)

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}.

(25)

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}.

(26)

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}.

(27)

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}.

(28)

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,

(29)

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

1

Topologisches Sortieren und Umbenennen der Variablen, sodass

” A

i

A

j

impliziert 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

2

A

3

, A

2

A

3

, A

2

A

4

A

2

,

A

2

A

4

, A

3→0, A3 →1, A1

A

2

A

2

A

2

, A

1

A

2

A

2

,

(30)

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

1

Topologisches Sortieren und Umbenennen der Variablen, sodass

” A

i

A

j

impliziert 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

2

A

3

, A

2

A

3

, A

2

A

4

A

2

,

A

2

A

4

, A

3→0, A3 →1, A1

A

2

A

2

A

2

, A

1

A

2

A

2

,

(31)

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

1

Topologisches Sortieren und Umbenennen der Variablen, sodass

” A

i

A

j

impliziert 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

2

A

3

, A

2

A

3

, A

2

A

4

A

2

,

A

2

A

4

, A

3→0, A3 →1, A1

A

2

A

2

A

2

, A

1

A

2

A

2

,

(32)

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

1

Topologisches Sortieren und Umbenennen der Variablen, sodass

” A

i

→ A

j

impliziert 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

2

A

3

, A

2

A

3

, A

2

A

4

A

2

,

A

2

A

4

, A

3→0, A3 →1, A1

A

2

A

2

A

2

, A

1

A

2

A

2

,

(33)

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

1

Topologisches Sortieren und Umbenennen der Variablen, sodass

” A

i

→ A

j

impliziert 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

2

A

3

, A

2

A

3

, A

2

A

4

A

2

,

A

2

A

4

, A

3→0, A3 →1, A1

A

2

A

2

A

2

, A

1

A

2

A

2

,

(34)

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

1

Topologisches Sortieren und Umbenennen der Variablen, sodass

” A

i

→ A

j

impliziert 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

2

A

3

, A

2

→ A

3

, A

2

→ A

4

A

2

,

A

2

→ A

4

, A

3

→ 0, A

3

→ 1, A

1

→ A

2

A

2

A

2

, A

1

→ A

2

A

2

,

(35)

Schritt 2: Entfernen der Einheitsproduktionen (2)

P

3

= {A

5

→ 1A

2

, A

5

→ 1, A

2

→ A

2

A

3

, A

2

→ A

3

, A

2

→ A

4

A

2

, A

2

→ A

4

, A

3

→ 0, A

3

→ 1, A

1

→ A

2

A

2

A

2

, A

1

→ A

2

A

2

, A

1

→ A

2

, A

4

→ 1A

2

A

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.

(36)

Schritt 2: Entfernen der Einheitsproduktionen (2)

P

3

= {A

5

→ 1A

2

, A

5

→ 1, A

2

→ A

2

A

3

, A

2

→ A

3

, A

2

→ A

4

A

2

, A

2

→ A

4

, A

3

→ 0, A

3

→ 1, A

1

→ A

2

A

2

A

2

, A

1

→ A

2

A

2

, A

1

→ A

2

, A

4

→ 1A

2

A

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.

(37)

Schritt 2: Entfernen der Einheitsproduktionen (2)

P

3

= {A

5

→ 1A

2

, A

5

→ 1, A

2

→ A

2

A

3

, A

2

→ A

3

, A

2

→ A

4

A

2

, A

2

→ A

4

, A

3

→ 0, A

3

→ 1, A

1

→ A

2

A

2

A

2

, A

1

→ A

2

A

2

, A

1

→ A

2

, A

4

→ 1A

2

A

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.

(38)

Schritt 2: Entfernen der Einheitsproduktionen (2)

P

3

= {A

5

→ 1A

2

, A

5

→ 1, A

2

→ A

2

A

3

, A

2

→ A

3

, A

2

→ A

4

A

2

, A

2

→ A

4

, A

3

→ 0, A

3

→ 1, A

1

→ A

2

A

2

A

2

, A

1

→ A

2

A

2

, A

1

→ A

2

, A

4

→ 1A

2

A

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.

(39)

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

2

A

3

, A

2

→ 0, A

2

→ 1,

A

2

→ A

4

A

2

, A

2

→ 1A

2

A

1

, A

2

→ 1A

2

, A

2

→ 1A

1

, A

3

→ 0,

A

3

→ 1, A

1

→ A

2

A

2

A

2

, A

1

→ A

2

A

2

, A

1

→ A

2

A

3

, A

1

→ 0,

A

1

→ 1, A

1

→ A

4

A

2

, A

1

→ 1A

2

A

1

, A

1

→ 1A

2

, A

1

→ 1A

1

,

A

4

→ 1A

2

A

1

, A

4

→ 1A

2

, A

4

→ 1A

1

, A

4

→ 1}.

(40)

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

1

A

2

, A

5

→ 1, A

2

→ A

2

A

3

, A

2

→ 0, A

2

→ 1, A

2

→ A

4

A

2

, A

2

→ B

1

A

2

A

1

, A

2

→ B

1

A

2

,

A

2

→ B

1

A

1

, A

3

→ 0, A

3

→ 1, A

1

→ A

2

A

2

A

2

, A

1

→ A

2

A

2

, A

1

→ A

2

A

3

, A

1

→ 0, A

1

→ 1, A

1

→ A

4

A

2

, A

1

→ B

1

A

2

A

1

, A

1

→ B

1

A

2

, A

1

→ B

1

A

1

, A

4

→ B

1

A

2

A

1

,

A

4

→ B

1

A

2

, A

4

→ B

1

A

1

, A

4

→ 1}.

(41)

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

1

A

2

, A

5

→ 1, A

2

→ A

2

A

3

, A

2

→ 0, A

2

→ 1, A

2

→ A

4

A

2

, A

2

→ B

1

C

1

C

1

→ A

2

A

1

,

A

2

→ B

1

A

2

, A

2

→ B

1

A

1

, A

3

→ 0, A

3

→ 1, A

1

→ A

2

C

2

, C

2

→ A

2

A

2

, A

1

→ A

2

A

2

, A

1

→ A

2

A

3

, A

1

→ 0, A

1

→ 1, A

1

→ A

4

A

2

, A

1

→ B

1

C

3

, C

4

→ A

2

A

1

, A

1

→ B

1

A

2

, A

1

→ B

1

A

1

, A

4

→ B

1

C

4

, C

4

→ A

2

A

1

, A

4

→ B

1

A

2

, A

4

→ B

1

A

1

, A

4

→ 1}.

Alle Schritte beendet, G

7

ist in Chomsky-Normalform

(42)

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

1

B

2

. . . B

j

mit 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.

(43)

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

uri= 1bisntue urj= 1bisi1tue

ur alleAiAjuP tue

SeienAjw1| · · · |wmalle Regeln inP mitAj als linker Seite;

ErsetzeAiAjudurchAiw1u| . . .|wmuinP;

wennAiAiuP dann

Eliminiere die Regel mit der Operation

Elimination der Links-Rekursion“;

SeiBidie dabei neu erzeugte Variable;

uri=n1bis1tue

ur alleAiAjuP,j > itue

SeienAjw1| · · · |wmalle Regeln mitAjals linker Seite;

ErsetzeAiAjudurchAiw1u| · · · |wmuinP;

uri= 1bisntue

ur alleBiAjuP tue

SeienAjw1| · · · |wmalle Regeln mitAjals linker Seite;

Ziel der geschachtelten F¨ur-Schleife: Es gibtAiAjunur f¨urj > i Ersetzen der RegelnAiAjumiti > j

Ersetzen der RegelnAiAiu

Nun gilt f¨urAiAjustetsj > i.

Damit gilt f¨urAnu:ubeginnt mit Zeichen ausΣ. achste Schleife: Ersetze alleAiAjumitj > i

w1, . . . , wm fangen mit Zeichen aus Σ an, da Schleife absteigend l¨auft! Behandle die neuen Regeln mit

Bials linker Seite.

(44)

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

uri= 1bisntue urj= 1bisi1tue

ur alleAiAjuP tue

SeienAjw1| · · · |wmalle Regeln inP mitAj als linker Seite;

ErsetzeAiAjudurchAiw1u| . . .|wmuinP;

wennAiAiuP dann

Eliminiere die Regel mit der Operation

Elimination der Links-Rekursion“;

SeiBidie dabei neu erzeugte Variable;

uri=n1bis1tue

ur alleAiAjuP,j > itue

SeienAjw1| · · · |wmalle Regeln mitAjals linker Seite;

ErsetzeAiAjudurchAiw1u| · · · |wmuinP;

uri= 1bisntue

ur alleBiAjuP tue

SeienAjw1| · · · |wmalle Regeln mitAjals linker Seite;

Ziel der geschachtelten F¨ur-Schleife: Es gibtAiAjunur f¨urj > i

Ersetzen der RegelnAiAjumiti > j

Ersetzen der RegelnAiAiu

Nun gilt f¨urAiAjustetsj > i.

Damit gilt f¨urAnu:ubeginnt mit Zeichen ausΣ. achste Schleife: Ersetze alleAiAjumitj > i

w1, . . . , wm fangen mit Zeichen aus Σ an, da Schleife absteigend l¨auft! Behandle die neuen Regeln mit

Bials linker Seite.

Referenzen

ÄHNLICHE DOKUMENTE

Die Folge konvergiert rasch (genauer gesagt: quadratisch) gegen √ c und wird beispielsweise von Taschenrechnern verwendet, um Wurzeln zu ziehen.. Aufgabe

Fertigen Sie eine Skizze der jeweiligen Funktionsgraphen an.. Untersuchen Sie die Funktionen auf Monotonie

Fachbereich Mathematik Prof.. S¨ oren

Weisen Sie zun¨achst nach, dass die Folge durch √ c beschr¨ankt ist (gilt das f¨ ur alle Folgeglieder?), und zeigen Sie hiermit die Konvergenz der Folge.. Anmerkung:

L¨osungsskizzen zu den Gruppen- und Haus¨ ubungen finden Sie auf der Kursseite sowie in zwei Ordnern (einer davon entleihbar) im Lernzentrum f¨ ur Mathematik (LZM), Raum S2

Die L¨osungen haben alle den gleichen Betrag und liegen daher auf

Ihnen ist außerdem bewusst, dass ihre Nichterf¨ ullung zur Ung¨ ultigkeit der Pr¨ ufung f¨ uhren kann (§39 Abs. 2 Satz 4 AllgStuPO);.. • Ihnen bekannt ist, dass die Teilnahme an

Ihnen ist außerdem bewusst, dass ihre Nichterf¨ ullung zur Ung¨ ultigkeit der Pr¨ ufung f¨ uhren kann (§39 Abs. 2 Satz 4 AllgStuPO);.. • Ihnen bekannt ist, dass die Teilnahme an