Teil 4: Grammatiken und Syntaxanalyse

Werbung
Teil 4: Grammatiken und
Syntaxanalyse
(Kapitel T5-T7)
Grammatiken und die ChomskyHierarchie [T5.1]
Ziel: Regelsysteme zur Erzeugung von
Sprachen.
Beispiel: arithmetische Ausdrücke können
definiert werden durch
• a (Variable), a+a, a·a sind arithmet. Ausdr.
• Wenn A und B arithm. Ausdr. sind, dann
auch (A)+(B) und (A)·(B).
Grammatik: formalere Beschreibung solcher
Regeln.
449
Bestandteile einer Grammatik
• T (oder Σ): endliche Menge von
Terminalzeichen (das Alphabet der
erzeugten Sprache)
• V : endliche Menge von Variablen (T ∩V=∅)
• S∈V : Startsymbol
• P : endliche Menge von Ableitungsregeln/
Produktionen
Paare (l,r) mit l∈(V ∪T )+, r∈(V ∪T )*
(Schreibweise: l→r)
Variante: l∈V +
450
Beispiel: arithmetische Ausdrücke
V={S}
T={(,),a,+,·}
P = {S→(S)+(S),
S→a,
S→(S)·(S),
S→ a+a,
S→a·a}
Herleitung eines Wortes:
S → (S)+(S) → (S)+((S)·(S)) → (a·a)+((S)·(S))
→ (a·a)+((a)·(S)) → (a·a)+((a)·(a+a))
451
Notation
• w→z ⇔ z lässt sich durch Anwendung einer
Ableitungsregel (l,r) aus w herleiten,
d.h., es gibt in w ein Teilwort l, so dass nach
Ersetzen von l durch r das Wort z entsteht.
* ⇔ w→w1→w2→w3→…→wn→z,
• w→z
d.h., z kann aus w in endlich vielen Schritten
hergeleitet werden.
• L(G): Die von der Grammatik G erzeugte
Sprache, also die Menge der Wörter w∈T *
*
mit S→w.
452
Notation
Variablen: Großbuchstaben.
Terminale: meistens Kleinbuchstaben a,b,c,...
oder Ziffern, manchmal auch Sonderzeichen
oder Klammern.
Wörter aus (V ∪T )*: Kleinbuchstaben u,v, ...
oder griechische Kleinbuchstaben.
453
Weiteres Beispiel
L = { w | w∈{a,b,c}* und w enthält gleich viele
a´s, b´s und c´s }
Angabe einer Grammatik:
V = {S,A,B,C,R}, T = {a,b,c},
P = {S→R,
S→ε,
R→RABC, R→ABC
AB→BA,
BA→AB,
AC→CA,
BC→CB,
A→a,
B→b,
CA→AC,
CB→BC,
C→c}
454
Eingeschränkte Grammatiken
Definition T5.1.1:
• Chomsky-0-Grammatiken: Grammatiken
ohne weitere Einschränkungen.
• Chomsky-1-Grammatiken: Produktionen
der Form S→ε oder u→v mit
u∈V +, v∈((V ∪T ) – {S})* und |u||v|.
monoton oder kontextsensitiv
(Beispiel: siehe vorherige Folie)
455
Eingeschr. Grammatiken (Forts.)
• Chomsky-2-Grammatiken: Produktionen der
Form A→v mit A∈V, v∈(V ∪T )*.
kontextfrei
• Chomsky-3-Grammatiken: Produktionen der
Form A→ε oder A→aB mit A,B∈V, a∈T.
rechtslinear oder regulär
456
Sprachklassen
Li: Menge der von Chomsky-i-Grammatiken
erzeugbaren Sprachen, genauer
L0: Chomsky-0-Sprachen
(=rekursiv aufzählbare Sprachen)
L1: kontextsensitive Sprachen
L2: kontextfreie Sprachen
L3: rechtslineare Sprachen
(=reguläre Sprachen)
457
Chomsky-Hierarchie
Folgerung aus der Definition:
L3 ⊂ L2 und L1 ⊂ L0
Später:
• L2 ⊂ L1
• Alle Inklusionen sind echt.
458
Chomsky-0-Grammatiken (T5.2)
Ziel:
Chomsky-0-Sprachen = rek. aufz. Sprachen
* Wort
Grammatik: S →
Turing-Maschine: Wort
akz. Konfig.
D.h.: Die Rechnung einer Grammatik verläuft
„anders herum“.
459
Rek. Aufz. ⇒ Chomsky-0-Grammatik
Satz T5.2.1: L rekursiv aufzählbar ⇒
Es gibt Chomsky-0-Grammatik G mit L(G)=L.
Beweis:
Sei L rekursiv aufzählbar und M zugehörige
deterministische Turingmaschine, d.h.,
• x∈L ⇒ M akzeptiert x,
• x∉L ⇒ M läuft endlos.
460
Vereinfachungen von M
M kann modifiziert werden, so dass gilt:
• Der Startzustand q0 wird nur zu Beginn der
Rechnung benutzt.
• Es gibt nur einen akzept. Zustand q*.
• Vor dem Akzeptieren löscht M das Band.
Startkonfiguration:
q0 w1 … wn
Akzep. Konfiguration:
q*
461
„Rückwärtsrechnung“ von G
V = Q ∪ {S,L,R,X,Y} ∪ (Γ – Σ), Startsymbol S
T=Σ
Bandalphabet Eingabealphabet
Regeln:
1. Erzeugung der Endkonfiguration:
S → Lq*R, q* → q*B, q* → Bq*
2. Rückwärtsrechnung:
– δ(q,a)=(q´,a´,1): a´q´ → qa,
– δ(q,a)=(q´,a´,–1): q´ba´ → bqa f.a. b∈Γ
– δ(q,a)=(q´,a´,0): q´a´ → qa.
462
3. Schlussregeln für den Test, ob tatsächlich
eine Startkonfiguration beschrieben wird,
und zum Löschen der Randmarkierungen:
Bq0 → q0
Zeichen links des hergel.
Wortes löschen
Lq0 → q0
q0a → aX f.a. a∈Σ
Zum rechten Ende des
hergel. Wortes „gehen“
Xa → aX f.a. a∈Σ
XB → Y
YB → Y
Zeichen rechts des hergel.
Wortes löschen
YR → ε
XR → ε
Sonderfall „leeres Wort“
q0B → Y
463
Korrektheit
1. L(M)⊆L(G).
Sei c1,…,cm eine akzeptierende Rechnung
für w1…wn von M.
Dann gibt es in G die Herleitung
S Lq*R
* LB…Bq*B…BR = LB…BcmB…BR
LB…Bcm–1B…BR
…
LB…Bc1B…BR = LB…Bq0w1…wnB…BR
* w1…wn.
464
Korrektheit
2. L(G)⊆L(M).
* w1…wn Herleitung in G.
Sei S Lq*R • L,R, Zustandssymbol können nur mit den
Schlussregeln entfernt werden
⇒ LB…Bq0w1…wnB…BR wurde erreicht.
• Die Herleitung
* LB…Bq0w1…wnB…BR entspricht
Lq*R einer umgekehrten Rechnung von M.
⇒ M akzeptiert w1…wn.
465
Beispiel
Rechnung von M auf „ab“:
q0ab → cq1b → cdq2B → cq3dB → q4cBB →
q*BBB
Herleitung in G:
S → Lq*R → Lq*BR → Lq*BBR → Lq*BBBR
→ Lq4cBBR → Lcq3dBR → Lcdq2BR
→ Lcq1bBR → Lq0abBR → q0abBR
→ aXbBR → abXBR → abYR → ab
466
Chomsky-0-Grammatik ⇒ Rek. Aufz.
Satz T5.2.2: Wenn L durch eine Chomsky-0Grammatik G beschrieben wird, gibt es eine
NTM M, die L akzeptiert.
Beweis: Algo von M:
• Schreibe S auf freie Spur.
• Iteriere:
– Führe nichtdeterministisch gewählte
Ableitungsregel aus
– Vergleiche hergeleitetes Wort mit Eingabe,
akzeptiere bei Gleichheit.
467
Umformung NTMDTM
Satz T5.2.3: Wenn L durch eine NTM M
akzeptiert wird, ist L rekursiv aufzählbar.
Beweis: Konstruktion einer DTM für L:
For i:=0 to ∞
Sim. alle Rechenwege von M der Länge i.
Falls akzeptierende Konfiguration erreicht
wird, akzeptiere.
468
Charakterisierung rek. aufz. Spr.
Folgerung T5.2.4:
Die Menge der rekursiv aufzählbaren
Sprachen ist gleich
1. der Menge der von DTMs akzeptierten
Sprachen,
2. der Menge der von NTMs akzeptierten
Sprachen,
3. der Menge der von Chomsky-0Grammatiken erzeugten Sprachen.
469
Chomsky-3-Grammatiken (T5.3)
Ziel:
Äquivalenz von Chomsky-3-Grammatiken und
DFAs.
470
DFA Chomsky-3-Grammatik
Satz T5.3.1:
Sei M ein DFA für L. Dann gibt es auch eine
rechtslineare Grammatik G für L.
Beweis:
Idee: Rechnung von M mit einer Grammatik
simulieren.
V=Q,
T =Σ,
S=q0,
Ableitungsregeln: q aq´, falls δ(q,a)=q´,
q ε, falls q∈F.
471
Korrektheit
Rechnung des DFA auf einem Wort w1…wn:
Zustandsfolge q0,q1,…,qn mit δ(qi,wi+1)=qi+1
und qn∈F.
„Rechnung“ der erzeugten Grammatik:
q0 w1q1 w1w2q2 … w1…wnqn w1…wn
q aq´, falls δ(q,a)=q´,
q ε, falls q∈F.
472
Chomsky-3-Grammatik NFA
Satz T5.3.1:
Sei G eine rechtslineare Grammatik für L.
Dann gibt es auch einen NFA M für L.
Beweis:
Sei rechtslin. Grammatik für L gegeben.
Konstruktion des NFAs:
Q=V, q0=S, F = {A | Regel Aε vorhanden}
δ(A,a)={B | Regel A aB vorhanden}
473
Korrektheit
Ableitung von w1…wn hat die Form
Sw1A1w1w2A2…w1…wnAnw1…wn
⇔
Mögliche Zustandsfolge des NFAs bei Eingabe
w1,…,wn:
S A1 A2 … An
Q=V, q0=S, F = {A | Regel Aε vorhanden}
δ(A,a)={B | Regel A aB vorhanden}
474
Charakterisierung d. reg. Sprachen
Folgerung: Die Menge der regulären
Sprachen ist gleich
• der Menge der von DFAs oder NFAs
erkannten Sprachen,
• der Menge der Sprachen, die durch reguläre
Ausdrücke beschrieben werden,
• der Menge der Sprachen, die durch
Chomsky-3-Grammatiken beschrieben
werden.
475
Beobachtung
Grammatiken sind ein auf natürliche Weise
nichtdeterministisches Konzept.
Simulationen von Ableitungen einer
Grammatik werden mit Hilfe von
nichtdeterministischen Maschinen besonders
einfach.
476
Kontextfreie Sprachen (Kap. T6)
Überblick:
• Beispiele kontextfreier Sprachen
• Chomsky-Normalform
• Wortproblem für kontextfreie Sprachen
• Pumping-Lemma
• Mehrdeutigkeit
• Algorithmen
• Unentscheidbare Probleme
• Greibach-Normalform
• Maschinenmodell für kontextfreie Sprachen
477
Beispiel: L={0n1n | n≥1}
Haben gesehen: L nicht regulär
(Folien 338 und 346)
Kontextfreie Grammatik:
V={S}, Σ={0,1},
P={S01, S 0S1}
L kontextfrei
478
Variante: L={0i1j | 1ij}
Kontextfreie Grammatik:
V={S}, Σ={0,1},
P={S01, S 0S1, SS1}
L kontextfrei
479
Bsp: Sprache der Palindrome
L={w∈{0,1}* | w=wR}
• Haben gesehen: L nicht regulär (Folie 347)
• Kontextfreie Grammatik G:
V={S}, Σ={0,1},
P={Sε, S0, S1, S0S0, S1S1}
• Korrektheit:
– G erzeugt nur Palindrome.
L(G)⊆L
– Alle Palindrome können durch G erzeugt
werden.
L⊆L(G)
480
G erzeugt nur Palindrome.
Behauptung: Alle von G erzeugten Wörter w
sind Palindrome.
Induktion über |w|:
|w|=0 oder |w|=1: ε, 0, 1 sind Palindrome.
|w|>1: Die erste angewandte Regel ist S0S0
oder S1S1, d.h., w beginnt und endet mit
demselben Buchstaben. Nach I.V. ist das
Wort dazwischen Palindrom ⇒ w Palindrom.
V={S}, Σ={0,1},
P={Sε, S0, S1, S0S0, S1S1}
481
Alle Palindrome w in G herleitbar.
Induktion über |w|:
|w|=0 oder |w|=1:
ε, 0, 1 sind herleitbar.
|w|>1: w Palindrom ⇒ w beginnt und endet
mit 0 (bzw. 1); dazwischen befindet sich ein
Palindrom w´, also w=0w´0 oder w=1w´1.
Nach I.V. ist w´ aus S herleitbar.
* 0w´0 = w bzw.
⇒ S 0S0 * 1w´1 = w.
S 1S1 V={S}, Σ={0,1},
P={Sε, S0, S1, S0S0, S1S1}
482
Klammersprache
w=w1...wn∈{(,)}* heißt korrekt geklammert,
falls
• die Anzahl „(“ ist gleich der Anzahl „)“.
• in jedem Anfangsstück w1,...,wi (in) ist die
Anzahl „(“ nicht kleiner als die Anzahl „)“.
Definiere
L={w∈{(,)}* | w korrekt geklammert}
Nicht regulär Folie 349f
Kontextfreie Grammatik: SSS, S(S), Sε.
483
Bsp: L={w| |w|0=|w|1}
|w|0: Anzahl Nullen in w,
|w|1: Anzahl Einsen in w.
• Übungsaufgabe: Zeige, dass L nicht regulär.
• Kontextfreie Grammatik G:
V={S}, Σ={0,1}
P={Sε, S0S1S, S1S0S}
• Korrektheit:
L(G)⊆L
– G erzeugt nur Wörter aus L.
– G erzeugt alle Wörter aus L.
L⊆L(G)
484
Beispiel
SyntaxS
Ableitung von 110010
baum
S1S0S
11S0S0S
1 S 0 S
1100S
11001S0S
1 S 0 S 1 S 0 S
110010
ε
P={Sε, S0S1S, S1S0S}
ε
ε
ε
485
Korrektheit: L(G)⊆L
G erzeugt nur Wörter aus L:
folgt, da bei jedem Ableitungsschritt
gleichviele Nullen wie Einsen erzeugt
werden.
P={Sε, S0S1S, S1S0S}
486
Korrektheit: L⊆L(G)
Induktion über |w|
• |w|=0 w=ε ∈ L(G).
• |w|>0, o.B.d.A. beginne w mit 0.
Sei i>0 kleinste Zahl m. |w1…wi|0 = |w1…wi|1.
Dann gilt:
w1=0, wi=1, |w2…wi–1|0 = |w2…wi–1|1
und
|wi+1…wn|0=|wi+1…wn|1.
Also w2…wi–1∈ L und wi+1…wn∈ L und
* 0w2…wi–11wi+1…wn.
S 0S1S I.V.
487
Syntaxbaum
Graphische Darstellung der Ableitung eines
Wortes
• Wurzel: markiert mit S.
• Blätter: markiert mit Terminalen/Buchstaben
oder ε.
• Innere Knoten:
– markiert mit Variablen A
– Nachfolger entsprechen Anwendung einer
Ableitungsregel Aα
α1…α
αr.
488
Anmerkungen
• Zu jeder Ableitung gibt es einen
Syntaxbaum.
• Zu einem Syntaxbaum kann es mehrere
(äquivalente) Ableitungen geben.
• Linksableitung: Ableitung, bei der die jeweils
linkeste Variable ersetzt wird.
• Rechtsableitung: Ableitung, bei der die
jeweils rechteste Variable ersetzt wird.
489
Eindeutigkeit und Mehrdeutigkeit
Definition T6.1.5:
Eine kontextfreie Grammatik G heißt
eindeutig, wenn es für jedes Wort w∈L(G)
nur einen Syntaxbaum gibt.
Eine kontextfreie Sprache heißt eindeutig,
wenn es für sie eine eindeutige kontextfreie
Grammatik gibt, anderenfalls heißt sie
inhärent mehrdeutig.
490
Beispiel: Klammersprache
Die Grammatik SSS, S(S), Sε ist nicht
eindeutig. Beispiel: ()()()
Linksableitungen:
SSSSSS(S)SS()SS()(S)S()()S
()()(S)()()()
SSS(S)S()S()SS()(S)S()()S
()()(S)()()()
Eindeutige Grammatik: S(S)S, Sε
491
Weiteres Beispiel
Sε, S0S1S, S1S0S ist mehrdeutig:
das Wort 011001 hat die Linksableitungen
*
S0S1S01S0S1S011S0SS0S1S
011001
und
S0S1S01S011S0S0110S
*
01100S1S011001
Etwas schwieriger: Konstruktion einer
eindeutigen Grammatik.
492
Beispiel
Die Grammatik S01, S 0S1 für
L={0n1n | n≥1} ist eindeutig.
493
Motivation
• Nahe liegende Vermutung: Syntaxanalyse
für eindeutige Grammatiken einfacher.
• Verschiedene Ableitungsbäume haben bei
Programmiersprachen häufig verschiedene
Semantiken, Beispiel: dangling else.
494
Chomsky-Normalform
Ziel: einfachere Algorithmen für kontextfreie
Grammatiken.
Definition T6.2.1: Eine kontextfreie
Grammatik ist in Chomsky-Normalform,
wenn alle Ableitungsregeln von der Form
A BC oder A a (mit A,B,C∈V, a∈T)
sind.
495
Chomsky-Normalform
Besonderheit: ε kann nicht erzeugt werden.
Im Folgenden Umformung
G
Kontextfreie
Grammatik
G´
Kontextfreie Grammatik
in Chomsky-Normalform
mit L(G´) = L(G) – {ε}
496
Umformung
Sei s(G) die Größe (Anzahl der Buchstaben in
allen Produktionen) der kontextfreien
Grammatik G.
Satz T6.2.2: Eine kontextfreie Grammatik G
kann in Zeit O(s(G)2) in ChomskyNormalform umgeformt werden.
Beweis: Umformung in 4 Schritten
497
Schritt 1: Separation
Ziel: Auf den rechten Seiten der Regeln
entweder
• 1 Terminal oder
• nur Variablen.
Dazu:
• erzeuge für jedes a∈T eine neue Variable Ya
und die Regel Yaa,
• Ersetze auf jeder rechten Seite einer Regel
a durch Ya.
498
Beispiel für Schritt 1
A AbcDeF
(mit A,D,F∈V, b,c,e∈T)
wird ersetzt durch
A AYbYcDYeF,
Ybb, Ycc, Yee
499
Schritt 2: Lange rechte Seiten
AB1…Bm
(mit m≥3, A,B1,…,Bm∈V)
wird ersetzt durch
A B1C1
C1 B2C2
Ci Bi+1Ci+1
(für 1im–3)
Cm–2 Bm–1Bm
Dabei sind C1,…,Cm–2 neue Variablen, die nur
für die betrachtete Regel eingeführt werden.
500
Resultat der Schritte 1 und 2
Nur noch Regeln der Form:
Aε
(ε-Regeln)
AB
(Kettenregeln)
A BC (o.k.)
Aa
(o.k.)
Bisher: Grammatik hat sich nur um konstanten
Faktor vergrößert.
501
Schritt 3: Beseitigung der ε-Regeln
*
1. Teilschritt: Finde alle Var. A mit Aε.
Initialisierung: Variablen A mit Regel Aε in
Mengen V ´ und Q einfügen.
Solange Q≠∅
– Variable B aus Q entnehmen.
– Auf allen rechten Seiten von allen Regeln
B durch ε ersetzen.
– Falls neue Regel Cε entsteht (d.h. C∉V ´):
C in V ´ und Q aufnehmen.
Ausgabe: V ´
502
Korrektheit des 1. Teilschritts
Behauptung: V ´ enthält genau die Variablen
* ε.
A mit A „⊆“ offensichtlich.
„⊇“ Induktion über die Länge l der kürzesten
Ableitung A * ε.
l=1: Es gibt die Regel A ε. Dann wird A in
V ´ eingefügt.
* ε oder A B * ε.
l>1: Dann A BC Dann haben B (und C) ε-Ableitungen mit
Länge <l und kommen in V ´.
A wird in V ´ aufgenommen.
503
Beseitigung der ε-Regeln, 2. Teil
• Entferne alle ε-Regeln.
• Für jede Regel ABC:
Falls B∈V ´: erzeuge Regel AC,
falls C∈V ´: erzeuge Regel AB.
Resultat: Grammatik vergrößert sich nur um
konstanten Faktor.
504
Schritt 4: Entf. der Kettenregeln
1. Teilschritt: Äquivalente Variablen
entfernen.
• Erzeuge Graphen:
Knoten: Variablen
Kante AB, falls Kettenregel AB vorh.
•
Suche mit DFS nach Kreisen
A1 A2 A3 … Ar A1
Dann sind A2,…,Ar zu A1 äquivalent und
können überall durch A1 ersetzt werden.
505
Schritt 4: Entf. der Kettenregeln
2. Teilschritt: Kettenregeln beseitigen
• Ber. Graphen d. Kettenregeln, ist kreisfrei.
• Ber. topologische Ordnung A1,…,Ar.
• For i:=r downto 1 do
Seien Aiα1,…,Aiαs die Regeln
mit linker Seite Ai.
Falls AjAi mit j<i vorhanden,
lösche AjAi und
erzeuge Ajα1,…,Ajαs.
506
Beispiel für den 2. Teilschritt
Graph der Kettenregeln (auf A,B,C,D,E):
4
1
3
A
D
a
C
B
E
b
2
5
RS
Topologische Nummerierung berechnen
Regeln für E: Cb, CRS, Bb, BRS
Regeln für D: Ca, (Cb)
Regeln für C: Aa, Ab, ARS, Ba,
Bb, BRS
507
Größenänderung im 4. Schritt
Sei A1,…,Ar die topol. Ordnung der Var.
Im ungünstigen Fall:
• Alle Ar-Regeln werden zu A1-,...,Ar–1Regeln,
• alle Ar–1-Regeln werden zu A1-,...,Ar–2Regeln, usw.
Höchstens Quadrierung der Größe.
508
Folgerung
Zu jeder kontextfreien Grammatik G gibt es
eine äquivalente kontextsensitive
Grammatik, also L2⊂L1.
Chomsky-Hierarchie
L3 ⊂ L2 ⊂ L1 ⊂ L0
≠
≠
≠
{0n1n}
Alle kontextsens.
Sprachen sind rekursiv.
{w| |w|a=|w|b=|w|c}
509
Herunterladen