compiler components and their generators - lr parsing

92
Challenge the future Delft University of Technology Course IN4303 Compiler Construction Guido Wachsmuth Compiler Components & Generators Traditional Parsing Algorithms

Upload: guido-wachsmuth

Post on 29-Nov-2014

1.930 views

Category:

Education


0 download

DESCRIPTION

Presentation slides for lecture 13 of course IN4303 on Compiler Construction at TU Delft.

TRANSCRIPT

Page 1: Compiler Components and their Generators - LR Parsing

Challenge the future

DelftUniversity ofTechnology

Course IN4303Compiler Construction

Guido Wachsmuth

Compiler Components & GeneratorsTraditional Parsing Algorithms

Page 2: Compiler Components and their Generators - LR Parsing

lessons learned

LR Parsing

Recap: Traditional Parsing Algorithms

How can we parse context-free languages effectively?

• predictive parsing

Which grammar classes are supported by these algorithms?

• LL(k) grammars, LL(k) languages

How can we generate compiler tools from that?

• implement automaton

• generate parse tables

2

Page 3: Compiler Components and their Generators - LR Parsing

today’s lecture

Lexical Analysis

Overview

3

Page 4: Compiler Components and their Generators - LR Parsing

today’s lecture

Lexical Analysis

Overview

efficient parsing algorithms

• LR parsing

• LR parse table generation

• SLR & LALR parse tables

3

Page 5: Compiler Components and their Generators - LR Parsing

today’s lecture

Lexical Analysis

Overview

efficient parsing algorithms

• LR parsing

• LR parse table generation

• SLR & LALR parse tables

3

Page 6: Compiler Components and their Generators - LR Parsing

LR Parsing

LR parsing

I

4

Page 7: Compiler Components and their Generators - LR Parsing

idea

LR Parsing

LR parsing

problems with LL parsing

• predicting right rule

• left recursion

LR parsing

• see whole left-hand side of a rule

• look ahead

• shift or reduce

5

Page 8: Compiler Components and their Generators - LR Parsing

example

LR Parsing

LR parsing

6

* 3 $

input

$

stack

7* 37 +

Page 9: Compiler Components and their Generators - LR Parsing

example

LR Parsing

LR parsing

6

* 3 $$ 7* 37 +

Page 10: Compiler Components and their Generators - LR Parsing

example

LR Parsing

LR parsing

6

* 3 $$ 7* 37 +

Page 11: Compiler Components and their Generators - LR Parsing

example

LR Parsing

LR parsing

6

* 3 $$ 7* 37 +

* 3 $7+$ E 3*

Page 12: Compiler Components and their Generators - LR Parsing

example

LR Parsing

LR parsing

6

* 3 $$ 7* 37 +

* 3 $7+$ E 3*

Page 13: Compiler Components and their Generators - LR Parsing

example

LR Parsing

LR parsing

6

* 3 $$ 7* 37 +

* 3 $7+$ E 3*

Page 14: Compiler Components and their Generators - LR Parsing

example

LR Parsing

LR parsing

6

* 3 $$ 7* 37 +

* 3 $7+$ E 3*

* 3 $7+$ E * E

Page 15: Compiler Components and their Generators - LR Parsing

example

LR Parsing

LR parsing

6

* 3 $$ 7* 37 +

* 3 $7+$ E 3*

* 3 $7+$ E * E

* 3 $7+$ E

Page 16: Compiler Components and their Generators - LR Parsing

example

LR Parsing

LR parsing

6

* 3 $$ 7* 37 +

* 3 $7+$ E 3*

* 3 $7+$ E * E

* 3 $7+$ E

Page 17: Compiler Components and their Generators - LR Parsing

example

LR Parsing

LR parsing

6

* 3 $$ 7* 37 +

* 3 $7+$ E 3*

* 3 $7+$ E * E

* 3 $7+$ E

Page 18: Compiler Components and their Generators - LR Parsing

example

LR Parsing

LR parsing

6

* 3 $$ 7* 37 +

