syntaxanalyse bottom-up und lr(0) daniel matthey syntaxanalyse bottom-up und lr(0) daniel matthey

77
Syntaxanalyse Bottom-Up und LR(0) Daniel Matthey Syntaxanalyse Bottom- Up und LR(0) Daniel Matthey

Upload: kreszenz-schlepp

Post on 05-Apr-2015

160 views

Category:

Documents


1 download

TRANSCRIPT

Page 1: Syntaxanalyse Bottom-Up und LR(0) Daniel Matthey Syntaxanalyse Bottom-Up und LR(0) Daniel Matthey

Syntaxanalyse Bottom-Up und LR(0)

Daniel Matthey

Syntaxanalyse Bottom-Up und LR(0)Daniel Matthey

Page 2: Syntaxanalyse Bottom-Up und LR(0) Daniel Matthey Syntaxanalyse Bottom-Up und LR(0) Daniel Matthey

2

Syntaxanalyse Bottom-Up und LR(0)

Daniel Matthey

Agenda

BasicsCompileraufbau

Grammatiken

Ableitungen

Beispiel Parse-Baum

Mehrdeutigkeit

Bottom-Up-ParsingShift-Reduce-Parser inkl. Beispiel

LR(0)-Syntaxanalyse

Items

Die Funktionen CLOSURE(I) und GOTO(I,X)

Der LR(0)-Automat inkl. Beispiel

Parsertabellen

Beispiel

Page 3: Syntaxanalyse Bottom-Up und LR(0) Daniel Matthey Syntaxanalyse Bottom-Up und LR(0) Daniel Matthey

3

Syntaxanalyse Bottom-Up und LR(0)

Daniel Matthey

Agenda

BasicsCompileraufbau

Grammatiken

Ableitungen

Beispiel Parse-Baum

Mehrdeutigkeit

Bottom-Up-ParsingShift-Reduce-Parser inkl. Beispiel

LR(0)-Syntaxanalyse

Items

Die Funktionen CLOSURE(I) und GOTO(I,X)

Der LR(0)-Automat inkl. Beispiel

Parsertabellen

Beispiel

Page 4: Syntaxanalyse Bottom-Up und LR(0) Daniel Matthey Syntaxanalyse Bottom-Up und LR(0) Daniel Matthey

4

Syntaxanalyse Bottom-Up und LR(0)

Daniel Matthey

Compileraufbau

Lexikalische Analyse

Syntaxanalyse

Semantische Analyse

Zwischencode-Generator

Code-Optimierer

Code-Generator

Page 5: Syntaxanalyse Bottom-Up und LR(0) Daniel Matthey Syntaxanalyse Bottom-Up und LR(0) Daniel Matthey

5

Syntaxanalyse Bottom-Up und LR(0)

Daniel Matthey

Agenda

BasicsCompileraufbau

Grammatiken

Ableitungen

Beispiel Parse-Baum

Mehrdeutigkeit

Bottom-Up-ParsingShift-Reduce-Parser inkl. Beispiel

LR(0)-Syntaxanalyse

Items

Die Funktionen CLOSURE(I) und GOTO(I,X)

Der LR(0)-Automat inkl. Beispiel

Parsertabellen

Beispiel

Page 6: Syntaxanalyse Bottom-Up und LR(0) Daniel Matthey Syntaxanalyse Bottom-Up und LR(0) Daniel Matthey

6

Syntaxanalyse Bottom-Up und LR(0)

Daniel Matthey

Grammatik

Besteht aus:- Terminalen - Nichtterminalen - Produktionen - und einem Startsymbol

Page 7: Syntaxanalyse Bottom-Up und LR(0) Daniel Matthey Syntaxanalyse Bottom-Up und LR(0) Daniel Matthey

7

Syntaxanalyse Bottom-Up und LR(0)

Daniel Matthey

Grammatik

Beispiel:

E E + E

E E * E

E ( E )

E id

Page 8: Syntaxanalyse Bottom-Up und LR(0) Daniel Matthey Syntaxanalyse Bottom-Up und LR(0) Daniel Matthey

8

Syntaxanalyse Bottom-Up und LR(0)

Daniel Matthey

Agenda

BasicsCompileraufbau

Grammatiken

Ableitungen

Beispiel Parse-Baum

Mehrdeutigkeit

Bottom-Up-ParsingShift-Reduce-Parser inkl. Beispiel

LR(0)-Syntaxanalyse

Items

Die Funktionen CLOSURE(I) und GOTO(I,X)

Der LR(0)-Automat inkl. Beispiel

Parsertabellen

Beispiel

Page 9: Syntaxanalyse Bottom-Up und LR(0) Daniel Matthey Syntaxanalyse Bottom-Up und LR(0) Daniel Matthey

9

Syntaxanalyse Bottom-Up und LR(0)

Daniel Matthey

Ableitungen

E → E + E → E + id → id + id

E → E + E → id + E → id + id

E E + E E E * E E ( E ) E id

Page 10: Syntaxanalyse Bottom-Up und LR(0) Daniel Matthey Syntaxanalyse Bottom-Up und LR(0) Daniel Matthey

10

Syntaxanalyse Bottom-Up und LR(0)

Daniel Matthey

Agenda

BasicsCompileraufbau

Grammatiken

Ableitungen

Beispiel Parse-Baum

Mehrdeutigkeit

Bottom-Up-ParsingShift-Reduce-Parser inkl. Beispiel

LR(0)-Syntaxanalyse

Items

Die Funktionen CLOSURE(I) und GOTO(I,X)

Der LR(0)-Automat inkl. Beispiel

Parsertabellen

Beispiel

