Syntax (Part 6) Programming...
Transcript of Syntax (Part 6) Programming...
![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)](https://reader035.fdocuments.net/reader035/viewer/2022071106/5fe0bdf81328e200527caa04/html5/thumbnails/1.jpg)
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)](https://reader035.fdocuments.net/reader035/viewer/2022071106/5fe0bdf81328e200527caa04/html5/thumbnails/2.jpg)
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)](https://reader035.fdocuments.net/reader035/viewer/2022071106/5fe0bdf81328e200527caa04/html5/thumbnails/3.jpg)
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)](https://reader035.fdocuments.net/reader035/viewer/2022071106/5fe0bdf81328e200527caa04/html5/thumbnails/4.jpg)
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)](https://reader035.fdocuments.net/reader035/viewer/2022071106/5fe0bdf81328e200527caa04/html5/thumbnails/5.jpg)
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)](https://reader035.fdocuments.net/reader035/viewer/2022071106/5fe0bdf81328e200527caa04/html5/thumbnails/6.jpg)
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)](https://reader035.fdocuments.net/reader035/viewer/2022071106/5fe0bdf81328e200527caa04/html5/thumbnails/7.jpg)
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)](https://reader035.fdocuments.net/reader035/viewer/2022071106/5fe0bdf81328e200527caa04/html5/thumbnails/8.jpg)
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)](https://reader035.fdocuments.net/reader035/viewer/2022071106/5fe0bdf81328e200527caa04/html5/thumbnails/9.jpg)
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)](https://reader035.fdocuments.net/reader035/viewer/2022071106/5fe0bdf81328e200527caa04/html5/thumbnails/10.jpg)
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)](https://reader035.fdocuments.net/reader035/viewer/2022071106/5fe0bdf81328e200527caa04/html5/thumbnails/11.jpg)
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)](https://reader035.fdocuments.net/reader035/viewer/2022071106/5fe0bdf81328e200527caa04/html5/thumbnails/12.jpg)
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)](https://reader035.fdocuments.net/reader035/viewer/2022071106/5fe0bdf81328e200527caa04/html5/thumbnails/13.jpg)
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)](https://reader035.fdocuments.net/reader035/viewer/2022071106/5fe0bdf81328e200527caa04/html5/thumbnails/14.jpg)
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)](https://reader035.fdocuments.net/reader035/viewer/2022071106/5fe0bdf81328e200527caa04/html5/thumbnails/15.jpg)
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)](https://reader035.fdocuments.net/reader035/viewer/2022071106/5fe0bdf81328e200527caa04/html5/thumbnails/16.jpg)
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)](https://reader035.fdocuments.net/reader035/viewer/2022071106/5fe0bdf81328e200527caa04/html5/thumbnails/17.jpg)
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)](https://reader035.fdocuments.net/reader035/viewer/2022071106/5fe0bdf81328e200527caa04/html5/thumbnails/18.jpg)
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)](https://reader035.fdocuments.net/reader035/viewer/2022071106/5fe0bdf81328e200527caa04/html5/thumbnails/19.jpg)
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)](https://reader035.fdocuments.net/reader035/viewer/2022071106/5fe0bdf81328e200527caa04/html5/thumbnails/20.jpg)
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)](https://reader035.fdocuments.net/reader035/viewer/2022071106/5fe0bdf81328e200527caa04/html5/thumbnails/21.jpg)
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)](https://reader035.fdocuments.net/reader035/viewer/2022071106/5fe0bdf81328e200527caa04/html5/thumbnails/22.jpg)
11
Overview
� Specifying syntax
� Regular expressions
� Context-free grammars
� Scanning
� Parsing
� Top-down parsing
� Bottom-up parsing 4