* 3 $7+$ E 3*

* 3 $7+$ E * E

* 3 $7+$ E

$ E + E 3* $

Page 19: Compiler Components and their Generators - LR Parsing

example

LR Parsing

LR parsing

6

* 3 $$ 7* 37 +

* 3 $7+$ E 3*

* 3 $7+$ E * E

* 3 $7+$ E

$ E + E 3* $

Page 20: Compiler Components and their Generators - LR Parsing

example

LR Parsing

LR parsing

6

* 3 $$ 7* 37 +

* 3 $7+$ E 3*

* 3 $7+$ E * E

* 3 $7+$ E

$ E + E 3* $

Page 21: Compiler Components and their Generators - LR Parsing

example

LR Parsing

LR parsing

6

* 3 $$ 7* 37 +

* 3 $7+$ E 3*

* 3 $7+$ E * E

* 3 $7+$ E

$ E + E 3* $

$ E + E * E $

Page 22: Compiler Components and their Generators - LR Parsing

example

LR Parsing

LR parsing

6

* 3 $$ 7* 37 +

* 3 $7+$ E 3*

* 3 $7+$ E * E

* 3 $7+$ E

$ E + E 3* $

$ E + E

$ E + E * E $

$

Page 23: Compiler Components and their Generators - LR Parsing

example

LR Parsing

LR parsing

6

* 3 $$ 7* 37 +

* 3 $7+$ E 3*

* 3 $7+$ E * E

* 3 $7+$ E

$ E + E 3* $

$ E + E

$ E + E * E $

$

$ E $

Page 24: Compiler Components and their Generators - LR Parsing

example

LR Parsing

LR parsing

6

* 3 $$ 7* 37 +

* 3 $7+$ E 3*

* 3 $7+$ E * E

* 3 $7+$ E

$ E + E 3* $

$ E + E

$ E + E * E $

$

$ E $

Page 25: Compiler Components and their Generators - LR Parsing

example

LR Parsing

LR parsing

6

* 3 $$ 7* 37 +

* 3 $7+$ E 3*

* 3 $7+$ E * E

* 3 $7+$ E

$ E + E 3* $

$ E + E

$ E + E * E $

$

$ E $

$ S

Page 26: Compiler Components and their Generators - LR Parsing

LR Parsing

Grammar classes

7

context-free grammars

LL(k)

LL(1)

LL(0)

Page 27: Compiler Components and their Generators - LR Parsing

LR Parsing

Grammar classes

7

context-free grammars

LR(0)

LL(k)

LL(1)

LL(0)

Page 28: Compiler Components and their Generators - LR Parsing

LR Parsing

Grammar classes

7

context-free grammars

LR(1)

LR(0)

LL(k)

LL(1)

LL(0)

Page 29: Compiler Components and their Generators - LR Parsing

LR Parsing

Grammar classes

7

context-free grammars

LR(k)

LR(1)

LR(0)

LL(k)

LL(1)

LL(0)

Page 30: Compiler Components and their Generators - LR Parsing

LR Parsing

Grammar classes

7

context-free grammars

LR(k)

LR(1)

SLR

LR(0)

LL(k)

LL(1)

LL(0)

Page 31: Compiler Components and their Generators - LR Parsing

LR Parsing

Grammar classes

7

context-free grammars

LR(k)

LR(1)

LALR(1)

SLR

LR(0)

LL(k)

LL(1)

LL(0)

Page 32: Compiler Components and their Generators - LR Parsing

LR Parsing

LR parse tables

II

8

Page 33: Compiler Components and their Generators - LR Parsing

parse table

LR Parsing 9

rows

• states of a DFA

columns

• topmost stack symbol

• Σ, N

entries

• reduce, goto state

• shift, goto state

• goto state

LR parsing

T1 ... N1 ...

1 s 3

2 g 5

3 r 1

4 r 2

5

6 g 1

7 s 1

8

...

Page 34: Compiler Components and their Generators - LR Parsing

items, closure & goto

LR Parsing

