LR Parsingcse.iitkgp.ac.in/~goutam/IIITKalyani/compiler/lect/Lect7.pdf · 2019. 10. 11. ·...
Transcript of LR Parsingcse.iitkgp.ac.in/~goutam/IIITKalyani/compiler/lect/Lect7.pdf · 2019. 10. 11. ·...
![Page 1: LR Parsingcse.iitkgp.ac.in/~goutam/IIITKalyani/compiler/lect/Lect7.pdf · 2019. 10. 11. · Compiler Design IIITKalyani, WB 3 LR(0) Parsing An LR(0) parser can take shift-reduce decisions](https://reader036.fdocuments.in/reader036/viewer/2022081614/5fc2d21eadc89566ac27b57c/html5/thumbnails/1.jpg)
Compiler Design IIIT Kalyani, WB 1✬
✫
✩
✪
LR Parsing
Lect 7 Goutam Biswas
![Page 2: LR Parsingcse.iitkgp.ac.in/~goutam/IIITKalyani/compiler/lect/Lect7.pdf · 2019. 10. 11. · Compiler Design IIITKalyani, WB 3 LR(0) Parsing An LR(0) parser can take shift-reduce decisions](https://reader036.fdocuments.in/reader036/viewer/2022081614/5fc2d21eadc89566ac27b57c/html5/thumbnails/2.jpg)
Compiler Design IIIT Kalyani, WB 2✬
✫
✩
✪
LR(k) Grammar
An LR(k) grammar is a context-free grammarwhere the handle in a right sentential form canbe identified with a lookahead of at most kinput. We shall only consider k = 0, 1.
Lect 7 Goutam Biswas
![Page 3: LR Parsingcse.iitkgp.ac.in/~goutam/IIITKalyani/compiler/lect/Lect7.pdf · 2019. 10. 11. · Compiler Design IIITKalyani, WB 3 LR(0) Parsing An LR(0) parser can take shift-reduce decisions](https://reader036.fdocuments.in/reader036/viewer/2022081614/5fc2d21eadc89566ac27b57c/html5/thumbnails/3.jpg)
Compiler Design IIIT Kalyani, WB 3✬
✫
✩
✪
LR(0) Parsing
An LR(0) parser can take shift-reduce decisionsentirely on the basis of the states of LR(0)automatona of the grammar. Consider thefollowing grammar with the augmented startsymbol and the production rule.
aThe parsing table can be filled from the automaton.
Lect 7 Goutam Biswas
![Page 4: LR Parsingcse.iitkgp.ac.in/~goutam/IIITKalyani/compiler/lect/Lect7.pdf · 2019. 10. 11. · Compiler Design IIITKalyani, WB 3 LR(0) Parsing An LR(0) parser can take shift-reduce decisions](https://reader036.fdocuments.in/reader036/viewer/2022081614/5fc2d21eadc89566ac27b57c/html5/thumbnails/4.jpg)
Compiler Design IIIT Kalyani, WB 4✬
✫
✩
✪
Example
The production rules are,
S → aSa | bSb | c
The production rules of the augmented
grammar are,
S′ → S$
S → aSa | bSb | c
The states of the LR(0) automaton are thefollowing:
Lect 7 Goutam Biswas
![Page 5: LR Parsingcse.iitkgp.ac.in/~goutam/IIITKalyani/compiler/lect/Lect7.pdf · 2019. 10. 11. · Compiler Design IIITKalyani, WB 3 LR(0) Parsing An LR(0) parser can take shift-reduce decisions](https://reader036.fdocuments.in/reader036/viewer/2022081614/5fc2d21eadc89566ac27b57c/html5/thumbnails/5.jpg)
Compiler Design IIIT Kalyani, WB 5✬
✫
✩
✪
States
q0 : S′ → •S$ S → •aSa S → •bSb
S → •c
q1 : S′ → S • $
q2 : S → a • Sa S → •aSa S → •bSb
S → •c
q3 : S → b • Sb S → •aSa S → •bSb
S → •c
q4 : S → c•
Lect 7 Goutam Biswas
![Page 6: LR Parsingcse.iitkgp.ac.in/~goutam/IIITKalyani/compiler/lect/Lect7.pdf · 2019. 10. 11. · Compiler Design IIITKalyani, WB 3 LR(0) Parsing An LR(0) parser can take shift-reduce decisions](https://reader036.fdocuments.in/reader036/viewer/2022081614/5fc2d21eadc89566ac27b57c/html5/thumbnails/6.jpg)
Compiler Design IIIT Kalyani, WB 6✬
✫
✩
✪
States
q5 : S → aS • a
q6 : S → bS • b
q7 : S → aSa•
q8 : S → bSb•
Lect 7 Goutam Biswas
![Page 7: LR Parsingcse.iitkgp.ac.in/~goutam/IIITKalyani/compiler/lect/Lect7.pdf · 2019. 10. 11. · Compiler Design IIITKalyani, WB 3 LR(0) Parsing An LR(0) parser can take shift-reduce decisions](https://reader036.fdocuments.in/reader036/viewer/2022081614/5fc2d21eadc89566ac27b57c/html5/thumbnails/7.jpg)
Compiler Design IIIT Kalyani, WB 7✬
✫
✩
✪
Complete and Incomplete Items
An LR(0) item is called complete if the ‘•’ is atthe right end of the production, A → α•. Thisindicates that the DFA has already ‘seen’ ahandle and it is on the top of the stack.
Lect 7 Goutam Biswas
![Page 8: LR Parsingcse.iitkgp.ac.in/~goutam/IIITKalyani/compiler/lect/Lect7.pdf · 2019. 10. 11. · Compiler Design IIITKalyani, WB 3 LR(0) Parsing An LR(0) parser can take shift-reduce decisions](https://reader036.fdocuments.in/reader036/viewer/2022081614/5fc2d21eadc89566ac27b57c/html5/thumbnails/8.jpg)
Compiler Design IIIT Kalyani, WB 8✬
✫
✩
✪
LR(0) Grammar
A grammar G is of type LR(0) if the DFA of its
viable prefixes has the following properties:
• no state has both complete and incomplete
items,
• no state has two complete items.
Lect 7 Goutam Biswas
![Page 9: LR Parsingcse.iitkgp.ac.in/~goutam/IIITKalyani/compiler/lect/Lect7.pdf · 2019. 10. 11. · Compiler Design IIITKalyani, WB 3 LR(0) Parsing An LR(0) parser can take shift-reduce decisions](https://reader036.fdocuments.in/reader036/viewer/2022081614/5fc2d21eadc89566ac27b57c/html5/thumbnails/9.jpg)
Compiler Design IIIT Kalyani, WB 9✬
✫
✩
✪
Note
A state with a unique complete item A → α•,indicates a reduction of the handle α by therule A → α.A state with incomplete items indicates shiftactions. The parsing table for the givengrammar is as follows.
Lect 7 Goutam Biswas
![Page 10: LR Parsingcse.iitkgp.ac.in/~goutam/IIITKalyani/compiler/lect/Lect7.pdf · 2019. 10. 11. · Compiler Design IIITKalyani, WB 3 LR(0) Parsing An LR(0) parser can take shift-reduce decisions](https://reader036.fdocuments.in/reader036/viewer/2022081614/5fc2d21eadc89566ac27b57c/html5/thumbnails/10.jpg)
Compiler Design IIIT Kalyani, WB 10✬
✫
✩
✪
Parsing table
Lect 7 Goutam Biswas
![Page 11: LR Parsingcse.iitkgp.ac.in/~goutam/IIITKalyani/compiler/lect/Lect7.pdf · 2019. 10. 11. · Compiler Design IIITKalyani, WB 3 LR(0) Parsing An LR(0) parser can take shift-reduce decisions](https://reader036.fdocuments.in/reader036/viewer/2022081614/5fc2d21eadc89566ac27b57c/html5/thumbnails/11.jpg)
Compiler Design IIIT Kalyani, WB 11✬
✫
✩
✪
State Action Goto
a b c $ S
0 s2 s3 s4 1
1 accept
2 s2 s3 s4 5
3 s2 s3 s4 6
4 r3 r3 r3 r3
5 s7
6 s8
7 r1 r1 r1 r1
8 r2 r2 r2 r2
Lect 7 Goutam Biswas
![Page 12: LR Parsingcse.iitkgp.ac.in/~goutam/IIITKalyani/compiler/lect/Lect7.pdf · 2019. 10. 11. · Compiler Design IIITKalyani, WB 3 LR(0) Parsing An LR(0) parser can take shift-reduce decisions](https://reader036.fdocuments.in/reader036/viewer/2022081614/5fc2d21eadc89566ac27b57c/html5/thumbnails/12.jpg)
Compiler Design IIIT Kalyani, WB 12✬
✫
✩
✪
Note
The parser does not look-ahead for any shiftoperation. It gets the current state from thetop-of-stack and the token from the scanner.Using the parsing table it gets the next stateand pushes it in the stacka. The token isconsumed.
aIt may push the token and its attributes in the value stack for semantic
action.
Lect 7 Goutam Biswas
![Page 13: LR Parsingcse.iitkgp.ac.in/~goutam/IIITKalyani/compiler/lect/Lect7.pdf · 2019. 10. 11. · Compiler Design IIITKalyani, WB 3 LR(0) Parsing An LR(0) parser can take shift-reduce decisions](https://reader036.fdocuments.in/reader036/viewer/2022081614/5fc2d21eadc89566ac27b57c/html5/thumbnails/13.jpg)
Compiler Design IIIT Kalyani, WB 13✬
✫
✩
✪
Note
In case of LR(0) parser it does not look-aheadeven for any reduce operationa. It gets thecurrent state from the top-of-stack and theproduction rule number from the parsing table(for all correct input they are same), andreduces the right sentential form by the ruleb.
aIt may read the input to detect error. Note the column corresponding to ‘c’
for the states 4, 7, 8 with unique complete items.bThe Goto portion of the table is used to push a new state on the stack after
a reduction.
Lect 7 Goutam Biswas
![Page 14: LR Parsingcse.iitkgp.ac.in/~goutam/IIITKalyani/compiler/lect/Lect7.pdf · 2019. 10. 11. · Compiler Design IIITKalyani, WB 3 LR(0) Parsing An LR(0) parser can take shift-reduce decisions](https://reader036.fdocuments.in/reader036/viewer/2022081614/5fc2d21eadc89566ac27b57c/html5/thumbnails/14.jpg)
Compiler Design IIIT Kalyani, WB 14✬
✫
✩
✪
Parsing Example
Stack Input Handle Action
$q0 aabcbaa$ nil s2
$q0q2 abcbaa$ nil s2
$q0q2q2 bcbaa$ nil s3
$q0q2q2q3 cbaa$ nil s4
$q0q2q2q3q4 baa$ S → c r3
a
aThe length of |c| = 1, so q4 is popped out and Goto(q3, S) = q6 is pushed in
the stack.
Lect 7 Goutam Biswas
![Page 15: LR Parsingcse.iitkgp.ac.in/~goutam/IIITKalyani/compiler/lect/Lect7.pdf · 2019. 10. 11. · Compiler Design IIITKalyani, WB 3 LR(0) Parsing An LR(0) parser can take shift-reduce decisions](https://reader036.fdocuments.in/reader036/viewer/2022081614/5fc2d21eadc89566ac27b57c/html5/thumbnails/15.jpg)
Compiler Design IIIT Kalyani, WB 15✬
✫
✩
✪
Parsing Example
Stack Input Handle Action
$q0q2q2q3q4 baa$ S → c r3
$q0q2q2q3q6 baa$ nil s8
$q0q2q2q3q6q8 aa$ S → bSb r2
$q0q2q2q5 aa$ nil s7
$q0q2q2q5q7 a$ S → aSa r1
a
aThe length of |bSb| = 3, so q3q6q8 are popped out and Goto(q2, S) = q5 is
pushed in the stack.
Lect 7 Goutam Biswas
![Page 16: LR Parsingcse.iitkgp.ac.in/~goutam/IIITKalyani/compiler/lect/Lect7.pdf · 2019. 10. 11. · Compiler Design IIITKalyani, WB 3 LR(0) Parsing An LR(0) parser can take shift-reduce decisions](https://reader036.fdocuments.in/reader036/viewer/2022081614/5fc2d21eadc89566ac27b57c/html5/thumbnails/16.jpg)
Compiler Design IIIT Kalyani, WB 16✬
✫
✩
✪
Parsing Example
Stack Input Handle Action
$q0q2q2q5q7 a$ S → aSa r1
$q0q2q5 a$ nil s7
$q0q2q5q7 $ S → aSa r1
$q0q1 $ S′ → S accept
a
aThe length of |aSa| = 3, so q2q5q7 are popped out and Goto(q2, S) = q5 is
pushed in the stack. Similarly, Goto(q0, S) = q1 is pushed in the stack.
Lect 7 Goutam Biswas
![Page 17: LR Parsingcse.iitkgp.ac.in/~goutam/IIITKalyani/compiler/lect/Lect7.pdf · 2019. 10. 11. · Compiler Design IIITKalyani, WB 3 LR(0) Parsing An LR(0) parser can take shift-reduce decisions](https://reader036.fdocuments.in/reader036/viewer/2022081614/5fc2d21eadc89566ac27b57c/html5/thumbnails/17.jpg)
Compiler Design IIIT Kalyani, WB 17✬
✫
✩
✪
SLR(1) Parsing
Lect 7 Goutam Biswas
![Page 18: LR Parsingcse.iitkgp.ac.in/~goutam/IIITKalyani/compiler/lect/Lect7.pdf · 2019. 10. 11. · Compiler Design IIITKalyani, WB 3 LR(0) Parsing An LR(0) parser can take shift-reduce decisions](https://reader036.fdocuments.in/reader036/viewer/2022081614/5fc2d21eadc89566ac27b57c/html5/thumbnails/18.jpg)
Compiler Design IIIT Kalyani, WB 18✬
✫
✩
✪
We consider our old grammar (augmented with S′).
0 : S′ → P$
1 : P → m L s e
2 : L → D L
3 : L → D
4 : D → T V ;
5 : V → d V
6 : V → d
7 : T → i
8 : T → f
Lect 7 Goutam Biswas
![Page 19: LR Parsingcse.iitkgp.ac.in/~goutam/IIITKalyani/compiler/lect/Lect7.pdf · 2019. 10. 11. · Compiler Design IIITKalyani, WB 3 LR(0) Parsing An LR(0) parser can take shift-reduce decisions](https://reader036.fdocuments.in/reader036/viewer/2022081614/5fc2d21eadc89566ac27b57c/html5/thumbnails/19.jpg)
Compiler Design IIIT Kalyani, WB 19✬
✫
✩
✪
States
q0 : S′ → •P P → •m L s e
q1 : S′ → P • $
q2 : P → m • L s e L → •D L L → •D
D → •T V ; T → •i T → •f
q3 : P → m L • s e
q4 : L → D • L L → D• L → •D L
L → •D D → •T V ; T → •i
T → •f
Lect 7 Goutam Biswas
![Page 20: LR Parsingcse.iitkgp.ac.in/~goutam/IIITKalyani/compiler/lect/Lect7.pdf · 2019. 10. 11. · Compiler Design IIITKalyani, WB 3 LR(0) Parsing An LR(0) parser can take shift-reduce decisions](https://reader036.fdocuments.in/reader036/viewer/2022081614/5fc2d21eadc89566ac27b57c/html5/thumbnails/20.jpg)
Compiler Design IIIT Kalyani, WB 20✬
✫
✩
✪
States
q5 : D → T • V ; V → •d V V → •d
q6 : T → i•
q7 : T → f•
q8 : P → m L s • e
q9 : L → D L•
q10 : D → T V •;
q11 : V → d • V V → d• V → •d V
V → •d
Lect 7 Goutam Biswas
![Page 21: LR Parsingcse.iitkgp.ac.in/~goutam/IIITKalyani/compiler/lect/Lect7.pdf · 2019. 10. 11. · Compiler Design IIITKalyani, WB 3 LR(0) Parsing An LR(0) parser can take shift-reduce decisions](https://reader036.fdocuments.in/reader036/viewer/2022081614/5fc2d21eadc89566ac27b57c/html5/thumbnails/21.jpg)
Compiler Design IIIT Kalyani, WB 21✬
✫
✩
✪
States
q12 : P → m L s e•
q13 : D → T V ; •
q14 : V → d V •
Lect 7 Goutam Biswas
![Page 22: LR Parsingcse.iitkgp.ac.in/~goutam/IIITKalyani/compiler/lect/Lect7.pdf · 2019. 10. 11. · Compiler Design IIITKalyani, WB 3 LR(0) Parsing An LR(0) parser can take shift-reduce decisions](https://reader036.fdocuments.in/reader036/viewer/2022081614/5fc2d21eadc89566ac27b57c/html5/thumbnails/22.jpg)
Compiler Design IIIT Kalyani, WB 22✬
✫
✩
✪
Note
In the LR(0) automaton of the grammar thereare two states q4 and q11 with both completeand incomplete items. So the grammar is not oftype LR(0).
Lect 7 Goutam Biswas
![Page 23: LR Parsingcse.iitkgp.ac.in/~goutam/IIITKalyani/compiler/lect/Lect7.pdf · 2019. 10. 11. · Compiler Design IIITKalyani, WB 3 LR(0) Parsing An LR(0) parser can take shift-reduce decisions](https://reader036.fdocuments.in/reader036/viewer/2022081614/5fc2d21eadc89566ac27b57c/html5/thumbnails/23.jpg)
Compiler Design IIIT Kalyani, WB 23✬
✫
✩
✪
Note
Consider the state q4.The complete item is L → D• and theincomplete items are T → •i and T → •f .The Follow(L) = {s} is different from i, f . Sowe can put Action(4, i) = s6, Action(4, f) = s7and Action(4, s) = r3 (reduce by the productionrule number 3) in the parsing table.
Lect 7 Goutam Biswas
![Page 24: LR Parsingcse.iitkgp.ac.in/~goutam/IIITKalyani/compiler/lect/Lect7.pdf · 2019. 10. 11. · Compiler Design IIITKalyani, WB 3 LR(0) Parsing An LR(0) parser can take shift-reduce decisions](https://reader036.fdocuments.in/reader036/viewer/2022081614/5fc2d21eadc89566ac27b57c/html5/thumbnails/24.jpg)
Compiler Design IIIT Kalyani, WB 24✬
✫
✩
✪
SLR Parsing Table: Action
• If A → α • aβ ∈ qi (a ∈ Σ) and
Goto(qi, a) = qj , then Action(i, a) = sj.
• If A → α• ∈ qi (A 6= S′) and b ∈ Follow(A),
then Action(i, b) = rk, where k is the rule
number of A → α.
• If S′ → S • $ ∈ qi, then Action(i, $) = accept.
Lect 7 Goutam Biswas
![Page 25: LR Parsingcse.iitkgp.ac.in/~goutam/IIITKalyani/compiler/lect/Lect7.pdf · 2019. 10. 11. · Compiler Design IIITKalyani, WB 3 LR(0) Parsing An LR(0) parser can take shift-reduce decisions](https://reader036.fdocuments.in/reader036/viewer/2022081614/5fc2d21eadc89566ac27b57c/html5/thumbnails/25.jpg)
Compiler Design IIIT Kalyani, WB 25✬
✫
✩
✪
Note
If this process does not lead to a table withmultiple entries, then the grammar is of typeSLR (simple LR).
Lect 7 Goutam Biswas
![Page 26: LR Parsingcse.iitkgp.ac.in/~goutam/IIITKalyani/compiler/lect/Lect7.pdf · 2019. 10. 11. · Compiler Design IIITKalyani, WB 3 LR(0) Parsing An LR(0) parser can take shift-reduce decisions](https://reader036.fdocuments.in/reader036/viewer/2022081614/5fc2d21eadc89566ac27b57c/html5/thumbnails/26.jpg)
Compiler Design IIIT Kalyani, WB 26✬
✫
✩
✪
SLR Parsing Table: Goto
If A → α • Bβ ∈ qi (B ∈ N) andGoto(qi, B) = qj, then in the tableGoto(i, B) = j.All other entries of the table are errors.
Lect 7 Goutam Biswas
![Page 27: LR Parsingcse.iitkgp.ac.in/~goutam/IIITKalyani/compiler/lect/Lect7.pdf · 2019. 10. 11. · Compiler Design IIITKalyani, WB 3 LR(0) Parsing An LR(0) parser can take shift-reduce decisions](https://reader036.fdocuments.in/reader036/viewer/2022081614/5fc2d21eadc89566ac27b57c/html5/thumbnails/27.jpg)
Compiler Design IIIT Kalyani, WB 27✬
✫
✩
✪
FOLLOW() Sets
Non-terminal Follow
P $
L s
D i, f, s
T d
V ;
Lect 7 Goutam Biswas
![Page 28: LR Parsingcse.iitkgp.ac.in/~goutam/IIITKalyani/compiler/lect/Lect7.pdf · 2019. 10. 11. · Compiler Design IIITKalyani, WB 3 LR(0) Parsing An LR(0) parser can take shift-reduce decisions](https://reader036.fdocuments.in/reader036/viewer/2022081614/5fc2d21eadc89566ac27b57c/html5/thumbnails/28.jpg)
Compiler Design IIIT Kalyani, WB 28✬
✫
✩
✪
SLR Parsing Table
S Action Goto
m s e ; d i f $ P L D V T
0 s2 1
1 A
2 s6 s7 3 4 5
3 s8
4 r3 s6 s7 9 4 5
5 s11 10
Lect 7 Goutam Biswas
![Page 29: LR Parsingcse.iitkgp.ac.in/~goutam/IIITKalyani/compiler/lect/Lect7.pdf · 2019. 10. 11. · Compiler Design IIITKalyani, WB 3 LR(0) Parsing An LR(0) parser can take shift-reduce decisions](https://reader036.fdocuments.in/reader036/viewer/2022081614/5fc2d21eadc89566ac27b57c/html5/thumbnails/29.jpg)
Compiler Design IIIT Kalyani, WB 29✬
✫
✩
✪
Example
S Action Goto
m s e ; d i f $ P L D V T
6 r7
7 r8
8 s12
9 r2
10 s13
11 r6 s11 14
Lect 7 Goutam Biswas
![Page 30: LR Parsingcse.iitkgp.ac.in/~goutam/IIITKalyani/compiler/lect/Lect7.pdf · 2019. 10. 11. · Compiler Design IIITKalyani, WB 3 LR(0) Parsing An LR(0) parser can take shift-reduce decisions](https://reader036.fdocuments.in/reader036/viewer/2022081614/5fc2d21eadc89566ac27b57c/html5/thumbnails/30.jpg)
Compiler Design IIIT Kalyani, WB 30✬
✫
✩
✪
Example
S Action Goto
m s e ; d i f $ P L D V T
12 r1
13 r4 r4 r4
14 r5
Lect 7 Goutam Biswas
![Page 31: LR Parsingcse.iitkgp.ac.in/~goutam/IIITKalyani/compiler/lect/Lect7.pdf · 2019. 10. 11. · Compiler Design IIITKalyani, WB 3 LR(0) Parsing An LR(0) parser can take shift-reduce decisions](https://reader036.fdocuments.in/reader036/viewer/2022081614/5fc2d21eadc89566ac27b57c/html5/thumbnails/31.jpg)
Compiler Design IIIT Kalyani, WB 31✬
✫
✩
✪
Non-SLR Grammar
Lect 7 Goutam Biswas
![Page 32: LR Parsingcse.iitkgp.ac.in/~goutam/IIITKalyani/compiler/lect/Lect7.pdf · 2019. 10. 11. · Compiler Design IIITKalyani, WB 3 LR(0) Parsing An LR(0) parser can take shift-reduce decisions](https://reader036.fdocuments.in/reader036/viewer/2022081614/5fc2d21eadc89566ac27b57c/html5/thumbnails/32.jpg)
Compiler Design IIIT Kalyani, WB 32✬
✫
✩
✪
Consider the following grammar Grr
(augmented by the S′).
0 : S′ → S$
1 : S → E + T
2 : S → T
3 : T → i ∗ E
4 : T → i
5 : E → T
Lect 7 Goutam Biswas
![Page 33: LR Parsingcse.iitkgp.ac.in/~goutam/IIITKalyani/compiler/lect/Lect7.pdf · 2019. 10. 11. · Compiler Design IIITKalyani, WB 3 LR(0) Parsing An LR(0) parser can take shift-reduce decisions](https://reader036.fdocuments.in/reader036/viewer/2022081614/5fc2d21eadc89566ac27b57c/html5/thumbnails/33.jpg)
Compiler Design IIIT Kalyani, WB 33✬
✫
✩
✪
States
The states of the LR(0) automaton are as follows:
q0 : S′ → •S S → •E + T S → •T
E → •T T → •i ∗ E T → •i
q1 : S′ → S • $
q2 : S → E •+ T
q3 : S → T• E → T•
q4 : T → i • ∗ E T → i•
q5 : S → E + •T T → •i ∗ E T → •i
Lect 7 Goutam Biswas
![Page 34: LR Parsingcse.iitkgp.ac.in/~goutam/IIITKalyani/compiler/lect/Lect7.pdf · 2019. 10. 11. · Compiler Design IIITKalyani, WB 3 LR(0) Parsing An LR(0) parser can take shift-reduce decisions](https://reader036.fdocuments.in/reader036/viewer/2022081614/5fc2d21eadc89566ac27b57c/html5/thumbnails/34.jpg)
Compiler Design IIIT Kalyani, WB 34✬
✫
✩
✪
States
q6 : T → i ∗ •E E → •T T → •i ∗ E
T → •i
q7 : S → E + T•
q8 : T → i ∗ E•
q9 : E → T•
Lect 7 Goutam Biswas
![Page 35: LR Parsingcse.iitkgp.ac.in/~goutam/IIITKalyani/compiler/lect/Lect7.pdf · 2019. 10. 11. · Compiler Design IIITKalyani, WB 3 LR(0) Parsing An LR(0) parser can take shift-reduce decisions](https://reader036.fdocuments.in/reader036/viewer/2022081614/5fc2d21eadc89566ac27b57c/html5/thumbnails/35.jpg)
Compiler Design IIIT Kalyani, WB 35✬
✫
✩
✪
Note
• The state q3 has two complete items S → T•
and E → T•.
• Also the Follow(S) = {$} and
Follow(E) = {$,+} has a common element.
• So there are two conflicting reduce entries in
the SLR table corresponding to the row-q3
and the column-$ - Action[q3][$] = {r2, r5}.
Lect 7 Goutam Biswas
![Page 36: LR Parsingcse.iitkgp.ac.in/~goutam/IIITKalyani/compiler/lect/Lect7.pdf · 2019. 10. 11. · Compiler Design IIITKalyani, WB 3 LR(0) Parsing An LR(0) parser can take shift-reduce decisions](https://reader036.fdocuments.in/reader036/viewer/2022081614/5fc2d21eadc89566ac27b57c/html5/thumbnails/36.jpg)
Compiler Design IIIT Kalyani, WB 36✬
✫
✩
✪
Consider the grammar Gsr (augmented by the
S′).
0 : S′ → A$
1 : A → B a
2 : A → C b
3 : A → a C a
4 : C → B
5 : B → c A
6 : B → b
Lect 7 Goutam Biswas
![Page 37: LR Parsingcse.iitkgp.ac.in/~goutam/IIITKalyani/compiler/lect/Lect7.pdf · 2019. 10. 11. · Compiler Design IIITKalyani, WB 3 LR(0) Parsing An LR(0) parser can take shift-reduce decisions](https://reader036.fdocuments.in/reader036/viewer/2022081614/5fc2d21eadc89566ac27b57c/html5/thumbnails/37.jpg)
Compiler Design IIIT Kalyani, WB 37✬
✫
✩
✪
States
Some of the states of the LR(0) automaton are as
follows:
q0 : S′ → •A A → •B a A → •C b
A → •a C a B → •c A B → •b
C → •B
q1 : S′ → A • $
q2 : A → B • a C → B•
q3 : A → C • b
q4 : A → a • C a C → •B
Lect 7 Goutam Biswas
![Page 38: LR Parsingcse.iitkgp.ac.in/~goutam/IIITKalyani/compiler/lect/Lect7.pdf · 2019. 10. 11. · Compiler Design IIITKalyani, WB 3 LR(0) Parsing An LR(0) parser can take shift-reduce decisions](https://reader036.fdocuments.in/reader036/viewer/2022081614/5fc2d21eadc89566ac27b57c/html5/thumbnails/38.jpg)
Compiler Design IIIT Kalyani, WB 38✬
✫
✩
✪
States
q5 : B → c • A A → •B a A → •C b
A → •a C a B → •c A B → •b
C → •B
q6 : B → b•
q7 : A → B a•
q8 :
q9 :
Lect 7 Goutam Biswas
![Page 39: LR Parsingcse.iitkgp.ac.in/~goutam/IIITKalyani/compiler/lect/Lect7.pdf · 2019. 10. 11. · Compiler Design IIITKalyani, WB 3 LR(0) Parsing An LR(0) parser can take shift-reduce decisions](https://reader036.fdocuments.in/reader036/viewer/2022081614/5fc2d21eadc89566ac27b57c/html5/thumbnails/39.jpg)
Compiler Design IIIT Kalyani, WB 39✬
✫
✩
✪
Note
• The state q2 has one complete item, C → B•
and one incomplete item, A → B • a.
• The SLR parsing table will have two entries
for Action[q2][a] = {s7, r4}, as a ∈ Follow(C).
Lect 7 Goutam Biswas
![Page 40: LR Parsingcse.iitkgp.ac.in/~goutam/IIITKalyani/compiler/lect/Lect7.pdf · 2019. 10. 11. · Compiler Design IIITKalyani, WB 3 LR(0) Parsing An LR(0) parser can take shift-reduce decisions](https://reader036.fdocuments.in/reader036/viewer/2022081614/5fc2d21eadc89566ac27b57c/html5/thumbnails/40.jpg)
Compiler Design IIIT Kalyani, WB 40✬
✫
✩
✪
Note
• The grammar Grr is not SLR due to the
reduce/reduce conflict.
• The grammar Gsr is not SLR due to the
shift/reduce conflict.
Lect 7 Goutam Biswas
![Page 41: LR Parsingcse.iitkgp.ac.in/~goutam/IIITKalyani/compiler/lect/Lect7.pdf · 2019. 10. 11. · Compiler Design IIITKalyani, WB 3 LR(0) Parsing An LR(0) parser can take shift-reduce decisions](https://reader036.fdocuments.in/reader036/viewer/2022081614/5fc2d21eadc89566ac27b57c/html5/thumbnails/41.jpg)
Compiler Design IIIT Kalyani, WB 41✬
✫
✩
✪
Note
• If the state of an LR(0) automaton contains
a complete item A → α• and the next input
a ∈ FOLLOW(A), the SLR action is
reduction by the rule A → α.
• But in the same state if there is another
complete item B → β• with a ∈ Follow(B),
or a shift item C → γ • aµ, there will be
conflict in action.
Lect 7 Goutam Biswas
![Page 42: LR Parsingcse.iitkgp.ac.in/~goutam/IIITKalyani/compiler/lect/Lect7.pdf · 2019. 10. 11. · Compiler Design IIITKalyani, WB 3 LR(0) Parsing An LR(0) parser can take shift-reduce decisions](https://reader036.fdocuments.in/reader036/viewer/2022081614/5fc2d21eadc89566ac27b57c/html5/thumbnails/42.jpg)
Compiler Design IIIT Kalyani, WB 42✬
✫
✩
✪
Note
• The set FOLLOW(A) is the super set of
what can follow a complete A-item at a
particular state.
• In the grammar Grr, in the state q3, E
cannot be followed by a $. Similarly S
cannot be followed by a +.
• Similarly in the grammar Gsr, in state q2, a
cannot follow the variable C.
Lect 7 Goutam Biswas
![Page 43: LR Parsingcse.iitkgp.ac.in/~goutam/IIITKalyani/compiler/lect/Lect7.pdf · 2019. 10. 11. · Compiler Design IIITKalyani, WB 3 LR(0) Parsing An LR(0) parser can take shift-reduce decisions](https://reader036.fdocuments.in/reader036/viewer/2022081614/5fc2d21eadc89566ac27b57c/html5/thumbnails/43.jpg)
Compiler Design IIIT Kalyani, WB 43✬
✫
✩
✪
Note
Both the reduce/reduce (Grr) and shift/reduce(Gsr) conflicts may be resolved by explicitlycarrying the look-ahead information.
Lect 7 Goutam Biswas
![Page 44: LR Parsingcse.iitkgp.ac.in/~goutam/IIITKalyani/compiler/lect/Lect7.pdf · 2019. 10. 11. · Compiler Design IIITKalyani, WB 3 LR(0) Parsing An LR(0) parser can take shift-reduce decisions](https://reader036.fdocuments.in/reader036/viewer/2022081614/5fc2d21eadc89566ac27b57c/html5/thumbnails/44.jpg)
Compiler Design IIIT Kalyani, WB 44✬
✫
✩
✪
Canonical LR(1) Item
• An object of the form A → α • β, a, where
A → αβ is a production rule and
a ∈ Σ ∪ {$}, is called an LR(1) item.
• ‘a’ is called the look-ahead symbol that can
follow A with this item.
• If there are more than one LR(1) items with
same LR(0) core, we write them as
A → α • β, a/b/ · · · , a set.
Lect 7 Goutam Biswas
![Page 45: LR Parsingcse.iitkgp.ac.in/~goutam/IIITKalyani/compiler/lect/Lect7.pdf · 2019. 10. 11. · Compiler Design IIITKalyani, WB 3 LR(0) Parsing An LR(0) parser can take shift-reduce decisions](https://reader036.fdocuments.in/reader036/viewer/2022081614/5fc2d21eadc89566ac27b57c/html5/thumbnails/45.jpg)
Compiler Design IIIT Kalyani, WB 45✬
✫
✩
✪
Reduction
• The look-ahead symbols of an LR(1) item
A → α • β, L are important when the item is
complete i.e. β = ε.
• The reduction by the rule A → α can take
place if the look-ahead symbol is in L of
A → α•, L.
• The look-ahead set L is a subset of
FOLLOW(A), but we carry them explicitly
to resolve more conflicts.
Lect 7 Goutam Biswas
![Page 46: LR Parsingcse.iitkgp.ac.in/~goutam/IIITKalyani/compiler/lect/Lect7.pdf · 2019. 10. 11. · Compiler Design IIITKalyani, WB 3 LR(0) Parsing An LR(0) parser can take shift-reduce decisions](https://reader036.fdocuments.in/reader036/viewer/2022081614/5fc2d21eadc89566ac27b57c/html5/thumbnails/46.jpg)
Compiler Design IIIT Kalyani, WB 46✬
✫
✩
✪
Valid Item
An LR(1) item A → α • β, a is valid for a viableprefix ‘uα’, if there is a rightmost derivation:S → uAx → uαβx, so thata ∈ FIRST(x) or if x = ε, then a = $.
Lect 7 Goutam Biswas
![Page 47: LR Parsingcse.iitkgp.ac.in/~goutam/IIITKalyani/compiler/lect/Lect7.pdf · 2019. 10. 11. · Compiler Design IIITKalyani, WB 3 LR(0) Parsing An LR(0) parser can take shift-reduce decisions](https://reader036.fdocuments.in/reader036/viewer/2022081614/5fc2d21eadc89566ac27b57c/html5/thumbnails/47.jpg)
Compiler Design IIIT Kalyani, WB 47✬
✫
✩
✪
Closure()
If i is an LR(1) item, then Closure(i) is defined
as follows:
• i ∈ Closure(i) - basis,
• If (A → α •Bβ, a) ∈ Closure(i) and B → γ
is a production rule, then
(B → •γ, b) ∈ Closure(i),
where b ∈ FIRST(βa).
Lect 7 Goutam Biswas
![Page 48: LR Parsingcse.iitkgp.ac.in/~goutam/IIITKalyani/compiler/lect/Lect7.pdf · 2019. 10. 11. · Compiler Design IIITKalyani, WB 3 LR(0) Parsing An LR(0) parser can take shift-reduce decisions](https://reader036.fdocuments.in/reader036/viewer/2022081614/5fc2d21eadc89566ac27b57c/html5/thumbnails/48.jpg)
Compiler Design IIIT Kalyani, WB 48✬
✫
✩
✪
Closure()
The closure of I, a set of LR(1) items, isdefined as Closure(I) =
⋃i∈I Closure(i).
Lect 7 Goutam Biswas
![Page 49: LR Parsingcse.iitkgp.ac.in/~goutam/IIITKalyani/compiler/lect/Lect7.pdf · 2019. 10. 11. · Compiler Design IIITKalyani, WB 3 LR(0) Parsing An LR(0) parser can take shift-reduce decisions](https://reader036.fdocuments.in/reader036/viewer/2022081614/5fc2d21eadc89566ac27b57c/html5/thumbnails/49.jpg)
Compiler Design IIIT Kalyani, WB 49✬
✫
✩
✪
Goto(I,X)
Let I be a set of LR(1) items and X ∈ Σ ∪N .
The set of LR(1) items Goto(I,X) is
Closure ({(A → α X • β, a) : (A → α •X β, a) ∈ I}) .
Lect 7 Goutam Biswas
![Page 50: LR Parsingcse.iitkgp.ac.in/~goutam/IIITKalyani/compiler/lect/Lect7.pdf · 2019. 10. 11. · Compiler Design IIITKalyani, WB 3 LR(0) Parsing An LR(0) parser can take shift-reduce decisions](https://reader036.fdocuments.in/reader036/viewer/2022081614/5fc2d21eadc89566ac27b57c/html5/thumbnails/50.jpg)
Compiler Design IIIT Kalyani, WB 50✬
✫
✩
✪
LR(1) Automaton
The start state of the LR(1) automaton isClosure(S′ → •S, $). Other reachable and finalstates can be constructed by computingGOTO() of already existing states. This is afixed-point computation.
Lect 7 Goutam Biswas
![Page 51: LR Parsingcse.iitkgp.ac.in/~goutam/IIITKalyani/compiler/lect/Lect7.pdf · 2019. 10. 11. · Compiler Design IIITKalyani, WB 3 LR(0) Parsing An LR(0) parser can take shift-reduce decisions](https://reader036.fdocuments.in/reader036/viewer/2022081614/5fc2d21eadc89566ac27b57c/html5/thumbnails/51.jpg)
Compiler Design IIIT Kalyani, WB 51✬
✫
✩
✪
Consider the grammar Grr (augmented by the
S′).
0 : S′ → S$
1 : S → E + T
2 : S → T
3 : T → i ∗ E
4 : T → i
5 : E → T
Lect 7 Goutam Biswas
![Page 52: LR Parsingcse.iitkgp.ac.in/~goutam/IIITKalyani/compiler/lect/Lect7.pdf · 2019. 10. 11. · Compiler Design IIITKalyani, WB 3 LR(0) Parsing An LR(0) parser can take shift-reduce decisions](https://reader036.fdocuments.in/reader036/viewer/2022081614/5fc2d21eadc89566ac27b57c/html5/thumbnails/52.jpg)
Compiler Design IIIT Kalyani, WB 52✬
✫
✩
✪
States
The states of the LR(1) automaton are as follows:
q0 : S′ → •S, $ S → •E + T, $ S → •T, $
E → •T,+ T → •i ∗ E,+/$ T → •i,+/$
q1 : S′ → S•, $
q2 : S → E •+ T, $
q3 : S → T•, $ E → T•,+
q4 : T → i • ∗ E,+/$ T → i•,+/$
q5 : S → E + •T, $ T → •i ∗ E, $ T → •i, $
Lect 7 Goutam Biswas
![Page 53: LR Parsingcse.iitkgp.ac.in/~goutam/IIITKalyani/compiler/lect/Lect7.pdf · 2019. 10. 11. · Compiler Design IIITKalyani, WB 3 LR(0) Parsing An LR(0) parser can take shift-reduce decisions](https://reader036.fdocuments.in/reader036/viewer/2022081614/5fc2d21eadc89566ac27b57c/html5/thumbnails/53.jpg)
Compiler Design IIIT Kalyani, WB 53✬
✫
✩
✪
States
q6 : T → i ∗ •E,+/$ E → •T,+/$ T → •i ∗ E,+/$
T → •i,+/$
q7 : S → E + T•, $
q8 : T → i • ∗ E, $ T → i•, $
q9 : T → i ∗ E•,+/$
q10 : E → T•,+/$
q11 : T → i ∗ •E, $ E → •T, $ T → •i ∗ E, $
T → •i, $
Lect 7 Goutam Biswas
![Page 54: LR Parsingcse.iitkgp.ac.in/~goutam/IIITKalyani/compiler/lect/Lect7.pdf · 2019. 10. 11. · Compiler Design IIITKalyani, WB 3 LR(0) Parsing An LR(0) parser can take shift-reduce decisions](https://reader036.fdocuments.in/reader036/viewer/2022081614/5fc2d21eadc89566ac27b57c/html5/thumbnails/54.jpg)
Compiler Design IIIT Kalyani, WB 54✬
✫
✩
✪
States
q12 : T → i ∗ E•, $
q13 : E → T•, $
Lect 7 Goutam Biswas
![Page 55: LR Parsingcse.iitkgp.ac.in/~goutam/IIITKalyani/compiler/lect/Lect7.pdf · 2019. 10. 11. · Compiler Design IIITKalyani, WB 3 LR(0) Parsing An LR(0) parser can take shift-reduce decisions](https://reader036.fdocuments.in/reader036/viewer/2022081614/5fc2d21eadc89566ac27b57c/html5/thumbnails/55.jpg)
Compiler Design IIIT Kalyani, WB 55✬
✫
✩
✪
Note
Number of states of the LR(1) automaton aremore than that of LR(0) automaton.Several states have the same core LR(0) items,but different look-ahead symbols - (q4, q8),(q6, q11), (q9, q12).
Lect 7 Goutam Biswas
![Page 56: LR Parsingcse.iitkgp.ac.in/~goutam/IIITKalyani/compiler/lect/Lect7.pdf · 2019. 10. 11. · Compiler Design IIITKalyani, WB 3 LR(0) Parsing An LR(0) parser can take shift-reduce decisions](https://reader036.fdocuments.in/reader036/viewer/2022081614/5fc2d21eadc89566ac27b57c/html5/thumbnails/56.jpg)
Compiler Design IIIT Kalyani, WB 56✬
✫
✩
✪
LR(1) Parsing Table: Action
• If (A → α • aβ, b) ∈ qi (a ∈ Σ) and
Goto(qi, a) = qj , then Action(i, a) = sj.
• If (A → α•, a) ∈ qi (A 6= S′), then
Action(i, a) = rk, where k is the rule number
of A → α.
• If (S′ → S•, $) ∈ qi, then Action(i, $) =
accept.
Lect 7 Goutam Biswas
![Page 57: LR Parsingcse.iitkgp.ac.in/~goutam/IIITKalyani/compiler/lect/Lect7.pdf · 2019. 10. 11. · Compiler Design IIITKalyani, WB 3 LR(0) Parsing An LR(0) parser can take shift-reduce decisions](https://reader036.fdocuments.in/reader036/viewer/2022081614/5fc2d21eadc89566ac27b57c/html5/thumbnails/57.jpg)
Compiler Design IIIT Kalyani, WB 57✬
✫
✩
✪
LR(1) Parsing Table: Goto
If A → α • Bβ ∈ qi (B ∈ N) andGoto(qi, B) = qj, then in the tableGoto(i, B) = j.All other entries of the table are errors.
Lect 7 Goutam Biswas
![Page 58: LR Parsingcse.iitkgp.ac.in/~goutam/IIITKalyani/compiler/lect/Lect7.pdf · 2019. 10. 11. · Compiler Design IIITKalyani, WB 3 LR(0) Parsing An LR(0) parser can take shift-reduce decisions](https://reader036.fdocuments.in/reader036/viewer/2022081614/5fc2d21eadc89566ac27b57c/html5/thumbnails/58.jpg)
Compiler Design IIIT Kalyani, WB 58✬
✫
✩
✪
Note
If the process constructs a table withoutmultiple entries, the grammar is LR(1).
Lect 7 Goutam Biswas
![Page 59: LR Parsingcse.iitkgp.ac.in/~goutam/IIITKalyani/compiler/lect/Lect7.pdf · 2019. 10. 11. · Compiler Design IIITKalyani, WB 3 LR(0) Parsing An LR(0) parser can take shift-reduce decisions](https://reader036.fdocuments.in/reader036/viewer/2022081614/5fc2d21eadc89566ac27b57c/html5/thumbnails/59.jpg)
Compiler Design IIIT Kalyani, WB 59✬
✫
✩
✪
LR(1) Parsing Table
S Action Goto
+ ∗ i $ S E T
0 s4 1 2 3
1 A
2 s5
3 r5 r2
4 r4 s6 r4
5 s8 7
6 s4 9 10
Lect 7 Goutam Biswas
![Page 60: LR Parsingcse.iitkgp.ac.in/~goutam/IIITKalyani/compiler/lect/Lect7.pdf · 2019. 10. 11. · Compiler Design IIITKalyani, WB 3 LR(0) Parsing An LR(0) parser can take shift-reduce decisions](https://reader036.fdocuments.in/reader036/viewer/2022081614/5fc2d21eadc89566ac27b57c/html5/thumbnails/60.jpg)
Compiler Design IIIT Kalyani, WB 60✬
✫
✩
✪
LR(1) Parsing Table
S Action Goto
+ ∗ i $ S E T
7 r1
8 s11 r4
9 r3 r3
10 r5 r5
11 s8 12 13
12 r3
13 r5
Lect 7 Goutam Biswas
![Page 61: LR Parsingcse.iitkgp.ac.in/~goutam/IIITKalyani/compiler/lect/Lect7.pdf · 2019. 10. 11. · Compiler Design IIITKalyani, WB 3 LR(0) Parsing An LR(0) parser can take shift-reduce decisions](https://reader036.fdocuments.in/reader036/viewer/2022081614/5fc2d21eadc89566ac27b57c/html5/thumbnails/61.jpg)
Compiler Design IIIT Kalyani, WB 61✬
✫
✩
✪
Non-LR(1) Grammar
0 : S → A
1 : A → a A a
2 : A → a Aa a b
3 : A → a b
Lect 7 Goutam Biswas
![Page 62: LR Parsingcse.iitkgp.ac.in/~goutam/IIITKalyani/compiler/lect/Lect7.pdf · 2019. 10. 11. · Compiler Design IIITKalyani, WB 3 LR(0) Parsing An LR(0) parser can take shift-reduce decisions](https://reader036.fdocuments.in/reader036/viewer/2022081614/5fc2d21eadc89566ac27b57c/html5/thumbnails/62.jpg)
Compiler Design IIIT Kalyani, WB 62✬
✫
✩
✪
States of LR(1) Automaton
q0 : S → •A, $ A → •aAa, $ A → •aAaab, $
A → •ab, $
q1 : S → A•, $
q2 : A → a • Aa, $ A → a • Aaab, $ A → a • b, $
A → •aAa, a A → •aAaab, a A → •ab, a
q3 : A → aA • a, $ A → aA • aab, $
q4 : A → ab•, $
q5 : A → a • Aa, a A → a • Aaab, a A → a • b, a
A → •aAa, a A → •aAaab, a A → •ab, a
Lect 7 Goutam Biswas
![Page 63: LR Parsingcse.iitkgp.ac.in/~goutam/IIITKalyani/compiler/lect/Lect7.pdf · 2019. 10. 11. · Compiler Design IIITKalyani, WB 3 LR(0) Parsing An LR(0) parser can take shift-reduce decisions](https://reader036.fdocuments.in/reader036/viewer/2022081614/5fc2d21eadc89566ac27b57c/html5/thumbnails/63.jpg)
Compiler Design IIIT Kalyani, WB 63✬
✫
✩
✪
States of LR(1) Automaton
q6 : A → aAa•, $ A → aAa • ab, $
q7 : A → aA • a, a A → aA • aab, a
q8 : A → ab•, a
q9 A → aAaa • b, $
q10 : A → aAa•, a A → aAa • ab, a
q11 A → aAaab•, $
Lect 7 Goutam Biswas
![Page 64: LR Parsingcse.iitkgp.ac.in/~goutam/IIITKalyani/compiler/lect/Lect7.pdf · 2019. 10. 11. · Compiler Design IIITKalyani, WB 3 LR(0) Parsing An LR(0) parser can take shift-reduce decisions](https://reader036.fdocuments.in/reader036/viewer/2022081614/5fc2d21eadc89566ac27b57c/html5/thumbnails/64.jpg)
Compiler Design IIIT Kalyani, WB 64✬
✫
✩
✪
Note
In state q10, the shift/reduce conflict cannot beresolved and there will be multiple entries inAction(10, a) = {si, r1}, where Goto(q10, a) = qi.This can be resolved with 2-look-ahead
Lect 7 Goutam Biswas
![Page 65: LR Parsingcse.iitkgp.ac.in/~goutam/IIITKalyani/compiler/lect/Lect7.pdf · 2019. 10. 11. · Compiler Design IIITKalyani, WB 3 LR(0) Parsing An LR(0) parser can take shift-reduce decisions](https://reader036.fdocuments.in/reader036/viewer/2022081614/5fc2d21eadc89566ac27b57c/html5/thumbnails/65.jpg)
Compiler Design IIIT Kalyani, WB 65✬
✫
✩
✪
States of LR(2) Automaton
q0 : S → •A, $ A → •aAa, $ A → •aAaab, $
A → •ab, $
q1 : S → A•, $
q2 : A → a • Aa, $ A → a •Aaab, $ A → a • b, $
A → •aAa, aa/a$ A → •aAaab, aa/a$ A → •ab, aa/a$
q3 : A → aA • a, $ A → aA • aab, $
q4 : A → ab•, $
q5 : A → a • Aa, aa/a$ A → a •Aaab, aa/a$ A → a • b, aa/a$
A → •aAa, aa A → •aAaab, aa A → •ab, aa
Lect 7 Goutam Biswas
![Page 66: LR Parsingcse.iitkgp.ac.in/~goutam/IIITKalyani/compiler/lect/Lect7.pdf · 2019. 10. 11. · Compiler Design IIITKalyani, WB 3 LR(0) Parsing An LR(0) parser can take shift-reduce decisions](https://reader036.fdocuments.in/reader036/viewer/2022081614/5fc2d21eadc89566ac27b57c/html5/thumbnails/66.jpg)
Compiler Design IIIT Kalyani, WB 66✬
✫
✩
✪
States of LR(2) Automaton
q6 : A → aAa•, $ A → aAa • ab, $
q7 : A → aA • a, aa/a$ A → aA • aab, aa/a$
q8 : A → ab•, aa/a$
q9 A → aAaa • b, $
q10 : A → aAa•, aa/a$ A → aAa • ab, aa/a$
q11 A → aAaab•, $
Lect 7 Goutam Biswas
![Page 67: LR Parsingcse.iitkgp.ac.in/~goutam/IIITKalyani/compiler/lect/Lect7.pdf · 2019. 10. 11. · Compiler Design IIITKalyani, WB 3 LR(0) Parsing An LR(0) parser can take shift-reduce decisions](https://reader036.fdocuments.in/reader036/viewer/2022081614/5fc2d21eadc89566ac27b57c/html5/thumbnails/67.jpg)
Compiler Design IIIT Kalyani, WB 67✬
✫
✩
✪
Note
In state q10, the action is r1 if the next twosymbols are either ‘aa’ or ‘a$’. The action isshift if they are ‘ab’. But we shall not useLR(2) parsing.
Lect 7 Goutam Biswas
![Page 68: LR Parsingcse.iitkgp.ac.in/~goutam/IIITKalyani/compiler/lect/Lect7.pdf · 2019. 10. 11. · Compiler Design IIITKalyani, WB 3 LR(0) Parsing An LR(0) parser can take shift-reduce decisions](https://reader036.fdocuments.in/reader036/viewer/2022081614/5fc2d21eadc89566ac27b57c/html5/thumbnails/68.jpg)
Compiler Design IIIT Kalyani, WB 68✬
✫
✩
✪
LALR Parser
• There are pairs of LR(1) states for the
grammar Grr with the same LR(0) items.
These are (q4, q8), (q6, q11), (q9, q12).
• If we can merge states with the same LR(0)
items, the number of states of the automaton
will be same as that of LR(0) automaton.
Lect 7 Goutam Biswas
![Page 69: LR Parsingcse.iitkgp.ac.in/~goutam/IIITKalyani/compiler/lect/Lect7.pdf · 2019. 10. 11. · Compiler Design IIITKalyani, WB 3 LR(0) Parsing An LR(0) parser can take shift-reduce decisions](https://reader036.fdocuments.in/reader036/viewer/2022081614/5fc2d21eadc89566ac27b57c/html5/thumbnails/69.jpg)
Compiler Design IIIT Kalyani, WB 69✬
✫
✩
✪
LALR Parser
• For some LR(1) grammar this merging will
not lead to multiple entries in the parsing
table.
• Such a grammar is known as LALR(1)
(lookahead LR) grammar.
Lect 7 Goutam Biswas
![Page 70: LR Parsingcse.iitkgp.ac.in/~goutam/IIITKalyani/compiler/lect/Lect7.pdf · 2019. 10. 11. · Compiler Design IIITKalyani, WB 3 LR(0) Parsing An LR(0) parser can take shift-reduce decisions](https://reader036.fdocuments.in/reader036/viewer/2022081614/5fc2d21eadc89566ac27b57c/html5/thumbnails/70.jpg)
Compiler Design IIIT Kalyani, WB 70✬
✫
✩
✪
Note
• Merging of two LR(1) states with the same
LR(0) item cannot give rise to a new
shift/reduce conflict.
• If there is a pair of items of the form
{A → α • aβ, · · · , B → γ•, a} in the merged
state, it is already there in some LR(1) state.
• So the grammar is not even LR(1).
Lect 7 Goutam Biswas
![Page 71: LR Parsingcse.iitkgp.ac.in/~goutam/IIITKalyani/compiler/lect/Lect7.pdf · 2019. 10. 11. · Compiler Design IIITKalyani, WB 3 LR(0) Parsing An LR(0) parser can take shift-reduce decisions](https://reader036.fdocuments.in/reader036/viewer/2022081614/5fc2d21eadc89566ac27b57c/html5/thumbnails/71.jpg)
Compiler Design IIIT Kalyani, WB 71✬
✫
✩
✪
Note
• Two states of an LALR parser cannot have
the same set of LR(0) items.
• So the number of states of an LR(0) and an
LALR(1) automaton are same.
• An LALR parser uses a better heuristic,
than the global FOLLOW() sets of
non-terminals, about symbols that can
follow an LR(0) item at a state.
Lect 7 Goutam Biswas
![Page 72: LR Parsingcse.iitkgp.ac.in/~goutam/IIITKalyani/compiler/lect/Lect7.pdf · 2019. 10. 11. · Compiler Design IIITKalyani, WB 3 LR(0) Parsing An LR(0) parser can take shift-reduce decisions](https://reader036.fdocuments.in/reader036/viewer/2022081614/5fc2d21eadc89566ac27b57c/html5/thumbnails/72.jpg)
Compiler Design IIIT Kalyani, WB 72✬
✫
✩
✪
LALR States
The states of the LR(1) automaton are as follows:
q0 : S′ → •S, $ S → •E + T, $ S → •T, $
E → •T,+ T → •i ∗ E,+/$ T → •i,+/$
q1 : S′ → S•, $
q2 : S → E •+ T, $
q3 : S → T•, $ E → T•,+
q4·8 : T → i • ∗ E,+/$ T → i•,+/$
q5 : S → E + •T, $ T → •i ∗ E, $ T → •i, $
Lect 7 Goutam Biswas
![Page 73: LR Parsingcse.iitkgp.ac.in/~goutam/IIITKalyani/compiler/lect/Lect7.pdf · 2019. 10. 11. · Compiler Design IIITKalyani, WB 3 LR(0) Parsing An LR(0) parser can take shift-reduce decisions](https://reader036.fdocuments.in/reader036/viewer/2022081614/5fc2d21eadc89566ac27b57c/html5/thumbnails/73.jpg)
Compiler Design IIIT Kalyani, WB 73✬
✫
✩
✪
States
q6·11 : T → i ∗ •E,+/$ E → •T,+/$ T → •i ∗ E,+/$
T → •i,+/$
q7 : S → E + T•, $
q9·12 : T → i ∗ E•,+/$
q10 : E → T•,+/$
q13 : E → T•, $
Lect 7 Goutam Biswas
![Page 74: LR Parsingcse.iitkgp.ac.in/~goutam/IIITKalyani/compiler/lect/Lect7.pdf · 2019. 10. 11. · Compiler Design IIITKalyani, WB 3 LR(0) Parsing An LR(0) parser can take shift-reduce decisions](https://reader036.fdocuments.in/reader036/viewer/2022081614/5fc2d21eadc89566ac27b57c/html5/thumbnails/74.jpg)
Compiler Design IIIT Kalyani, WB 74✬
✫
✩
✪
LALR Parsing Table
S Action Goto
+ ∗ i $ S E T
0 s4·8 1 2 3
1 A
2 s5
3 r5 r2
4 · 8 r4 s6·11 r4
5 s4·8 7
6 · 11 s4·8 9 · 12 10
Lect 7 Goutam Biswas
![Page 75: LR Parsingcse.iitkgp.ac.in/~goutam/IIITKalyani/compiler/lect/Lect7.pdf · 2019. 10. 11. · Compiler Design IIITKalyani, WB 3 LR(0) Parsing An LR(0) parser can take shift-reduce decisions](https://reader036.fdocuments.in/reader036/viewer/2022081614/5fc2d21eadc89566ac27b57c/html5/thumbnails/75.jpg)
Compiler Design IIIT Kalyani, WB 75✬
✫
✩
✪
LALR Parsing Table
S Action Goto
+ ∗ i $ S E T
7 r1
9 · 12 r3 r3
10 r5 r5
13 r5
Lect 7 Goutam Biswas
![Page 76: LR Parsingcse.iitkgp.ac.in/~goutam/IIITKalyani/compiler/lect/Lect7.pdf · 2019. 10. 11. · Compiler Design IIITKalyani, WB 3 LR(0) Parsing An LR(0) parser can take shift-reduce decisions](https://reader036.fdocuments.in/reader036/viewer/2022081614/5fc2d21eadc89566ac27b57c/html5/thumbnails/76.jpg)
Compiler Design IIIT Kalyani, WB 76✬
✫
✩
✪
LR(1) but not LALR
Consider the grammar
0 : S → A$
1 : A → a B a
2 : A → b B b
3 : A → a D b
4 : A → b D a
5 : B → c
6 : D → c
Lect 7 Goutam Biswas
![Page 77: LR Parsingcse.iitkgp.ac.in/~goutam/IIITKalyani/compiler/lect/Lect7.pdf · 2019. 10. 11. · Compiler Design IIITKalyani, WB 3 LR(0) Parsing An LR(0) parser can take shift-reduce decisions](https://reader036.fdocuments.in/reader036/viewer/2022081614/5fc2d21eadc89566ac27b57c/html5/thumbnails/77.jpg)
Compiler Design IIIT Kalyani, WB 77✬
✫
✩
✪
States of LR(1) Automaton
q0 : S → •A, $ A → •aBa, $ A → •bBb, $
A → •aDb, $ A → •bDa, $
q1 : S → A•, $
q2 : A → a •Ba, $ A → a •Db, $ B → •c, a
D → •c, b
q3 : A → b •Bb, $ A → b •Da, $ B → •c, b
D → •c, a
q4 : A → aB • a, $
q5 : A → aD • b, $
Lect 7 Goutam Biswas
![Page 78: LR Parsingcse.iitkgp.ac.in/~goutam/IIITKalyani/compiler/lect/Lect7.pdf · 2019. 10. 11. · Compiler Design IIITKalyani, WB 3 LR(0) Parsing An LR(0) parser can take shift-reduce decisions](https://reader036.fdocuments.in/reader036/viewer/2022081614/5fc2d21eadc89566ac27b57c/html5/thumbnails/78.jpg)
Compiler Design IIIT Kalyani, WB 78✬
✫
✩
✪
States of LR(1) Automaton
q6 : B → c•, a D → c•, b
q7 : A → bB • b, $
q8 : A → bD • a, $
q9 : B → c•, b D → c•, a
The states q6 and q9 have the same LR(0) core,but they cannot be merged to form a LALRstate as that will lead to reduce/reduceconflicts. So the grammar is LR(1) but notLALR.
Lect 7 Goutam Biswas
![Page 79: LR Parsingcse.iitkgp.ac.in/~goutam/IIITKalyani/compiler/lect/Lect7.pdf · 2019. 10. 11. · Compiler Design IIITKalyani, WB 3 LR(0) Parsing An LR(0) parser can take shift-reduce decisions](https://reader036.fdocuments.in/reader036/viewer/2022081614/5fc2d21eadc89566ac27b57c/html5/thumbnails/79.jpg)
Compiler Design IIIT Kalyani, WB 79✬
✫
✩
✪
Resolving Shift-Reduce Conflicts
• Take longest sequence of handle for reduction
i.e. shift when there is a shift/reduce conflict
e.g. associate the else to the nearest if.
• In an operator grammar use the associativity
and precedence of operators. As an example
A → α • ⊗β, B → γ ⊕ µ•. ‘shift’ if ⊗ is of
higher precedence, reduce is ⊕ is of higher
precedence etc.
Lect 7 Goutam Biswas
![Page 80: LR Parsingcse.iitkgp.ac.in/~goutam/IIITKalyani/compiler/lect/Lect7.pdf · 2019. 10. 11. · Compiler Design IIITKalyani, WB 3 LR(0) Parsing An LR(0) parser can take shift-reduce decisions](https://reader036.fdocuments.in/reader036/viewer/2022081614/5fc2d21eadc89566ac27b57c/html5/thumbnails/80.jpg)
Compiler Design IIIT Kalyani, WB 80✬
✫
✩
✪
Resolving Reduce-Reduce Conflicts
• There are two or more complete items in a
state.
• It is often resolved using the first grammar
rule of complete items.
• But it may not give a satisfactory result.
Consider the following grammar. The
terminals are {i, f, id}. The start symbol
is D.
Lect 7 Goutam Biswas
![Page 81: LR Parsingcse.iitkgp.ac.in/~goutam/IIITKalyani/compiler/lect/Lect7.pdf · 2019. 10. 11. · Compiler Design IIITKalyani, WB 3 LR(0) Parsing An LR(0) parser can take shift-reduce decisions](https://reader036.fdocuments.in/reader036/viewer/2022081614/5fc2d21eadc89566ac27b57c/html5/thumbnails/81.jpg)
Compiler Design IIIT Kalyani, WB 81✬
✫
✩
✪
Resolving Reduce-Reduce Conflicts
1,2 D → ID | FD
3 ID → IS i
4 FD → FS f
5,6 IS → IS IV | IV
7,8 FS → FS FV | FV
9 IV → id
10 FV → id
Lect 7 Goutam Biswas
![Page 82: LR Parsingcse.iitkgp.ac.in/~goutam/IIITKalyani/compiler/lect/Lect7.pdf · 2019. 10. 11. · Compiler Design IIITKalyani, WB 3 LR(0) Parsing An LR(0) parser can take shift-reduce decisions](https://reader036.fdocuments.in/reader036/viewer/2022081614/5fc2d21eadc89566ac27b57c/html5/thumbnails/82.jpg)
Compiler Design IIIT Kalyani, WB 82✬
✫
✩
✪
Resolving Reduce-Reduce Conflicts
• The state IV → id•,FV → id• has a
reduce-reduce conflict.
• But resolving it to reduct by rule 9 is
unacceptable.
Lect 7 Goutam Biswas
![Page 83: LR Parsingcse.iitkgp.ac.in/~goutam/IIITKalyani/compiler/lect/Lect7.pdf · 2019. 10. 11. · Compiler Design IIITKalyani, WB 3 LR(0) Parsing An LR(0) parser can take shift-reduce decisions](https://reader036.fdocuments.in/reader036/viewer/2022081614/5fc2d21eadc89566ac27b57c/html5/thumbnails/83.jpg)
Compiler Design IIIT Kalyani, WB 83✬
✫
✩
✪
Ambiguous Grammar & LR Parsing
An ambiguous grammar cannot be LR. But forsome ambiguous grammarsa it is possible to useLR parsing techniques efficiently with the helpof some extra grammatical information such asassociativity and precedence of operators.
aAs an example for operator-precedence grammars: CFG with no ε produc-
tion and no production rule with two non-terminals coming side by side.
Lect 7 Goutam Biswas
![Page 84: LR Parsingcse.iitkgp.ac.in/~goutam/IIITKalyani/compiler/lect/Lect7.pdf · 2019. 10. 11. · Compiler Design IIITKalyani, WB 3 LR(0) Parsing An LR(0) parser can take shift-reduce decisions](https://reader036.fdocuments.in/reader036/viewer/2022081614/5fc2d21eadc89566ac27b57c/html5/thumbnails/84.jpg)
Compiler Design IIIT Kalyani, WB 84✬
✫
✩
✪
Example
Consider the expression grammar Ga
0 : S → E$
1 : E → E − E
2 : E → E ∗ E
3 : E → (E)
4 : E → −E
5 : E → i
Note that the terminal ‘-’ is used both as binary as wellas unary operator.
Lect 7 Goutam Biswas
![Page 85: LR Parsingcse.iitkgp.ac.in/~goutam/IIITKalyani/compiler/lect/Lect7.pdf · 2019. 10. 11. · Compiler Design IIITKalyani, WB 3 LR(0) Parsing An LR(0) parser can take shift-reduce decisions](https://reader036.fdocuments.in/reader036/viewer/2022081614/5fc2d21eadc89566ac27b57c/html5/thumbnails/85.jpg)
Compiler Design IIIT Kalyani, WB 85✬
✫
✩
✪
States of LR(0) Automaton
q0 : S → •E E → •E − E E → •E ∗ E
E → •(E) E → •− E E → •i
q1 : S → E • $ E → E • −E E → E • ∗E
q2 : E → (•E) E → •E − E E → •E ∗ E
E → •(E) E → •− E E → •i
q3 : E → − • E E → •E − E E → •E ∗ E
E → •(E) E → •− E E → •i
q4 : E → i•
Lect 7 Goutam Biswas
![Page 86: LR Parsingcse.iitkgp.ac.in/~goutam/IIITKalyani/compiler/lect/Lect7.pdf · 2019. 10. 11. · Compiler Design IIITKalyani, WB 3 LR(0) Parsing An LR(0) parser can take shift-reduce decisions](https://reader036.fdocuments.in/reader036/viewer/2022081614/5fc2d21eadc89566ac27b57c/html5/thumbnails/86.jpg)
Compiler Design IIIT Kalyani, WB 86✬
✫
✩
✪
States of LR(0) Automaton
q5 : E → E − •E E → •E − E E → •E ∗ E
E → •(E) E → •− E E → •i
q6 : E → E ∗ •E E → •E − E E → •E ∗ E
E → •(E) E → •− E E → •i
q7 : E → (E•) E → E • −E E → E • ∗E
q8 : E → −E• E → E • −E E → E • ∗E
q9 : E → E − E• E → E • −E E → E • ∗E
q10 : E → E ∗ E• E → E • −E E → E • ∗E
There are a few more states.
Lect 7 Goutam Biswas
![Page 87: LR Parsingcse.iitkgp.ac.in/~goutam/IIITKalyani/compiler/lect/Lect7.pdf · 2019. 10. 11. · Compiler Design IIITKalyani, WB 3 LR(0) Parsing An LR(0) parser can take shift-reduce decisions](https://reader036.fdocuments.in/reader036/viewer/2022081614/5fc2d21eadc89566ac27b57c/html5/thumbnails/87.jpg)
Compiler Design IIIT Kalyani, WB 87✬
✫
✩
✪
Note
The states q8, q9 and q10 have complete andincomplete items. FOLLOW(E) = {$,−, ∗, )}cannot resolve the conflict. In fact no amount oflook-ahead can help - the LR(1) initial state is
q0 : S → •E, $ E → •E − E, $/− /∗ E → •E ∗E, $/− /∗
E → •(E), $/− /∗ E → •− E, $/− /∗ E → •i, $/− /∗
Lect 7 Goutam Biswas
![Page 88: LR Parsingcse.iitkgp.ac.in/~goutam/IIITKalyani/compiler/lect/Lect7.pdf · 2019. 10. 11. · Compiler Design IIITKalyani, WB 3 LR(0) Parsing An LR(0) parser can take shift-reduce decisions](https://reader036.fdocuments.in/reader036/viewer/2022081614/5fc2d21eadc89566ac27b57c/html5/thumbnails/88.jpg)
Compiler Design IIIT Kalyani, WB 88✬
✫
✩
✪
q8 : E → −E•, E → E • −E, E → E • ∗E
The higher precedence of unary ‘−’ over thebinary ‘−’ and binary ‘∗’ will help to resolvethe conflict. The parser reduces the handle i.e.Action(8,−) = Action(8, ∗) = Action(8, )) =Action(8, $) = r4.
Lect 7 Goutam Biswas
![Page 89: LR Parsingcse.iitkgp.ac.in/~goutam/IIITKalyani/compiler/lect/Lect7.pdf · 2019. 10. 11. · Compiler Design IIITKalyani, WB 3 LR(0) Parsing An LR(0) parser can take shift-reduce decisions](https://reader036.fdocuments.in/reader036/viewer/2022081614/5fc2d21eadc89566ac27b57c/html5/thumbnails/89.jpg)
Compiler Design IIIT Kalyani, WB 89✬
✫
✩
✪
q9 : E → E − E•, E → E • −E, E → E • ∗E
In this case if the look-ahead symbol is a ‘−’ (itmust be binary), the parser reduces due to theleft associativity of binary ‘−’. But if thelook-ahead symbol is a ‘∗’, the parser shifts i.e.Action(9,−) = Action(9, )) = Action(9, $) = r4but Action(9, ∗) = s6.
Lect 7 Goutam Biswas
![Page 90: LR Parsingcse.iitkgp.ac.in/~goutam/IIITKalyani/compiler/lect/Lect7.pdf · 2019. 10. 11. · Compiler Design IIITKalyani, WB 3 LR(0) Parsing An LR(0) parser can take shift-reduce decisions](https://reader036.fdocuments.in/reader036/viewer/2022081614/5fc2d21eadc89566ac27b57c/html5/thumbnails/90.jpg)
Compiler Design IIIT Kalyani, WB 90✬
✫
✩
✪
q10 : E → E ∗ E•, E → E • −E, E → E • ∗E
Actions are always reduce.
Lect 7 Goutam Biswas
![Page 91: LR Parsingcse.iitkgp.ac.in/~goutam/IIITKalyani/compiler/lect/Lect7.pdf · 2019. 10. 11. · Compiler Design IIITKalyani, WB 3 LR(0) Parsing An LR(0) parser can take shift-reduce decisions](https://reader036.fdocuments.in/reader036/viewer/2022081614/5fc2d21eadc89566ac27b57c/html5/thumbnails/91.jpg)
Compiler Design IIIT Kalyani, WB 91✬
✫
✩
✪
Error Handling
• What happens when an (LA)LR(1)-parser is
in state q, the input token is a, and the
parsing table entry Action(q, a) is empty i.e.
no-shift, no-reduce, no-accept. This is an
error condition.
• The token a is not a valid continuation of
the input the parses has seen so far.
Lect 7 Goutam Biswas
![Page 92: LR Parsingcse.iitkgp.ac.in/~goutam/IIITKalyani/compiler/lect/Lect7.pdf · 2019. 10. 11. · Compiler Design IIITKalyani, WB 3 LR(0) Parsing An LR(0) parser can take shift-reduce decisions](https://reader036.fdocuments.in/reader036/viewer/2022081614/5fc2d21eadc89566ac27b57c/html5/thumbnails/92.jpg)
Compiler Design IIIT Kalyani, WB 92✬
✫
✩
✪
Error Handling
• The question is what action should the
parser take.
• The simplest solution is highlight the
position of error, and terminate parsing.
• But the error may be due to a missing
semicolon (‘;’) or a parenthesis (‘(’) only.
After fixing it the compilation is to be
restarted from the beginning.
Lect 7 Goutam Biswas
![Page 93: LR Parsingcse.iitkgp.ac.in/~goutam/IIITKalyani/compiler/lect/Lect7.pdf · 2019. 10. 11. · Compiler Design IIITKalyani, WB 3 LR(0) Parsing An LR(0) parser can take shift-reduce decisions](https://reader036.fdocuments.in/reader036/viewer/2022081614/5fc2d21eadc89566ac27b57c/html5/thumbnails/93.jpg)
Compiler Design IIIT Kalyani, WB 93✬
✫
✩
✪
Error Handling
• Another alternative may be to continue with
the error. But then the parser will start
generating dozens of spurious errors due to
the single error.
• So the parser needs to recover from the
current error and try to detect as many
errors as possible in a pass.
Lect 7 Goutam Biswas
![Page 94: LR Parsingcse.iitkgp.ac.in/~goutam/IIITKalyani/compiler/lect/Lect7.pdf · 2019. 10. 11. · Compiler Design IIITKalyani, WB 3 LR(0) Parsing An LR(0) parser can take shift-reduce decisions](https://reader036.fdocuments.in/reader036/viewer/2022081614/5fc2d21eadc89566ac27b57c/html5/thumbnails/94.jpg)
Compiler Design IIIT Kalyani, WB 94✬
✫
✩
✪
Error Handling
• An error recovery strategy may try to modify
either the stack or the input stream or both.
• Modification of the stack amounts to
modification of a portion of the parse tree
that has already been constructed and found
to be correct.
Lect 7 Goutam Biswas
![Page 95: LR Parsingcse.iitkgp.ac.in/~goutam/IIITKalyani/compiler/lect/Lect7.pdf · 2019. 10. 11. · Compiler Design IIITKalyani, WB 3 LR(0) Parsing An LR(0) parser can take shift-reduce decisions](https://reader036.fdocuments.in/reader036/viewer/2022081614/5fc2d21eadc89566ac27b57c/html5/thumbnails/95.jpg)
Compiler Design IIIT Kalyani, WB 95✬
✫
✩
✪
Panic-Mode Error Recovery
• The parsing stack is scanned so that a state
q with a Goto on a non-terminal A is found.
• A few input tokens are discarded until a
token b ∈ Follow(A) is found in the input
stream.
• The state Goto(A, b) is pushed in the stack
and the normal parsing is resumed.
Lect 7 Goutam Biswas
![Page 96: LR Parsingcse.iitkgp.ac.in/~goutam/IIITKalyani/compiler/lect/Lect7.pdf · 2019. 10. 11. · Compiler Design IIITKalyani, WB 3 LR(0) Parsing An LR(0) parser can take shift-reduce decisions](https://reader036.fdocuments.in/reader036/viewer/2022081614/5fc2d21eadc89566ac27b57c/html5/thumbnails/96.jpg)
Compiler Design IIIT Kalyani, WB 96✬
✫
✩
✪
Panic-Mode Error Recovery
• The recovery works under the assumption
that the error is within the string generated
by A (within the phrase of A).
• The non-terminal A may represent an
expression, where an operator or an operand
is missing; or a statement, where a semicolon
or an end is missing.
Lect 7 Goutam Biswas
![Page 97: LR Parsingcse.iitkgp.ac.in/~goutam/IIITKalyani/compiler/lect/Lect7.pdf · 2019. 10. 11. · Compiler Design IIITKalyani, WB 3 LR(0) Parsing An LR(0) parser can take shift-reduce decisions](https://reader036.fdocuments.in/reader036/viewer/2022081614/5fc2d21eadc89566ac27b57c/html5/thumbnails/97.jpg)
Compiler Design IIIT Kalyani, WB 97✬
✫
✩
✪
Embedding Error Actions in Parsing table
• Phrase-level recovery routines can be
embedded in the (LA)LR(1) parsing table.
• Each error entry may be a pointer to the
corresponding error-handling routine.
• The error-handling routine should not drive
the parses in an infinite loop.
Lect 7 Goutam Biswas
![Page 98: LR Parsingcse.iitkgp.ac.in/~goutam/IIITKalyani/compiler/lect/Lect7.pdf · 2019. 10. 11. · Compiler Design IIITKalyani, WB 3 LR(0) Parsing An LR(0) parser can take shift-reduce decisions](https://reader036.fdocuments.in/reader036/viewer/2022081614/5fc2d21eadc89566ac27b57c/html5/thumbnails/98.jpg)
Compiler Design IIIT Kalyani, WB 98✬
✫
✩
✪
We consider our old grammar.
0 : S′ → P$
1 : P → m L s e
2 : L → D L
3 : L → D
4 : D → T V ;
5 : V → d V
6 : V → d
7 : T → i
8 : T → f
Lect 7 Goutam Biswas
![Page 99: LR Parsingcse.iitkgp.ac.in/~goutam/IIITKalyani/compiler/lect/Lect7.pdf · 2019. 10. 11. · Compiler Design IIITKalyani, WB 3 LR(0) Parsing An LR(0) parser can take shift-reduce decisions](https://reader036.fdocuments.in/reader036/viewer/2022081614/5fc2d21eadc89566ac27b57c/html5/thumbnails/99.jpg)
Compiler Design IIIT Kalyani, WB 99✬
✫
✩
✪
States
q0 : S′ → •P P → •m L s e
q1 : S′ → P • $
q2 : P → m • L s e L → •D L L → •D
D → •T V ; T → •i T → •f
q3 : P → m L • s e
q4 : L → D • L L → D• L → •D L
L → •D D → •T V ; T → •i
T → •f
Lect 7 Goutam Biswas
![Page 100: LR Parsingcse.iitkgp.ac.in/~goutam/IIITKalyani/compiler/lect/Lect7.pdf · 2019. 10. 11. · Compiler Design IIITKalyani, WB 3 LR(0) Parsing An LR(0) parser can take shift-reduce decisions](https://reader036.fdocuments.in/reader036/viewer/2022081614/5fc2d21eadc89566ac27b57c/html5/thumbnails/100.jpg)
Compiler Design IIIT Kalyani, WB 100✬
✫
✩
✪
States
q5 : D → T • V ; V → •d V V → •d
q6 : T → i•
q7 : T → f•
q8 : P → m L s • e
q9 : L → D L•
q10 : D → T V •;
q11 : V → d • V V → d• V → •d V
V → •d
Lect 7 Goutam Biswas
![Page 101: LR Parsingcse.iitkgp.ac.in/~goutam/IIITKalyani/compiler/lect/Lect7.pdf · 2019. 10. 11. · Compiler Design IIITKalyani, WB 3 LR(0) Parsing An LR(0) parser can take shift-reduce decisions](https://reader036.fdocuments.in/reader036/viewer/2022081614/5fc2d21eadc89566ac27b57c/html5/thumbnails/101.jpg)
Compiler Design IIIT Kalyani, WB 101✬
✫
✩
✪
States
q12 : P → m L s e•
q13 : D → T V ; •
q14 : V → d V •
Lect 7 Goutam Biswas
![Page 102: LR Parsingcse.iitkgp.ac.in/~goutam/IIITKalyani/compiler/lect/Lect7.pdf · 2019. 10. 11. · Compiler Design IIITKalyani, WB 3 LR(0) Parsing An LR(0) parser can take shift-reduce decisions](https://reader036.fdocuments.in/reader036/viewer/2022081614/5fc2d21eadc89566ac27b57c/html5/thumbnails/102.jpg)
Compiler Design IIIT Kalyani, WB 102✬
✫
✩
✪
Modified SLR Table
• All error entries of a state with reduction
action are replaced by the same reduction
action.
• This delays the error detection.
Lect 7 Goutam Biswas
![Page 103: LR Parsingcse.iitkgp.ac.in/~goutam/IIITKalyani/compiler/lect/Lect7.pdf · 2019. 10. 11. · Compiler Design IIITKalyani, WB 3 LR(0) Parsing An LR(0) parser can take shift-reduce decisions](https://reader036.fdocuments.in/reader036/viewer/2022081614/5fc2d21eadc89566ac27b57c/html5/thumbnails/103.jpg)
Compiler Design IIIT Kalyani, WB 103✬
✫
✩
✪
Error Routine - 0 (e0)
• The parser is in a state i (i 6= 1) and it
encounters the eof ($).
• Terminate parsing with a message
‘unexpected <eof>’
Lect 7 Goutam Biswas
![Page 104: LR Parsingcse.iitkgp.ac.in/~goutam/IIITKalyani/compiler/lect/Lect7.pdf · 2019. 10. 11. · Compiler Design IIITKalyani, WB 3 LR(0) Parsing An LR(0) parser can take shift-reduce decisions](https://reader036.fdocuments.in/reader036/viewer/2022081614/5fc2d21eadc89566ac27b57c/html5/thumbnails/104.jpg)
Compiler Design IIIT Kalyani, WB 104✬
✫
✩
✪
Error Routine - 1 (e1)
• The parser expects m at state 0 and the
Action(0,m) = 2.
• If it encounters any other symbol at state 0,
it pushes state 2 in the stack and generates
error message ‘m missing’.
Lect 7 Goutam Biswas
![Page 105: LR Parsingcse.iitkgp.ac.in/~goutam/IIITKalyani/compiler/lect/Lect7.pdf · 2019. 10. 11. · Compiler Design IIITKalyani, WB 3 LR(0) Parsing An LR(0) parser can take shift-reduce decisions](https://reader036.fdocuments.in/reader036/viewer/2022081614/5fc2d21eadc89566ac27b57c/html5/thumbnails/105.jpg)
Compiler Design IIIT Kalyani, WB 105✬
✫
✩
✪
Error Routine - 2 (e2)
• At state 1 the parser has already seen a valid
input.
• If it sees anything other than eof ($), it may
accept the input and generate the error
message ‘extra character’ at the end of input.
Lect 7 Goutam Biswas
![Page 106: LR Parsingcse.iitkgp.ac.in/~goutam/IIITKalyani/compiler/lect/Lect7.pdf · 2019. 10. 11. · Compiler Design IIITKalyani, WB 3 LR(0) Parsing An LR(0) parser can take shift-reduce decisions](https://reader036.fdocuments.in/reader036/viewer/2022081614/5fc2d21eadc89566ac27b57c/html5/thumbnails/106.jpg)
Compiler Design IIIT Kalyani, WB 106✬
✫
✩
✪
Error Routine - 3 (e3)
• At state 2 if there is anything other than i, f
or $, the parser push either state 6 or state 7
in the stack (does not matter as it is an error
condition).
• It prints ‘missing i or f ’.
Lect 7 Goutam Biswas
![Page 107: LR Parsingcse.iitkgp.ac.in/~goutam/IIITKalyani/compiler/lect/Lect7.pdf · 2019. 10. 11. · Compiler Design IIITKalyani, WB 3 LR(0) Parsing An LR(0) parser can take shift-reduce decisions](https://reader036.fdocuments.in/reader036/viewer/2022081614/5fc2d21eadc89566ac27b57c/html5/thumbnails/107.jpg)
Compiler Design IIIT Kalyani, WB 107✬
✫
✩
✪
Error Routine - 4 (e4)
• At state 3 if there is anything other than s
or $, the parser pushes state 8 in the stack.
• It prints ‘missing s’.
Lect 7 Goutam Biswas
![Page 108: LR Parsingcse.iitkgp.ac.in/~goutam/IIITKalyani/compiler/lect/Lect7.pdf · 2019. 10. 11. · Compiler Design IIITKalyani, WB 3 LR(0) Parsing An LR(0) parser can take shift-reduce decisions](https://reader036.fdocuments.in/reader036/viewer/2022081614/5fc2d21eadc89566ac27b57c/html5/thumbnails/108.jpg)
Compiler Design IIIT Kalyani, WB 108✬
✫
✩
✪
State - 4
• Error entries of state 4 are filled with
reduction by rule 3 (r3).
• The reduction takes place and the error
detection is deferred.
Lect 7 Goutam Biswas
![Page 109: LR Parsingcse.iitkgp.ac.in/~goutam/IIITKalyani/compiler/lect/Lect7.pdf · 2019. 10. 11. · Compiler Design IIITKalyani, WB 3 LR(0) Parsing An LR(0) parser can take shift-reduce decisions](https://reader036.fdocuments.in/reader036/viewer/2022081614/5fc2d21eadc89566ac27b57c/html5/thumbnails/109.jpg)
Compiler Design IIIT Kalyani, WB 109✬
✫
✩
✪
Note
• Similarly we fill other error entries.
• The question is, whether there is any
possibility of infinite loop.
Lect 7 Goutam Biswas
![Page 110: LR Parsingcse.iitkgp.ac.in/~goutam/IIITKalyani/compiler/lect/Lect7.pdf · 2019. 10. 11. · Compiler Design IIITKalyani, WB 3 LR(0) Parsing An LR(0) parser can take shift-reduce decisions](https://reader036.fdocuments.in/reader036/viewer/2022081614/5fc2d21eadc89566ac27b57c/html5/thumbnails/110.jpg)
Compiler Design IIIT Kalyani, WB 110✬
✫
✩
✪
SLR Parsing Table
S Action Goto
m s e ; d i f $ P L D V T
0 s2 e1 e1 e1 e1 e1 e1 e0 1
1 e2 e2 e2 e2 e2 e2 e2 A
2 e3 e3 e3 e3 e3 s6 s7 e0 3 4 5
3 e4 s8 e4 e4 e4 e4 e4 e0
4 r3 r3 r3 r3 r3 s6 s7 r3 9 4 5
5 e5 e5 e5 e5 s11 e5 e5 e0 10
Lect 7 Goutam Biswas
![Page 111: LR Parsingcse.iitkgp.ac.in/~goutam/IIITKalyani/compiler/lect/Lect7.pdf · 2019. 10. 11. · Compiler Design IIITKalyani, WB 3 LR(0) Parsing An LR(0) parser can take shift-reduce decisions](https://reader036.fdocuments.in/reader036/viewer/2022081614/5fc2d21eadc89566ac27b57c/html5/thumbnails/111.jpg)
Compiler Design IIIT Kalyani, WB 111✬
✫
✩
✪
Example
S Action Goto
m s e ; d i f $ P L D V T
6 r7 r7 r7 r7 r7 r7 r7 r7
7 r8 r8 r8 r8 r8 r8 r8 r8
8 e6 e6 e6 s12 e6 e6 e6 e0
9 r2 r2 r2 r2 r2 r2 r2 r2
10 e7 e7 e7 s13 e7 e7 e7 e0
11 r6 r6 r6 r6 s11 r6 r6 r6 14
Lect 7 Goutam Biswas
![Page 112: LR Parsingcse.iitkgp.ac.in/~goutam/IIITKalyani/compiler/lect/Lect7.pdf · 2019. 10. 11. · Compiler Design IIITKalyani, WB 3 LR(0) Parsing An LR(0) parser can take shift-reduce decisions](https://reader036.fdocuments.in/reader036/viewer/2022081614/5fc2d21eadc89566ac27b57c/html5/thumbnails/112.jpg)
Compiler Design IIIT Kalyani, WB 112✬
✫
✩
✪
Example
S Action Goto
m s e ; d i f $ P L D V T
12 r1 r1 r1 r1 r1 r1 r1 r1
13 r4 r4 r4 r4 r4 r4 r4 r4
14 r5 r5 r5 r5 r5 r5 r5 r5
Lect 7 Goutam Biswas
![Page 113: LR Parsingcse.iitkgp.ac.in/~goutam/IIITKalyani/compiler/lect/Lect7.pdf · 2019. 10. 11. · Compiler Design IIITKalyani, WB 3 LR(0) Parsing An LR(0) parser can take shift-reduce decisions](https://reader036.fdocuments.in/reader036/viewer/2022081614/5fc2d21eadc89566ac27b57c/html5/thumbnails/113.jpg)
Compiler Design IIIT Kalyani, WB 113✬
✫
✩
✪
Error Recovery in Yacc
• Some non-terminals are chosen for error
recovery.
• Such a non-terminal A has an added special
production rule A → errRec to create a
dummy node.
• If a syntax error is detected while
constructing a subtree rooted at A, two
actions are taken.
Lect 7 Goutam Biswas
![Page 114: LR Parsingcse.iitkgp.ac.in/~goutam/IIITKalyani/compiler/lect/Lect7.pdf · 2019. 10. 11. · Compiler Design IIITKalyani, WB 3 LR(0) Parsing An LR(0) parser can take shift-reduce decisions](https://reader036.fdocuments.in/reader036/viewer/2022081614/5fc2d21eadc89566ac27b57c/html5/thumbnails/114.jpg)
Compiler Design IIIT Kalyani, WB 114✬
✫
✩
✪
Error Recovery in Yacc
• Tokens from the input expected to reduce to
A are discarded.
• A dummy node is created for A.
• Let the production rules of A be
A → BCD | errRec.
Lect 7 Goutam Biswas
![Page 115: LR Parsingcse.iitkgp.ac.in/~goutam/IIITKalyani/compiler/lect/Lect7.pdf · 2019. 10. 11. · Compiler Design IIITKalyani, WB 3 LR(0) Parsing An LR(0) parser can take shift-reduce decisions](https://reader036.fdocuments.in/reader036/viewer/2022081614/5fc2d21eadc89566ac27b57c/html5/thumbnails/115.jpg)
Compiler Design IIIT Kalyani, WB 115✬
✫
✩
✪
Error Recovery in Yacc
• The state at the top of stack is sz and the
current token is a. But Action(sz, a) is
empty, an error.
• Let the sequence of states and non-terminals
at the top of stack are as follows.
tos
sx B sy C sz
Lect 7 Goutam Biswas
![Page 116: LR Parsingcse.iitkgp.ac.in/~goutam/IIITKalyani/compiler/lect/Lect7.pdf · 2019. 10. 11. · Compiler Design IIITKalyani, WB 3 LR(0) Parsing An LR(0) parser can take shift-reduce decisions](https://reader036.fdocuments.in/reader036/viewer/2022081614/5fc2d21eadc89566ac27b57c/html5/thumbnails/116.jpg)
Compiler Design IIIT Kalyani, WB 116✬
✫
✩
✪
Error Recovery in Yacc
• The set of valid items for the state sx are
{X → α •Aβ, A → •BCD, A → • errRec, B → · · · }
The sub-trees corresponding to B and C
have already been constructed.
• Element from the top of the stack are
removed to get the error recovery state (sx),
which has a Goto() on an error recovery
non-terminal (A).
Lect 7 Goutam Biswas
![Page 117: LR Parsingcse.iitkgp.ac.in/~goutam/IIITKalyani/compiler/lect/Lect7.pdf · 2019. 10. 11. · Compiler Design IIITKalyani, WB 3 LR(0) Parsing An LR(0) parser can take shift-reduce decisions](https://reader036.fdocuments.in/reader036/viewer/2022081614/5fc2d21eadc89566ac27b57c/html5/thumbnails/117.jpg)
Compiler Design IIIT Kalyani, WB 117✬
✫
✩
✪
Error Recovery in Yacc
• A dummy node for A with errRec is created.
Then A and Goto(sx, A) are pushed in the
stack.
• The top of stack looks like,
tos
sx A su
Lect 7 Goutam Biswas
![Page 118: LR Parsingcse.iitkgp.ac.in/~goutam/IIITKalyani/compiler/lect/Lect7.pdf · 2019. 10. 11. · Compiler Design IIITKalyani, WB 3 LR(0) Parsing An LR(0) parser can take shift-reduce decisions](https://reader036.fdocuments.in/reader036/viewer/2022081614/5fc2d21eadc89566ac27b57c/html5/thumbnails/118.jpg)
Compiler Design IIIT Kalyani, WB 118✬
✫
✩
✪
Error Recovery in Yacc
• The valid items of su are
{X → αA • β, · · · }
• Tokens from the input stream are discarded
until there is a token b such that
Action(su, b) is non-empty, not an error.
• This process cannot go to an infinite loop as
there must be some Action() at the state su.
Lect 7 Goutam Biswas
![Page 119: LR Parsingcse.iitkgp.ac.in/~goutam/IIITKalyani/compiler/lect/Lect7.pdf · 2019. 10. 11. · Compiler Design IIITKalyani, WB 3 LR(0) Parsing An LR(0) parser can take shift-reduce decisions](https://reader036.fdocuments.in/reader036/viewer/2022081614/5fc2d21eadc89566ac27b57c/html5/thumbnails/119.jpg)
Compiler Design IIIT Kalyani, WB 119✬
✫
✩
✪
References
[ASRJ] Compilers Principles, Techniques, and Tools, by
A. V. Aho, Monica S. Lam, R. Sethi, & J. D. Ullman,
2nd ed., ISBN 978-81317-2101-8, Pearson Ed., 2008.
[DKHJK] Modern Compiler Design, by Dick Grune, Kees
van Reeuwijk, Henri E. Bal, Ceriel J. H. Jacobs, Koen
Langendoen, 2nd ed,, ISBN 978 1461 446989, Springer
(2012).
[KL] Engineering a Compiler, by Keith D. Cooper & Linda
Troczon, (2nd ed.), ISBN 978-93-80931-87-6, Morgan
Kaufmann, Elsevier, 2012.
Lect 7 Goutam Biswas