Page 11: Syntaxanalyse Bottom-Up und LR(0) Daniel Matthey Syntaxanalyse Bottom-Up und LR(0) Daniel Matthey

11

Syntaxanalyse Bottom-Up und LR(0)

Daniel Matthey

Parse-Baum für id + id

E

E E + E E E * E E ( E ) E id

Page 12: Syntaxanalyse Bottom-Up und LR(0) Daniel Matthey Syntaxanalyse Bottom-Up und LR(0) Daniel Matthey

12

Syntaxanalyse Bottom-Up und LR(0)

Daniel Matthey

Parse-Baum für id + id

E

+E E

E E + E E E * E E ( E ) E id

Page 13: Syntaxanalyse Bottom-Up und LR(0) Daniel Matthey Syntaxanalyse Bottom-Up und LR(0) Daniel Matthey

13

Syntaxanalyse Bottom-Up und LR(0)

Daniel Matthey

Parse-Baum für id + id

E

+E E

id

E E + E E E * E E ( E ) E id

Page 14: Syntaxanalyse Bottom-Up und LR(0) Daniel Matthey Syntaxanalyse Bottom-Up und LR(0) Daniel Matthey

14

Syntaxanalyse Bottom-Up und LR(0)

Daniel Matthey

Parse-Baum für id + id

E

+E E

id id

E E + E E E * E E ( E ) E id

Page 15: Syntaxanalyse Bottom-Up und LR(0) Daniel Matthey Syntaxanalyse Bottom-Up und LR(0) Daniel Matthey

15

Syntaxanalyse Bottom-Up und LR(0)

Daniel Matthey

Agenda

BasicsCompileraufbau

Grammatiken

Ableitungen

Beispiel Parse-Baum

Mehrdeutigkeit

Bottom-Up-ParsingShift-Reduce-Parser inkl. Beispiel

LR(0)-Syntaxanalyse

Items

Die Funktionen CLOSURE(I) und GOTO(I,X)

Der LR(0)-Automat inkl. Beispiel

Parsertabellen

Beispiel

Page 16: Syntaxanalyse Bottom-Up und LR(0) Daniel Matthey Syntaxanalyse Bottom-Up und LR(0) Daniel Matthey

16

Syntaxanalyse Bottom-Up und LR(0)

Daniel Matthey

Mehrdeutigkeit

E E + E E E * E E ( E ) E id

E

+

EE

* id

Beispiel: id * id + id

id id

E

+

EE

*id id id

Page 17: Syntaxanalyse Bottom-Up und LR(0) Daniel Matthey Syntaxanalyse Bottom-Up und LR(0) Daniel Matthey

17

Syntaxanalyse Bottom-Up und LR(0)

Daniel Matthey

Agenda

BasicsCompileraufbau

Grammatiken

Ableitungen

Beispiel Parse-Baum

Mehrdeutigkeit

Bottom-Up-ParsingShift-Reduce-Parser inkl. Beispiel

LR(0)-Syntaxanalyse

Items

Die Funktionen CLOSURE(I) und GOTO(I,X)

Der LR(0)-Automat inkl. Beispiel

Parsertabellen

Beispiel

Page 18: Syntaxanalyse Bottom-Up und LR(0) Daniel Matthey Syntaxanalyse Bottom-Up und LR(0) Daniel Matthey

18

Syntaxanalyse Bottom-Up und LR(0)

Daniel Matthey

Bottom-Up-Parsing

E E + E E E * E E ( E ) E id

+id id

Page 19: Syntaxanalyse Bottom-Up und LR(0) Daniel Matthey Syntaxanalyse Bottom-Up und LR(0) Daniel Matthey

19

Syntaxanalyse Bottom-Up und LR(0)

Daniel Matthey

Bottom-Up-Parsing

E E + E E E * E E ( E ) E id

+id id

E

Page 20: Syntaxanalyse Bottom-Up und LR(0) Daniel Matthey Syntaxanalyse Bottom-Up und LR(0) Daniel Matthey

20

Syntaxanalyse Bottom-Up und LR(0)

Daniel Matthey

Bottom-Up-Parsing

E E + E E E * E E ( E ) E id

+id id

E E

Page 21: Syntaxanalyse Bottom-Up und LR(0) Daniel Matthey Syntaxanalyse Bottom-Up und LR(0) Daniel Matthey

21

Syntaxanalyse Bottom-Up und LR(0)

Daniel Matthey

Bottom-Up-Parsing

E E + E E E * E E ( E ) E id

E

E E

id id+

Page 22: Syntaxanalyse Bottom-Up und LR(0) Daniel Matthey Syntaxanalyse Bottom-Up und LR(0) Daniel Matthey

22

Syntaxanalyse Bottom-Up und LR(0)

Daniel Matthey

Agenda

BasicsCompileraufbau

Grammatiken

Ableitungen

Beispiel Parse-Baum

Mehrdeutigkeit

Bottom-Up-ParsingShift-Reduce-Parser inkl. Beispiel

LR(0)-Syntaxanalyse

Items

Die Funktionen CLOSURE(I) und GOTO(I,X)

Der LR(0)-Automat inkl. Beispiel

Parsertabellen

Beispiel

Page 23: Syntaxanalyse Bottom-Up und LR(0) Daniel Matthey Syntaxanalyse Bottom-Up und LR(0) Daniel Matthey

23

Syntaxanalyse Bottom-Up und LR(0)

Daniel Matthey

Shift-Reduce-Parser

Neue Grammatik:

E E + T | T

T T * F | F

F ( E ) | id

Rechtsableitung zu id * id: E → T → T * F → T * id → F * id → id * id