LR(0) parse tables

10

S → x S → ( L ) L → SL → L , S

Page 35: Compiler Components and their Generators - LR Parsing

S’ → . S $

items, closure & goto

LR Parsing

LR(0) parse tables

10

S → x S → ( L ) L → SL → L , S

Page 36: Compiler Components and their Generators - LR Parsing

S’ → . S $

items, closure & goto

LR Parsing

LR(0) parse tables

10

item

S → x S → ( L ) L → SL → L , S

Page 37: Compiler Components and their Generators - LR Parsing

closure

• for every item A → α . X β

• for every rule X → γ

• add item X → . γ

S’ → . S $

items, closure & goto

LR Parsing

LR(0) parse tables

10

item

S → x S → ( L ) L → SL → L , S

Page 38: Compiler Components and their Generators - LR Parsing

S’ → . S $S → . x S → . ( L )

closure

• for every item A → α . X β

• for every rule X → γ

• add item X → . γ

items, closure & goto

LR Parsing

LR(0) parse tables

10

S → x S → ( L ) L → SL → L , S

Page 39: Compiler Components and their Generators - LR Parsing

S’ → . S $S → . x S → . ( L )

items, closure & goto

LR Parsing

LR(0) parse tables

10

S → x S → ( L ) L → SL → L , S

Page 40: Compiler Components and their Generators - LR Parsing

S’ → . S $S → . x S → . ( L )

items, closure & goto

LR Parsing

LR(0) parse tables

10

S’ → S . $

S S → x S → ( L ) L → SL → L , S

Page 41: Compiler Components and their Generators - LR Parsing

S’ → . S $S → . x S → . ( L )

items, closure & goto

LR Parsing

LR(0) parse tables

10

S’ → S . $

S

x S → x .

S → x S → ( L ) L → SL → L , S

Page 42: Compiler Components and their Generators - LR Parsing

S’ → . S $S → . x S → . ( L )

items, closure & goto

LR Parsing

LR(0) parse tables

10

S’ → S . $

S

x S → x .

