6 Kontextfreie Grammatiken Reguläre Grammatiken und damit auch reguläre Ausdrücke bzw. endliche Automaten haben bezüglich ihres Sprachumfangs Grenzen. Diese Grenzen resultieren aus den inschränkungen, denen die Produktionen unterliegen. Lockern wir diese inschränkungen sinnvoll, erhalten wir die kontextfreien Grammatiken. In Programmiersprachen kommen z.b. geschachtelte Klammerstrukturen vor. Beispiel Klammerterme T = { ( ) }, N = { S }, P = { S ( ) S (S) S SS } Die Produktion S (S) passt nicht in das Schema einer regulären Grammatik, da nach dem Nichtterminalzeichen S kein Terminalzeichen (hier die schließende Klammer) folgen darf. Die Grammatik heißt kontextfrei, weil im Wort (S) z.b. die Regel S ( ) angewendet werden darf, ohne dass der Kontext, d.h. die Zeichen links und rechts von S berücksichtigt werden müssen. Wenn wir also die inschränkungen für den Aufbau der rechten Seiten der Produktionen lockern, erwarten wir, dass L regulär L kontextfrei gilt. Im Parser eines Compilers wird der Satzbau einer Sprache durch eine kontextfreie Grammatik G beschrieben. Die kontextfreie Grammatik legt z.b. fest, dass z.b. int max = 5; eine zulässige Tokenfolge ist erlaubt die Konstruktion des Parsers aus der Grammatik G erlaubt die Generierung des Objektcodes während der Syntaxanalyse Seite - 45 -/ 23.11.10
KFG1: Grammatik für arithmetische Ausdrücke T = {+ * ( ) ident number } N = { } Startsymbol = P = { ident number () + * } Aufgaben Ist KFG1 eine reguläre Grammatik? Bilde eine Linksableitung zu s1 = ident + ident * ident Bilde eine Linksableitung zu s2 = ident + ident + ident Lösung zu s1: + ident + ident +* ident + ident* ident+ ident*ident s gibt eine zweite Linksableitung: * + * ident + * ident + ident * ident+ ident * ident Der Satz s1 = ident + ident *ident (und damit die Grammatik) ist mehrdeutig Ableitungsbäume zu KFG1 Linksableitungen zu s 1 = ident + ident *ident ident + ident * ident Dieser Ableitungsbaum liefert bzgl. der Rechenoperationen falsche Priorität. ident + ident * ident Seite - 46 -/ 23.11.10
Syntaxdiagramme Die graphische Darstellung von regulären Grammatiken erfolgt durch Automaten. Kontextfreie Grammatiken (und als Teilmenge auch reguläre Grammatiken) lassen sich mit Hilfe von Syntaxdiagrammen darstellen. Beispiel: () wird dargestellt als Graph, wobei Terminalzeichen in Ovalen und Nichtterminalzeichen in Rechtecken stehen. Durchläuft man diesen Graphen von der ingangskante zur Ausgangskante, dann ist die Folge der Konteninhalte (Rechtecke und Ovale), die dabei aufgesucht werden, aus dem zugehörigen Nichtterminal ableitbar. Ovale/ Kreise enthalten Terminalzeichen, Rechtecke enthalten Nichtterminalzeichen. KFG1 infache Grammatik P = { ident number () + * } + * ( ) ident number Man beachte, dass das Nichtterminalzeichen rekursiv angewendet wird. Wie ist die Rekursionsbasis gegeben? Seite - 47 -/ 23.11.10
Die folgende Grammatik erreicht für + und * die richtige Priorität. KFG2: Grammatik mit Prioritäten T = {+ * ( ) ident number } N = { T F } P = { T + T T F T * F F ident number () } Leite ab und bilde die Ableitungsbäume: s1 = ident +ident * ident s3 = (ident +ident) * ident s2 = ident *ident + ident s4 = ident + ident + ident Gib die Grammatik in Form von Syntaxdiagrammen an. Definition ine Grammatik G heißt kontextfrei, wenn alle Produktionen von der Form A x mit x T N und A N sind. Bemerkung: L G regulär L G kontextfrei Frage: Ist laut Definition eine Produktion der Form A ε zulässig? Seite - 48 -/ 23.11.10
Wir erweitern die Grammatik um die Rechenoperationen "-" und "/". KFG3: rweiterte Grammatik für arithmetische Terme T = {+ - * / ( ) ident number } N = { T F } P = { + T -T T T T * F T / F F F ident number () } Aufgaben: Leite ab und erstelle die Ableitungsbäume. a) s1 = ident / ident + ident b) s2 = ident *(ident + ident) c) s3 = ident + ident -ident d) s4 = - ident e) s5 = ident + ident - ident Lösung zu a) S + T T + T T * F +T F * F + T ident * F + T ident * ident +T ident * ident +F ident * ident + ident s besteht noch ein Problem bei KFG3: + T + T + T... + T +... + T + T s liegt eine sog. Linksrekursion vor: Der Parser geht, ohne ein Terminalzeichen aus T zu verarbeiten, in eine endlose Aufruffolge. Abhilfe liminierung aller Linksrekursionen durch eine Faktorisierung der entsprechenden Produktionen: + T wird ersetzt durch T und +T ε benso T T * F wird ersetzt durch T FT und T *FT ε Seite - 49 -/ 23.11.10
Wir erhalten: KFG4: Grammatik für arithmetische Terme ohne Linksrekursion T = { + - * / ( ) ident number } N = { T T F } P = { T +T -T (für führende Vorzeichen!) +T -T ε T FT T *FT /FT ε F ident number () } + - T T + - Aufgabe: Stelle die restlichen Nichtterminale durch Syntaxdiagramme dar. Aufgaben/ Hausaufgaben A1 Bilde Ableitungen und Ableitungsbäume s1 = ident * ident + ident s2 = iden /(ident + ident) s3 = ident + ident * ident s4 = (ident - ident) + ident * ident s5 = ident / ident / ident Lösung zu s3: T FT ident T ident ε ident ε +T ident ε + FT ident ε + ident T ident ε + ident * FT ident ε + ident * ident ε ε Seite - 50 -/ 23.11.10
A2 Beseitige die Linksrekursion (schwierige Aufgabe) P = { S Aa b A Ac Sd e } Lösung: s liegt eine Linksrekursion über zwei Nichtterminale vor: Schritt 1: Beseitigung der S-Produktion in A Sd durch Schritt 2: A3 Gegeben ist eine Grammatik G mit N = { S } und T = {a b } und P = { S ab asb } Wie lautet L(G)? Leite s = aaabbb ab und gib den Ableitungsbaum an. Ändere G so ab, dass L = {a n b n n N 0 } A4 Hinweis: Kontextsensitive Grammatik Gegeben ist G mit N = { S T U } und T = {a b } und P = { S astu atu UT TU at ab bt bb bu b } Leite s = aaabbb ab. Lösung: S astu aastutu aa atu TUTU aa a bu TUTU aaa btutu aaa bb UTU aaabbtu aaab bbu aaabbb A5 T = {0 1 } N = {S } P = { S S } A6 T = { a b} N = {S A } P= { S aba A aa a } Gib ableitbare Wörter an. Ändere G so, daß L = {aba n n N 0 } Seite - 51 -/ 23.11.10
A7 T = { a b} N = {S T } P = { S Sb S Tb T Ta T a } Gib ableitbare Wörter an. A8 Gegeben ist G mit N = { S T } und T = {ident + ( )} und P = { S ident () ST T +S ε } a) Gib die Syntaxdiagramme zur Grammatik G an. b) Leite ab: s1 = ((ident + (ident + ident))) s2 = (ident + ident) A9 Gegeben ist G mit N = { O } und T = {ident number + - * / ( )} und P = { O () ident number O + - * / } a) Leite ab: s1 = -(id) s2 = ident * ident + ident b) Zeige, dass s2 bei einer Linksableitung eine falsche Priorität besitzt. A10 Zeige, dass folgende Grammatik mehrdeutig ist: P = { S b as Sa } Hinweis: Bilde Linksableitungen zu s = aba Gib zwei unterschiedliche Ableitungsbäume zu a an. A11 Gegeben ist G durch P= { S AB B -S ε A a b c } a) Gib T, N an. b) Gib die Syntaxdiagramme an. c) Gib zu s = a b - c die Linksableitung sowie den Ableitungsbaum an. Welche Klammerung liegt vor? Seite - 52 -/ 23.11.10
A12: Auswahlanweisung (Sprache PASCAL) Gegeben ist G mit N = {S} und T = { if then else a b c }, wobei a und b Anweisungen und c eine Bedingung ist. P = { S a b if c then S if c then S else S } a) Zeige, daß der Satz if c then if c then a else b zwei Ableitungsbäume besitzt. Stelle beide dar. b) Die folgende Grammatik besitzt eine eindeutige Klammerung für s. P = { S S1 S2 S1 T if c then S1 else S2 S2 T if c then S if c then S1 else S2 T a b } Gib den Ableitungsbaum an. (Achtung: s gibt trotzdem mehrere Ableitungen!) Bemerkungen 1) s gibt Grammatiken, die dieselbe Sprache erzeugen. 2) s gibt Grammatiken, welche die leere Sprache erzeugen. 3) Ob zwei Grammatiken dieselbe Sprache erzeugen, ist nicht entscheidbar. 4) Ob eine kontextfreie Grammatik eindeutig ist, ist nicht entscheidbar. Seite - 53 -/ 23.11.10
Kellerautomaten Chomsky-Hierarchie der Grammatiken (1959) Wir charakterisieren die verschiedenen Grammatiken nach Typen (Zum Typ i gehört die Sprache L i ). Die entsprechend leistungsfähigen Automatentypen sind ebenfalls angegeben. s gilt (ohne Beweis) eine echte Teilmengenbeziehung: L 3 L 2 L 1 L 0 Typ 0 Menge der Sprachen, die durch Grammatiken (ohne inschränkung) erzeugbar sind Turingmaschinen Typ 1 Menge der Sprachen, die durch kontextsensitive Grammatiken erzeugbar sind. nichtdeterministisch linear beschränkte Automaten Typ 2 Menge der kontextfreien Sprachen nichtdeterministische Kellerautomaten Typ 3 Menge der regulären Sprachen endliche Automaten (deterministisch oder auch nichtdeterministisch) Seite - 54 - / 23.11.10