syntax (part 6) programming...

22
1 Prof. Dr. Michael Pradel Software Lab, University of Stuttgart Summer 2020 Programming Paradigms Syntax (Part 6)

Upload: others

Post on 30-Aug-2020

0 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Syntax (Part 6) Programming Paradigmssoftware-lab.org/teaching/summer2020/pp/slides_02_syntax...Reduce partial trees into a non-terminal by applying a rule 8 - 4 Table-based LR(1)

1

Prof. Dr. Michael Pradel

Software Lab, University of StuttgartSummer 2020

Programming Paradigms

Syntax (Part 6)

Page 2: Syntax (Part 6) Programming Paradigmssoftware-lab.org/teaching/summer2020/pp/slides_02_syntax...Reduce partial trees into a non-terminal by applying a rule 8 - 4 Table-based LR(1)

2

Overview

� Specifying syntax

� Regular expressions

� Context-free grammars

� Scanning

� Parsing

� Top-down parsing

� Bottom-up parsing

Page 3: Syntax (Part 6) Programming Paradigmssoftware-lab.org/teaching/summer2020/pp/slides_02_syntax...Reduce partial trees into a non-terminal by applying a rule 8 - 4 Table-based LR(1)

3

Bottom-up Parsing

� LR(k) parsers� Left-to-right scanning, Right-most derivation, k

tokens look-ahead

� Difficult to do by hand

� Mostly based on automaticallygenerated table

Page 4: Syntax (Part 6) Programming Paradigmssoftware-lab.org/teaching/summer2020/pp/slides_02_syntax...Reduce partial trees into a non-terminal by applying a rule 8 - 4 Table-based LR(1)

4

Shift-reduce Algorithm

� Repeat until all tokens read and allsymbols reduced to start symbol:

� Shift (i.e., read) input tokens

� Try to reduce a group of symbols into a single

non-terminal

Page 5: Syntax (Part 6) Programming Paradigmssoftware-lab.org/teaching/summer2020/pp/slides_02_syntax...Reduce partial trees into a non-terminal by applying a rule 8 - 4 Table-based LR(1)

27

Page 6: Syntax (Part 6) Programming Paradigmssoftware-lab.org/teaching/summer2020/pp/slides_02_syntax...Reduce partial trees into a non-terminal by applying a rule 8 - 4 Table-based LR(1)

6

Table-based LR Parsing

� Two tables� Action table:

state × T→ reduce/shift/accept/error

� Goto table:state × N→ state

� Stack of symbol/state pairs

� Record of what has been seen in the past

Page 7: Syntax (Part 6) Programming Paradigmssoftware-lab.org/teaching/summer2020/pp/slides_02_syntax...Reduce partial trees into a non-terminal by applying a rule 8 - 4 Table-based LR(1)

7 - 1

Example: LR(1) Table

State a b c d e EOF S T R

s0 s1s1 s3 2s2 s5 s6 4s3 r3 r3s4 s7s5 s8s6 r4s7 acc.s8 r2 r2

Page 8: Syntax (Part 6) Programming Paradigmssoftware-lab.org/teaching/summer2020/pp/slides_02_syntax...Reduce partial trees into a non-terminal by applying a rule 8 - 4 Table-based LR(1)

7 - 2

Example: LR(1) Table

State a b c d e EOF S T R

s0 s1s1 s3 2s2 s5 s6 4s3 r3 r3s4 s7s5 s8s6 r4s7 acc.s8 r2 r2

Action table

Page 9: Syntax (Part 6) Programming Paradigmssoftware-lab.org/teaching/summer2020/pp/slides_02_syntax...Reduce partial trees into a non-terminal by applying a rule 8 - 4 Table-based LR(1)

7 - 3

Example: LR(1) Table

State a b c d e EOF S T R

s0 s1s1 s3 2s2 s5 s6 4s3 r3 r3s4 s7s5 s8s6 r4s7 acc.s8 r2 r2

Goto table

Page 10: Syntax (Part 6) Programming Paradigmssoftware-lab.org/teaching/summer2020/pp/slides_02_syntax...Reduce partial trees into a non-terminal by applying a rule 8 - 4 Table-based LR(1)

7 - 4

Example: LR(1) Table

State a b c d e EOF S T R

s0 s1s1 s3 2s2 s5 s6 4s3 r3 r3s4 s7s5 s8s6 r4s7 acc.s8 r2 r2

s meansshift tosome state

Page 11: Syntax (Part 6) Programming Paradigmssoftware-lab.org/teaching/summer2020/pp/slides_02_syntax...Reduce partial trees into a non-terminal by applying a rule 8 - 4 Table-based LR(1)

7 - 5

Example: LR(1) Table

State a b c d e EOF S T R

s0 s1s1 s3 2s2 s5 s6 4s3 r3 r3s4 s7s5 s8s6 r4s7 acc.s8 r2 r2

r means reduceusing someproduction

Page 12: Syntax (Part 6) Programming Paradigmssoftware-lab.org/teaching/summer2020/pp/slides_02_syntax...Reduce partial trees into a non-terminal by applying a rule 8 - 4 Table-based LR(1)

7 - 6

Example: LR(1) Table

State a b c d e EOF S T R

s0 s1s1 s3 2s2 s5 s6 4s3 r3 r3s4 s7s5 s8s6 r4s7 acc.s8 r2 r2

Accept input(i.e., done withparsing)

Page 13: Syntax (Part 6) Programming Paradigmssoftware-lab.org/teaching/summer2020/pp/slides_02_syntax...Reduce partial trees into a non-terminal by applying a rule 8 - 4 Table-based LR(1)

7 - 7

Example: LR(1) Table

State a b c d e EOF S T R

