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

Compiler Components and their Generators - LR Parsing

Nov 29, 2014

Download

Education

Guido Wachsmuth

Presentation slides for lecture 13 of course IN4303 on Compiler Construction at TU Delft.
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
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