( S → ( . L )

S → x S → ( L ) L → SL → L , S

Page 43: Compiler Components and their Generators - LR Parsing

S’ → . S $S → . x S → . ( L )

items, closure & goto

LR Parsing

LR(0) parse tables

10

S’ → S . $

S

x S → x .

( S → ( . L ) L → . SL → . L , SS → . x S → . ( L )

S → x S → ( L ) L → SL → L , S

Page 44: Compiler Components and their Generators - LR Parsing

S’ → . S $S → . x S → . ( L )

items, closure & goto

LR Parsing

LR(0) parse tables

10

S’ → S . $

S

x S → x .

( S → ( . L ) L → . SL → . L , SS → . x S → . ( L )

x

S → x S → ( L ) L → SL → L , S

Page 45: Compiler Components and their Generators - LR Parsing

S’ → . S $S → . x S → . ( L )

items, closure & goto

LR Parsing

LR(0) parse tables

10

S’ → S . $

S

x S → x .

( S → ( . L ) L → . SL → . L , SS → . x S → . ( L )

x

( S → x S → ( L ) L → SL → L , S

Page 46: Compiler Components and their Generators - LR Parsing

S’ → . S $S → . x S → . ( L )

items, closure & goto

LR Parsing

LR(0) parse tables

10

S’ → S . $

S

x S → x .

( S → ( . L ) L → . SL → . L , SS → . x S → . ( L )

x

(

S

L → S .

S → x S → ( L ) L → SL → L , S

Page 47: Compiler Components and their Generators - LR Parsing

S’ → . S $S → . x S → . ( L )

items, closure & goto

LR Parsing

LR(0) parse tables

10

S’ → S . $

S

x S → x .

( S → ( . L ) L → . SL → . L , SS → . x S → . ( L )

x

(

S

L → S .

L S → ( L . ) L → L . , S

S → x S → ( L ) L → SL → L , S

Page 48: Compiler Components and their Generators - LR Parsing

S’ → . S $S → . x S → . ( L )

items, closure & goto

LR Parsing

LR(0) parse tables

10

S’ → S . $

S

x S → x .

( S → ( . L ) L → . SL → . L , SS → . x S → . ( L )

x

(

S

L → S .

L S → ( L . ) L → L . , S

)

S → ( L ) .

S → x S → ( L ) L → SL → L , S

Page 49: Compiler Components and their Generators - LR Parsing

S’ → . S $S → . x S → . ( L )

items, closure & goto

LR Parsing

LR(0) parse tables

10

S’ → S . $

S

x S → x .

( S → ( . L ) L → . SL → . L , SS → . x S → . ( L )

x

(

S

L → S .

L S → ( L . ) L → L . , S

)

S → ( L ) .

,L → L , . S

S → x S → ( L ) L → SL → L , S

Page 50: Compiler Components and their Generators - LR Parsing

S’ → . S $S → . x S → . ( L )

L → L , . S S → . x S → . ( L )

items, closure & goto

LR Parsing

LR(0) parse tables

10

S’ → S . $

S

x S → x .

( S → ( . L ) L → . SL → . L , SS → . x S → . ( L )

x

(

S

L → S .

L S → ( L . ) L → L . , S

)

S → ( L ) .

,

S → x S → ( L ) L → SL → L , S

Page 51: Compiler Components and their Generators - LR Parsing

S’ → . S $S → . x S → . ( L )

L → L , . S S → . x S → . ( L )

items, closure & goto

LR Parsing

LR(0) parse tables

10

S’ → S . $

S

x S → x .

( S → ( . L ) L → . SL → . L , SS → . x S → . ( L )

x

(

S

L → S .

L S → ( L . ) L → L . , S

)

S → ( L ) .

,

x

S → x S → ( L ) L → SL → L , S

Page 52: Compiler Components and their Generators - LR Parsing

S’ → . S $S → . x S → . ( L )

L → L , . S S → . x S → . ( L )

items, closure & goto

LR Parsing

LR(0) parse tables

10

S’ → S . $

S

x S → x .

( S → ( . L ) L → . SL → . L , SS → . x S → . ( L )

x

(

S

L → S .

L S → ( L . ) L → L . , S

)

S → ( L ) .

,

x

(

S → x S → ( L ) L → SL → L , S

Page 53: Compiler Components and their Generators - LR Parsing

S’ → . S $S → . x S → . ( L )

L → L , . S S → . x S → . ( L )

items, closure & goto

LR Parsing

LR(0) parse tables

10

S’ → S . $

S

x S → x .

( S → ( . L ) L → . SL → . L , SS → . x S → . ( L )

x

(

S

L → S .

L S → ( L . ) L → L . , S

)

S → ( L ) .

,

x

(

SL → L , S .

S → x S → ( L ) L → SL → L , S

Page 54: Compiler Components and their Generators - LR Parsing

S’ → . S $S → . x S → . ( L )

L → L , . S S → . x S → . ( L )

items, closure & goto

LR Parsing

LR(0) parse tables

10

S’ → S . $

S

x S → x .

( S → ( . L ) L → . SL → . L , SS → . x S → . ( L )

x

(

S

L → S .

L S → ( L . ) L → L . , S

)

S → ( L ) .

,

x

(

SL → L , S .

S → x S → ( L ) L → SL → L , S

12

3

4 6 7

5

8

9

Page 55: Compiler Components and their Generators - LR Parsing

( ) x , $ S L

1 s 3 s 2 g 4

2 r 1 r 1 r 1 r 1 r 1

3 s 3 s 2 g 6 g 5

4 a

5 s 7 s 8

6 r 3 r 3 r 3 r 3 r 3

7 r 2 r 2 r 2 r 2 r 2

8 s 3 s 2 g 9

9 r 4 r 4 r 4 r 4 r 4

result

LR Parsing 11

LR(0) parse tables

S → x S → ( L ) L → SL → L , S

Page 56: Compiler Components and their Generators - LR Parsing

( ) x , $ S L

1 s 3 s 2 g 4

2 r 1 r 1 r 1 r 1 r 1

3 s 3 s 2 g 6 g 5

4 a

5 s 7 s 8

6 r 3 r 3 r 3 r 3 r 3

7 r 2 r 2 r 2 r 2 r 2

8 s 3 s 2 g 9

9 r 4 r 4 r 4 r 4 r 4

result

LR Parsing 11

LR(0) parse tables

S → x S → ( L ) L → SL → L , S

$)x,x(

1

Page 57: Compiler Components and their Generators - LR Parsing

( ) x , $ S L

1 s 3 s 2 g 4

2 r 1 r 1 r 1 r 1 r 1

3 s 3 s 2 g 6 g 5

4 a

5 s 7 s 8

6 r 3 r 3 r 3 r 3 r 3

7 r 2 r 2 r 2 r 2 r 2

8 s 3 s 2 g 9

9 r 4 r 4 r 4 r 4 r 4

result

LR Parsing 11

LR(0) parse tables

S → x S → ( L ) L → SL → L , S

$)x,x

13

Page 58: Compiler Components and their Generators - LR Parsing

( ) x , $ S L

1 s 3 s 2 g 4

2 r 1 r 1 r 1 r 1 r 1

3 s 3 s 2 g 6 g 5

4 a

5 s 7 s 8

6 r 3 r 3 r 3 r 3 r 3

7 r 2 r 2 r 2 r 2 r 2

8 s 3 s 2 g 9

9 r 4 r 4 r 4 r 4 r 4

result

LR Parsing 11

LR(0) parse tables

S → x S → ( L ) L → SL → L , S

$)x,

132

Page 59: Compiler Components and their Generators - LR Parsing

( ) x , $ S L

1 s 3 s 2 g 4

2 r 1 r 1 r 1 r 1 r 1

3 s 3 s 2 g 6 g 5

4 a

5 s 7 s 8

6 r 3 r 3 r 3 r 3 r 3

7 r 2 r 2 r 2 r 2 r 2

8 s 3 s 2 g 9

9 r 4 r 4 r 4 r 4 r 4

result

LR Parsing 11

LR(0) parse tables

S → x S → ( L ) L → SL → L , S

$)x,

13

Page 60: Compiler Components and their Generators - LR Parsing

( ) x , $ S L

1 s 3 s 2 g 4

2 r 1 r 1 r 1 r 1 r 1

3 s 3 s 2 g 6 g 5

4 a

5 s 7 s 8

6 r 3 r 3 r 3 r 3 r 3

7 r 2 r 2 r 2 r 2 r 2

8 s 3 s 2 g 9

9 r 4 r 4 r 4 r 4 r 4

result

LR Parsing 11

LR(0) parse tables

S → x S → ( L ) L → SL → L , S

$)x,

136

Page 61: Compiler Components and their Generators - LR Parsing

( ) x , $ S L

1 s 3 s 2 g 4

2 r 1 r 1 r 1 r 1 r 1

3 s 3 s 2 g 6 g 5

4 a

5 s 7 s 8

6 r 3 r 3 r 3 r 3 r 3

7 r 2 r 2 r 2 r 2 r 2

8 s 3 s 2 g 9

9 r 4 r 4 r 4 r 4 r 4

result

LR Parsing 11

LR(0) parse tables

S → x S → ( L ) L → SL → L , S

$)x,

13

Page 62: Compiler Components and their Generators - LR Parsing

( ) x , $ S L

1 s 3 s 2 g 4

2 r 1 r 1 r 1 r 1 r 1

3 s 3 s 2 g 6 g 5

4 a

5 s 7 s 8

6 r 3 r 3 r 3 r 3 r 3

7 r 2 r 2 r 2 r 2 r 2

8 s 3 s 2 g 9

9 r 4 r 4 r 4 r 4 r 4

result

LR Parsing 11

LR(0) parse tables

S → x S → ( L ) L → SL → L , S

$)x,

135

Page 63: Compiler Components and their Generators - LR Parsing

( ) x , $ S L

1 s 3 s 2 g 4

2 r 1 r 1 r 1 r 1 r 1

3 s 3 s 2 g 6 g 5

4 a

5 s 7 s 8

6 r 3 r 3 r 3 r 3 r 3

7 r 2 r 2 r 2 r 2 r 2

8 s 3 s 2 g 9

9 r 4 r 4 r 4 r 4 r 4

result

LR Parsing 11

LR(0) parse tables

S → x S → ( L ) L → SL → L , S

$)x

1358

Page 64: Compiler Components and their Generators - LR Parsing

( ) x , $ S L

1 s 3 s 2 g 4

2 r 1 r 1 r 1 r 1 r 1

3 s 3 s 2 g 6 g 5

4 a

5 s 7 s 8

6 r 3 r 3 r 3 r 3 r 3

7 r 2 r 2 r 2 r 2 r 2

8 s 3 s 2 g 9

9 r 4 r 4 r 4 r 4 r 4

result

LR Parsing 11

LR(0) parse tables

S → x S → ( L ) L → SL → L , S

$)

13582

Page 65: Compiler Components and their Generators - LR Parsing

( ) x , $ S L

1 s 3 s 2 g 4

2 r 1 r 1 r 1 r 1 r 1

3 s 3 s 2 g 6 g 5

4 a

5 s 7 s 8

6 r 3 r 3 r 3 r 3 r 3

7 r 2 r 2 r 2 r 2 r 2

8 s 3 s 2 g 9

9 r 4 r 4 r 4 r 4 r 4

result

LR Parsing 11

LR(0) parse tables

S → x S → ( L ) L → SL → L , S

$)

1358

Page 66: Compiler Components and their Generators - LR Parsing

( ) x , $ S L

1 s 3 s 2 g 4

2 r 1 r 1 r 1 r 1 r 1

3 s 3 s 2 g 6 g 5

4 a

5 s 7 s 8

6 r 3 r 3 r 3 r 3 r 3

7 r 2 r 2 r 2 r 2 r 2

8 s 3 s 2 g 9

9 r 4 r 4 r 4 r 4 r 4

result

LR Parsing 11

LR(0) parse tables

S → x S → ( L ) L → SL → L , S

$)

13589

Page 67: Compiler Components and their Generators - LR Parsing

( ) x , $ S L

1 s 3 s 2 g 4

2 r 1 r 1 r 1 r 1 r 1

3 s 3 s 2 g 6 g 5

4 a

5 s 7 s 8

6 r 3 r 3 r 3 r 3 r 3

7 r 2 r 2 r 2 r 2 r 2

8 s 3 s 2 g 9

9 r 4 r 4 r 4 r 4 r 4

result

LR Parsing 11

LR(0) parse tables

S → x S → ( L ) L → SL → L , S

$)

13

Page 68: Compiler Components and their Generators - LR Parsing

( ) x , $ S L

1 s 3 s 2 g 4

2 r 1 r 1 r 1 r 1 r 1

3 s 3 s 2 g 6 g 5

4 a

5 s 7 s 8

6 r 3 r 3 r 3 r 3 r 3

7 r 2 r 2 r 2 r 2 r 2

8 s 3 s 2 g 9

9 r 4 r 4 r 4 r 4 r 4

result

LR Parsing 11

LR(0) parse tables

S → x S → ( L ) L → SL → L , S

$)

135

Page 69: Compiler Components and their Generators - LR Parsing

( ) x , $ S L

1 s 3 s 2 g 4

2 r 1 r 1 r 1 r 1 r 1

3 s 3 s 2 g 6 g 5

4 a

5 s 7 s 8

6 r 3 r 3 r 3 r 3 r 3

7 r 2 r 2 r 2 r 2 r 2

8 s 3 s 2 g 9

9 r 4 r 4 r 4 r 4 r 4

result

LR Parsing 11

LR(0) parse tables

S → x S → ( L ) L → SL → L , S

$

1357

Page 70: Compiler Components and their Generators - LR Parsing

( ) x , $ S L

1 s 3 s 2 g 4

2 r 1 r 1 r 1 r 1 r 1

3 s 3 s 2 g 6 g 5

4 a

5 s 7 s 8

6 r 3 r 3 r 3 r 3 r 3

7 r 2 r 2 r 2 r 2 r 2

8 s 3 s 2 g 9

9 r 4 r 4 r 4 r 4 r 4

result

LR Parsing 11

LR(0) parse tables

S → x S → ( L ) L → SL → L , S

$

1

Page 71: Compiler Components and their Generators - LR Parsing

( ) x , $ S L

1 s 3 s 2 g 4

2 r 1 r 1 r 1 r 1 r 1

3 s 3 s 2 g 6 g 5

4 a

5 s 7 s 8

6 r 3 r 3 r 3 r 3 r 3

7 r 2 r 2 r 2 r 2 r 2

8 s 3 s 2 g 9

9 r 4 r 4 r 4 r 4 r 4

result

LR Parsing 11

LR(0) parse tables

S → x S → ( L ) L → SL → L , S

$

14

Page 72: Compiler Components and their Generators - LR Parsing

LR Parsing

conflict resolution

III

12

Page 73: Compiler Components and their Generators - LR Parsing

E → T + . E E → . T + EE → . TT → . x

S → . E $E → . T + E E → . T T → . x

shift-reduce conflicts

LR Parsing

SLR parse tables

13

T → x .

x

E S → E . $

T

T +

E

E → T . + E E → T .

E → T + E .

E → T + E E → T T → xx

Page 74: Compiler Components and their Generators - LR Parsing

E → T + . E E → . T + EE → . TT → . x

S → . E $E → . T + E E → . T T → . x

shift-reduce conflicts

LR Parsing

SLR parse tables

13

T → x .

x

E S → E . $

T

T +

E

E → T . + E E → T .

E → T + E .

E → T + E E → T T → x

1

2

3

5 4 6x

Page 75: Compiler Components and their Generators - LR Parsing

E → T + . E E → . T + EE → . TT → . x

S → . E $E → . T + E E → . T T → . x

shift-reduce conflicts

LR Parsing

SLR parse tables

13

T → x .

x

E S → E . $

T

T +

E

E → T . + E E → T .

E → T + E .

E → T + E E → T T → x

1

2

3

5 4 6x

x + $ E T1 s 5 g 2 g 32 a3 r 2 ? r 24 s 5 g 6 g 35 r 3 r 3 r 36 r 1 r 1 r 1

Page 76: Compiler Components and their Generators - LR Parsing

E → T + . E E → . T + EE → . TT → . x

S → . E $E → . T + E E → . T T → . x

shift-reduce conflicts

LR Parsing

SLR parse tables

13

T → x .

x

E S → E . $

T

T +

E

E → T . + E E → T .

E → T + E .

E → T + E E → T T → x

1

2

3

5 4 6x

x + $ E T1 s 5 g 2 g 32 a3 s 4 r 24 s 5 g 6 g 35 r 3 r 36 r 1

Page 77: Compiler Components and their Generators - LR Parsing

look-ahead

LR Parsing

LR(1) parse tables

14

E → T + E E → T T → x

S → . E $E → . T + E E → . T T → . x

?$$+ $

E S → E . $ ?

T E → T . + E E → T .

$$

T → x .

x

+ $

T +

x

E → T + . E E → . T + EE → . TT → . x

$$$+ $ E E → T + E . $

Page 78: Compiler Components and their Generators - LR Parsing

look-ahead

LR Parsing

LR(1) parse tables

14

E → T + E E → T T → x

S → . E $E → . T + E E → . T T → . x

?$$+ $

E S → E . $ ?

T E → T . + E E → T .

$$

T → x .

x

+ $

T +

x

E → T + . E E → . T + EE → . TT → . x

$$$+ $ E E → T + E . $

x + $ E T1 s 5 g 2 g 32 a3 s 4 r 24 s 5 g 6 g 35 r 3 r 36 r 1

Page 79: Compiler Components and their Generators - LR Parsing

state space reduction

LR Parsing

LALR(1) parse tables

unify states

• with same items

• and same outgoing transitions

• but different look-ahead sets

might introduce new conflicts

15

Page 80: Compiler Components and their Generators - LR Parsing

LR Parsing

summary

IV

16

Page 81: Compiler Components and their Generators - LR Parsing

lessons learned

LR Parsing

Summary

17

Page 82: Compiler Components and their Generators - LR Parsing

lessons learned

LR Parsing

Summary

How can we generate LR parse tables?

• items, closure, goto

17

Page 83: Compiler Components and their Generators - LR Parsing

lessons learned

LR Parsing

Summary

How can we generate LR parse tables?

• items, closure, goto

How can we improve LR(0) parse table generation?

• SLR: consider FOLLOW sets to avoid shift-reduce conflicts

• LR(1): consider look-ahead in states

• LALR(1): unify LR(1) states to reduce state space

17

Page 84: Compiler Components and their Generators - LR Parsing

lessons learned

LR Parsing

Summary

How can we generate LR parse tables?

• items, closure, goto

How can we improve LR(0) parse table generation?

• SLR: consider FOLLOW sets to avoid shift-reduce conflicts

• LR(1): consider look-ahead in states

• LALR(1): unify LR(1) states to reduce state space

Why are efficient parsing algorithms problematic?

• not longer pure, declarative, beautiful

• paradise lost: seven plagues

• paradise regained: scannerless generalised parsing

17

Page 85: Compiler Components and their Generators - LR Parsing

lessons learned

LR Parsing

Summary

How can we generate LR parse tables?

• items, closure, goto

How can we improve LR(0) parse table generation?

• SLR: consider FOLLOW sets to avoid shift-reduce conflicts

• LR(1): consider look-ahead in states

• LALR(1): unify LR(1) states to reduce state space

Why are efficient parsing algorithms problematic?

• not longer pure, declarative, beautiful

• paradise lost: seven plagues

• paradise regained: scannerless generalised parsing

17

Page 86: Compiler Components and their Generators - LR Parsing

learn more

LR Parsing

Literature

18

Page 87: Compiler Components and their Generators - LR Parsing

learn more

LR Parsing

Literature

syntactical analysis

Andrew W. Appel, Jens Palsberg: Modern Compiler Implementation in Java, 2nd edition. 2002

Alfred V. Aho, Ravi Sethi, Jeffrey D. Ullman, Monica S. Lam: Compilers: Principles, Techniques, and Tools, 2nd edition. 2006

18

Page 88: Compiler Components and their Generators - LR Parsing

learn more

LR Parsing

Literature

syntactical analysis

Andrew W. Appel, Jens Palsberg: Modern Compiler Implementation in Java, 2nd edition. 2002

Alfred V. Aho, Ravi Sethi, Jeffrey D. Ullman, Monica S. Lam: Compilers: Principles, Techniques, and Tools, 2nd edition. 2006

generalised parsing

Eelco Visser: Syntax Definition for Language Prototyping. PhD thesis 1997

M.G.J. van den Brand, J. Scheerder, J.J. Vinju, and E. Visser: Disambiguation Filters for Scannerless Generalized LR Parsers. CC 2002

Lennart C. L. Kats, Eelco Visser, Guido Wachsmuth: Pure and Declarative Syntax Definition - Paradise Lost and Regained. SPLASH 2010

18

Page 89: Compiler Components and their Generators - LR Parsing

coming next

LR Parsing

Outlook

lectures

• guest lecture: DSLs

Question & Answer Jan 08

• 10 questions, submit & vote

Lab Dec 14

• translate fields & variables

• challenge: variable ranges

19

Page 90: Compiler Components and their Generators - LR Parsing

LR Parsing

copyrights

20