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