Page 24: Syntaxanalyse Bottom-Up und LR(0) Daniel Matthey Syntaxanalyse Bottom-Up und LR(0) Daniel Matthey

24

Syntaxanalyse Bottom-Up und LR(0)

Daniel Matthey

Shift-Reduce-Parser

E E + T | TT T * F | FF ( E ) | id

Parsen von id * id

Page 25: Syntaxanalyse Bottom-Up und LR(0) Daniel Matthey Syntaxanalyse Bottom-Up und LR(0) Daniel Matthey

25

Syntaxanalyse Bottom-Up und LR(0)

Daniel Matthey

Shift-Reduce-Parser

E E + T | TT T * F | FF ( E ) | id

Parsen von id * id

Stack Eingabe Aktion

$ id * id $ Verschieben(shift)

Page 26: Syntaxanalyse Bottom-Up und LR(0) Daniel Matthey Syntaxanalyse Bottom-Up und LR(0) Daniel Matthey

26

Syntaxanalyse Bottom-Up und LR(0)

Daniel Matthey

Shift-Reduce-Parser

E E + T | TT T * F | FF ( E ) | id

Parsen von id * id

Stack Eingabe Aktion

$ id * id $ Verschieben(shift)

$ id * id $ Reduzieren(reduce) durch F → id

Page 27: Syntaxanalyse Bottom-Up und LR(0) Daniel Matthey Syntaxanalyse Bottom-Up und LR(0) Daniel Matthey

27

Syntaxanalyse Bottom-Up und LR(0)

Daniel Matthey

Shift-Reduce-Parser

E E + T | TT T * F | FF ( E ) | id

Parsen von id * id

Stack Eingabe Aktion

$ id * id $ Verschieben(shift)

$ id * id $ Reduzieren(reduce) durch F → id

$ F * id $ Reduzieren durch T → F

Page 28: Syntaxanalyse Bottom-Up und LR(0) Daniel Matthey Syntaxanalyse Bottom-Up und LR(0) Daniel Matthey

28

Syntaxanalyse Bottom-Up und LR(0)

Daniel Matthey

Shift-Reduce-Parser

E E + T | TT T * F | FF ( E ) | id

Parsen von id * id

Stack Eingabe Aktion

$ id * id $ Verschieben(shift)

$ id * id $ Reduzieren(reduce) durch F → id

$ F * id $ Reduzieren durch T → F

$ T * id $ Verschieben

Page 29: Syntaxanalyse Bottom-Up und LR(0) Daniel Matthey Syntaxanalyse Bottom-Up und LR(0) Daniel Matthey

29

Syntaxanalyse Bottom-Up und LR(0)

Daniel Matthey

Shift-Reduce-Parser

E E + T | TT T * F | FF ( E ) | id

Parsen von id * id

Stack Eingabe Aktion

$ id * id $ Verschieben(shift)

$ id * id $ Reduzieren(reduce) durch F → id

$ F * id $ Reduzieren durch T → F

$ T * id $ Verschieben

$ T * id $ Verschieben

Page 30: Syntaxanalyse Bottom-Up und LR(0) Daniel Matthey Syntaxanalyse Bottom-Up und LR(0) Daniel Matthey

30

Syntaxanalyse Bottom-Up und LR(0)

Daniel Matthey

Shift-Reduce-Parser

E E + T | TT T * F | FF ( E ) | id

Parsen von id * id

Stack Eingabe Aktion

$ id * id $ Verschieben(shift)

$ id * id $ Reduzieren(reduce) durch F → id

$ F * id $ Reduzieren durch T → F

$ T * id $ Verschieben

$ T * id $ Verschieben

$ T * id $ Reduzieren durch F → id

Page 31: Syntaxanalyse Bottom-Up und LR(0) Daniel Matthey Syntaxanalyse Bottom-Up und LR(0) Daniel Matthey

31

Syntaxanalyse Bottom-Up und LR(0)

Daniel Matthey

Shift-Reduce-Parser

E E + T | TT T * F | FF ( E ) | id

Parsen von id * id

Stack Eingabe Aktion

$ id * id $ Verschieben(shift)

$ id * id $ Reduzieren(reduce) durch F → id

$ F * id $ Reduzieren durch T → F

$ T * id $ Verschieben

$ T * id $ Verschieben

$ T * id $ Reduzieren durch F → id

$ T * F $ Reduzieren durch T → T * F

Page 32: Syntaxanalyse Bottom-Up und LR(0) Daniel Matthey Syntaxanalyse Bottom-Up und LR(0) Daniel Matthey

32

Syntaxanalyse Bottom-Up und LR(0)

Daniel Matthey

Shift-Reduce-Parser

E E + T | TT T * F | FF ( E ) | id

Parsen von id * id

Stack Eingabe Aktion

$ id * id $ Verschieben(shift)

$ id * id $ Reduzieren(reduce) durch F → id

$ F * id $ Reduzieren durch T → F

$ T * id $ Verschieben

$ T * id $ Verschieben

$ T * id $ Reduzieren durch F → id

$ T * F $ Reduzieren durch T → T * F

$ T $ Reduzieren durch E → T

Page 33: Syntaxanalyse Bottom-Up und LR(0) Daniel Matthey Syntaxanalyse Bottom-Up und LR(0) Daniel Matthey

33

Syntaxanalyse Bottom-Up und LR(0)

Daniel Matthey

Shift-Reduce-Parser

E E + T | TT T * F | FF ( E ) | id

Parsen von id * id

Stack Eingabe Aktion

$ id * id $ Verschieben(shift)

$ id * id $ Reduzieren(reduce) durch F → id

$ F * id $ Reduzieren durch T → F

