Übersetzungstechnik Francesco Kriegel TU Dresden Fakultät Mathematik Institut Algebra WS 2008 / 2009 10. Januar 2010 Inhaltsverzeichnis Kapitel 1 Automat 1.1 endlicher Automat . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.2 Kellerautomat . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.3 Turingmaschine und linear beschränkter Automat. . . . . . . . . . 3 3 6 8 Kapitel 2 Sprache und Grammatik 2.1 Alphabet und Sprache . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.2 Grammatik und Chomsky-Hierarchie . . . . . . . . . . . . . . . . . . . . 2.2.1 Satzgliederungsgrammatik (Typ 0). . . . . . . . . . . . . . . . . . . . 2.2.2 kontextsensitive Grammatik (Typ 1) . . . . . . . . . . . . . . . . . . 2.2.3 kontextfreie Grammatik (Typ 2) . . . . . . . . . . . . . . . . . . . . . . 2.2.4 reguläre Grammatik (Typ 3) . . . . . . . . . . . . . . . . . . . . . . . . . 13 13 15 17 17 18 19 Kapitel 3 Kompilation 3.1 Analyse. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.1.1 lexikalische Analyse . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.1.2 syntaktische Analyse. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.1.3 semantische Analyse. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.2 Synthese . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.2.1 Codeerzeugung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.2.2 Optimierung. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21 21 21 22 26 26 26 26 1 2 1 Automat 1.1 endlicher Automat Definition 1.1 (endlicher Automat) Ein endlicher Automat ist ein Quintupel A = ( Q, Σ, →, i, F ) mit den folgenden Eigenschaften: (i) Q ist eine endliche Menge von Zuständen, (ii) Σ ist ein endliches Alphabet, (iii) i ∈ Q ist ein Anfangszustand, (iv) → ⊆ ( Q \ F ) × Σ × Q ist eine Zustandsübergangsrelation, (v) F ⊆ Q ist eine Menge von Endzuständen. Man schreibt A ∈ FA. Ein endlicher Automat heißt deterministisch, wenn die Zustandsübergangsrelation eine Zustandsübergangsfunktion 7→ : ( Q \ F ) × Σ → Q ist, und man schreibt A ∈ DFA. Definition 1.2 (Pfad, akzeptierte Sprache) Sei A = ( Q, Σ, →, i, F ) ein endlicher Automat. (i) Eine endliche Folge σ σ σn−1 σ n 1 2 π = q0 → q1 → . . . → q n −1 → qn σ von Zustandsübergängen qi →i qi+1 heißt Pfad der Länge n von q0 nach qn mit der Beschriftung β(π ) := σ1 . . . σn . Der leere Pfad hat 3 1 Automat Länge 0 und Beschriftung e. Man schreibt ω p →∗ q, wenn es einen Pfad von p nach q mit der Beschriftung ω gibt, und ω weiter sei P →∗ Q, wenn es Zustände p ∈ P und q ∈ Q mit ω p →∗ q gibt. ω (ii) A akzeptiert das Wort ω ∈ Σ∗ , wenn i →∗ F gilt. Die von A akzeptierte Sprache ist ω L(A) := {ω ∈ Σ∗ | i →∗ F }. (iii) Ein Paar (q, σ) ∈ Q × Σ∗ heißt Konfiguration von A. Damit wird eine Konfigurationsübergangsrelation ⇒ definiert mit x ( p, xα) ⇒ (q, α) :⇐⇒ p → q. Wir setzen ⇒∗ als die reflexiv-transitive Hülle von ⇒. ω Lemma 1.3 (i) Es gilt p →∗ q genau dann, wenn ( p, ωα) ⇒∗ (q, α). (ii) Für A ∈ TM gilt L(A) = {ω ∈ Σ∗ | ∃q ∈ F : (i, ω ) ⇒∗ (q, e)}. Definition 1.4 (endlicher Automat mit Wortübergängen) (i) Ein endlicher Automat mit Wortübergängen ist ein Quintupel A = ( Q, Σ, →, i, F ), bei dem Q, Σ, i, F wie für einen endlichen Automat definiert sind und → ⊆ ( Q \ F ) × Σ∗ × Q ist. (ii) Ein endlicher Automat mit e-Übergängen ist ein endlicher Automat mit Wortübergängen, so dass → ⊆ ( Q \ F ) × Σ ∪ {e} × Q ist. Satz 1.5 Zu jedem endlichen Automat mit e-Übergängen existiert ein äquivalenter endlicher Automat. 4 1.1 endlicher Automat Beweis: Sei A = ( Q, Σ, →, i, F ) ein endlicher Automat mit e-Übergängen. Einen äquivalenten endlichen Automat A0 := ( Q, Σ, →0 , i, F 0 ) erhält man mit σ →0 := {( p, σ, q) ∈ ( Q \ F ) × Σ × Q | p →∗ q} und ( 0 F := F ∪ {i } F e (i → ∗ F ) . (sonst) Satz 1.6 Zu jedem endlichen Automat existiert ein äquivalenter deterministischer endlicher Automat. Beweis: Sei A = ( Q, Σ, →, i, F ) ein endlicher Automat. Dann erhält man einen deterministischen endlichen Automat A0 := (℘( Q), Σ, 7→, {i }, F 0 ) durch σ P 7→ := [ σ p→ p∈ P für alle P ∈ ℘( Q) und σ ∈ Σ und F 0 := { P ∈ ℘( Q) | P ∩ F 6= ∅}. Satz 1.7 Zu jedem deterministischen endlichen Automat existiert ein äquivalenter kleinster deterministischer Automat. Beweis: Sei A = ( Q, Σ, 7→, i, F ) ein deterministischer endlicher Automat. Ein ω Zustand q ∈ Q von A heißt erreichbar, wenn ein Wort ω ∈ Σ∗ mit i 7→∗ q existiert. Damit wird zunächst ein äquivalenter deterministischer endlicher Automat konstruiert, der nur aus erreichbaren Zuständen besteht: A0 := ( Q0 , Σ, 7→0 , i, F0 ) mit ω Q0 : = { q ∈ Q | ∃ ω ∈ Σ ∗ : i 7 → ∗ q } und 7→0 := 7→ ∩ Q0 × Σ × Q0 sowie F0 := F ∩ Q0 . Für einen Zustand q ∈ Q sei Aq := ( Q, Σ, 7→, q, F ). Zwei Zustände p, q ∈ Q heißen A-äquivalent, wenn L(A p ) = L(Aq ) gilt. Dafür schreibt man auch p ∼ q. ∼ ist eine Äquivalenzrelation auf Q und verträglich mit 7→. Damit wird nun der Quotientenautomat zu A konstruiert, der äquivalente Zustände zusammenfasst: A/∼ := ( Q/∼, Σ, 7→, [i ], F/∼) mit [q] := { p ∈ Q | p ∼ q} Q/∼ := {[q] | q ∈ Q} 5 1 Automat σ σ [q] 7→ := [q 7→] F/∼ := {[q] | q ∈ F } Schließlich heißt Ared := A0 / ∼ der reduzierte Automat zu A und ist der kleinste deterministische endliche Automat, der L(A) akzeptiert. Ared hängt nur von L(A) ab, d.h. aus L(A) = L(B) folgt Ared ∼ = Bred . Definition 1.8 (erzeugter Automat) Sei L ⊆ Σ∗ eine Sprache. (i) Die Äquivalenzrelation α ∼ β :⇐⇒ ∀ω ∈ Σ∗ : α ◦ ω ∈ L ⇔ β ◦ ω ∈ L heißt Nerode-Rechtskongruenz. (ii) Das von L erzeugte Transitionssystem ist A(L) := (Σ∗ /∼, Σ, 7→, [e], L/∼) σ mit [ω ] 7→ [ωσ]. Satz 1.9 (i) Hat ∼ endlichen Index für eine Sprache L, so ist A(L) ein DEA mit L(A(L)) = L. (ii) Eine Sprache L ist genau dann erkennbar, wenn ∼ endlichen Index hat. (iii) Für eine erkennbare Sprache L ist A(L) der kleinste DEA mit L(A(L)) = L. (iv) Ist L eine erkennbare Sprache und A ein DEA mit L(A) = L, so gilt Ared ∼ = A(L). 1.2 Kellerautomat Definition 1.10 (Kellerautomat) Ein Kellerautomat ist ein 7-Tupel A = ( Q, Σ, Γ, →, #, i, F ) mit den folgenden Eigenschaften: 6 1.2 Kellerautomat (i) Q ist eine endliche Menge von Zuständen, (ii) Σ ist ein Alphabet von Eingabesymbolen, (iii) Γ ist ein Alphabet von Kellersymbolen, (iv) → ⊆ ( Q \ F ) × Γ × (Σ ∪ {e}) × Q × Γ∗ ist eine Zustandsübergangsrelation, (v) i ∈ Q ist ein Startzustand, (vi) # ∈ Γ ist ein Anfangssymbol im Keller, (vii) F ⊆ Q ist eine Menge von finalen Zuständen. Man schreibt A ∈ PDA. Ein Kellerautomat heißt deterministisch, wenn die Zustandsübergangsrelation die Eigenschaft x ∀q ∈ Q \ F ∀ A ∈ Γ ∀ x ∈ Σ : |(q, A) → | + |(q, A) → | ≤ 1 e erfüllt, und man schreibt A ∈ DPDA. Definition 1.11 (Konfiguration, akzeptierte Sprache) Sei A = ( Q, Σ, Γ, →, #, i, F ) ein Kellerautomat. (i) Ein Tripel (q, γ, σ) ∈ Q × Γ∗ × Σ∗ heißt Konfiguration von A. Damit wird eine Konfigurationsübergangsrelation ⇒ definiert mit x ( p, Aα, xβ) ⇒ (q, ωα, β) :⇐⇒ ( p, A) → (q, ω ). Wir setzen ⇒∗ als die reflexiv-transitive Hülle von ⇒. (ii) A akzeptiert das Wort ω ∈ Σ∗ , wenn ein Zustand q ∈ Q existiert mit (i, #, ω ) ⇒∗ (q, e, e). Die von A akzeptierte Sprache ist L(A) := {ω ∈ Σ∗ | ∃q ∈ F : (i, #, ω ) ⇒∗ (q, e, e)}. 7 1 Automat 1.3 Turingmaschine und linear beschränkter Automat Definition 1.12 (Turingmaschine) Eine Turingmaschine A ist ein 7-Tupel A = ( Q, Σ, Γ, →, , i, F ) mit den folgenden Eigenschaften: (i) Q ist eine endliche Menge von Zuständen. (ii) Σ ist ein Alphabet von Eingabesymbolen. (iii) Γ ! Σ ist ein Alphabet von Bandsymbolen. (iv) → ⊆ ( Q \ F ) × Γ × { L, 0, R} × Q × Γ ist eine Zustandsübergangsrelation. (v) i ∈ Q ist ein Anfangszustand. (vi) ∈ Γ \ Σ ist ein Symbol für das leere Feld. (vii) F ⊆ Q ist eine Menge von finalen Zuständen. Man schreibt auch A ∈ TM. Eine Turingmaschine heißt deterministisch, wenn die Zustandsübergangsrelation eine Zustandsübergangsfunktion 7→ : ( Q \ F ) × Γ → { L, 0, R} × Q × Γ ist, und man schreibt A ∈ DTM. 8 1.3 Turingmaschine und linear beschränkter Automat Definition 1.13 (Konfiguration, akzeptierte Sprache) Sei A = ( Q, Σ, Γ, →, , i, F ) eine Turingmaschine. (i) Ein Wort κ = αqβ mit α, β ∈ Γ+ und q ∈ Q heißt Konfiguration von A. Damit wird eine Konfigurationsübergangsrelation ⇒ definiert mit αpAβ ⇒ αqBβ 0 :⇐⇒ ( p, A) → (q, B) αpA ⇒ αqB 9 1 Automat αpAβ ⇒ αBqβ R :⇐⇒ ( p, A) → (q, B) αpA ⇒ αBq αCpAβ ⇒ αqCBβ ωpAβ ⇒ qωBβ L :⇐⇒ ( p, A) → (q, B). Wir setzen ⇒∗ als die reflexiv-transitive Hülle von ⇒. (ii) Gilt κ ⇒∗ κ 0 , so heißt κ 0 Folgekonfiguration von κ. Eine Konfiguration κ heißt Stoppkonfiguration, wenn sie keine Folgekonfiguration besitzt. Eine Konfiguration κ = αqβ heißt akzeptierend, falls q ∈ F. (iii) A akzeptiert das Wort ω ∈ Σ∗ , wenn eine akzeptierende Stoppkonfiguration κ mit iω ⇒∗ κ existiert. Die von A akzeptierte Sprache ist L(A) := {ω ∈ Σ∗ | ∃akzeptierende Stoppkonfiguration κ : iω ⇒∗ κ }. Definition 1.14 (linear beschränkter Automat) Ein linear-beschränkter Automat A = ( Q, Σ, Γ, →, , C, B, i, F ) ist eine Turingmaschine ( Q, Σ, Γ, →, , i, F ) mit den folgenden Eigenschaften: (i) C, B∈ Γ \ Σ sind Symbole für den linken bzw. rechten Rand, X X X X (ii) für Übergänge ( p, C) → (q, A) und ( p, A) → (q, C) gilt stets X = R und A = C, d.h. der linke Rand ist fest und darf nicht überschritten werden, (iii) für Übergänge ( p, B) → (q, A) und ( p, A) → (q, B) gilt stets X = L und A = B, d.h. der rechte Rand ist fest und darf nicht überschritten werden, und man schreibt A ∈ LBA bzw. A ∈ DLBA, falls A deterministisch ist. A akzeptiert das Wort ω ∈ Σ∗ , wenn eine akzeptierende Stoppkonfiguration κ mit CiωB ⇒∗ κ existiert. Die von A akzeptierte Sprache ist L(A) := {ω ∈ Σ∗ | ∃akzeptierende Stoppkonfiguration κ : CiωB ⇒∗ κ }. 10 1.3 Turingmaschine und linear beschränkter Automat 11 1 Automat 12 2 Sprache und Grammatik 2.1 Alphabet und Sprache Definition 2.1 (Alphabet) Ein Alphabet Σ ist eine endliche nicht-leere Menge. (i) Ein Symbol σ ist ein Element σ ∈ Σ. (ii) Ein Wort ω der Länge |ω | = n ist ein Vektor ω ∈ Σn . Statt ω = (ω1 , . . . , ωn ) schreibt man auch einfach ω = ω1 . . . ωn . Das leere Wort der Länge 0 bezeichnen wir mit e. (iii) Die Konkatenation ist eine Operation ◦: Σn × Σm → Σn+m 0 0 (ω1 . . . ωn , ω10 . . . ωm ) 7→ ω1 . . . ωn ω10 . . . ωm . Es gilt Σn+1 = Σn ◦ Σ und Σ0 = {e}. Statt ω ◦ ω 0 schreibt man auch einfach ωω 0 . (iv) Für ein Wort ω = ω p ωi ωs heißt ω p Präfix, ωi Infix und ωs Suffix von ω. (v) Die kleensche Hülle ist Σ∗ = ∞ [ Σn . n =0 (vi) Die positive Hülle ist Σ+ = S∞ n =1 Σn . Definition 2.2 (Sprache) Eine Sprache L über einem Alphabet Σ ist eine Teilmenge L ⊆ Σ∗ . Es gibt folgende Operationen auf Sprachen: 13 2 Sprache und Grammatik (i) Vereinigung L1 ∪ L2 (ii) Durchschnitt L1 ∩ L2 (iii) Komplement L := Σ∗ \ L (iv) Differenz L1 \ L2 := L1 ∩ L2 (v) Konkatenation L1 ◦ L2 := {ω1 ◦ ω2 | ω1 ∈ L1 , ω2 ∈ L2 } (vi) Potenz Ln+1 := Ln ◦ L mit L0 := {e} (vii) Kleene-Hülle L∗ := S∞ (viii) positive Hülle L+ := 14 n =0 S∞ Ln n =1 Ln 2.2 Grammatik und Chomsky-Hierarchie 2.2 Grammatik und Chomsky-Hierarchie Typ 0 RE O TM DTM Typ 1 GCS O ; vv vv v vv vv v vv TPDA CS o O LBA / KNF O DCS O DLBA Typ 2 DGCS o DTPDA : CF \99 t t 99 O tt PDA 99 tttt t 9 tt 9 tt 99 99 ULTRALIN O 99 99 99 / CNF o / GNF DCF o B O LIN OPDA O DLIN DOPDA cHH HH HH HH HH H / LR(k ) o / LR(1) O bEE EE EE EE EE METALIN O DPDA LR(0) Typ 3 REG LL(k) o O / LF(k) O LL(1) o O / LF(1) O LL(0) o / LF(0) FA DFA Definition 2.3 (Grammatik) Eine Grammatik G ist ein Quadrupel G = ( N, Σ, →, S) 15 2 Sprache und Grammatik mit den folgenden Eigenschaften: (i) N ist ein Alphabet von Nichtterminalsymbolen, (ii) Σ ist ein Alphabet von Terminalsymbolen, (iii) es gilt N ∩ Σ = ∅, (iv) die Menge V := N ∪ Σ heißt Vokabular, ∗ (v) P ist eine Relation P ⊆ V NV }∗ ×V ∗ , deren Elemente Produktions| {z =V ∗ \ Σ ∗ regeln heißen, (vi) S ist ein Nichtterminalsymbol S ∈ N und heißt Startsymbol. Für eine Produktionsregel φ → ψ heißt φ Prämisse und ψ Konklusion. Für eine Menge von Produktionsregeln φ → ψ1 , . . . , φ → ψn schreibt man abkürzend φ → ψ1 | . . . |ψn . Definition 2.4 (erzeugte Sprache) Sei G = ( N, Σ, →, S) eine Grammatik. (i) Ein Wort ω ∈ V ∗ heißt ableitbar zu einem Wort ξ ∈ V ∗ genau dann, wenn ∃µ, ν ∈ V ∗ ∃(φ → ψ) : ω = µφν ∧ ξ = µψν. Man schreibt dafür ω ⇒ ξ. (ii) Wir setzen ⇒n+1 := ⇒n ; ⇒ und ⇒0 := ∆V ∗ und damit ist ⇒∗ := ∞ [ ⇒n n =0 die reflexiv-transitive Hülle von ⇒. (iii) Die Sprache L(G) = {ω ∈ Σ∗ | S ⇒∗ ω } heißt die von G erzeugte Sprache. (iv) Eine Sprache L heißt Typ-i-Sprache, wenn es eine Typ-i-Grammatik G mit L(G) = L gibt. (v) Zwei Grammatiken G1 und G2 heißen äquivalent, wenn L(G1 ) = L(G2 ) gilt. 16 2.2 Grammatik und Chomsky-Hierarchie 2.2.1 Satzgliederungsgrammatik (Typ 0) Definition 2.5 (Typ-0-Grammatik) Jede Grammatik G heißt rekursiv aufzählbar bzw. Typ-0-Grammatik. Man schreibt G ∈ RE. Satz 2.6 (rekursiv-aufzählbare Sprache) Eine Sprache L ist genau dann rekursiv-aufzählbar bzw. eine Typ-0-Sprache, wenn eine Turingmaschine A mit L(A) = L existiert. ∀L ⊆ Σ∗ : ∃G ∈ RE : L(G) = L ⇐⇒ ∃A ∈ TM : L(A) = L 2.2.2 kontextsensitive Grammatik (Typ 1) Definition 2.7 (kontextsensitive Grammatik) Eine Grammatik G = ( N, Σ, →, S) heißt kontextsensitiv bzw. Typ-1Grammatik, falls alle Produktionsregeln von der Form αAβ → αωβ mit α, β ∈ V ∗ , ω ∈ V + und A ∈ N sind, oder S → e, wenn S * ψ für alle φ → ψ. Definition 2.8 (monotone Grammatik) Eine Grammatik G = ( N, Σ, →, S) heißt monoton, falls |φ| ≤ |ψ| für alle φ → ψ gilt. Satz 2.9 Eine Grammatik ist genau dann monoton, wenn sie kontextsensitiv ist. Satz 2.10 (kontextsensitive Sprache) Eine Sprache L ist genau dann kontextsensitiv bzw. eine Typ-1-Sprache, wenn eine linear-beschränkte Turingmaschine A mit L(A) = L existiert. ∀L ⊆ Σ∗ : ∃G ∈ CS : L(G) = L ⇐⇒ ∃A ∈ LBA : L(A) = L 17 2 Sprache und Grammatik Definition 2.11 (Kuroda-Normalform) Eine Grammatik G heißt in Kuroda-Normalform, falls alle Produktionsregeln eine der folgenden Formen haben: (i) A → a (ii) A → B (iii) A → BC (iv) AB → CD Es darf auch die Regel S → e verwendet werden, wenn S in keiner Konklusion einer Regel vorkommt. Man schreibt G ∈ KNF. Satz 2.12 (i) G ∈ KNF =⇒ G ∈ CS (ii) G ∈ CS =⇒ ∃G 0 ∈ KNF : L(G 0 ) = L(G) 2.2.3 kontextfreie Grammatik (Typ 2) Definition 2.13 (kontextfreie Grammatik) Eine Grammatik G = ( N, Σ, →, S) heißt kontextfrei bzw. Typ-2-Grammatik, falls alle Produktionsregeln von der Form A→ω mit ω ∈ V ∗ und A ∈ N sind, d.h. → ⊆ N × V ∗ . Satz 2.14 (kontextfreie Sprache) Eine Sprache L ist genau dann kontextfrei bzw. eine Typ-2-Sprache, wenn ein Kellerautomat A mit L(A) = L existiert. ∀L ⊆ Σ∗ : ∃G ∈ CF : L(G) = L ⇐⇒ ∃A ∈ PDA : L(A) = L Definition 2.15 (Chomsky-Normalform) Eine Grammatik G heißt in Chomsky-Normalform, falls alle Produktionsregeln eine der folgenden Formen haben: (i) A → a (ii) A → BC 18 2.2 Grammatik und Chomsky-Hierarchie Es darf auch die Regel S → e verwendet werden, wenn S in keiner Konklusion einer Regel vorkommt. Man schreibt G ∈ CNF. Satz 2.16 (i) G ∈ CNF =⇒ G ∈ CF (ii) G ∈ CF =⇒ ∃G 0 ∈ CNF : L(G 0 ) = L(G) Definition 2.17 (Greibach-Normalform) Eine Grammatik G heißt in Greibach-Normalform, falls alle Produktionsregeln die Form A → aα mit α ∈ N ∗ haben. Es darf auch die Regel S → e verwendet werden, wenn S in keiner Konklusion einer Regel vorkommt. Man schreibt G ∈ GNF. Satz 2.18 (i) G ∈ GNF =⇒ G ∈ CF (ii) G ∈ CF =⇒ ∃G 0 ∈ GNF : L(G 0 ) = L(G) 2.2.4 reguläre Grammatik (Typ 3) Definition 2.19 (reguläre Grammatik) Eine Grammatik G = ( N, Σ, →, S) heißt linksregulär, falls alle Produktionsregeln von der Form A→ω mit A ∈ N und ω ∈ N ◦ Σ ∪ Σ ∪ {e} sind, d.h. → ⊆ N × N ◦ Σ ∪ Σ ∪ {e}. Entsprechend heißt G rechtsregulär, falls → ⊆ N × Σ ◦ N ∪ Σ ∪ {e}, und G heißt regulär bzw. Typ-3-Grammatik, falls G linksregulär oder rechtsregulär ist. Definition 2.20 (reguläre Sprache) Sei Σ ein Alphabet. (i) Die Menge Reg(Σ) der regulären Ausdrücke über Σ ist induktiv definiert durch Reg(Σ) ::= ∅ | e | Σ | (Reg(Σ) + Reg(Σ)) | (Reg(Σ) ◦ Reg(Σ)) | Reg(Σ)∗ . (ii) Jeder reguläre Ausdruck ρ ∈ Reg(Σ) definiert eine Sprache L(ρ) ⊆ 19 2 Sprache und Grammatik Σ∗ und diese ist induktiv definiert durch L(∅) := ∅, L(e) := {e}, L(σ) := {σ} L(ρ1 + ρ2 ) := L(ρ1 ) ∪ L(ρ2 ), L(ρ1 ◦ ρ2 ) := L(ρ1 ) ◦ L(ρ2 ), L(ρ∗ ) := L(ρ)∗ . (iii) Eine Sprache L ⊆ Σ∗ heißt regulär, wenn es ein ρ ∈ Reg(Σ) mit L(ρ) = L gibt. Satz 2.21 Eine Sprache ist genau dann regulär, wenn sie vom Typ 3 ist. ∀L ⊆ Σ∗ : ∃G ∈ REG : L(G) = L ⇐⇒ ∃ρ ∈ Reg(Σ) : L(ρ) = L Satz 2.22 Eine Sprache L ist genau dann regulär bzw. eine Typ-3Sprache, wenn ein endlicher Automat A mit L(A) = L existiert. ∀L ⊆ Σ∗ : ∃G ∈ REG : L(G) = L ⇐⇒ ∃A ∈ FA : L(A) = L 20 3 Kompilation 3.1 Analyse 3.1.1 lexikalische Analyse 1 42 127 Gegeben sei eine reguläre Grammatik G = ( N, Σ, →, S), die eine Sprache L := L(G) generiert. Die lexikalische Analyse bezüglich G zerlegt einen Eingabetext T ∈ Σ∗ , der zunächst nur als Folge von Symbolen aus Σ vorliegt, in eine Folge von Morphemen bzw. Token aus L. Das kann recht einfach mit einem endlichen Automaten A = ( N ∪ { E, E0 }, Σ, `, S, { E0 }) geschehen. Die Zustandsübergangsrelation ist dabei definiert durch x A ` B :⇐⇒ A → Bx x A ` E :⇐⇒ A → x e A ` B :⇐⇒ A → e. Damit ergibt sich die Konfigurationsübergangsrelation zu ( A, xα) ( B, α) ⇐⇒ A → Bx ( A, xα) ( E, α) ⇐⇒ A → x ( A, α) ( E, α) ⇐⇒ A → e. Um nach einem erkannten Morphem mit der Analyse des verbleibenden Textes fortzufahren, wird noch ( E, α) (S, α) 21 3 Kompilation ( E, e) ( E0 , e) gesetzt. Führt man nun A mit der Startkonfiguration (S, T ) aus, so entsteht bei einem fehlerfreien Text eine endliche Folge von Konfigurationsübergängen (S, T ) ∗ ( E, T1 ) (S, T1 ) ∗ ( E, T2 ) · · · ∗ ( E, Tn ) (S, Tn ) ∗ ( E, e) ( E0 , e) und die Wörter ω0 := T \ T1 , ω1 := T1 \ T2 , . . . , ωn−1 := Tn−1 \ Tn , ωn := Tn bilden die Folge der Morpheme (ωk )nk=0 des Eingabetextes T. 3.1.2 syntaktische Analyse Gegeben sei eine kontextfreie Grammatik G = ( N, Σ, →, S), die eine Sprache L := L(G) generiert. Die semantische Analyse bezüglich G zerlegt einen Eingabetext T ∈ Σ∗ , der zunächst nur als Folge von Symbolen aus Σ vorliegt, in einen Syntaxbaum. 22 3.1 Analyse Definition 3.1 (Syntaxbaum) Sei G = ( N, Σ, →, S) eine kontextfreie Grammatik. (i) Ein markierter gerichteter Baum Γ = (V, E, f ) mit dem Wurzelknoten w ∈ V, einer Kantenmenge E ⊆ V × V und einer Markierung f : V → → heißt Syntaxbaum bezüglich G , wenn (i) f (w) = S → α, und (ii) jeder Knoten v ∈ V mit f (v) = A → α0 A1 α1 A2 α2 . . . An αn genau die Subknoten v1 , v2 , . . . , vn ∈ V mit f (vi ) = Ai → β i hat. (ii) Auf V ist eine lexikalische Ordnung definiert durch v1 ≤ v2 :⇐⇒ (v1 , v2 ) ∈ E∗ ∨ ∃v, v0 , v00 ∈ V : (v, v0 ) ∈ E, (v0 , v1 ) ∈ E∗ , (v, v00 ) ∈ E, (v00 , v2 ) ∈ E∗ , f ( v ) = A → α0 A1 α1 A2 α2 . . . A n α n , f ( v1 ) = A i → β i , f ( v2 ) = A j → β j , i<j 23 3 Kompilation (iii) Die Präfixlinearisierung von Γ ist definiert durch prelin(Γ) := f (w) f (v0 ) f (v1 ) . . . f (vk ) für V = {w, v0 , v1 , . . . , vk } und vi < v j für i < j. (iv) Γ heißt präfixlinearisierter Syntaxbaum von ω ∈ L(G), wenn f (w) f ( v0 ) f ( v1 ) f (vk ) S ⇒ . . . ⇒ . . . ⇒ . . . ⇒ ω, d.h. falls S prelin(Γ) ⇒∗ ω gilt. Das kann recht einfach mit einem (vereinfachten) Kellerautomaten A = ( N ∪ Σ, Σ, `, S) geschehen. Die Zustandsübergangsrelation ist dabei definiert durch e − :⇐⇒ A → ω A`← ω x x ` e :⇐⇒ x ∈ Σ. Damit ergibt sich die Konfigurationsübergangsrelation zu −, β, γ( A, ω )) ⇐⇒ A → ω (αA, β, γ) (α← ω (αx, xβ, γ) (α, β, γ) ⇐⇒ x ∈ Σ und dabei ist γ ∈ ( N × V ∗ )∗ der bisher aufgebaute präfixlinearisierte Syntaxbaum ist. Für ω ∈ L gilt (S, ω, e) ∗ (e, e, γ) und γ ist der präfixlinearisierte Syntaxbaum von ω. Das entspricht der Top-Down-Analyse, d.h. ausgehend vom Satzsymbol S wird eine Folge von Übergängen zum Wort ω ∈ L gesucht. Für die Bottom-Up-Analyse wird ausgehend vom Wort ω eine Folge von Rückwärtsübergängen zum Satzsymbol S gesucht, dafür wird gesetzt (αω, β, γ) (αA, β, γ( A, ω )) ⇐⇒ A → ω (α, xβ, γ) (αx, β, γ) ⇐⇒ x ∈ Σ. Für ω ∈ L gilt dann (e, ω, e) ∗ (S, e, γ) und γ ist der postfixlinearisierte Syntaxbaum von ω. 24 3.1 Analyse Definition 3.2 (rekursiv) Sei G = ( N, Σ, →, S) eine kontextfreie Grammatik. Dann heißt G (i) direkt rechtsrekursiv in A, falls eine Regel A → αA existiert, (ii) direkt linksrekursiv in A, falls eine Regel A → Aβ existiert, (iii) direkt rekursiv in A, falls eine Regel A → αAβ existiert, (iv) indirekt rechtsrekursiv in A, falls eine Ableitung A ⇒∗ αA existiert, (v) indirekt linksrekursiv in A, falls eine Ableitung A ⇒∗ Aβ existiert, (vi) indirekt rekursiv in A, falls eine Ableitung A ⇒∗ αAβ existiert. Dabei sind A ∈ N und α, β ∈ V ∗ . Lemma 3.3 Zu jeder in einem Nichtterminalsymbol A direkt linksrekursiven Grammatik gibt es eine äquivalente nicht in A direkt linksrekursive Grammatik. Beweis: Sei G = ( N, Σ, →, S) eine in A direkt linksrekursive Grammatik. Dann ist G 0 := ( N ∪ { A0 , A00 }, Σ, →0 , S) mit →0 := ((→ \{ A → Aβ}) \ { A → ω | A ω }) ∪ { A0 →0 e, A0 →0 A00 A0 } ∪ { A00 →0 ω | A → Aω } ∪ { A →0 ωA0 | A → ω, A ω } eine äquivalente Grammatik, die nicht in A direkt linksrekursiv ist. Satz 3.4 Zu jeder in einem Nichtterminalsymbol A indirekt linksrekursiven Grammatik gibt es eine äquivalente nicht in A indirekt linksrekursive Grammatik. Beweis: Sei G = ( N, Σ, →, S) eine in A indirekt linksrekursive Grammatik. Dann ist G 0 := ( N, Σ, →0 , S) mit →0 := (→ \{ A0 → Aβ 0 | A ⇒∗ Aβ 0 β, A ⇒∗ A0 β}) ∪ { A0 → β0 β 0 | A ⇒∗ Aβ 0 β, A ⇒∗ A0 β, A0 → Aβ 0 , A → β0 } eine äquivalente Grammatik, die nicht in A indirekt linksrekursiv ist. 25 3 Kompilation LF(k)-, LL(k )- und LR(k)-Grammatiken Definition 3.5 (LF(k)-Grammatik) Eine kontextfreie Grammatik G = ( N, Σ, →, S) heißt LF(k )-Grammatik, falls aus 3.1.3 semantische Analyse 3.2 Synthese 3.2.1 Codeerzeugung 3.2.2 Optimierung 26 Index Alphabet, 13 Grammatik, 15 Sprache, 13 27