Universität Karlsruhe (TH) Lehrstuhl für Programmierparadigmen prachtechnologie und Compiler W 2008/2009 http://pp.info.uni-karlsruhe.de/ Dozent: Prof. Dr.-Ing. G. nelting snelting@ipd.info.uni-karlsruhe.de Übungsleiter: Matthias Braun braun@ipd.info.uni-karlsruhe.de Lösung zu Übungsblatt 2 Ausgabe: 30.10.2008 Besprechung: 5.11.2008 Aufgabe 1: Praxis: Flex Unter http://pp.info.uni-karlsruhe.de/lehre/w200809/compiler/uebung/minicalc.zip finden ie ein C-Programm zum Berechnen von einfachen mathematischen Ausdrücken. Auf der Homepage zur Übung 1 finden sich weitere Informationen zur Installation von flex. 1.1 canner Der enthaltene canner wurde in flex geschrieben, ist allerdings unvollständig. Erweitern ie diesen um folgende Tokentypen: T PLU: das + Zeichen T MINU: das - Zeichen T TAR: das * Zeichen T LAH: das / Zeichen T LBRACE: das ( Zeichen T RBRACE: das ) Zeichen T NUMBER: Eine Zahl. Diese beginnt mit einer Ziffernfolge. Danach kann ein Punkt und optional weitere Ziffern folgen. Alternativ darf die Zahl nur mit einem Punkt beginnen, wenn danach mindestens eine Ziffer folgt. Enthält die Zahl einen Punkt, so darf der Buchstabe e oder E angehängt werden, gefolgt von einem optionalen + oder - und weiteren Ziffern. Zusätzlich soll bei T NUMBER Tokens der Wert der Zahl im Token vermerkt werden. Hinweise: In flex enthält die Variable yytext den erkannten tring. Die Funktion scanf ermöglicht es einen tring in eine Gleitpunktzahl zu konvertieren: sscanf( string, %f, &variable); Der parser Code enthält eine Debughilfe. http://pp.info.uni-karlsruhe.de/lehre/w200809/compiler/uebung/minicalc_solution. zip 1 http://pp.info.uni-karlsruhe.de/lehre/w200809/compiler/uebung
2 Aufgabe 2: Kontextfreie Grammatik 1 2.1 Einfache Grammatiken 1 Betrachten ie die folgende kontextfreie Grammatik und den tring aa+a*: + a Geben ei eine Linksableitung für den tring an. + a+ aa+ aa+a Geben ie eine Rechtsableitung für den tring an. a + a a+ a aa+a Geben ie einen Parse-Baum für den tring an. + a a a Ist die Grammatik mehrdeutig oder nicht? Begründen ie Ihre Antwort. Die Grammatik ist nicht mehrdeutig. Beschreiben ie die von dieser Grammatik generierte prache. Die Grammatik beschreibt eine Postfix-Notation von Ausdrücken mit einer + und einer - Operation. 2.2 Einfache Grammatiken 2 Wiederholen ie die vorige Aufgabe mit ( ) und dem tring (()()).
3 Linksableitung: ( ) ( ) ( ( ) ) ( ( ) ) ( ( ) ) ( ( ) ) ( ( ) ( ) ) ( ( ) ( ) ) ( ( ) ( ) ) ( ( ) ( ) ) ( ( ) ( ) ) Rechtsableitung: ( ) ( ) ( ( ) ) ( ( ) ) ( ( ) ) ( ( ) ( ) ) ( ( ) ( ) ) ( ( ) ( ) ) ( ( ) ( ) ) ( ( ) ( ) ) Parsebaum: ( ) ( ) ( ) Die Grammatik ist nicht eindeutig, Beispiel für einen alternativen Parsebaum des trings: ( ) ( ) ( ) Die von der Grammatik generiert prache ist die Menge aller korrekten Klammerungen. 2.3 Entwerfen von Grammatiken Entwerfen ie Grammatiken für: Die Menge aller trings aus 0 und 1 mit derselben Anzahl von 0 und 1 0 1 1 0 Die Menge aller trings aus 0 und 1 mit einer ungleichen Anzahl von 0 und 1 G Z + G Z G G O + G O G G G 0 G 1 G G 1 G 0 G Z + 0 Z Z 0 Z O + 1 O O 1 O Die Menge aller trings aus 0 und 1 in der 011 nicht als Teilstring vorkommt
4 Als endlicher Automat würde das so aussehen: 1 0 0 1 1 start Z 1 Z 2 F Z 0 Daraus lässt sich leicht eine Grammatik konstruieren: 0 1 0Z 1 Z 1 0Z 1 1Z 2 Z 2 0Z 1
5 Aufgabe 3: Kontextfreie Grammatik 2 Gegeben folgende Grammatik: atz ubjekt Praedikat. ubjekt Nomen Attribut Nomen Pronomen Artikel Adjektive ubstantiv Praedikat Verb Adverben Adjektiv Verb Objekte Adverben Attribut Adjektive Adjektive Adjektiv Objekte Objekt Objekt Objekt Objekt Nomen Attribut Adverben Adverben Adverb Attribut Praeposition ubstantiv Artikel der die das des dem den ein eine eines einem dieser kein PossesivPronomen Verb bin ist hat gehe traf fliegen Adverb naemlich vielleicht hier damals morgen gerne leider links hinterher ubstantiv Junge Bruder chloss Jaeger Leben Blau Gelb Fliegen CD atz Verb Adjektiv schnell fliegende teure schoen neue Pronomen ich du er sie es PossesivPronomen PossesivPronomen mein dein sein seinem Praeposition in an mit 3.1 Ableitungen Geben ie eine Ableitung für folgende ätze an: 1. das Leben ist naemlich schön. atz ubjekt Praedikat. Nomen Attribut Praedikat. Nomen Praedikat. Artikel Adjektive ubstantiv Praedikat. das Leben Praedikat. das Leben Verb Adverben Adjektiv. das Leben ist Adverben Adverb schoen. das Leben ist naemlich schoen. 2. Blau ist das neue Gelb. atz ubjekt Praedikat. Nomen Attribut Praedikat. Nomen Praedikat. Artikel Adjektive ubstantiv Praedikat. ubstantiv Praedikat. Blau Praedikat. Blau Verb Objekte Adverben Attribut. Blau ist Objekte Adverben Attribut. Blau ist Objekt Adverben Attribut. Blau ist Nomen Attribut Adverben Attribut. Blau ist Nomen Adverben Attribut. Blau ist Artikel Adjektive ubstantiv Adverben Attribut. Blau ist das Adjektive ubstantiv Adverben Attribut. Blau ist das Adjektive Adjektiv ubstantiv Adverben Attribut. Blau ist das Adjektiv ubstantiv Adverben Attribut. Blau ist das neue ubstantiv Adverben Attribut. Blau ist das neue Gelb Adverben Attribut. Blau ist das neue Gelb Attribut. Blau ist das neue Gelb. 3. schnell fliegende Fliegen fliegen Fliegen hinterher.
6 atz ubjekt Praedikat. Nomen Attribut Praedikat. Nomen Praedikat. Artikel Adjektive ubstantiv Praedikat. Adjektive ubstantiv Praedikat. Adjektive Adjektiv ubstantiv Praedikat. Adjektive Adjektiv Adjektiv ubstantiv Praedikat. Adjektive Adjektive Adjektiv ubstantiv Praedikat. Adjektive Adjektiv ubstantiv Praedikat. schnell Adjektiv ubstantiv Praedikat. schnell fliegende ubstantiv Praedikat. schnell fliegende Fliegen Praedikat. schnell fliegende Fliegen Verb Objekte Adverben Attribut. schnell fliegende Fliegen fliegen Objekte Adverben Attribut. schnell fliegende Fliegen fliegen Objekt Adverben Attribut. schnell fliegende Fliegen fliegen Nomen Attribut Adverben Attribut. schnell fliegende Fliegen fliegen Artikel Adjektive ubstantiv Attribut Adverben Attribut. schnell fliegende Fliegen fliegen Artikel Adjektive ubstantiv Attribut Adverben Attribut. schnell fliegende Fliegen fliegen ubstantiv Attribut Adverben Attribut. schnell fliegende Fliegen fliegen Fliegen Attribut Adverben Attribut. schnell fliegende Fliegen fliegen Fliegen Adverben Attribut. schnell fliegende Fliegen fliegen Fliegen Adverben Adverb Attribut. schnell fliegende Fliegen fliegen Fliegen Adverb Attribut. schnell fliegende Fliegen fliegen Fliegen hinterher Attribut. schnell fliegende Fliegen fliegen Fliegen hinterher. 4. der Junge bringt seinem Bruder die teure CD. atz ubjekt Praedikat. Nomen Attribut Praedikat. Nomen Praedikat. Artikel Adjektive ubstantiv Praedikat. der Adjektive ubstantiv Praedikat. der ubstantiv Praedikat. der Junge Praedikat. der Junge Verb Objekte Adverben Attribut. der Junge bringt Objekte Adverben Attribut. der Junge bringt Objekt Objekt Adverben Attribut. der Junge bringt Nomen Attribut Objekt Adverben Attribut. der Junge bringt Artikel Adjektive ubstantiv Attribut Objekt Adverben Attribut. der Junge bringt PossesivPronomen Adjektive ubstantiv Attribut Objekt Adverben Attribut. der Junge bringt seinem Adjektive ubstantiv Attribut Objekt Adverben Attribut. der Junge bringt seinem Adjektive ubstantiv Attribut Objekt Adverben Attribut. der Junge bringt seinem ubstantiv Attribut Objekt Adverben Attribut. der Junge bringt seinem Bruder Attribut Objekt Adverben Attribut. der Junge bringt seinem Bruder Objekt Adverben Attribut. der Junge bringt seinem Bruder Nomen Adverben Attribut. der Junge bringt seinem Bruder Artikel Adjektive ubstantiv Adverben Attribut. der Junge bringt seinem Bruder die Adjektive ubstantiv Adverben Attribut. der Junge bringt seinem Bruder die Adjektive Adjektiv ubstantiv Adverben Attribut. der Junge bringt seinem Bruder die Adjektiv ubstantiv Adverben Attribut. der Junge bringt seinem Bruder die teure ubstantiv Adverben Attribut. der Junge bringt seinem Bruder die teure CD Adverben Attribut. der Junge bringt seinem Bruder die teure CD Attribut. der Junge bringt seinem Bruder die teure CD. 5. dieser atz kein Verb. Keine Ableitung möglich atz gehört nicht zur prache. 3.2 Mehrdeutigkeit Ist die Grammatik eindeutig? Geben ie ein Gegenbeispiel oder eine Begründung für die Eindeutigkeit an!
7 Man kann mehrdeutige ätze konstruieren. Zum Beispiel: ich traf den Jaeger mit seinem Gewehr. Dieser atz ist (auch im Deutschen) syntaktisch mehrdeutig. den Jaeger mit seinem Gewehr kann beim Ableiten als einzelnes Objekt interpretiert werden. Alternativ kann man den Jaeger als Objekt interpretieren und traf... mit seinem Gewehr als Verb mit zugehörigem Attribut.
8 Aufgabe 4: Grammar Engineering 4.1 Elimination der Linksrekursion Es folgt eine Grammatik für reguläre Ausdrücke über die ymbole a und b: rexpr rexpr + rterm rterm rterm rterm rfactor rfactor rfactor rfactor rprimary rprimary a b Führen ie eine Linksfaktorisierung dieser Grammatik durch. Eine Linksfaktorisierung ändert an der gegebenen Grammatik nichts. Macht die Linksfaktorisierung sie für Top-Down-Parsing geeignet? Nein. Die Grammatiken enthält Linksrekursionen und ist daher für Top-Down-Parsing ungeeignet. Eliminieren ie anschließend die Linksrekursion aus der ursprünglichen Grammatik. Nutze Regeln aus der Vorlesung: A A α β lässt sich umformen zu: A βa und A αa Daraus ergibt sich: rexpr rterm rexpr rexpr + rexpr rterm rfactor rterm rterm rfactor rterm rfactor rprimary rfactor rfactor rfactor rprimary a b Eignet sich die resultierende Grammatik für Top-Down-Parsing. Ja. 4.2 Dangling-Else Die folgende Grammatik soll das aus der Vorlesung bekannte Problem des Dangling-Else beseitigen: if expr then matchedtmt matchedtmt if expr then matchedtmt else Zeigen ie, dass sie immer noch mehrdeutig ist.
9 Für den atz if expr then if expr then else if expr then else kann man 2 Parsebäume konstruieren: if expr then matchedtmt if expr then matchedtmt else matchedtmt if expr then matchedtmt else matchedtmt matchedtmt if expr then matchedtmt else if expr thenmatchedtmt else matchedtmt if expr then matchedtmt