$ T * id $ Verschieben

$ T * id $ Verschieben

$ T * id $ Reduzieren durch F → id

$ T * F $ Reduzieren durch T → T * F

$ T $ Reduzieren durch E → T

$ E $ AkzeptierenAngelehnt an DragonBook S.286

Page 34: Syntaxanalyse Bottom-Up und LR(0) Daniel Matthey Syntaxanalyse Bottom-Up und LR(0) Daniel Matthey

34

Syntaxanalyse Bottom-Up und LR(0)

Daniel Matthey

Agenda

BasicsCompileraufbau

Grammatiken

Ableitungen

Beispiel Parse-Baum

Mehrdeutigkeit

Bottom-Up-ParsingShift-Reduce-Parser inkl. Beispiel

LR(0)-Syntaxanalyse

Items

Die Funktionen CLOSURE(I) und GOTO(I,X)

Der LR(0)-Automat inkl. Beispiel

Parsertabellen

Beispiel

Page 35: Syntaxanalyse Bottom-Up und LR(0) Daniel Matthey Syntaxanalyse Bottom-Up und LR(0) Daniel Matthey

35

Syntaxanalyse Bottom-Up und LR(0)

Daniel Matthey

LR(0)-Syntaxanalyse

LL(k) und LR(k)-Sprachen:

- erste Buchstabe steht für die Eingabe- zweiter Buchstabe steht für umgekehrte Ableitung- k wird Lookahead genannt

Page 36: Syntaxanalyse Bottom-Up und LR(0) Daniel Matthey Syntaxanalyse Bottom-Up und LR(0) Daniel Matthey

36

Syntaxanalyse Bottom-Up und LR(0)

Daniel Matthey

Agenda

BasicsCompileraufbau

Grammatiken

Ableitungen

Beispiel Parse-Baum

Mehrdeutigkeit

Bottom-Up-ParsingShift-Reduce-Parser inkl. Beispiel

LR(0)-Syntaxanalyse

Items

Die Funktionen CLOSURE(I) und GOTO(I,X)

Der LR(0)-Automat inkl. Beispiel

Parsertabellen

Beispiel

Page 37: Syntaxanalyse Bottom-Up und LR(0) Daniel Matthey Syntaxanalyse Bottom-Up und LR(0) Daniel Matthey

37

Syntaxanalyse Bottom-Up und LR(0)

Daniel Matthey

Items

Statt Grammatiksymbole auf dem Stack nun Zustände, die aus einer Menge von Items bestehen

Folgende Items, für die Entscheidungsunterstützung, enthält die Produktion T T * F:

- T .T * F- T T .* F- T T * .F- T T * F.

Wir sehen 3 verschiedene Fälle

Page 38: Syntaxanalyse Bottom-Up und LR(0) Daniel Matthey Syntaxanalyse Bottom-Up und LR(0) Daniel Matthey

38

Syntaxanalyse Bottom-Up und LR(0)

Daniel Matthey

Agenda

BasicsCompileraufbau

Grammatiken

Ableitungen

Beispiel Parse-Baum

Mehrdeutigkeit

Bottom-Up-ParsingShift-Reduce-Parser inkl. Beispiel

LR(0)-Syntaxanalyse

Items

Die Funktionen CLOSURE(I) und GOTO(I,X)

Der LR(0)-Automat inkl. Beispiel

Parsertabellen

Beispiel

Page 39: Syntaxanalyse Bottom-Up und LR(0) Daniel Matthey Syntaxanalyse Bottom-Up und LR(0) Daniel Matthey

39

Syntaxanalyse Bottom-Up und LR(0)

Daniel Matthey

CLOSURE(I)

Bildet eine Hülle von einer Menge von Items durch:

1. Füge I zu CLOSURE(I) hinzu

2. Gibt es ein Item A a.Bb in CLOSURE(I) und eine Produktion B x, so füge B .x zu CLOSURE(I) hinzu

Page 40: Syntaxanalyse Bottom-Up und LR(0) Daniel Matthey Syntaxanalyse Bottom-Up und LR(0) Daniel Matthey

40

Syntaxanalyse Bottom-Up und LR(0)

Daniel Matthey

GOTO(I,X)

Spezifiziert einen Folgezustand innerhalb eines LR(0)-Automaten anhand der gegebenen Informationen I: Item Menge und X: Grammatiksymbol

Page 41: Syntaxanalyse Bottom-Up und LR(0) Daniel Matthey Syntaxanalyse Bottom-Up und LR(0) Daniel Matthey

41

Syntaxanalyse Bottom-Up und LR(0)

Daniel Matthey

Agenda

BasicsCompileraufbau

Grammatiken

Ableitungen

Beispiel Parse-Baum

Mehrdeutigkeit

Bottom-Up-ParsingShift-Reduce-Parser inkl. Beispiel

LR(0)-Syntaxanalyse

Items

Die Funktionen CLOSURE(I) und GOTO(I,X)

Der LR(0)-Automat inkl. Beispiel

Parsertabellen

Beispiel

Page 42: Syntaxanalyse Bottom-Up und LR(0) Daniel Matthey Syntaxanalyse Bottom-Up und LR(0) Daniel Matthey

42

Syntaxanalyse Bottom-Up und LR(0)

Daniel Matthey

LR(0)-Automat

Zunächst Erweiterung der Grammatik zu:

E‘ E

E E + E

E E * E

E ( E )

E id

Page 43: Syntaxanalyse Bottom-Up und LR(0) Daniel Matthey Syntaxanalyse Bottom-Up und LR(0) Daniel Matthey

43

Syntaxanalyse Bottom-Up und LR(0)

Daniel Matthey

