Grundlagen der Programmierung 2 (Comp-D)

Ähnliche Dokumente
Äquivalente Grammatiken / attributierte Grammatik

6 Kontextfreie Grammatiken

Syntaktische Analyse (Parsen)

Formale Sprachen, reguläre und kontextfreie Grammatiken

2.4 Kontextsensitive und Typ 0-Sprachen

Compiler. Kapitel. Syntaktische Analyse. Kapitel 4. Folie: 1. Syntaktische Analyse. Autor: Aho et al.

Grammatiken und ANTLR

Syntaxanalyse Ausgangspunkt und Ziel

Compiler, Übersetzer. Allgemeine Erklärung / Definition

Automaten und Formale Sprachen

Satz 90 Sei A = (Q, Σ, δ, q 0, F ) ein DFA. Der Zeitaufwand des obigen Minimalisierungsalgorithmus ist O( Q 2 Σ ).

Ein Satz der deutschen Sprache besitzt ein Subjekt, ein Prädikat und ein Objekt (SPO).

Suche nach einem solchen Kreis. Endlichkeitstest. Vereinigung und Durchschnitt. Abschlusseigenschaften

Definition von domänenspezifischen Sprachen mit Xtext: Einführung. 19. November 2014

4.2 Die Chomsky Normalform

Teil V. Weiterführende Themen, Teil 1: Kontextsensitive Sprachen und die Chomsky-Hierarchie

Patrick Simianer Visualisierung regulärer Ausdrücke

Algorithmen mit konstantem Platzbedarf: Die Klasse REG

Zwischencodeerzeugung Compiler II

ARBEITSBLATT ZU FORMALEN SPRACHEN

ist ein regulärer Ausdruck.

Kontextsensitive Sprachen

1 Syntax von Programmiersprachen

Einführung in die Informatik 1

Seminar Informatik: Syntaxanalyse von DKFG mittels Yacc

Informatik I WS 07/08 Tutorium 24

4. 4. Algorithmen und Datenstrukturen in deskriptiven Programmiersprachen

Erwin Grüner

Programmiersprachen und Übersetzer

Beispiel einer Übersetzung

Programmierkurs Python II

Kapitel 2: Formale Sprachen Gliederung. 0. Grundbegriffe 1. Endliche Automaten 2. Formale Sprachen 3. Berechnungstheorie 4. Komplexitätstheorie

Programmiertechnik II

Komplexitätsklassen. (Lauf-)Zeit-Klassen. (Lauf-)Zeit-Klassen. Charakteristische Problemgrößen beim Parsing

Theoretische Informatik 2 (WS 2006/07) Automatentheorie und Formale Sprachen 19

Theoretische Informatik für Wirtschaftsinformatik und Lehramt

1. Der Begriff Informatik 2. Syntax und Semantik von Programmiersprachen. I.2. I.2. Grundlagen von von Programmiersprachen.

Theoretische Informatik. Reguläre Sprachen und Automaten

Grammatiken in Prolog

14. Rot-Schwarz-Bäume

Informatik IV Compilerbau

Funktionale Programmierung. Funktionale Programmierung: Vorlesungsüberblick. Eigenschaften rein funktionaler Programmierung

Einleitung Projektion Selektion Join Mengenop. Vollst.keit. Einleitung Projektion. Selektion Join. Vollst.keit. Einleitung Projektion Selektion Join

Theoretische Informatik I

Grundlagen der Programmierung (Vorlesung 15)

1 Rechnen mit 2 2 Matrizen

9 Compilerbau-Werkzeuge

Rekursiv aufzählbare Sprachen

Entwurf von Algorithmen - Kontrollstrukturen

Formale Methoden 1. Gerhard Jäger 16. Januar Uni Bielefeld, WS 2007/2008 1/19

Algorithmen und Datenstrukturen Laufzeitabschätzung

