Lecture5:LRParsing · 2009-01-21 · CS 540 Spring 2009 GMU 4 LR(k)Parsing–BottomUp • Construct...
Transcript of Lecture5:LRParsing · 2009-01-21 · CS 540 Spring 2009 GMU 4 LR(k)Parsing–BottomUp • Construct...
![Page 1: Lecture5:LRParsing · 2009-01-21 · CS 540 Spring 2009 GMU 4 LR(k)Parsing–BottomUp • Construct parse tree from leaves, ‘reducing’the string to the start symbol (and a single](https://reader034.fdocuments.us/reader034/viewer/2022042022/5e797d602ccb143d1f0bf556/html5/thumbnails/1.jpg)
Lecture 5: LR Parsing
CS 540
George Mason University
![Page 2: Lecture5:LRParsing · 2009-01-21 · CS 540 Spring 2009 GMU 4 LR(k)Parsing–BottomUp • Construct parse tree from leaves, ‘reducing’the string to the start symbol (and a single](https://reader034.fdocuments.us/reader034/viewer/2022042022/5e797d602ccb143d1f0bf556/html5/thumbnails/2.jpg)
CS 540 Spring 2009 GMU 2
Static Analysis - Parsing
Scanner(lexicalanalysis)
Parser(syntaxanalysis)
CodeOptimizer
SemanticAnalysis
(IC generator)
CodeGenerator
SymbolTable
Sourcelanguage
tokens Syntaticstructure
Syntatic/semanticstructure
Targetlanguage
•Syntax described formally•Tokens organized into syntax tree that describes structure•Error checking
![Page 3: Lecture5:LRParsing · 2009-01-21 · CS 540 Spring 2009 GMU 4 LR(k)Parsing–BottomUp • Construct parse tree from leaves, ‘reducing’the string to the start symbol (and a single](https://reader034.fdocuments.us/reader034/viewer/2022042022/5e797d602ccb143d1f0bf556/html5/thumbnails/3.jpg)
CS 540 Spring 2009 GMU 3
LL vs. LR
• LR (shift reduce) is more powerful than LL (predictive parsing)
• Can detect a syntactic error as soon as possible.
• LR is difficult to do by hand (unlike LL)
![Page 4: Lecture5:LRParsing · 2009-01-21 · CS 540 Spring 2009 GMU 4 LR(k)Parsing–BottomUp • Construct parse tree from leaves, ‘reducing’the string to the start symbol (and a single](https://reader034.fdocuments.us/reader034/viewer/2022042022/5e797d602ccb143d1f0bf556/html5/thumbnails/4.jpg)
CS 540 Spring 2009 GMU 4
LR(k) Parsing – Bottom Up
• Construct parse tree from leaves, ‘reducing’ the string to the start symbol (and a single tree)
• During parse, we have a ‘forest’ of trees
• Shift-reduce parsing– ‘Shift’ a new input symbol
– ‘Reduce’ a group of symbols to a single non-terminal
– Choice is made using the k lookaheads
• LR(1)
![Page 5: Lecture5:LRParsing · 2009-01-21 · CS 540 Spring 2009 GMU 4 LR(k)Parsing–BottomUp • Construct parse tree from leaves, ‘reducing’the string to the start symbol (and a single](https://reader034.fdocuments.us/reader034/viewer/2022042022/5e797d602ccb143d1f0bf556/html5/thumbnails/5.jpg)
CS 540 Spring 2009 GMU 5
Example
• S a T R e
T T b c | b
R d
• Rightmost derivation:
S a T R e
a T d e
a T b c d e
a b b c d e
S
a T R e
T b c d
bLR parsing corresponds to the rightmost derivation in reverse.
![Page 6: Lecture5:LRParsing · 2009-01-21 · CS 540 Spring 2009 GMU 4 LR(k)Parsing–BottomUp • Construct parse tree from leaves, ‘reducing’the string to the start symbol (and a single](https://reader034.fdocuments.us/reader034/viewer/2022042022/5e797d602ccb143d1f0bf556/html5/thumbnails/6.jpg)
CS 540 Spring 2009 GMU 6
Shift Reduce ParsingS a T R eT T b c | bR d
Remaining input: abbcde
Rightmost derivation:
S a T R e
a T d e
a T b c d e
a b b c d e
![Page 7: Lecture5:LRParsing · 2009-01-21 · CS 540 Spring 2009 GMU 4 LR(k)Parsing–BottomUp • Construct parse tree from leaves, ‘reducing’the string to the start symbol (and a single](https://reader034.fdocuments.us/reader034/viewer/2022042022/5e797d602ccb143d1f0bf556/html5/thumbnails/7.jpg)
CS 540 Spring 2009 GMU 7
Shift Reduce ParsingS a T R eT T b c | bR d
a b
Shift a, Shift b
Remaining input: bcde
Rightmost derivation:
S a T R e
a T d e
a T b c d e
a b b c d e
![Page 8: Lecture5:LRParsing · 2009-01-21 · CS 540 Spring 2009 GMU 4 LR(k)Parsing–BottomUp • Construct parse tree from leaves, ‘reducing’the string to the start symbol (and a single](https://reader034.fdocuments.us/reader034/viewer/2022042022/5e797d602ccb143d1f0bf556/html5/thumbnails/8.jpg)
CS 540 Spring 2009 GMU 8
Shift Reduce ParsingS a T R eT T b c | bR d
a b
Shift a, Shift bReduce T b
T
Remaining input: bcde
Rightmost derivation:
S a T R e
a T d e
a T b c d e
a b b c d e
![Page 9: Lecture5:LRParsing · 2009-01-21 · CS 540 Spring 2009 GMU 4 LR(k)Parsing–BottomUp • Construct parse tree from leaves, ‘reducing’the string to the start symbol (and a single](https://reader034.fdocuments.us/reader034/viewer/2022042022/5e797d602ccb143d1f0bf556/html5/thumbnails/9.jpg)
CS 540 Spring 2009 GMU 9
Shift Reduce ParsingS a T R eT T b c | bR d
a b
Shift a, Shift bReduce T bShift b, Shift c
T
b c
Remaining input: de
Rightmost derivation:
S a T R e
a T d e
a T b c d e
a b b c d e
![Page 10: Lecture5:LRParsing · 2009-01-21 · CS 540 Spring 2009 GMU 4 LR(k)Parsing–BottomUp • Construct parse tree from leaves, ‘reducing’the string to the start symbol (and a single](https://reader034.fdocuments.us/reader034/viewer/2022042022/5e797d602ccb143d1f0bf556/html5/thumbnails/10.jpg)
CS 540 Spring 2009 GMU 10
Shift Reduce ParsingS a T R eT T b c | bR d
a b
Shift a, Shift bReduce T bShift b, Shift cReduce T T b c
T
b c
T
Remaining input: de
Rightmost derivation:
S a T R e
a T d e
a T b c d e
a b b c d e
![Page 11: Lecture5:LRParsing · 2009-01-21 · CS 540 Spring 2009 GMU 4 LR(k)Parsing–BottomUp • Construct parse tree from leaves, ‘reducing’the string to the start symbol (and a single](https://reader034.fdocuments.us/reader034/viewer/2022042022/5e797d602ccb143d1f0bf556/html5/thumbnails/11.jpg)
CS 540 Spring 2009 GMU 11
Shift Reduce ParsingS a T R eT T b c | bR d
a b
Shift a, Shift bReduce T bShift b, Shift cReduce T T b cShift d
T
b c
T
d
Remaining input: e
Rightmost derivation:
S a T R e
a T d e
a T b c d e
a b b c d e
![Page 12: Lecture5:LRParsing · 2009-01-21 · CS 540 Spring 2009 GMU 4 LR(k)Parsing–BottomUp • Construct parse tree from leaves, ‘reducing’the string to the start symbol (and a single](https://reader034.fdocuments.us/reader034/viewer/2022042022/5e797d602ccb143d1f0bf556/html5/thumbnails/12.jpg)
CS 540 Spring 2009 GMU 12
Shift Reduce ParsingS a T R eT T b c | bR d
a b
Shift a, Shift bReduce T bShift b, Shift cReduce T T b cShift dReduce R d
T
b c
T
d
R
Remaining input: e
Rightmost derivation:
S a T R e
a T d e
a T b c d e
a b b c d e
![Page 13: Lecture5:LRParsing · 2009-01-21 · CS 540 Spring 2009 GMU 4 LR(k)Parsing–BottomUp • Construct parse tree from leaves, ‘reducing’the string to the start symbol (and a single](https://reader034.fdocuments.us/reader034/viewer/2022042022/5e797d602ccb143d1f0bf556/html5/thumbnails/13.jpg)
CS 540 Spring 2009 GMU 13
Shift Reduce ParsingS a T R eT T b c | bR d
a b
Shift a, Shift bReduce T bShift b, Shift cReduce T T b cShift dReduce R dShift e
T
b c
T
d
R
e
Remaining input:
Rightmost derivation:
S a T R e
a T d e
a T b c d e
a b b c d e
![Page 14: Lecture5:LRParsing · 2009-01-21 · CS 540 Spring 2009 GMU 4 LR(k)Parsing–BottomUp • Construct parse tree from leaves, ‘reducing’the string to the start symbol (and a single](https://reader034.fdocuments.us/reader034/viewer/2022042022/5e797d602ccb143d1f0bf556/html5/thumbnails/14.jpg)
CS 540 Spring 2009 GMU 14
Shift Reduce ParsingS a T R eT T b c | bR d
a b
Shift a, Shift bReduce T bShift b, Shift cReduce T T b cShift dReduce R dShift eReduce S a T R e
T
b c
T
d
R
e
S
Remaining input:
Rightmost derivation:
S a T R e
a T d e
a T b c d e
a b b c d e
![Page 15: Lecture5:LRParsing · 2009-01-21 · CS 540 Spring 2009 GMU 4 LR(k)Parsing–BottomUp • Construct parse tree from leaves, ‘reducing’the string to the start symbol (and a single](https://reader034.fdocuments.us/reader034/viewer/2022042022/5e797d602ccb143d1f0bf556/html5/thumbnails/15.jpg)
CS 540 Spring 2009 GMU 15
LR Parsing
• Data Structures:– Stack – contains symbol/state pairs. The state
on top of stack summarizes the information below.
– Tables: • Action: state x reduce/shift/accept/error
• Goto: state x Vn state
![Page 16: Lecture5:LRParsing · 2009-01-21 · CS 540 Spring 2009 GMU 4 LR(k)Parsing–BottomUp • Construct parse tree from leaves, ‘reducing’the string to the start symbol (and a single](https://reader034.fdocuments.us/reader034/viewer/2022042022/5e797d602ccb143d1f0bf556/html5/thumbnails/16.jpg)
CS 540 Spring 2009 GMU 16
Example LR Table
r2r28
acc7
r46
s85
s74
r3r33
4s6s52
2s31
s10
RTS$edcbaState 1: S a T R e2: T T b c 3: T b4: R d
Action tableGoto table
s means shift toto some state
r means reduce by some production
![Page 17: Lecture5:LRParsing · 2009-01-21 · CS 540 Spring 2009 GMU 4 LR(k)Parsing–BottomUp • Construct parse tree from leaves, ‘reducing’the string to the start symbol (and a single](https://reader034.fdocuments.us/reader034/viewer/2022042022/5e797d602ccb143d1f0bf556/html5/thumbnails/17.jpg)
CS 540 Spring 2009 GMU 17
Algorithm: LR(1)
push($,0); /* always pushing a symbol/state pair */lookahead = yylex();loop
s = top(); /*always a state */if action[s,lookahead] = shift s’
push(lookahead,s’); lookahead = yylex();else if action[s,lookahead] = reduce A
pop size of pairss’ = state on top of stackpush(A,goto[s’,A]);
else if action[s,lookahead] = accept then returnelse error();
end loop;
![Page 18: Lecture5:LRParsing · 2009-01-21 · CS 540 Spring 2009 GMU 4 LR(k)Parsing–BottomUp • Construct parse tree from leaves, ‘reducing’the string to the start symbol (and a single](https://reader034.fdocuments.us/reader034/viewer/2022042022/5e797d602ccb143d1f0bf556/html5/thumbnails/18.jpg)
CS 540 Spring 2009 GMU 18
LR Parsing Example 1
s1a b b c d e $$0
ActionInputStack
![Page 19: Lecture5:LRParsing · 2009-01-21 · CS 540 Spring 2009 GMU 4 LR(k)Parsing–BottomUp • Construct parse tree from leaves, ‘reducing’the string to the start symbol (and a single](https://reader034.fdocuments.us/reader034/viewer/2022042022/5e797d602ccb143d1f0bf556/html5/thumbnails/19.jpg)
CS 540 Spring 2009 GMU 19
LR Parsing Example 1
s3b b c d e $$0,a1
s1a b b c d e $$0
ActionInputStack
![Page 20: Lecture5:LRParsing · 2009-01-21 · CS 540 Spring 2009 GMU 4 LR(k)Parsing–BottomUp • Construct parse tree from leaves, ‘reducing’the string to the start symbol (and a single](https://reader034.fdocuments.us/reader034/viewer/2022042022/5e797d602ccb143d1f0bf556/html5/thumbnails/20.jpg)
CS 540 Spring 2009 GMU 20
LR Parsing Example 1
r3 (T b)b c d e $$0,a1,b3
s3b b c d e $$0,a1
s1a b b c d e $$0
ActionInputStack
![Page 21: Lecture5:LRParsing · 2009-01-21 · CS 540 Spring 2009 GMU 4 LR(k)Parsing–BottomUp • Construct parse tree from leaves, ‘reducing’the string to the start symbol (and a single](https://reader034.fdocuments.us/reader034/viewer/2022042022/5e797d602ccb143d1f0bf556/html5/thumbnails/21.jpg)
CS 540 Spring 2009 GMU 21
LR Parsing Example 1
r2 (T T b c)d e $$0,a1,T2,b5,c8
s8c d e $$0,a1,T2,b5
s5b c d e $$0,a1,T2
r3 (T b)b c d e $$0,a1,b3
s3b b c d e $$0,a1
s1a b b c d e $$0
ActionInputStack
goto(T,1)=2
![Page 22: Lecture5:LRParsing · 2009-01-21 · CS 540 Spring 2009 GMU 4 LR(k)Parsing–BottomUp • Construct parse tree from leaves, ‘reducing’the string to the start symbol (and a single](https://reader034.fdocuments.us/reader034/viewer/2022042022/5e797d602ccb143d1f0bf556/html5/thumbnails/22.jpg)
CS 540 Spring 2009 GMU 22
LR Parsing Example 1
r4 (R d)e $$0,a1,T2,d6
s6d e $$0,a1,T2
r2 (T T b c)d e $$0,a1,T2,b5,c8
s8c d e $$0,a1,T2,b5
s5b c d e $$0,a1,T2
r3 (T b)b c d e $$0,a1,b3
s3b b c d e $$0,a1
s1a b b c d e $$0
ActionInputStack
goto(T,1)=2
![Page 23: Lecture5:LRParsing · 2009-01-21 · CS 540 Spring 2009 GMU 4 LR(k)Parsing–BottomUp • Construct parse tree from leaves, ‘reducing’the string to the start symbol (and a single](https://reader034.fdocuments.us/reader034/viewer/2022042022/5e797d602ccb143d1f0bf556/html5/thumbnails/23.jpg)
CS 540 Spring 2009 GMU 23
LR Parsing Example 1
accept!$$0,a1,T2,R4,e7
s7e $$0,a1,T2,R4
r4 (R d)e $$0,a1,T2,d6
s6d e $$0,a1,T2
r2 (T T b c)d e $$0,a1,T2,b5,c8
s8c d e $$0,a1,T2,b5
s5b c d e $$0,a1,T2
r3 (T b)b c d e $$0,a1,b3
s3b b c d e $$0,a1
s1a b b c d e $$0
ActionInputStack
goto(R,2)=4
![Page 24: Lecture5:LRParsing · 2009-01-21 · CS 540 Spring 2009 GMU 4 LR(k)Parsing–BottomUp • Construct parse tree from leaves, ‘reducing’the string to the start symbol (and a single](https://reader034.fdocuments.us/reader034/viewer/2022042022/5e797d602ccb143d1f0bf556/html5/thumbnails/24.jpg)
CS 540 Spring 2009 GMU 24
LR Parse Stack
• During LR parsing, there is always a ‘forest’ of trees.
• Parse stack holds root of each of these trees:– For example, that stack $0,a1,T2,b5,c8
represents the corresponding forest
a b
T
b c
![Page 25: Lecture5:LRParsing · 2009-01-21 · CS 540 Spring 2009 GMU 4 LR(k)Parsing–BottomUp • Construct parse tree from leaves, ‘reducing’the string to the start symbol (and a single](https://reader034.fdocuments.us/reader034/viewer/2022042022/5e797d602ccb143d1f0bf556/html5/thumbnails/25.jpg)
CS 540 Spring 2009 GMU 25
The next stack: $0,a1,T2
a b
T
b c
T
Later, we have $0,a1,T2,R6,e7
a b
T
b c
T
d
R
e
![Page 26: Lecture5:LRParsing · 2009-01-21 · CS 540 Spring 2009 GMU 4 LR(k)Parsing–BottomUp • Construct parse tree from leaves, ‘reducing’the string to the start symbol (and a single](https://reader034.fdocuments.us/reader034/viewer/2022042022/5e797d602ccb143d1f0bf556/html5/thumbnails/26.jpg)
CS 540 Spring 2009 GMU 26
Where does the table come from?Handle – “a substring that matches the right
side of a production and whose reduction to the non-terminal represents one step along the reverse of a rightmost derivation”
Using the grammar, want to create a DFA to find handles.
![Page 27: Lecture5:LRParsing · 2009-01-21 · CS 540 Spring 2009 GMU 4 LR(k)Parsing–BottomUp • Construct parse tree from leaves, ‘reducing’the string to the start symbol (and a single](https://reader034.fdocuments.us/reader034/viewer/2022042022/5e797d602ccb143d1f0bf556/html5/thumbnails/27.jpg)
CS 540 Spring 2009 GMU 27
SLR parsing
• Simplest LR algorithm
• Provide an understanding of – the basic mechanics of shift/reduce parsing
– source of shift/reduce and reduce/reduce conflicts
• There are better (more powerful) algorithms (LALR, LR) but we won’t study them here.
![Page 28: Lecture5:LRParsing · 2009-01-21 · CS 540 Spring 2009 GMU 4 LR(k)Parsing–BottomUp • Construct parse tree from leaves, ‘reducing’the string to the start symbol (and a single](https://reader034.fdocuments.us/reader034/viewer/2022042022/5e797d602ccb143d1f0bf556/html5/thumbnails/28.jpg)
CS 540 Spring 2009 GMU 28
Generating SLR parse tables
• Augmented grammar: grammar with new start symbol and production S’ S where S is old start symbol. – Augmentation only required if there is no single
production to signal the end.
• Construct C = {…} the LR(0) items• Construct Action table for state i of parser:• All undefined entries are error
![Page 29: Lecture5:LRParsing · 2009-01-21 · CS 540 Spring 2009 GMU 4 LR(k)Parsing–BottomUp • Construct parse tree from leaves, ‘reducing’the string to the start symbol (and a single](https://reader034.fdocuments.us/reader034/viewer/2022042022/5e797d602ccb143d1f0bf556/html5/thumbnails/29.jpg)
CS 540 Spring 2009 GMU 29
LR(0) items• Canonical LR(0) collections are the basis for
constructing SLR (simple LR) parsers• Defn: LR(0) item of a grammar G is a production
of G with a dot at some point on the right side.• A X Y Z yields four different LR(0) items:
– A . X Y Z
– A X . Y Z
– A X Y . Z
– A X Y Z .• A yields one item
– A .
![Page 30: Lecture5:LRParsing · 2009-01-21 · CS 540 Spring 2009 GMU 4 LR(k)Parsing–BottomUp • Construct parse tree from leaves, ‘reducing’the string to the start symbol (and a single](https://reader034.fdocuments.us/reader034/viewer/2022042022/5e797d602ccb143d1f0bf556/html5/thumbnails/30.jpg)
CS 540 Spring 2009 GMU 30
Closure(I) function
Closure(I) where I is a set of LR(0) items =– Every item in I (kernel) and
– If A . B in closure(I) and B is a production, add B . to closure(I) (if not already there).
– Keep applying this rule until no more items can be added.
![Page 31: Lecture5:LRParsing · 2009-01-21 · CS 540 Spring 2009 GMU 4 LR(k)Parsing–BottomUp • Construct parse tree from leaves, ‘reducing’the string to the start symbol (and a single](https://reader034.fdocuments.us/reader034/viewer/2022042022/5e797d602ccb143d1f0bf556/html5/thumbnails/31.jpg)
CS 540 Spring 2009 GMU 31
Closure ExampleE’ E
E E + T | T
T T * F | F
F ( E ) | id
Closure({T T * . F}) = {T T * . F, F . ( E ), F . id}
Closure({E E . + T, F . id}) = {E E . + T, F . id}
![Page 32: Lecture5:LRParsing · 2009-01-21 · CS 540 Spring 2009 GMU 4 LR(k)Parsing–BottomUp • Construct parse tree from leaves, ‘reducing’the string to the start symbol (and a single](https://reader034.fdocuments.us/reader034/viewer/2022042022/5e797d602ccb143d1f0bf556/html5/thumbnails/32.jpg)
CS 540 Spring 2009 GMU 32
Closure ExampleE’ EE E + T | TT T * F | FF ( E ) | id
Closure({F ( . E )} = {F ( . E ), E . E + T, E . T}= {F ( . E ), E . E + T, E . T, T . T * F, T . F}= {F ( . E ), E . E + T, E . T, T . T * F, T . F,
F . Id, F . ( E ) }
![Page 33: Lecture5:LRParsing · 2009-01-21 · CS 540 Spring 2009 GMU 4 LR(k)Parsing–BottomUp • Construct parse tree from leaves, ‘reducing’the string to the start symbol (and a single](https://reader034.fdocuments.us/reader034/viewer/2022042022/5e797d602ccb143d1f0bf556/html5/thumbnails/33.jpg)
CS 540 Spring 2009 GMU 33
Goto function
Goto(I,X), where I is a set of items and X is a grammar symbol, is the closure(A X . where A . X is in I.
Ex: Goto({E’E ., E E . + T},+) = closure({E E + . T})
= {E E + . T, T . T * F, T . F, F . id,
F . ( E )}
![Page 34: Lecture5:LRParsing · 2009-01-21 · CS 540 Spring 2009 GMU 4 LR(k)Parsing–BottomUp • Construct parse tree from leaves, ‘reducing’the string to the start symbol (and a single](https://reader034.fdocuments.us/reader034/viewer/2022042022/5e797d602ccb143d1f0bf556/html5/thumbnails/34.jpg)
CS 540 Spring 2009 GMU 34
Goto function
• Goto({T T * . F, T . F},F)
= closure({T T * F ., T F . })= {T T * F ., T F .}
• Goto({E’E ., E E + . T},+)
= closure() = since + does not occur before the . symbol
![Page 35: Lecture5:LRParsing · 2009-01-21 · CS 540 Spring 2009 GMU 4 LR(k)Parsing–BottomUp • Construct parse tree from leaves, ‘reducing’the string to the start symbol (and a single](https://reader034.fdocuments.us/reader034/viewer/2022042022/5e797d602ccb143d1f0bf556/html5/thumbnails/35.jpg)
CS 540 Spring 2009 GMU 35
Algorithm: Finding canonical collection C = {I0,I1,…,In} for grammar G
• C ={closure({S’. S})} for start symbol S’
• Repeat
– For each Ik in C and grammar symbol X such that Goto(Ik,X) is not empty and not in C
• Add Goto(Ik,X) to C
I0
![Page 36: Lecture5:LRParsing · 2009-01-21 · CS 540 Spring 2009 GMU 4 LR(k)Parsing–BottomUp • Construct parse tree from leaves, ‘reducing’the string to the start symbol (and a single](https://reader034.fdocuments.us/reader034/viewer/2022042022/5e797d602ccb143d1f0bf556/html5/thumbnails/36.jpg)
CS 540 Spring 2009 GMU 36
Example 1Grammar: S a T R e, T T b c | b, R dI0: S . a T R e Goto({S . a T R e },a) = I1
I1: S a . T R e Goto({S a . T R e , T . T b c},T)T . T b c = I2
T . b Goto({T . b },b) = I3
I2: S a T . R e goto 4T T . b c goto 5R . d goto 6
I0 I1
I2 I3
I6I5I4
a
bT
Rb
d
kernel of each item set is in blue
![Page 37: Lecture5:LRParsing · 2009-01-21 · CS 540 Spring 2009 GMU 4 LR(k)Parsing–BottomUp • Construct parse tree from leaves, ‘reducing’the string to the start symbol (and a single](https://reader034.fdocuments.us/reader034/viewer/2022042022/5e797d602ccb143d1f0bf556/html5/thumbnails/37.jpg)
CS 540 Spring 2009 GMU 37
Example 1
Grammar: S a T R e, T T b c | b, R dI3: T b . reduce
I4: S a T R . e goto state 7
I5: T T b . c goto state 8
I6: R d . reduce
I7: S a T R e . reduce
I8: T T b c . reduce
I0 I1
I2 I3
I6I5I4
a
bT
Rb
d
I8I7
e c
![Page 38: Lecture5:LRParsing · 2009-01-21 · CS 540 Spring 2009 GMU 4 LR(k)Parsing–BottomUp • Construct parse tree from leaves, ‘reducing’the string to the start symbol (and a single](https://reader034.fdocuments.us/reader034/viewer/2022042022/5e797d602ccb143d1f0bf556/html5/thumbnails/38.jpg)
CS 540 Spring 2009 GMU 38
Algorithm: Canonical sets
state = 0; max_state = 1;
kernel[0] = [S’ . S]
loop
c = closure(kernel[state]);
for t in c, where all productions are form A . B if exists k <= state where t = kernel[k] then goto(state,B) = k;
else
kernel[max_state] = goto(state,B) = t;
max_state++;
state++;
until state+1 = max_state;
![Page 39: Lecture5:LRParsing · 2009-01-21 · CS 540 Spring 2009 GMU 4 LR(k)Parsing–BottomUp • Construct parse tree from leaves, ‘reducing’the string to the start symbol (and a single](https://reader034.fdocuments.us/reader034/viewer/2022042022/5e797d602ccb143d1f0bf556/html5/thumbnails/39.jpg)
CS 540 Spring 2009 GMU 39
Example 2
Grammar: S’ S, S A S | b, A S A | cI0: S’ . S
S . A S S . b A . S AA . c
I1: S’ S .A S . AA . S A A . c S . A SS . b
![Page 40: Lecture5:LRParsing · 2009-01-21 · CS 540 Spring 2009 GMU 4 LR(k)Parsing–BottomUp • Construct parse tree from leaves, ‘reducing’the string to the start symbol (and a single](https://reader034.fdocuments.us/reader034/viewer/2022042022/5e797d602ccb143d1f0bf556/html5/thumbnails/40.jpg)
CS 540 Spring 2009 GMU 40
Example 2Grammar: S’ S, S A S | b, A S A | c
I2: S A . S
S . A S
S . b
A . S A
A . c
I3: A c .
I4: S b .
I0 I1
I2I3I4
S
Ac b
So far:
cb
I5
I6
A
S
I7
SA
cb
![Page 41: Lecture5:LRParsing · 2009-01-21 · CS 540 Spring 2009 GMU 4 LR(k)Parsing–BottomUp • Construct parse tree from leaves, ‘reducing’the string to the start symbol (and a single](https://reader034.fdocuments.us/reader034/viewer/2022042022/5e797d602ccb143d1f0bf556/html5/thumbnails/41.jpg)
CS 540 Spring 2009 GMU 41
Example 2Grammar: S’ S, S A S | b, A S A | c
I5: S A . S I6: A S . A I7: S A S .
A S A . A . S A A S . A
S . A S A . c A . S A
S . b S . A S A . c
A . S A S . b S . A S
A . c S . b
![Page 42: Lecture5:LRParsing · 2009-01-21 · CS 540 Spring 2009 GMU 4 LR(k)Parsing–BottomUp • Construct parse tree from leaves, ‘reducing’the string to the start symbol (and a single](https://reader034.fdocuments.us/reader034/viewer/2022042022/5e797d602ccb143d1f0bf556/html5/thumbnails/42.jpg)
CS 540 Spring 2009 GMU 42
Example 2Grammar: S’ S, S A S | b, A S A | c
I0: S’ . S I1: S’ S .
A S . AI2: S A . SI3: A c .I4: S b .I5: S A . S
A S A .I6: A S . AI7: S A S .
A S . A
I0 I1
I2I3I4
S
Ac b
So far:
cb
I5
I6
A
S
I7
S
A
cb
A
A
S
A
S
S
I5—I7 also have connections to I3 and I4
![Page 43: Lecture5:LRParsing · 2009-01-21 · CS 540 Spring 2009 GMU 4 LR(k)Parsing–BottomUp • Construct parse tree from leaves, ‘reducing’the string to the start symbol (and a single](https://reader034.fdocuments.us/reader034/viewer/2022042022/5e797d602ccb143d1f0bf556/html5/thumbnails/43.jpg)
CS 540 Spring 2009 GMU 43
Generating SLR parse tables
• Construct C = {…} the LR(0) items as in previous slides• Action table for state i of parser:
– If [A . a ] in Ii, goto(Ii,a) = Ij thenaction[i,a] = shift j
– If [A .,b] in Ii, where A is not S’, thenaction[i,a] = reduce A for all a in FOLLOW(A)
– If [S’ S,$] in Ii, set action[i,$] = acceptAll undefined entries are error
• Goto Table for state i of parser:– If [A . B] in Ii and goto(Ii,B) = Ij then
goto[i,B] = j
![Page 44: Lecture5:LRParsing · 2009-01-21 · CS 540 Spring 2009 GMU 4 LR(k)Parsing–BottomUp • Construct parse tree from leaves, ‘reducing’the string to the start symbol (and a single](https://reader034.fdocuments.us/reader034/viewer/2022042022/5e797d602ccb143d1f0bf556/html5/thumbnails/44.jpg)
CS 540 Spring 2009 GMU 44
Example 2
Grammar: S’ S, S A S | b, A S A | c
cbcbA
$cbcbS
$cbS’
FollowFirst
![Page 45: Lecture5:LRParsing · 2009-01-21 · CS 540 Spring 2009 GMU 4 LR(k)Parsing–BottomUp • Construct parse tree from leaves, ‘reducing’the string to the start symbol (and a single](https://reader034.fdocuments.us/reader034/viewer/2022042022/5e797d602ccb143d1f0bf556/html5/thumbnails/45.jpg)
CS 540 Spring 2009 GMU 45
Example 2
Grammar: S’ S, S A S | b, A S A | c
I0: S’ . S goto 1S . A S goto 2S . b goto 3A . S A goto 1A . c goto 4
I1: S’ S . reduceA S . A goto 5A . S A goto 6A . c goto 4S . A S goto 5S . b goto 3 8
7
6
5
4
3
2
56accs3s41
21s3s40
AS$bcState
![Page 46: Lecture5:LRParsing · 2009-01-21 · CS 540 Spring 2009 GMU 4 LR(k)Parsing–BottomUp • Construct parse tree from leaves, ‘reducing’the string to the start symbol (and a single](https://reader034.fdocuments.us/reader034/viewer/2022042022/5e797d602ccb143d1f0bf556/html5/thumbnails/46.jpg)
CS 540 Spring 2009 GMU 46
Example 2Grammar: S’ S, S A S | b, A S A | c
I2: S A . S
S . A S
S . b
A . S A
A . A
I3: S b .
I4: A c .
I0 I1
I2I4I3
S
Ac b
So far:
cb
I5
I6
A
S
I7
SA
cb
![Page 47: Lecture5:LRParsing · 2009-01-21 · CS 540 Spring 2009 GMU 4 LR(k)Parsing–BottomUp • Construct parse tree from leaves, ‘reducing’the string to the start symbol (and a single](https://reader034.fdocuments.us/reader034/viewer/2022042022/5e797d602ccb143d1f0bf556/html5/thumbnails/47.jpg)
CS 540 Spring 2009 GMU 47
LR Table for Example 2
8
7
6
5
r5r54
r3r3r33
27s3s42
56accs3s41
21s3s40
AS$bcState 1: S’ S2: S A S 3: S b4: A S A5: A c
![Page 48: Lecture5:LRParsing · 2009-01-21 · CS 540 Spring 2009 GMU 4 LR(k)Parsing–BottomUp • Construct parse tree from leaves, ‘reducing’the string to the start symbol (and a single](https://reader034.fdocuments.us/reader034/viewer/2022042022/5e797d602ccb143d1f0bf556/html5/thumbnails/48.jpg)
CS 540 Spring 2009 GMU 48
Example 2Grammar: S’ S, S A S | b, A S A | c
I5: S A . S I6: A S . A I7: S A S .
A S A . A . S A A S . A
S . A S A . c A . S A
S . b S . A S A . c
A . S A S . b S . A S
A . c S . b
![Page 49: Lecture5:LRParsing · 2009-01-21 · CS 540 Spring 2009 GMU 4 LR(k)Parsing–BottomUp • Construct parse tree from leaves, ‘reducing’the string to the start symbol (and a single](https://reader034.fdocuments.us/reader034/viewer/2022042022/5e797d602ccb143d1f0bf556/html5/thumbnails/49.jpg)
CS 540 Spring 2009 GMU 49
LR Table for Example 2
56r2s3/r2s4/r27
56s3s46
27s3/r4s4/r45
r5r54
r3r3r33
27s3s42
56accs3s41
21s3s40
AS$bcState 1: S’ S2: S A S 3: S b4: A S A5: A c
![Page 50: Lecture5:LRParsing · 2009-01-21 · CS 540 Spring 2009 GMU 4 LR(k)Parsing–BottomUp • Construct parse tree from leaves, ‘reducing’the string to the start symbol (and a single](https://reader034.fdocuments.us/reader034/viewer/2022042022/5e797d602ccb143d1f0bf556/html5/thumbnails/50.jpg)
CS 540 Spring 2009 GMU 50
LR Conflicts
• Shift/reduce– When it cannot be determined whether to shift the next
symbol or reduce by a production
– Typically, the default is to shift.
– Examples: previous grammar, dangling else
if_stmt if expr then stmt | if expr then stmt else stmt
if ex1 then
if ex2 then
stmt;
else which ‘if’ owns this else??
![Page 51: Lecture5:LRParsing · 2009-01-21 · CS 540 Spring 2009 GMU 4 LR(k)Parsing–BottomUp • Construct parse tree from leaves, ‘reducing’the string to the start symbol (and a single](https://reader034.fdocuments.us/reader034/viewer/2022042022/5e797d602ccb143d1f0bf556/html5/thumbnails/51.jpg)
CS 540 Spring 2009 GMU 51
LR Conflicts
• Reduce/reduce– When it cannot be determined which
production to reduce by
– Example:
stmt id ( expr_list ) function call
expr id ( expr_list ) array (as in Ada)
– Convention: use first production in grammar or use more powerful technique
![Page 52: Lecture5:LRParsing · 2009-01-21 · CS 540 Spring 2009 GMU 4 LR(k)Parsing–BottomUp • Construct parse tree from leaves, ‘reducing’the string to the start symbol (and a single](https://reader034.fdocuments.us/reader034/viewer/2022042022/5e797d602ccb143d1f0bf556/html5/thumbnails/52.jpg)
CS 540 Spring 2009 GMU 52
Error Recovery in LR parsing
Just as with LL, we typically want to discard some part of the input and resume parsing from some ‘known’ point.– Search back in the stack for some non-terminal
A (how to choose A?) then process input until find token in Follow(A)
– Can also decorate the LR table with error recovery routines tailored to the state and token – more complicated to get right.