Theoretische Informatik – Mitschrift 2. Grammatiken und die Chomsky-Hierarchie Beispiel: Syntaxdefinition in BNF <anweisung> → <wertzuweisung> | <while-anweisung> <wertzuweisung> → <variable> := <ausdruck> <variable> → A | B | C <ausdruck> → <Zahl> | <variable> | <ausdruck> <op> <ausdruck> <Zahl> → 1 | ... | 9 <op> → + | - | * <while-anweisung> → while <bedingung> do <anweisung> ... Struktur solcher Regelsysteme: ● Nonterminalsymbole (Variablen) ○ Hilfssymbole zur Herleitung von Wörtern ○ in BNF: <...> ● Terminalsymbole = Elemente aus Σ im Bsp.: A, B, C, :=, 1, ..., 9, +, -, *, while, do ● Startsymbol S = spezielles Nonterminalsymbol im Bsp.: <anweisung> ● Regeln/Produktionen = Ersetzung von Teilwörtern durch andere Definition 2.1 (Noam Chomsky, 1956, Linguist): Eine Grammatik (Chomsky-Grammatik, Phrasenstrukturgrammatik) ist ein Quadrupel 〈 N , , P , S 〉 mit - N ist Alphabet mit Terminalsymbolen - ist Alphabet mit Terminalsymbolen Es gilt: N ∩=∅ - P ist endliche Menge von Produktionen (Regeln) Sei X :=∪N. P⊆ X *⋅N⋅X * × X* (linke Regelseite mit min. einem Nonterminal) rechte Regelseite - S ∈N ist Startsymbol Schreibweise für Regeln: 1 2 1 g 2 , falls 1 , 2 ∈ P Definition 2.2: Sei G=〈N , , P , S 〉 Grammatik, X :=∪N. a) Die Ableitungsrelation ⇒g ⊆ X *× X * wird definiert durch: ⇒ g ' : ⇔∃ , ∈ X * ,∃ 1 2 ∈ P : = 1 ∧'= 2 . Sprechweise: ist in einem Schritt zu ' ableitbar. ∗ ⇒g bezeichnet die reflexive transitive Hülle von ⇒g . ∗ Falls ⇒g , sagt man: ist aus ableitbar. ∗ b) Die von G erzeugte Sprache ist LG={w ∈∣S ⇒g w}. c) Äquivalenz von Grammatiken: G1≈G 2 ⇔ LG 1 =L G 2 Bezeichnungskonventionen: ∋a ,b , c , ...,0 ,1 ,2 ,... Terminale N ∋ A , B , C , ... , S Nonterminale ( S Startsymbol) X =∪ N ∋u , v , w , ... X *∋ , , , ... Satzformen ∋u , v , w ,... Terminalwörter Beispiel: G0 =〈{S , M , A , B}, {a , b}, P 0 , S 〉 mit P 0 : S → aMb M → A | B A → aA | ε B → bB | ε S ⇒ g aMb ⇒ g aAb⇒ g ab L G 0 ={awb∣w∈{a}*∪{b }*} G=〈 N , , P , S 〉 N , disjunkte Alphabete N ∋ A , B , C ,... Nonterminale, Variablen ∋a , b , c ,... Terminale P⊆ ∪N *⋅N⋅∪ N *×∪N * ∪ N *∋ , , ... Satzformen *∋u , v , w ... Terminalwörter , ∈ P wird geschrieben als . Ableitungsdefinition: ⇒g ⊆∪ N *× ∪N * S ∈ N Startsymbol Sprache von G : L G :={w∈ *∣S ⇒g * w } Beispiel: Finde G mit L G ={an b n c n∣n≥1} . ={a , b , c }, N ={S , B , C } P: S aBC∣aSBC aB ab bB bb bC bc cc cc CB BC Beispielableitung: S ⇒ aSBC ⇒aaSBCBC ⇒ aaSBBCC ⇒ aaaBCBBCC ⇒ aaaBBCBCC ⇒ aaaBBBCCC ⇒6 a 3 b3 c 3 S ⇒ aSBC ⇒ aaSBCBC ⇒ aaSBBCC ⇒ aaaBCBBCC ⇒ a 3 bCB 2 C 2 ⇒ a 3 bcB2 C 2 (Sackgasse) z.z.: (i) (ii) L G ⊆{a n b n c n∣n≥1} {an bn c n∣n≥1 }⊆L G Chomsky-Hierarchie: Einteilung von Grammatiken in Typen 0 – 3. Definition 2.3: Sei G=〈N , , P , S 〉 , i∈{0,1, 2, 3} G heißt vom Typ i oder Typ-i -Grammatik, falls: G die Eigenschaft ( i ) besitzt: (0) "rekursiv aufzählbar" (keine Einschränkung) (1) "kontextsensitiv": für jede Regel 1 2 ∈P gilt:∣1∣≤∣2∣∨1=S , 2= und, falls S ∈P , darf S nicht auf der rechten Regelseite einer Regel in P auftreten. (2) "kontextfrei": ∀ 1 2∈ P : 1∈ N , d.h. nur Regeln der Form A. (3) "regulär" oder "einseitig linear": ∀ 1 2 ∈P : 1 ∈N ,2 ∈ *⋅N ∪ * d.h. rechtslineare Regeln der Form A wB bzw. A w oder ∀ 1 2 ∈P : 1 ∈N , 2 ∈ N *∪ * d.h. linkslineare Regeln der Form A Bw bzw. A w Beispiel: G0 =〈{S , M , A , B}, {a , b}, P 0 , S 〉 P0: S aMb M A∣B AaA∣ B bB∣ Typ-2-Grammatik mit LG0 ={awb∣w∈{a }*∪{b}*} S ⇒G aMb ⇒G aAb⇒G aaAb⇒G ... ⇒G aa...aAb⇒G a...ab 0 0 0 0 0 0 als rechtslineare Typ-3-Grammatik: P0: S aM M A∣B A aA∣b B bB∣b S ⇒G ' aM ⇒G ' aA ⇒G ' ... aa...aA ⇒G ' aa...ab 0 0 0 0 Jede Typ-3-Grammatik ist auch Typ-2-Grammatik, aber nicht jede Typ-2-Grammatik ist auch Typ1-Grammatik. Problem: In Typ-2-Grammatiken sind beliebige ε-Regeln, d.h. Regeln der Form A → ε erlaubt, in Typ-1-Grammatiken aber nicht. Definition 2.4: Eine formale Sprache L⊆ * heißt vom Typ i bzw. Typ-i-Sprache, falls es eine Typ-i-Grammatik gibt, die L erzeugt, d.h. mit L = L(G). Sei ℒ i :={L⊆ *∣L vom Typ i}. Definition 2.5: Eine Typ-2-Grammatik G=〈 N , , P , S 〉 heißt ε-frei, falls für jede Regel A ∈P gilt: ∈ N ∪ + oder A = S und α = ε und S tritt auf keiner rechten Regelseite in P auf. Es folgt: ε-freie Typ-2-Grammatiken sind auch vom Typ 1. Satz 2.1: Jede kontextfreie Grammatik G=〈N , , P , S 〉 lässt sich in eine äquivalente, ε-freie kontextfreie Grammatik G'=〈N ' , , P' , S '〉 transformieren. Beweis: Sei N :={A∈ N∣A⇒ g *}. Zeige zunächst, dass N in endlich vielen Schritten berechnet werden kann. N 1 :={A∈N∣A∈P} Mit gilt offensichtlich: N k1 :=N k ∪{A∈ N∣A B1 ... Bl ∈ P und ∀ j: B j ∈N k } 1) N = ∪ N k =N n k≥1 2) ∀ k : N k ⊆ N k1⊆ N 3) Mit n=∣N∣ gilt: N n= N nk für alle k ≥1 4) ∈ LG⇔ S ∈N . Definieren nun G ' =〈 N ' , , P ' , S ' 〉 durch N '=N ∪{S ' } P ' :=P ∖ {A ∣∈P }∪{S ' ∣S ∈ N }∪{S ' S } { ∣ ∪ B 1 ... k 1 B 1 A1 2 A2 ... k Ak k1∈P , {A1 ,... , Ak }⊆N , 1 ... k1∈ N ∪ * } Es folgt L(G) = L(G'), denn in G' wird die Möglichkeit ε herzuleiten durch die zusätzlichen Regeln vorweggenommen. Formal erfolgt der Beweis induktiv über die Ableitungslänge. Klassifikation von Grammatiken Typ-3: - rechtslinear der Form A wB , A w - linkslinear der Form A Bw, A w Typ-2: kontextfrei: A Typ-1: kontextsensitiv: 1 2 mit ∣1∣≤∣2∣ oder 1 =S 1 2 = und falls S existiert, darf S auf keiner rechten Regelseite auftreten. Typ-0: rekursiv aufzählbaren: 1 2 beliebig Sprachklassen: ℒ i :={L⊆ *∣∃G vom Typ i mit L= LG} Es gilt: ℒ 3 ⊆ℒ 2 ⊆ℒ 1 ⊆ℒ 0 – Jede Typ-3-Grammatik ist auch vom Typ 2. – Jede Typ-2-Grammatik ist in äquivalente ε-freie Typ-2-Grammatik transformierbar. – Jede ε-freie Typ-2-Grammatik ist vom Typ 1. – Jede Grammatik ist vom Typ 0. Falls ∣∣1 , gilt sogar: ℒ 3 ⊂ℒ 2 ⊂ℒ 1 ⊂ℒ 0 {a n bn∣n≥1}∈ ℒ 2 ∖ ℒ 3 Beweis später S aSb∣ab {a n b n c n∣n≥1} ∈ ℒ 1 ∖ ℒ 2 Falls ∣∣=1 , gilt: ℒ 3 =ℒ 2 (ohne Beweis) Es gilt: ℒ 0 Menge aller Sprachen die durch Grammatiken erzeugbar ist abzählbare Menge ⊂ ℘ * Menge aller formalen Sprachen nicht abzählbare Menge Abzählbare und nicht-abzählbare Mengen Definition 2.6: Eine Menge M heißt abzählbar, falls sie endlich ist oder falls es eine totale, bijektive Abbildung f : ℕ M gibt, d.h. jedem m∈M wird eine eindeutige natürliche Zahl zugeordnet und jede Zahl tritt als Nummer auf. M ={ f i∣i≥0}={ f 0 , f 1 , f 2 , ...} Nicht abzählbare Mengen nennt man überabzählbar. Es gilt: – Jede Teilmenge einer abzählbaren Menge ist abzählbar. – Jede Obermenge einer überabzählbaren Menge ist überabzählbar. Beispiele: abzählbare Mengen: {2 n∣n≥0} , ℤ , ℚ , * (lexikographische Aufzählung) ℒ 0 überabzählbar: ℝ ℘ * Lemma: ℘ * ist überabzählbar. Beweis (Diagonalisierungsprinzip nach Cantor): Annahme, ℘ * sei abzählbar, d.h. ℘ *={L0 , L 1 , L2 ,...} . Sei *={w 0 , w 1 , w 2 , ...} eine Aufzählung von *. Stelle folgende Tabelle auf: w0 w1 w2 L0 b00 b01 b02 L1 b10 b11 ... L2 b20 ... ... ... w3 ... b03 ... Mithilfe der Diagonalen der obigen Tabelle definieren wir LD ={w j∣w j ∉L j b jj =0 }∈℘ * . D.h. es muss ein k geben mit LD = Lk . Für wk folgt: w k ∈ L D =L k ⇔ w k ∉ Lk =L D q.e.d. Wortproblem: Gegeben: Sprache nicht? L⊆ * (z.B. durch Grammatik). Gegeben: w ∈ * . Ist w ∈L oder Frage: Für welche Sprachklassen ist das Wortproblem entscheidbar, d.h. kann das Problem effektiv gelöst werden? Entscheidbare Mengen: Eine Menge M ⊆U heißt entscheidbar, falls ein Algorithmus angegeben werden kann, der zu einem o∈U in endlicher Zeit feststellt, ob o∈ M oder o∉M. Satz 2.2: Das Wortproblem für Typ-1-Sprachen (und damit auch für Typ-2- und Typ-3-Sprachen) ist entscheidbar, d.h. es gibt einen Algorithmus, der immer terminiert und zu einer Typ-1-Grammatik G und einem Wort w ∈ * entscheidet, ob w ∈LG. Beweisidee: Für w = ε ist nichts zu zeigen. Sei w ∈ + . Für jede Ableitung S ⇒ 1 ⇒ 2 ⇒ 3 ⇒ ...⇒ n=v∈ + gilt: 1≤∣1∣≤∣ 2∣≤∣3∣≤...≤∣ n∣=∣v∣ . Da es nur endlich viele Satzformen ∈ ∪N * der Länge ≤v gibt, kann man durch systematisches Durchprobieren feststellen, ob w ∈LG oder nicht q.e.d. Damit folgt: ℒ 1 Beweis⊂der echten Inklusion später {L∣L entscheidbar} ⊂ Halteproblem ℒ 0 .