Die Präsentation wird geladen. Bitte warten

Die Präsentation wird geladen. Bitte warten

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

Ähnliche Präsentationen


Präsentation zum Thema: "Kapitel 4 Compiler Autor: Aho et al. Syntaktische Analyse Folie: 1 Kapitel 4 Syntaktische Analyse: LR Parsing."—  Präsentation transkript:

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

2 Kapitel 4 Compiler Syntaktische Analyse Autor: Aho et al. Was ist Parsing 2 Parser CFG G Token String s s L(G) No Yes Error Message Parsebaum für S in G E num E E+E E (E)

3 Kapitel 4 Compiler Syntaktische Analyse Autor: Aho et al. Top-Down/Bottom-up Parsing 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 Ex Nat | (Ex) | Ex + Ex | Ex * Ex Nat + Nat Ex + Nat Ex + Ex Ex

4 Kapitel 4 Compiler Syntaktische Analyse Autor: Aho et al. LR(k) Bottom-up Parsing Links-nach-Rechts Parsing Rechtsableitung k Token Lookahead Warum Rechtsableitung ??

5 Kapitel 4 Compiler Syntaktische Analyse Autor: Aho et al. Bottom-Up Parsing Nat + Nat * Nat Ex + Nat * Nat Ex + Ex * Nat Ex + Ex * Ex Ex + Ex Ex +Nat* Ex Ex Nat | (Ex) | Ex + Ex | Ex * Ex Parse: Nat + Nat * Nat Reached start symbol success ! Corresponds to a right-most top-down derivation !

6 Kapitel 4 Compiler Syntaktische Analyse Autor: Aho et al. 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. Folie: 6

7 Kapitel 4 Compiler Syntaktische Analyse Autor: Aho et al. Handle Folie: 7 Teilstring, Rumpf einer Produktion, Reduktion: Schritt in umgek. Rechtsableitung

8 Kapitel 4 Compiler Syntaktische Analyse Autor: Aho et al. Handle II Folie: 8 w: nur Terminalsymbole

9 Kapitel 4 Compiler Syntaktische Analyse Autor: Aho et al. Shift-Reduce Parsing Folie: 9 Verschieben von Eingabe auf Stack (shift) Reduzieren auf dem Kopf vom Stack (reduce) Akzeptieren Fehler erkennen

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

11 Kapitel 4 Compiler Syntaktische Analyse Autor: Aho et al. Warum ist der Handle immer oben auf dem Stack (und nicht in der Mitte) ? Folie: 11 In beiden Fällen: shift um Handle oben auf Stack zu bringen

12 Kapitel 4 Compiler Syntaktische Analyse Autor: Aho et al. Shift-Reduce Parsing n STACK INPUT FILEACTION n Nat + Nat * Nat shift n Nat + Nat * Nat reduce n Ex + Nat * Nat shift n Ex +Nat * Nat reduce n Ex +Ex * Nat shift n Ex +Ex*Nat reduce n Ex +Ex*Ex reduce n Ex +Ex reduce n Ex SUCCESS Ex Nat | (Ex) | Ex + Ex | Ex * Ex Idee vom LR(1) parsing: Vorhersage der Aktion auf Basis: - Status vom Stack - nächstes Token der Eingabe Shift reduce Konflikt

13 Kapitel 4 Compiler Syntaktische Analyse Autor: Aho et al. 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

14 Kapitel 4 Compiler Syntaktische Analyse Autor: Aho et al. Item LR(0)-Item (kurz Item): –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: Folie: 14

15 Kapitel 4 Compiler Syntaktische Analyse Autor: Aho et al. Closure (Hülle) von Item-Mengen Folie: 15

16 Kapitel 4 Compiler Syntaktische Analyse Autor: Aho et al. Ein Beispiel für Closure I = {[E.E]} Closure(I):

17 Kapitel 4 Compiler Syntaktische Analyse Autor: Aho et al. 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 Folie: 17

18 Kapitel 4 Compiler Syntaktische Analyse Autor: Aho et al. Ein Beispiel für Goto I = {[EE.], [EE.+T]} GOTO(I,+):

19 Kapitel 4 Compiler Syntaktische Analyse Autor: Aho et al. Kanonische Sammlung von LR(0)-Item-Mengen Folie: 19

20 Kapitel 4 Compiler Syntaktische Analyse Autor: Aho et al. Ein Beispiel für Items

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

22 Kapitel 4 Compiler Syntaktische Analyse Autor: Aho et al. 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 Folie: 22 **: Unterschied zwischen LR(0) und SLR

23 Kapitel 4 Compiler Syntaktische Analyse Autor: Aho et al. Folie: s6 = shift nach Zustand 6 r6 = reduce mit Regel 6

24 Kapitel 4 Compiler Syntaktische Analyse Autor: Aho et al. Folie: 24 id*id

25 Kapitel 4 Compiler Syntaktische Analyse Autor: Aho et al. Folie: 25 id*id+id

26 Kapitel 4 Compiler Syntaktische Analyse Autor: Aho et al. Einschränkungen von SLR Folie: 26 I 2 bei =: - shift nach I 6 - reduce R L Grammatik eindeutig

27 Kapitel 4 Compiler Syntaktische Analyse Autor: Aho et al. 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) Folie: 27

28 Kapitel 4 Compiler Syntaktische Analyse Autor: Aho et al. Overview

29 Kapitel 4 Compiler Syntaktische Analyse Autor: Aho et al. 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 Selse s2 S if E then S else S| if E then S |... shift reduce Eine Lösung: shift als Default

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

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

32 Kapitel 4 Compiler Syntaktische Analyse Autor: Aho et al. 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

33 Kapitel 4 Compiler Syntaktische Analyse Autor: Aho et al. Was haben wir gelernt Lexer –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 Folie: 33


Herunterladen ppt "Kapitel 4 Compiler Autor: Aho et al. Syntaktische Analyse Folie: 1 Kapitel 4 Syntaktische Analyse: LR Parsing."

Ähnliche Präsentationen


Google-Anzeigen