Der LR(0)-Automat

E E + T | TT T * F | FF ( E ) | id

DragonBook S.294

Page 44: Syntaxanalyse Bottom-Up und LR(0) Daniel Matthey Syntaxanalyse Bottom-Up und LR(0) Daniel Matthey

44

Syntaxanalyse Bottom-Up und LR(0)

Daniel Matthey

Shift-Reduce-Parser mit Hilfe des LR(0)-Automaten

E E + T | TT T * F | FF ( E ) | id

Parsen von id * id

Zeile Stack Symbole Eingabe Aktion

(1) 0 $ id * id $ Verschieben zu 5

GOTO(0,id) gibt uns Zustand 5 an

Page 45: Syntaxanalyse Bottom-Up und LR(0) Daniel Matthey Syntaxanalyse Bottom-Up und LR(0) Daniel Matthey

45

Syntaxanalyse Bottom-Up und LR(0)

Daniel Matthey

Der LR(0)-Automat

E E + T | TT T * F | FF ( E ) | id

DragonBook S.294

Page 46: Syntaxanalyse Bottom-Up und LR(0) Daniel Matthey Syntaxanalyse Bottom-Up und LR(0) Daniel Matthey

46

Syntaxanalyse Bottom-Up und LR(0)

Daniel Matthey

Shift-Reduce-Parser mit Hilfe des LR(0)-Automaten

E E + T | TT T * F | FF ( E ) | id

Parsen von id * id

Zeile Stack Symbole Eingabe Aktion

(1) 0 $ id * id $ Verschieben zu 5

(2) 05 $ id * id $ Reduzieren durch F → id

Gibt es keinen Folgezustand, weiß der Parser, dass er reduzieren soll.Bei einer Reduktion wird zunächst der Produktionsrumpf vom Stack entfernt und der Produktionskopf verschoben. Zustand 5 0 3

Page 47: Syntaxanalyse Bottom-Up und LR(0) Daniel Matthey Syntaxanalyse Bottom-Up und LR(0) Daniel Matthey

47

Syntaxanalyse Bottom-Up und LR(0)

Daniel Matthey

Der LR(0)-Automat

E E + T | TT T * F | FF ( E ) | id

DragonBook S.294

Page 48: Syntaxanalyse Bottom-Up und LR(0) Daniel Matthey Syntaxanalyse Bottom-Up und LR(0) Daniel Matthey

48

Syntaxanalyse Bottom-Up und LR(0)

Daniel Matthey

Shift-Reduce-Parser mit Hilfe des LR(0)-Automaten

E E + T | TT T * F | FF ( E ) | id

Parsen von id * id

Zeile Stack Symbole Eingabe Aktion

(1) 0 $ id * id $ Verschieben zu 5

(2) 05 $ id * id $ Reduzieren durch F → id

(3) 03 $ F * id $ Reduzieren durch T → F

Page 49: Syntaxanalyse Bottom-Up und LR(0) Daniel Matthey Syntaxanalyse Bottom-Up und LR(0) Daniel Matthey

49

Syntaxanalyse Bottom-Up und LR(0)

Daniel Matthey

Der LR(0)-Automat

E E + T | TT T * F | FF ( E ) | id

DragonBook S.294

Page 50: Syntaxanalyse Bottom-Up und LR(0) Daniel Matthey Syntaxanalyse Bottom-Up und LR(0) Daniel Matthey

50

Syntaxanalyse Bottom-Up und LR(0)

Daniel Matthey

Shift-Reduce-Parser mit Hilfe des LR(0)-Automaten

E E + T | TT T * F | FF ( E ) | id

Parsen von id * id

Zeile Stack Symbole Eingabe Aktion

(1) 0 $ id * id $ Verschieben zu 5

(2) 05 $ id * id $ Reduzieren durch F → id

(3) 03 $ F * id $ Reduzieren durch T → F

(4) 02 $ T * id $ Verschieben zu 7

Page 51: Syntaxanalyse Bottom-Up und LR(0) Daniel Matthey Syntaxanalyse Bottom-Up und LR(0) Daniel Matthey

51

Syntaxanalyse Bottom-Up und LR(0)

Daniel Matthey

Der LR(0)-Automat

E E + T | TT T * F | FF ( E ) | id

DragonBook S.294

Page 52: Syntaxanalyse Bottom-Up und LR(0) Daniel Matthey Syntaxanalyse Bottom-Up und LR(0) Daniel Matthey

52

Syntaxanalyse Bottom-Up und LR(0)

Daniel Matthey

Shift-Reduce-Parser mit Hilfe des LR(0)-Automaten

E E + T | TT T * F | FF ( E ) | id

Parsen von id * id

Zeile Stack Symbole Eingabe Aktion

(1) 0 $ id * id $ Verschieben zu 5

(2) 05 $ id * id $ Reduzieren durch F → id

(3) 03 $ F * id $ Reduzieren durch T → F

(4) 02 $ T * id $ Verschieben zu 7

(5) 027 $ T * id $ Verschieben zu 5

Page 53: Syntaxanalyse Bottom-Up und LR(0) Daniel Matthey Syntaxanalyse Bottom-Up und LR(0) Daniel Matthey

53

Syntaxanalyse Bottom-Up und LR(0)

Daniel Matthey

Der LR(0)-Automat

E E + T | TT T * F | FF ( E ) | id

DragonBook S.294

Page 54: Syntaxanalyse Bottom-Up und LR(0) Daniel Matthey Syntaxanalyse Bottom-Up und LR(0) Daniel Matthey

54

Syntaxanalyse Bottom-Up und LR(0)

Daniel Matthey