Notation um Grammatik G hervorzuheben: Eine kontextfreie Grammatik erzeugt eine kontextfreie Sprache. Informatik I -1- WS 2005/2006

Pass by Value Pass by Reference Defaults, Overloading, variable Parameteranzahl

Einfache Ausdrücke Datentypen Rekursive funktionale Sprache Franz Wotawa Institut für Softwaretechnologie

Was ist ein Compiler?

Kapitel 5: Abstrakte Algorithmen und Sprachkonzepte. Elementare Schritte

Grundlagen und Basisalgorithmus

Formale Sprachen. Der Unterschied zwischen Grammatiken und Sprachen. Rudolf Freund, Marian Kogler

Objektorientierte Programmierung. Kapitel 3: Syntaxdiagramme und Grammatikregeln

Wortproblem für kontextfreie Grammatiken

Programmierung und Modellierung

Theoretische Informatik 2

Grundlagen der Programmierung 2. Bäume

Funktionale Programmierung mit Haskell

11.1 Kontextsensitive und allgemeine Grammatiken

Programmierung 2. Übersetzer: Code-Erzeugung. Sebastian Hack. Klaas Boesche. Sommersemester

Endliche Sprachen. Folgerung: Alle endlichen Sprachen sind regulär. Beweis: Sei L={w 1,,w n } Σ*. Dann ist w 1 +L+w n ein regulärer Ausdruck für

Vorlesung Theoretische Informatik

Einführung in die Informatik Grammars & Parsers

Haskell, Typen, und Typberechnung. Grundlagen der Programmierung 3 A. Einige andere Programmiersprachen. Typisierung in Haskell

Kapitel 8. Rekursionsgleichungen. Landau-Symbole. Lösen von Rekursionsgleichungen Allgemeines Iterationsmethode Spezialfälle Erzeugende Funktionen

Ein Ausflug in den Compilerbau

Sprachbeschreibung und Erweiterung

Diskrete Strukturen und Logik WiSe 2007/08 in Trier. Henning Fernau Universität Trier

Automaten und Formale Sprachen alias Theoretische Informatik. Sommersemester 2013

Luis Kornblueh. May 22, 2014

2.11 Kontextfreie Grammatiken und Parsebäume

FORMALE SYSTEME. Sprachen beschreiben. Wiederholung. Wie kann man Sprachen beschreiben? 2. Vorlesung: Grammatiken und die Chomsky-Hierarchie

Theoretische Informatik Testvorbereitung Moritz Resl

Einführung Computerlinguistik. Konstituentensyntax II

2: Zahlentheorie / Restklassen 2.1: Modulare Arithmetik

Datentypen. Agenda für heute, 4. März, Pascal ist eine streng typisierte Programmiersprache

Grundbegriffe der Informatik

26 Hierarchisch strukturierte Daten

Übung zu Grundbegriffe der Informatik. Simon Wacker. 15. November 2013

Kontrollstrukturen, Pseudocode und Modulo-Rechnung

Grundbegriffe der Informatik

Programmierkurs Java

Der λ-kalkül. Frank Huch. Sommersemester 2015

Compilerbau II Skript

Formelsammlung zur Informatik

15ab 21bc 9b = 3b 5a 7c 3

Transkript:

Grundlagen der Programmierung 2 (Comp-D) Prof. Dr. Manfred Schmidt-Schauÿ Künstliche Intelligenz und Softwaretechnologie 31. Mai 2007

Operationen auf Grammatiken Ziel: Normalisierungen, Vereinfachungen Elimination bestimmter Grammatik-Konstrukte Erzeugen eines Parsers Optimierung / Verbesserung des Parsers Transformation G 1 G 2 mit L(G 1 ) = L(G 2 ) Grundlagen der Programmierung 2 (Comp-D) - 1 -

