Operationen auf Grammatiken Ziel: Normalisierungen, Vereinfachungen, Elimination bestimmter Konstrukte Erzeugen eines Parsers Transformation G 1 G 2 mit L(G 1 ) = L(G 2 ) I.a. Parsebaum 1 (w) Parsebaum 2 (w) Es soll gelten: opsemantik 1 (w) = opsemantik 2 (w) Das erfordert: Semantik-Abbildung von G 1 nach G 2 Effekte: Grammatik kann sich vergrößern Parser kann effizienter werden P raktische Informatik 2, SS 2005, F olien Kap.4, 3, (16. Juni2005) Seite 1
Normalisierungen G ist in Chomsky-Normalform, wenn alle Produktionen von der Form A ::= a oder A ::= BC sind, wobei A, B und C Nichtterminale, a Terminalsymbol G ist in Greibach-Normalform, wenn alle Produktionen von der Form A ::= ab 1... B k sind, wobei A, B i Nichtterminale und a Terminalsymbol P raktische Informatik 2, SS 2005, F olien Kap.4, 3, (16. Juni2005) Seite 2
Elimination der Epsilon-Produktionen Epsilon-Elimination: G 1 G 2 Ziel: In G 2 sollen keine Regeln der Form A ::= ε vorkommen Eigenschaften: L(G 1 ) \ {ε} = L(G 2 ) Bottom-Up-Parsing kann effizienter werden Grammatik (Anzahl Regeln) kann exponentiell wachsen. P raktische Informatik 2, SS 2005, F olien Kap.4, 3, (16. Juni2005) Seite 3
Elimination der Epsilon-Produktionen Vorgehen: 1. Klassifiziere Nichtterminale A in G 1 Benutze dazu Fixpunktiteration A ist löschbar wenn ε L(A) A ist leer wenn L(A) {ε} A ist nicht löschbar wenn weder ε L(A) noch L(A) =. P raktische Informatik 2, SS 2005, F olien Kap.4, 3, (16. Juni2005) Seite 4
Elimination der Epsilon-Produktionen 2. Erzeuge neue Regelmenge zu G 2 für alle G 1 -Regeln A X 1... X n : In G 2 sind alle Regeln A α 1... α n mit: a.) wenn X i nicht löschbar, dann α i = X i ; b.) wenn X i löschbar, dann α i = ε oder α i = X i c.) wenn X i leer ist, dann α i = ε; d.) die neue rechte Seite darf nicht ε sein. P raktische Informatik 2, SS 2005, F olien Kap.4, 3, (16. Juni2005) Seite 5
Elimination der Epsilon-Produktionen (2) Eigenschaften Epsilon-Elimination erzeugt G 2 mit L(G 1 ) \ {ε} = L(G 2 ) Anzahl der Regeln kann exponentiell wachsen. Herleitungsbäume werden durch die Elimination verändert Die Semantik-Abbildung kann angepasst werden: I.a. spielen ε-resultate keine Rolle. analog zu neutralem Element einer Operation P raktische Informatik 2, SS 2005, F olien Kap.4, 3, (16. Juni2005) Seite 6
Elimination der Epsilon-Produktionen: Beispiel Grammatik zu positiven ganzen Zahlen: Zahl ::= Ziffer Zahl ε Ziffer ::= 1... 9 0 Zahl ist löschbar Nach ε-elimination: Zahl ::= Ziffer Zahl Ziffer Ziffer ::= 1... 9 0 P raktische Informatik 2, SS 2005, F olien Kap.4, 3, (16. Juni2005) Seite 7
Epsilon-Elimination: Effekt auf Parsebäume S ::= Zahl Zahl ::= Ziffer Zahl ε Ziffer ::= 1... 9 0 G 1 -Parsebaum für das Wort 12: Zahl 1 Ziffer 1 Zahl 1 1 Ziffer 2 Zahl 2 2 ε P raktische Informatik 2, SS 2005, F olien Kap.4, 3, (16. Juni2005) Seite 8
Semantik für G 1 -Parsebäume S λ(x, y). y Zahl 1 λx, (y1, y2). (10 y1, y1 x + y2) Zahl 2 λx. (1, 0) Ziffer n λx. n ( Alternativ: λx. wert(x) ) Haskell: \x ->(read [x])::int Zahl 1 :: Int->(Int,Int)->(Int,Int). interne Darstellung der Semantik durch Paare: 1. Komponente ist die 10-er Potenz, die der Stelligkeit entspricht, 2. Komponente ist der Zahlenwert des rechten Baumes. ε entspricht dem Wert 0. P raktische Informatik 2, SS 2005, F olien Kap.4, 3, (16. Juni2005) Seite 9
Parsebaum zu G 2 Nach ε-elimination: S ::= Zahl Zahl ::= Ziffer Zahl Ziffer Ziffer ::= 1... 9 0 Zahl 1 Ziffer 1 Zahl 2 1 Ziffer 2 2 P raktische Informatik 2, SS 2005, F olien Kap.4, 3, (16. Juni2005) Seite 10
Semantik für G 2 -Parsebäume S λ(x, y). y Zahl 1 λx, (y1, y2). (10 y1, y1 x + y2) Zahl 2 λx. (10, x) Ziffer n λx. wert(x) Epsilon-Elimination: Zahlberechnung muss verändert werden. P raktische Informatik 2, SS 2005, F olien Kap.4, 3, (16. Juni2005) Seite 11
Elimination von Links-Rekursionen Bei rekursiv absteigenden Parsern: Linksrekursion in der Grammatik bewirkt eine Endlosschleife Bespiel für direkte Links-Rekursion: A ::= Aw Parserfunktion: parsea ein = parsea ein... parsew rest P raktische Informatik 2, SS 2005, F olien Kap.4, 3, (16. Juni2005) Seite 12
Links-Rekursionen Beispielgrammatik Expr ::= Expr + Term Term Term ::= 0... 9 Der rekursiv absteigende Parser dazu terminiert nicht Abhilfe: Umbau der Grammatik bei gleicher erzeugter Sprache P raktische Informatik 2, SS 2005, F olien Kap.4, 3, (16. Juni2005) Seite 13
Links-Rekursionen Definition Eine Grammatik G ist linksrekursiv, wenn es eine Folge von Nichtterminalen A 1,..., A n gibt und eine Folge von Regeln der Grammatik der Form A 1 ::= A 2 w 1, A 2 ::= A 3 w 2,..., A n ::= A 1 w n. Bei linksrekursiven G. terminiert der rekursive absteigende Parser nicht (Links-)Rekursion ist durchaus sinnvoll, aber inkompatibel mit der Methode des rekursiven Abstiegs. P raktische Informatik 2, SS 2005, F olien Kap.4, 3, (16. Juni2005) Seite 14
Elimination der Links-Rekursionen Beispiel A ::= Aα β sind die Regeln zu Nichtterminal A, β startet nicht mit A, und αβ ε. Grammatiktransformation: Erzeuge neues Nichtterminal B Ersetze obige Regeln durch: A ::= β βb B ::= α B α In der neuen Grammatik sind A, B nicht linksrekursiv. P raktische Informatik 2, SS 2005, F olien Kap.4, 3, (16. Juni2005) Seite 15
Elimination von Linksrekursion Begründung für die Korrektheit die formalen Sprache zu A bleibt erhalten: Vorher: A ::= Aα β die formale Sprache zu A entspricht β(α). Nachher: A ::= β βb B ::= α B α formale Sprache zu B: entspricht (α) +. formale Sprache zu A: entspricht β(α). P raktische Informatik 2, SS 2005, F olien Kap.4, 3, (16. Juni2005) Seite 16
Elimination von Linksrekursion: Syntaxbäume Beispiel Syntaxbäume vorher und nachher: R RA R α β RB β α α RB α ε P raktische Informatik 2, SS 2005, F olien Kap.4, 3, (16. Juni2005) Seite 17
L.R.- Elimination Semantik-Transformation? Möglichkeit A: Parsebaum 2 Parsebaum 1 D.h.: Abbildung auf die Parsebäume vor der Transformation Möglichkeit B: Beobachtung: Regel entspricht assoziativem Operator mit neutralem Element: erlaube Umklammerung und ε als neutrales Element P raktische Informatik 2, SS 2005, F olien Kap.4, 3, (16. Juni2005) Seite 18
L.R. Elimination: Syntaxbäume Semantische Abbildung: φ(r) = φ(ra) = φ(rb), Herleitungsbaum vorher: f(f(β, α ), α ) Herleitungsbaum nachher: f(β, f(α, f(α, ε ))). Der semantische Wert ist gleich, wenn ε neutrales Element für f, und f assoziativ ist. f könnte sein: +,, append, concat Beachte * auf Float ist nicht assoziativ wg. Rundung Benutzung der Assoziativität von * verändert in diesem Fall die operationale Semantik P raktische Informatik 2, SS 2005, F olien Kap.4, 3, (16. Juni2005) Seite 19
Beispiel: L.R.-Elimination Expr ::= Expr Term Term Term ::= 0... 9 Nach Elimination der Linksrekursion: Expr ::= Term ExprB Term ExprB ::= Term Term ExprB Term ::= 0... 9 Vorher: 1 2 3 wird als ((1 2) 3) geklammert Nachher: als (1 (2 3)). Falsch! Abhilfe interpretiere als 1 + ( 2) + ( 3) P raktische Informatik 2, SS 2005, F olien Kap.4, 3, (16. Juni2005) Seite 20
Beispiel: L.R.-Elimination indirekte Links-Rekursion: A ::= Sa b S ::= Bc Ad e B ::= f... rekursiver absteigender Parser: Schleife bei bd Erkennung bei fa P raktische Informatik 2, SS 2005, F olien Kap.4, 3, (16. Juni2005) Seite 21
Linksrekusion Es gilt: Ein Grammatik ist links-rekursiv, wenn es für ein Nichtterminal A und einen String α eine Herleitung A + Aα gibt. Es gilt auch: Jede Linksrekursivität kann durch Transformation der Grammatik beseitigt werden unter Beibehaltung der erzeugten formalen Sprache. Aber: andere Herleitungsbäume P raktische Informatik 2, SS 2005, F olien Kap.4, 3, (16. Juni2005) Seite 22
Beseitigung von Mehrdeutigkeiten Klassisches Beispiel: dangling else Stmt ::= if Expr then Stmt else Stmt if Expr then Stmt other Diese Grammatik ist mehrdeutig: if E 1 then if E 2 then S 1 else S 2 hat zwei Parsebäume ifthenelse ifthen ifthen E 1 S 2 E 1 ifthenelse E 2 S 1 E 2 S 1 S 2 P raktische Informatik 2, SS 2005, F olien Kap.4, 3, (16. Juni2005) Seite 23
Beseitigung von Mehrdeutigkeiten Diese Mehrdeutigkeiten kann man als Fehler beim Hinschreiben der Grammatik ansehen. Ändere die Grammatik: Semantik: (Prinzip): gleich erzeugte Sprache aber keine Mehrdeutigkeit mehr else gehört jeweils zum letzten freien then Neue Grammatik: Halbes-IF, Ganzes-IF S ::= HIF GIF HIF ::= if Expr then S GIF ::= if Expr then GIF else S other P raktische Informatik 2, SS 2005, F olien Kap.4, 3, (16. Juni2005) Seite 24
Links-Faktorisierung Problem der rekursiv absteigenden Parser: Gleiche Anfänge von rechten Seiten von Regeln Bewirkt Suche nach der richtigen Alternative Kann exponentielle Verschlechterung der Effizienz bedeuten. Abhilfe: Zusammenfassen der Anfänge der Regelalternativen A ::= αβ 1 αβ 2 wird umgewandelt in: A ::= αb B ::= β 1 β 2 P raktische Informatik 2, SS 2005, F olien Kap.4, 3, (16. Juni2005) Seite 25
Linksfaktorisierung: Beispiel H ::= if Expr then H if Expr then G else H kann man umwandeln in Ifethen ::= if Expr then H2 ::= H G else H H ::= Ifethen H2 P raktische Informatik 2, SS 2005, F olien Kap.4, 3, (16. Juni2005) Seite 26
Linksfaktorisierung: Bemerkungen optimiert rekursiv-absteigende Parser, da unnötiges Zurücksetzen verhindert wird. Semantik: kann leicht angepasst werden, Parsebäumen sind struktur-ähnlich Sinnvoll: Zusammenfassen gleicher Anfänge rechter Seiten von Regeln für verschiedene Nichtterminale Ausklammern auch über mehrere Regeln P raktische Informatik 2, SS 2005, F olien Kap.4, 3, (16. Juni2005) Seite 27
Linksfaktorisierung: Beispiel S ::= HIF GIF HIF ::= if Expr then S GIF ::= if Expr then GIF else S wird zu: S ::= IET IET ::= if Expr then IET2 IET2 ::= HIF2 GIF2 HIF2 ::= S GIF2 ::= GIF else S GIF ::= if Expr then GIF else S Die formalen Sprachen dazu sind gleich Anzahl der Nichtterminale hat sich etwa verdoppelt. P raktische Informatik 2, SS 2005, F olien Kap.4, 3, (16. Juni2005) Seite 28
Bemerkungen zur Fehlererkennung Die Fehlererkennung und -meldung sollte spezifisch sein und möglichst genau die Ursache und Stelle melden. Die Fehlermeldung: Keine Alternativen mehr gefunden in etwa ab Zeile... ist fast ohne Wert Bei deterministischen Parsern: Der Fehlerort ist klar; die Fehlerursache ist auch meist spezifisch genug P raktische Informatik 2, SS 2005, F olien Kap.4, 3, (16. Juni2005) Seite 29