Shift-Reduce-Parser mit Hilfe des LR(0)-Automaten

E E + T | TT T * F | FF ( E ) | id

Parsen von id * id

Zeile Stack Symbole Eingabe Aktion

(1) 0 $ id * id $ Verschieben zu 5

(2) 05 $ id * id $ Reduzieren durch F → id

(3) 03 $ F * id $ Reduzieren durch T → F

(4) 02 $ T * id $ Verschieben zu 7

(5) 027 $ T * id $ Verschieben zu 5

(6) 0275 $ T * id $ Reduzieren durch F → id

Page 55: Syntaxanalyse Bottom-Up und LR(0) Daniel Matthey Syntaxanalyse Bottom-Up und LR(0) Daniel Matthey

55

Syntaxanalyse Bottom-Up und LR(0)

Daniel Matthey

Shift-Reduce-Parser mit Hilfe des LR(0)-Automaten

E E + T | TT T * F | FF ( E ) | id

Parsen von id * id

Zeile Stack Symbole Eingabe Aktion

(1) 0 $ id * id $ Verschieben zu 5

(2) 05 $ id * id $ Reduzieren durch F → id

(3) 03 $ F * id $ Reduzieren durch T → F

(4) 02 $ T * id $ Verschieben zu 7

(5) 027 $ T * id $ Verschieben zu 5

(6) 0275 $ T * id $ Reduzieren durch F → id

(7) 02710 $ T * F $ Reduzieren durch T → T * F

Page 56: Syntaxanalyse Bottom-Up und LR(0) Daniel Matthey Syntaxanalyse Bottom-Up und LR(0) Daniel Matthey

56

Syntaxanalyse Bottom-Up und LR(0)

Daniel Matthey

Shift-Reduce-Parser mit Hilfe des LR(0)-Automaten

E E + T | TT T * F | FF ( E ) | id

Parsen von id * id

Zeile Stack Symbole Eingabe Aktion

(1) 0 $ id * id $ Verschieben zu 5

(2) 05 $ id * id $ Reduzieren durch F → id

(3) 03 $ F * id $ Reduzieren durch T → F

(4) 02 $ T * id $ Verschieben zu 7

(5) 027 $ T * id $ Verschieben zu 5

(6) 0275 $ T * id $ Reduzieren durch F → id

(7) 02710 $ T * F $ Reduzieren durch T → T * F

(8) 02 $ T $ Reduzieren durch E → T

Page 57: Syntaxanalyse Bottom-Up und LR(0) Daniel Matthey Syntaxanalyse Bottom-Up und LR(0) Daniel Matthey

57

Syntaxanalyse Bottom-Up und LR(0)

Daniel Matthey

Shift-Reduce-Parser mit Hilfe des LR(0)-Automaten

E E + T | TT T * F | FF ( E ) | id

Parsen von id * id

Zeile Stack Symbole Eingabe Aktion

(1) 0 $ id * id $ Verschieben zu 5

(2) 05 $ id * id $ Reduzieren durch F → id

(3) 03 $ F * id $ Reduzieren durch T → F

(4) 02 $ T * id $ Verschieben zu 7

(5) 027 $ T * id $ Verschieben zu 5

(6) 0275 $ T * id $ Reduzieren durch F → id

(7) 02710 $ T * F $ Reduzieren durch T → T * F

(8) 02 $ T $ Reduzieren durch E → T

(9) 01 $ E $ Akzeptieren DragonBook S.298

Page 58: Syntaxanalyse Bottom-Up und LR(0) Daniel Matthey Syntaxanalyse Bottom-Up und LR(0) Daniel Matthey

58

Syntaxanalyse Bottom-Up und LR(0)

Daniel Matthey

Agenda

BasicsCompileraufbau

Grammatiken

Ableitungen

Beispiel Parse-Baum

Mehrdeutigkeit

Bottom-Up-ParsingShift-Reduce-Parser inkl. Beispiel

LR(0)-Syntaxanalyse

Items

Die Funktionen CLOSURE(I) und GOTO(I,X)

Der LR(0)-Automat inkl. Beispiel

Parsertabellen

Beispiel

Page 59: Syntaxanalyse Bottom-Up und LR(0) Daniel Matthey Syntaxanalyse Bottom-Up und LR(0) Daniel Matthey

59

Syntaxanalyse Bottom-Up und LR(0)

Daniel Matthey

Parsertabellen

Jeder Parser besteht aus:

- Eingabe- Ausgabe- Stack- Treiberprogramm- Parsertabelle mit zwei Teilen (ACTION und GOTO)

Page 60: Syntaxanalyse Bottom-Up und LR(0) Daniel Matthey Syntaxanalyse Bottom-Up und LR(0) Daniel Matthey

60

Syntaxanalyse Bottom-Up und LR(0)

Daniel Matthey

ACTION(i,a)

Gibt dem Parser konkrete Entscheidungen an:

- Eingabe von Zustand i und Terminal a- Ergebnisse können sein:

- shift j - reduce- accept- error

Page 61: Syntaxanalyse Bottom-Up und LR(0) Daniel Matthey Syntaxanalyse Bottom-Up und LR(0) Daniel Matthey

61

Syntaxanalyse Bottom-Up und LR(0)

Daniel Matthey

Agenda

BasicsCompileraufbau

Grammatiken

Ableitungen

Beispiel Parse-Baum

Mehrdeutigkeit

Bottom-Up-ParsingShift-Reduce-Parser inkl. Beispiel

LR(0)-Syntaxanalyse

Items

Die Funktionen CLOSURE(I) und GOTO(I,X)

Der LR(0)-Automat inkl. Beispiel

Parsertabellen

Beispiel