s0 s1s1 s3 2s2 s5 s6 4s3 r3 r3s4 s7s5 s8s6 r4s7 acc.s8 r2 r2

No entrymeans error

Page 14: Syntax (Part 6) Programming Paradigmssoftware-lab.org/teaching/summer2020/pp/slides_02_syntax...Reduce partial trees into a non-terminal by applying a rule 8 - 4 Table-based LR(1)

8 - 1

Table-based LR(1) Parsing

stack.push(EOF, 0);nextToken = lookAhead();repeats = state on top of stackif action[s, nextToken] = shift s’stack.push(nextToken, s’);nextToken = lookAhead();

else if action[s, nextToken] = reduce x -> y1 .. ympop m pairs from stacks’ = state on top of stackpush(x, goto[s’, x])

else if action[s, nextToken] = acceptaccept and return

else error()

Page 15: Syntax (Part 6) Programming Paradigmssoftware-lab.org/teaching/summer2020/pp/slides_02_syntax...Reduce partial trees into a non-terminal by applying a rule 8 - 4 Table-based LR(1)

8 - 2

Table-based LR(1) Parsing

stack.push(EOF, 0);nextToken = lookAhead();repeats = state on top of stackif action[s, nextToken] = shift s’stack.push(nextToken, s’);nextToken = lookAhead();

else if action[s, nextToken] = reduce x -> y1 .. ympop m pairs from stacks’ = state on top of stackpush(x, goto[s’, x])

else if action[s, nextToken] = acceptaccept and return

else error()

Stack hold roots of partialtrees found so far

Page 16: Syntax (Part 6) Programming Paradigmssoftware-lab.org/teaching/summer2020/pp/slides_02_syntax...Reduce partial trees into a non-terminal by applying a rule 8 - 4 Table-based LR(1)

8 - 3

Table-based LR(1) Parsing

stack.push(EOF, 0);nextToken = lookAhead();repeats = state on top of stackif action[s, nextToken] = shift s’stack.push(nextToken, s’);nextToken = lookAhead();

else if action[s, nextToken] = reduce x -> y1 .. ympop m pairs from stacks’ = state on top of stackpush(x, goto[s’, x])

else if action[s, nextToken] = acceptaccept and return

else error()

Reduce partialtrees into anon-terminalby applying arule

Page 17: Syntax (Part 6) Programming Paradigmssoftware-lab.org/teaching/summer2020/pp/slides_02_syntax...Reduce partial trees into a non-terminal by applying a rule 8 - 4 Table-based LR(1)

8 - 4

Table-based LR(1) Parsing

stack.push(EOF, 0);nextToken = lookAhead();repeats = state on top of stackif action[s, nextToken] = shift s’stack.push(nextToken, s’);nextToken = lookAhead();

else if action[s, nextToken] = reduce x -> y1 .. ympop m pairs from stacks’ = state on top of stackpush(x, goto[s’, x])

else if action[s, nextToken] = acceptaccept and return

else error()

Readanothertoken

Page 18: Syntax (Part 6) Programming Paradigmssoftware-lab.org/teaching/summer2020/pp/slides_02_syntax...Reduce partial trees into a non-terminal by applying a rule 8 - 4 Table-based LR(1)

8 - 5

Table-based LR(1) Parsing

stack.push(EOF, 0);nextToken = lookAhead();repeats = state on top of stackif action[s, nextToken] = shift s’stack.push(nextToken, s’);nextToken = lookAhead();

else if action[s, nextToken] = reduce x -> y1 .. ympop m pairs from stacks’ = state on top of stackpush(x, goto[s’, x])

else if action[s, nextToken] = acceptaccept and return

else error()

All subtreesreduced tostart symbol

Page 19: Syntax (Part 6) Programming Paradigmssoftware-lab.org/teaching/summer2020/pp/slides_02_syntax...Reduce partial trees into a non-terminal by applying a rule 8 - 4 Table-based LR(1)

9

How to Get the Table?

� Using a “characteristic finite-statemachine” computed from the grammar

� Details differ for different kinds of LRparsers

� SLR (simple LR)

� LALR (look-ahead LR)

� Full-LR

� Beyond the scope of this course

Page 20: Syntax (Part 6) Programming Paradigmssoftware-lab.org/teaching/summer2020/pp/slides_02_syntax...Reduce partial trees into a non-terminal by applying a rule 8 - 4 Table-based LR(1)

10 - 1

Quiz: Parsing

Please vote via Ilias.

Which of these statements is true?

� Recursive descent builds a parse tree from the

bottom up.

� The k in LR(k) stands for k tokens look-ahead.

� PREDICT sets are used to compute FIRST and

FOLLOW sets.

� The stack of a top-down parser contains the

symbols expected in the future.

Page 21: Syntax (Part 6) Programming Paradigmssoftware-lab.org/teaching/summer2020/pp/slides_02_syntax...Reduce partial trees into a non-terminal by applying a rule 8 - 4 Table-based LR(1)

10 - 2

Quiz: Parsing

Please vote via Ilias.

Which of these statements is true?

� Recursive descent builds a parse tree from the

bottom up.

� The k in LR(k) stands for k tokens look-ahead.

� PREDICT sets are used to compute FIRST and

FOLLOW sets.

� The stack of a top-down parser contains the

symbols expected in the future.

Page 22: Syntax (Part 6) Programming Paradigmssoftware-lab.org/teaching/summer2020/pp/slides_02_syntax...Reduce partial trees into a non-terminal by applying a rule 8 - 4 Table-based LR(1)

11

Overview

� Specifying syntax

� Regular expressions

� Context-free grammars

� Scanning

� Parsing

� Top-down parsing

� Bottom-up parsing 4