Operationen auf Grammatiken Sei G 1 G 2 mit L(G 1 ) = L(G 2 ) Erhaltung der Semantik? I.a. Es soll gelten: Parsebaum 1 (w) Parsebaum 2 (w) opsemantik 1 (w) = opsemantik 2 (w) Das erfordert: Semantik-Abbildung von G 1 nach G 2 Grundlagen der Programmierung 2 (Comp-D) - 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. Grundlagen der Programmierung 2 (Comp-D) - 3 -

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 Grundlagen der Programmierung 2 (Comp-D) - 4 -

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 Grundlagen der Programmierung 2 (Comp-D) - 5 -

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 für manche Eingaben nicht (Links-)Rekursion ist durchaus sinnvoll, aber inkompatibel mit der Methode des rekursiven Abstiegs. Grundlagen der Programmierung 2 (Comp-D) - 6 -

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. Grundlagen der Programmierung 2 (Comp-D) - 7 -

Elimination von Linksrekursion Begründung für die Korrektheit die formale 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 β(α). Grundlagen der Programmierung 2 (Comp-D) - 8 -

Elimination von Linksrekursion: Syntaxbäume Beispiel Syntaxbäume vorher und nachher: β R R α α β RA α RB RB α ε Grundlagen der Programmierung 2 (Comp-D) - 9 -

L.R.- Elimination Semantik-Transformation? Möglichkeit A: Parsebaum 2 Parsebaum 1 Rücktransformation der Parsebäume Möglichkeit B: Beobachtung: Regel entspricht assoziativem Operator mit neutralem Element: : erlaube Umklammerung und betrachte ε als neutrales Element (β α) α β (α (α ε)) Grundlagen der Programmierung 2 (Comp-D) - 10 -

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) Grundlagen der Programmierung 2 (Comp-D) - 11 -

Beispiel: L.R.-Elimination indirekte Links-Rekursion: A ::= Sa b S ::= Bc Ad e B ::= f...... rekursiver absteigender Parser: Schleife bei bd Erkennung bei fc Grundlagen der Programmierung 2 (Comp-D) - 12 -

Linksrekusion: Zuammenfassung Es gilt: Ein Grammatik ist links-rekursiv, wenn es für ein Nichtterminal A und einen String α eine Herleitung A + Aα gibt. Jede Linksrekursivität kann durch Transformation der Grammatik beseitigt werden unter Beibehaltung der erzeugten formalen Sprache. Aber: andere Herleitungsbäume, Änderungen der Semantik-Funktion Grundlagen der Programmierung 2 (Comp-D) - 13 -

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 Grundlagen der Programmierung 2 (Comp-D) - 14 -

Beseitigung von Mehrdeutigkeiten Diese Mehrdeutigkeiten kann man als Fehler beim Hinschreiben der Grammatik ansehen. Abhilfen: Ändere die Grammatik: gleiche erzeugte Sprache, aber keine Mehrdeutigkeit mehr Aber: nicht automatisch: Eingriff notwendig Bevorzuge bestimmte Parsebäume Keine Änderung der Grammatik Aber: Grammatik und Parser passen nicht mehr zusammen Grundlagen der Programmierung 2 (Comp-D) - 15 -

dangling else Semantik: (Prinzip): 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 Grundlagen der Programmierung 2 (Comp-D) - 16 -

Links-Faktorisierung Problematik bei rekursiv absteigenden Parsern: Gleiche Anfänge von rechten Seiten von Regeln Optimierung: Zusammenfassen der Anfänge der Regelalternativen A ::= αβ 1 αβ 2 wird umgewandelt in: A ::= αb B ::= β 1 β 2 Kann exponentielle Verbesserung der Effizienz bedeuten. Grundlagen der Programmierung 2 (Comp-D) - 17 -

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 Grundlagen der Programmierung 2 (Comp-D) - 18 -

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. Ausklammern auch über mehrere Regeln Grundlagen der Programmierung 2 (Comp-D) - 19 -

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. Grundlagen der Programmierung 2 (Comp-D) - 20 -