Kapitel 4 Syntaktische Analyse: LR Parsing.

Slides:



Advertisements
Ähnliche Präsentationen
Vorlesung Compilertechnik Sommersemester 2008
Advertisements

Vorlesung Compilertechnik Sommersemester 2008
Technische Universität Dortmund
Software-Engineering II Eingebettete Systeme, Softwarequalität, Projektmanagement Prof. Dr. Holger Schlingloff Institut für Informatik der Humboldt.
Gliederung 1. Grundlagen der Bottom-Up-Syntaxanalyse
Martin Schneider, Folien von Prof. H.-P. Gumm
Suche in Texten (Stringsuche )
10. Kapitel: Syntaxanalyse (Parsing)
8. Formale Sprachen und Grammatiken
Seminar Modellüberprüfung
Grammatiken, Definitionen
Standortfaktoren INTERN - Ausdrucksstark präsentieren.
Parser generieren Yet Another Compiler – Compiler YACC.
Klicke Dich mit der linken Maustaste durch das Übungsprogramm! Vereinfachung von Termen Ein Übungsprogramm der IGS - Hamm/Sieg © IGS-Hamm/Sieg 2006 Dietmar.
Java: Objektorientierte Programmierung
Sortierverfahren Richard Göbel.
FH-Hof Grammatiken Richard Göbel. FH-Hof Begriffe Eine Grammatik definiert die Struktur (Syntax) einer Zeichenkette Eine Grammatik definiert nicht die.
Parser - Verfahren: Rekursiver Abstieg
Parser für CH3-Sprachen
FH-Hof Formale Sprachen - Maschinenmodelle Richard Göbel.
CFGs und Kellerautomaten
WS Algorithmentheorie 02 - Polynomprodukt und Fast Fourier Transformation Prof. Dr. Th. Ottmann.
WS Algorithmentheorie 01 – Divide and Conquer (Segmentschnitt) Prof. Dr. Th. Ottmann.
Vorlesung Informatik 3 Einführung in die Theoretische Informatik (12 – Kellerautomaten, PDA) Prof. Dr. Th. Ottmann.
Vorlesung Informatik 3 Einführung in die Theoretische Informatik (17 –Turingmaschinen) Prof. Dr. Th. Ottmann.
Geometrisches Divide and Conquer
M a r c – o l i v e r p a h l Informatik II – Kapitel 18 Übersetzung Zusammenfassung des Kapitel 18 Küchlin, Weber, Vorversion Einführung in die Informatik,
© 2006 W. Oberschelp, G. Vossen Rechneraufbau & Rechnerstrukturen, Folie 2.1.
Grundkurs Theoretische Informatik, Folie 2.1 © 2006 G. Vossen,K.-U. Witt Grundkurs Theoretische Informatik Kapitel 2 Gottfried Vossen Kurt-Ulrich Witt.
Grundkurs Theoretische Informatik, Folie 3.1 © 2004 G. Vossen,K.-U. Witt Grundkurs Theoretische Informatik Kapitel 3 Gottfried Vossen Kurt-Ulrich Witt.
Fakten, Regeln und Anfragen
Parsing Prolog Aufbaukurs SS 2000 Heinrich-Heine-Universität Düsseldorf Christof Rumpf.
Parsing regulärer Ausdrücke
Beispiele für Ausdrucksalgebren
Agenda Motivation Formale Sprachen Compiler Compilerentwicklung
Institut für Kartographie und Geoinformation Diskrete Mathematik I Vorlesung Bäume-
PKJ 2005/1 Stefan Dissmann Rückblick auf 2005 Was zuletzt in 2005 vorgestellt wurde: Klassen mit Attributen, Methoden und Konstruktoren Referenzen auf.
Kapitel 19 Astronomie Autor: Bennett et al. Unsere Galaxis, die Milchstraße Kapitel 19 Unsere Galaxis, die Milchstraße © Pearson Studium 2010 Folie: 1.
High Performance = Innovative Computer Systems + Efficient Algorithms Friedhelm Meyer auf der Heide 1 HEINZ NIXDORF INSTITUT Universität Paderborn Algorithmen.
Christian Schindelhauer
Christian Schindelhauer
Christian Schindelhauer
Ralf KüstersDagstuhl 2008/11/30 2 Ralf KüstersDagstuhl 2008/11/30 3.
Von der Sprache zum Programm
SLR(1)-Parser Basiert auf LR(0)-Item-Mengen, wie LR(0)-Parser. Zusätzlich wird für Reduktionen bei Follow(X) als Vorschau- menge benutzt. LR(1)-Parser.
LL(1) Grammatiken Simple LL(1) ohne ε-Regeln verschiedene Produktionen, so gilt LL(1) ohne ε-Regeln verschiedene Produktionen, so gilt LL(1) mit ε-Regeln.
DG1 – Sichtbarkeit Aufgabenstellung: Bei einem Pyramidenschnitt soll die Sichtbarkeit festgestellt werden.
LS 2 / Informatik Datenstrukturen, Algorithmen und Programmierung 2 (DAP2)
Syntaxanalyse Bottom-Up und LR(0)
Auslegung eines Vorschubantriebes
Analyse von Ablaufdiagrammen
Formale Sprachen Grammatiken und die Chomsky-Hierarchie
Formale Sprachen Reguläre Sprachen Rudolf FREUND, Marian KOGLER.
Automaten, formale Sprachen und Berechenbarkeit II SoSe 2004 Prof. W. Brauer Teil 1: Wiederholung (Vor allem Folien von Priv.-Doz. Dr. Kindler vom WS 2001/02.
Städtisches Gymnasium Beverungen Friedel Berlage
Analyseprodukte numerischer Modelle
Pflanzenlernkartei 3 Autor: Rudolf Arnold. Pflanze 1 Gattung Merkmale Schädigung Bekämpfung.
Pflanzenlernkartei 2 Autor: Rudolf Arnold. Pflanze 1 Gattung Merkmale Schädigung Bekämpfung.
1 Albert-Ludwigs-Universität Freiburg Rechnernetze und Telematik Prof. Dr. Christian Schindelhauer Informatik III Christian Schindelhauer Wintersemester.
Christian Schindelhauer Wintersemester 2006/07 3. Vorlesung
Christian Schindelhauer Wintersemester 2006/07 6. Vorlesung
Christian Schindelhauer Wintersemester 2006/07 2. Vorlesung
1 Albert-Ludwigs-Universität Freiburg Rechnernetze und Telematik Prof. Dr. Christian Schindelhauer Informatik III Christian Schindelhauer Wintersemester.
Der Erotik Kalender 2005.
Agenda Motivation und Einordnung Syntaxgerichtete Übersetzung
Inhalt Einordnung und Funktion der lexikalische Analyse Grundlagen
Wann ist eine Funktion (über den natürlichen Zahlen) berechenbar?
Anmerkung des Autor Diese Präsentation ist mit Powerpoint für MacOS erstellt. Leider ist sie nicht vollständig mit Powerpoint für Windows kompatibel.
Lookup, accept reduce 1 LR(0) Parser Beispielblatt Grammatik 1. Beginne mit State J 0 und Trage das erste Item aus Produktion 0 ein. Der Punkt des Items.
Tabellengesteuerte Verfahren
 Präsentation transkript:

Kapitel 4 Syntaktische Analyse: LR Parsing

Was ist Parsing E  num Token E  E+E String s E  (E) CFG G Parser s  L(G) Parsebaum für S in G Error Message No Yes

Top-Down/Bottom-up Parsing Ex  Nat | (Ex) | Ex + Ex | Ex * Ex Top-down: Man fängt mit dem “Startsymbol” an Man versucht den String abzuleiten Bottom-up: Man fängt mit dem String an Man versucht das Startsymbol zu erzeugen Produktionen werden von rechts nach links angewandt Nat + Nat Ex + Nat Ex + Ex Ex

LR(k) Bottom-up Parsing Links-nach-Rechts Parsing Rechtsableitung k Token Lookahead Warum Rechtsableitung ??

Corresponds to a right-most Ex  Nat | (Ex) | Ex + Ex | Ex * Ex Bottom-Up Parsing Reached start symbol  success ! Nat + Nat * Nat Ex + Nat * Nat Ex + Ex * Nat Ex + Ex * Ex Ex + Ex Ex Ex Ex Ex Ex Ex + Nat * Corresponds to a right-most top-down derivation ! Parse: Nat + Nat * Nat

Warum LR-Parser? Praktisch alle Programmiersprachenkonstrukte können erkannt werden Mächtiger als LL Weniger Umschreibung von Grammatiken Kompaktere, elegantere Grammatiken Aber: mehr Aufwand um einen LR-Parser zu generieren.

Handle Teilstring, Rumpf einer Produktion, Reduktion: Schritt in umgek. Rechtsableitung

Handle II w: nur Terminalsymbole

Shift-Reduce Parsing Verschieben von Eingabe auf Stack (shift) Reduzieren auf dem Kopf vom Stack (reduce) Akzeptieren Fehler erkennen

Beispiel 1

Warum ist der Handle immer oben auf dem Stack (und nicht in der Mitte) ? In beiden Fällen: shift um Handle oben auf Stack zu bringen

Shift-Reduce Parsing Ex  Nat | (Ex) | Ex + Ex | Ex * Ex STACK INPUT FILE ACTION Nat + Nat * Nat shift Nat + Nat * Nat reduce Ex + Nat * Nat shift Ex + Nat * Nat shift Ex +Nat * Nat reduce Ex +Ex * Nat shift Ex +Ex* Nat shift Ex +Ex*Nat reduce Ex +Ex*Ex reduce Ex +Ex reduce Ex SUCCESS Shift reduce Konflikt Idee vom LR(1) parsing: Vorhersage der Aktion auf Basis: - Status vom Stack - nächstes Token der Eingabe

Algorithmen für das Shift-Reduce Parsing LR(0), SLR, LR(k), LALR(k) LR(k) mächtiger als LL(k) Kompliziert aber es gibt Parsergeneratoren: Yacc [C], CUP, SableCC [Java]  LALR(1) Parser In der Vorlesung: nur ein Beispiel Intuition bekommen

Item LR(0)-Item (kurz Item): Für A → XYZ: eine Produktion mit einem Punkt im Rumpf Intuitiv: potenziell anwendbare Regel was links vom Punkt steht haben wir schon gesehen; wir erwarten noch was rechts vom Punkt steht Für A → XYZ:

Closure (Hülle) von Item-Mengen

Ein Beispiel für Closure I = {[E’→.E]} Closure(I):

Funktion GOTO GOTO(I,X): Hülle aller Items [A→αX.β] so dass [A→α.Xβ] ∈ I Wird für Übergänge in einem Automaten verwendet

Ein Beispiel für Goto I = {[E’→E.], [E→E.+T]} GOTO(I,+):

Kanonische Sammlung von LR(0)-Item-Mengen

Ein Beispiel für Items

T

Verwendung des LR(0) Automaten: SLR-Parsing Startzustand: Closure({[S’→.S]}) Nächstes Eingabesymbol: a Falls Übergang für a existiert: shift Falls [A→α.] in Item-Menge und a in Follow(A):** reduce mit Regel A→α Zustand vom Stapel nehmen, Goto A anwenden Falls a=$ und [S’->S.] in Item-Menge: akzeptieren Sonst: Fehlermeldung **: Unterschied zwischen LR(0) und SLR

1 2 3 4 5 6 s6 = shift nach Zustand 6 r6 = reduce mit Regel 6

id*id

id*id+id

Einschränkungen von SLR Grammatik eindeutig I2 bei =: - shift nach I6 - reduce R → L

LR(1)-Items [A→α.β, a] wobei a der Lookahead ist [A→α., a] bedeutet dass eine Reduktion nur möglich ist wenn das nächste Eingabesymbol a ist LALR(k): “komprimierte” Fassung von LR(k)

Overview

Mehrdeutige Grammatiken: Shift-Reduce Konflikte if a then if b then s1 else s2 if a then { if b then s1 else s2 } or if a then {if b then s1} else s2 if E then if E then S else s2 if E then if E then S else s2 if E then S else s2 S  if E then S else S| if E then S | ...  shift reduce Eine Lösung:  shift als “Default”

Yacc

Für die Klausur Bottom-up Shift/Reduce Parsing Prinzip des SLR Parsing Benutzen eines (LA)LR Parsergenerators Nicht notwendig: Unterschied zwischen LR,LALR,SLR

Was haben wir gelernt Lexer Parser Was kommt: Reguläre Ausdrücke, NFA, DFA lex Parser kontextfreie Grammatiken LL(1) Rekursiv-absteigendes Parsing Shift-Reduce Bottom-up Parsing, SLR Was kommt: SableCC Lexer+Parser Generierung Semantische Analyse