Page 62: Syntaxanalyse Bottom-Up und LR(0) Daniel Matthey Syntaxanalyse Bottom-Up und LR(0) Daniel Matthey

62

Syntaxanalyse Bottom-Up und LR(0)

Daniel Matthey

Parsertabellen

Zustan

d

ACTION GOTO

- id + * ( ) $ E T F

0 s5 s4 1 2 3

1 s6 acc

2 r2 s7 r2 r2

3 r4 r4 r4 r4 8 2 3

4 s5 s4

5 r6 r6 r6 r6 9 3

6 s5 s4 10

7 s5 s4

8 s6 s11

9 r1 s7 r1 r1

10 r3 r3 r3 r3

11 r5 r5 r5 r5 DragonBook S.303

E E + T | TT T * F | FF ( E ) | id

Page 63: Syntaxanalyse Bottom-Up und LR(0) Daniel Matthey Syntaxanalyse Bottom-Up und LR(0) Daniel Matthey

63

Syntaxanalyse Bottom-Up und LR(0)

Daniel Matthey

LR-Parser mit Hilfe der Parsertabelle

Stack Symbole Eingabe Aktion

(1) 0 id * id + id $ Verschieben zu 5

Parsen von id * id

E E + T | TT T * F | FF ( E ) | id

Page 64: Syntaxanalyse Bottom-Up und LR(0) Daniel Matthey Syntaxanalyse Bottom-Up und LR(0) Daniel Matthey

64

Syntaxanalyse Bottom-Up und LR(0)

Daniel Matthey

Parsertabellen

E E + T | TT T * F | FF ( E ) | id

Zustan

d

ACTION GOTO

- id + * ( ) $ E T F

0 s5 s4 1 2 3

1 s6 acc

2 r2 s7 r2 r2

3 r4 r4 r4 r4 8 2 3

4 s5 s4

5 r6 r6 r6 r6 9 3

6 s5 s4 10

7 s5 s4

8 s6 s11

9 r1 s7 r1 r1

10 r3 r3 r3 r3

11 r5 r5 r5 r5

Page 65: Syntaxanalyse Bottom-Up und LR(0) Daniel Matthey Syntaxanalyse Bottom-Up und LR(0) Daniel Matthey

65

Syntaxanalyse Bottom-Up und LR(0)

Daniel Matthey

LR-Parser mit Hilfe der Parsertabelle

Parsen von id * id

E E + T | TT T * F | FF ( E ) | id

Stack Symbole Eingabe Aktion

(1) 0 id * id + id $ Verschieben zu 5

(2) 05 id * id + id $ Reduzieren durch F → id

Page 66: Syntaxanalyse Bottom-Up und LR(0) Daniel Matthey Syntaxanalyse Bottom-Up und LR(0) Daniel Matthey

66

Syntaxanalyse Bottom-Up und LR(0)

Daniel Matthey

Parsertabellen

Zustan

d

ACTION GOTO

- id + * ( ) $ E T F

0 s5 s4 1 2 3

1 s6 acc

2 r2 s7 r2 r2

3 r4 r4 r4 r4 8 2 3

4 s5 s4

5 r6 r6 r6 r6 9 3

6 s5 s4 10

7 s5 s4

8 s6 s11

9 r1 s7 r1 r1

10 r3 r3 r3 r3

11 r5 r5 r5 r5

E E + T | TT T * F | FF ( E ) | id

Page 67: Syntaxanalyse Bottom-Up und LR(0) Daniel Matthey Syntaxanalyse Bottom-Up und LR(0) Daniel Matthey

67

Syntaxanalyse Bottom-Up und LR(0)

Daniel Matthey

LR-Parser mit Hilfe der Parsertabelle

Parsen von id * id

E E + T | TT T * F | FF ( E ) | id

Stack Symbole Eingabe Aktion

(1) 0 id * id + id $ Verschieben zu 5

(2) 05 id * id + id $ Reduzieren durch F → id

(3) 03 F * id + id $ Reduzieren durch T → F

Page 68: Syntaxanalyse Bottom-Up und LR(0) Daniel Matthey Syntaxanalyse Bottom-Up und LR(0) Daniel Matthey

68

Syntaxanalyse Bottom-Up und LR(0)

Daniel Matthey

Parsertabellen

Zustan

d

ACTION GOTO

- id + * ( ) $ E T F

0 s5 s4 1 2 3

1 s6 acc

2 r2 s7 r2 r2

3 r4 r4 r4 r4 8 2 3

4 s5 s4

5 r6 r6 r6 r6 9 3

6 s5 s4 10

7 s5 s4

8 s6 s11

9 r1 s7 r1 r1

10 r3 r3 r3 r3

11 r5 r5 r5 r5

E E + T | TT T * F | FF ( E ) | id

Page 69: Syntaxanalyse Bottom-Up und LR(0) Daniel Matthey Syntaxanalyse Bottom-Up und LR(0) Daniel Matthey

69

Syntaxanalyse Bottom-Up und LR(0)

Daniel Matthey

LR-Parser mit Hilfe der Parsertabelle

Parsen von id * id

E E + T | TT T * F | FF ( E ) | id

Stack Symbole Eingabe Aktion

(1) 0 id * id + id $ Verschieben zu 5

(2) 05 id * id + id $ Reduzieren durch F → id

(3) 03 F * id + id $ Reduzieren durch T → F

(4) 02 T * id + id $ Verschieben zu 7

Page 70: Syntaxanalyse Bottom-Up und LR(0) Daniel Matthey Syntaxanalyse Bottom-Up und LR(0) Daniel Matthey

70

Syntaxanalyse Bottom-Up und LR(0)

Daniel Matthey

Parsertabellen

Zustan

d

ACTION GOTO

- id + * ( ) $ E T F

0 s5 s4 1 2 3

1 s6 acc

2 r2 s7 r2 r2

3 r4 r4 r4 r4 8 2 3

4 s5 s4

5 r6 r6 r6 r6 9 3

6 s5 s4 10

7 s5 s4

8 s6 s11

9 r1 s7 r1 r1

10 r3 r3 r3 r3

11 r5 r5 r5 r5

E E + T | TT T * F | FF ( E ) | id

Page 71: Syntaxanalyse Bottom-Up und LR(0) Daniel Matthey Syntaxanalyse Bottom-Up und LR(0) Daniel Matthey

71

Syntaxanalyse Bottom-Up und LR(0)

Daniel Matthey

LR-Parser mit Hilfe der Parsertabelle

Parsen von id * id

E E + T | TT T * F | FF ( E ) | id

Stack Symbole Eingabe Aktion

(1) 0 id * id + id $ Verschieben zu 5

(2) 05 id * id + id $ Reduzieren durch F → id

(3) 03 F * id + id $ Reduzieren durch T → F

(4) 02 T * id + id $ Verschieben zu 7

(5) 027 T * id + id $ Verschieben zu 5

Weitere Tabellen

Page 72: Syntaxanalyse Bottom-Up und LR(0) Daniel Matthey Syntaxanalyse Bottom-Up und LR(0) Daniel Matthey

72

Syntaxanalyse Bottom-Up und LR(0)

Daniel Matthey

Parsertabellen

Zustan

d

ACTION GOTO

- id + * ( ) $ E T F

0 s5 s4 1 2 3

1 s6 acc

2 r2 s7 r2 r2

3 r4 r4 r4 r4 8 2 3

4 s5 s4

5 r6 r6 r6 r6 9 3

6 s5 s4 10

7 s5 s4

8 s6 s11

9 r1 s7 r1 r1

10 r3 r3 r3 r3

11 r5 r5 r5 r5

E E + T | TT T * F | FF ( E ) | id

Page 73: Syntaxanalyse Bottom-Up und LR(0) Daniel Matthey Syntaxanalyse Bottom-Up und LR(0) Daniel Matthey

73

Syntaxanalyse Bottom-Up und LR(0)

Daniel Matthey

LR-Parser mit Hilfe der Parsertabelle

Parsen von id * id

E E + T | TT T * F | FF ( E ) | id

Stack Symbole Eingabe Aktion

(1) 0 id * id + id $ Verschieben zu 5

(2) 05 id * id + id $ Reduzieren durch F → id

(3) 03 F * id + id $ Reduzieren durch T → F

(4) 02 T * id + id $ Verschieben zu 7

(5) 027 T * id + id $ Verschieben zu 5

(6) 0275 T * id + id $ Reduzieren durch F → id

Page 74: Syntaxanalyse Bottom-Up und LR(0) Daniel Matthey Syntaxanalyse Bottom-Up und LR(0) Daniel Matthey

74

Syntaxanalyse Bottom-Up und LR(0)

Daniel Matthey

LR-Parser mit Hilfe der Parsertabelle

Parsen von id * id

E E + T | TT T * F | FF ( E ) | id

Stack Symbole Eingabe Aktion

(1) 0 id * id + id $ Verschieben zu 5

(2) 05 id * id + id $ Reduzieren durch F → id

(3) 03 F * id + id $ Reduzieren durch T → F

(4) 02 T * id + id $ Verschieben zu 7

(5) 027 T * id + id $ Verschieben zu 5

(6) 0275 T * id + id $ Reduzieren durch F → id

(7) 02710 T * F + id $ Reduzieren durch T → T * F

Page 75: Syntaxanalyse Bottom-Up und LR(0) Daniel Matthey Syntaxanalyse Bottom-Up und LR(0) Daniel Matthey

75

Syntaxanalyse Bottom-Up und LR(0)

Daniel Matthey

LR-Parser mit Hilfe der Parsertabelle

Parsen von id * id

E E + T | TT T * F | FF ( E ) | id

Stack Symbole Eingabe Aktion

(1) 0 id * id + id $ Verschieben zu 5

(2) 05 id * id + id $ Reduzieren durch F → id

(3) 03 F * id + id $ Reduzieren durch T → F

(4) 02 T * id + id $ Verschieben zu 7

(5) 027 T * id + id $ Verschieben zu 5

(6) 0275 T * id + id $ Reduzieren durch F → id

(7) 02710 T * F + id $ Reduzieren durch T → T * F

(8) 02 T + id $ Reduzieren durch E → T

(9) 01 E + id $ Verschieben

(10) 016 E + id $ Verschieben

(11) 0165 E + id $ Reduzieren durch F → id

(12) 0163 E + F $ Reduzieren durch T → F

(13) 0169 E + T $ Reduzieren durch E → E + T

(14) 01 E $ Akzeptieren

Page 76: Syntaxanalyse Bottom-Up und LR(0) Daniel Matthey Syntaxanalyse Bottom-Up und LR(0) Daniel Matthey

76

Syntaxanalyse Bottom-Up und LR(0)

Daniel Matthey

Parse-Baum

Reduktionsschritte:F id

T F

F id

T T * F

E T

F id

T F

E E + TF

id +id *

F

T

T

E T

E

F

id

Page 77: Syntaxanalyse Bottom-Up und LR(0) Daniel Matthey Syntaxanalyse Bottom-Up und LR(0) Daniel Matthey

77

Syntaxanalyse Bottom-Up und LR(0)

Daniel Matthey

Fragen?