SlideShare ist ein Scribd-Unternehmen logo
1 von 82
Downloaden Sie, um offline zu lesen
lSyntactic Analysis
(Bottom-up Parsing)(Bottom up Parsing)
Dr. P K Singh
Dr P K Singh TCS 502 Compiler Design 1
LR Parsers
The most powerful shift-reduce parsing (yet efficient) is:
LR(k) parsing.
left to right right-most k lookhead
scanning derivation (k is omitted it is 1)
• LR parsing is attractive because:
– LR parsing is most general non-backtracking shift-reduce parsing, yet it is still
efficient.
– The class of grammars that can be parsed using LR methods is a proper superset
of the class of grammars that can be parsed with predictive parsers.
LL(1)-Grammars ⊂ LR(1)-Grammars
A LR d t t t ti it i ibl t d l ft– An LR-parser can detect a syntactic error as soon as it is possible to do so a left-
to-right scan of the input.
Dr P K Singh TCS 502 Compiler Design 2
LR Parsers
• LR-Parsers
– covers wide range of grammarscovers wide range of grammars.
– SLR – simple LR parser
– LR – most general LR parserg p
– LALR – intermediate LR parser (look-head LR parser)
– SLR, LR and LALR work same (they used the same
l ith ) l th i i t bl diff talgorithm), only their parsing tables are different.
Dr P K Singh TCS 502 Compiler Design 3
LR Parsing
S
a1
...
ai
...
an $
stack
input
Sm
Xm
Sm-1
LR Parsing
Algorithm
output
m 1
Xm-1
.
Algorithm
.
S1
X1
Action Table
terminals and $
s
Goto Table
non-terminal
s
1
S0
t four different
a actions
t
e
s
t each item is
a a state number
t
e
s
Dr P K Singh TCS 502 Compiler Design 4
s s
A Configuration of LR Parsing Algorithm
• A configuration of a LR parsing is:
( S X S X S a a a $ )( So X1 S1 ... Xm Sm, ai ai+1 ... an $ )
Stack Rest of Inputp
• Sm and ai decides the parser action by consulting the
parsing action table (Initial Stack contains just S )parsing action table. (Initial Stack contains just So )
• A configuration of a LR parsing represents the right
sentential form:sentential form:
X1 ... Xm ai ai+1 ... an $
Dr P K Singh TCS 502 Compiler Design 5
Actions of A LR-Parser
1. shift s -- shifts the next input symbol and the state s onto the stack
( So X1 S1 ... Xm Sm, ai ai+1 ... an $ ) ( So X1 S1 ... Xm Sm ai s, ai+1 ... an $ )
2. reduce A→β (or rn where n is a production number)
– pop 2|β| (=r) items from the stack;
th h A d h t [ A]– then push A and s where s=goto[sm-r,A]
( So X1 S1 ... Xm Sm, ai ai+1 ... an $ ) ( So X1 S1 ... Xm-r Sm-r A s, ai ... an $ )
– Output is the reducing production reduce A→β
3. Accept – Parsing successfully completed3. Accept Parsing successfully completed
4. Error -- Parser detected an error (an empty entry in the action table)
Dr P K Singh TCS 502 Compiler Design 6
Reduce Action
• pop 2|β| (=r) items from the stack; let us assume that
β = Y1Y2...Yr
th h A d h t [ A]• then push A and s where s=goto[sm-r,A]
( So X1 S1 ... Xm r Sm r Y1 Sm r ...Yr Sm, ai ai+1 ... an $ )( So X1 S1 ... Xm-r Sm-r Y1 Sm-r ...Yr Sm, ai ai+1 ... an $ )
( So X1 S1 ... Xm-r Sm-r A s, ai ... an $ )
• In fact, Y1Y2...Yr is a handle.
X1 ... Xm-r A ai ... an $ ⇒ X1 ... Xm Y1...Yr ai ai+1 ... an $
Dr P K Singh TCS 502 Compiler Design 7
(SLR) Parsing Tables for Expression Grammar
state id + * ( ) $ E T F
0 s5 s4 1 2 3
Action Table Goto Table
1) E → E+T
0 s5 s4 1 2 3
1 s6 acc
2 r2 s7 r2 r2
2) E → T
3) T → T*F
4) T F 3 r4 r4 r4 r4
4 s5 s4 8 2 3
5 r6 r6 r6 r6
4) T → F
5) F → (E)
6) F → id 6 s5 s4 9 3
7 s5 s4 10
8 s6 s11
6) F → id
9 r1 s7 r1 r1
10 r3 r3 r3 r3
11 r5 r5 r5 r5
Dr P K Singh TCS 502 Compiler Design 8
Actions of A (S)LR-Parser -- Example
stack input action output
0 id*id+id$ shift 5
0id5 *id+id$ reduce by F→id F→id
0F3 *id+id$ reduce by T→F T→F
0T2 *id+id$ shift 7
0T2*7 id+id$ shift 5
0T2*7id5 +id$ d b F id F id0T2*7id5 +id$ reduce by F→id F→id
0T2*7F10 +id$ reduce by T→T*F T→T*F
0T2 +id$ reduce by E→T E→T
0E1 +id$ shift 60E1 +id$ shift 6
0E1+6 id$ shift 5
0E1+6id5 $ reduce by F→id F→id
0E1+6F3 $ reduce by T→F T→F
0E1+6T9 $ reduce by E→E+T E→E+T
0E1 $ accept
Dr P K Singh TCS 502 Compiler Design 9
Constructing SLR Parsing Tables
LR(0) It
• An LR(0) item of a grammar G is a production of G a dot at the some
position of the right side.
LR(0) Item
• Ex: A → aBb Possible LR(0) Items: A → .aBb
(four different possibility) A → a.Bb
A → aB.b
A → aBb.
• Sets of LR(0) items will be the states of action and goto table of the SLR
parser.p
• A collection of sets of LR(0) items (the canonical LR(0) collection) is the
basis for constructing SLR parsers.
A d G• Augmented Grammar:
G’ is G with a new production rule S’→S where S’ is the new starting
symbol.
Dr P K Singh TCS 502 Compiler Design 10
The Closure Operation
• If I is a set of LR(0) items for a grammar G, then closure(I) is
the set of LR(0) items constructed from I by the two rules:
1. Initially, every LR(0) item in I is added to closure(I).
2 If A → α Bβ is in closure(I) and B→γ is a production rule of G;2. If A → α.Bβ is in closure(I) and B→γ is a production rule of G;
then B→.γ will be in the closure(I).
We will apply this rule until no more new LR(0) items can be
dd d t l (I)added to closure(I).
Dr P K Singh TCS 502 Compiler Design 11
The Closure Operation -- Example
E’ → E closure({E’ → .E}) =
E → E+T { E’ → .E kernel itemsE → E+T { E → .E kernel items
E → T E → .E+T
T → T*F E → .T
T → F T → .T*F
F → (E) T → .F
F → id F → .(E)
F → .id }
Dr P K Singh TCS 502 Compiler Design 12
Goto Operation
• If I is a set of LR(0) items and X is a grammar symbol (terminal or non-
terminal), then goto(I,X) is defined as follows:
– If A → α.Xβ in I
then every item in closure({A → αX.β}) will be in goto(I,X).
Example:
I ={ E’ → .E, E → .E+T, E → .T,
T → .T*F, T → .F,
F → .(E), F → .id }
goto(I,E) = { E’ → E., E → E.+T }
goto(I,T) = { E → T., T → T.*F }
goto(I,F) = {T → F.}
goto(I,() = { F → (.E), E → .E+T, E → .T, T → .T*F, T → .F,
F → .(E), F → .id }
goto(I,id) = { F → id.}
Dr P K Singh TCS 502 Compiler Design 13
Construction of The Canonical LR(0) Collection
• To create the SLR parsing tables for a grammar G, we will create the
canonical LR(0) collection of the grammar G’.
• Algorithm:• Algorithm:
C is { closure({S’→.S}) }
repeat the followings until no more set of LR(0) items can be added to C.
for each I in C and each grammar symbol X
if goto(I,X) is not empty and not in C
add goto(I,X) to Cadd goto(I,X) to C
• goto function is a DFA on the sets in C.
Dr P K Singh TCS 502 Compiler Design 14
The Canonical LR(0) Collection -- Example
I0: E’ → .E . I4: F → (.E) I7: T → T*.F
E → .E+T E → .E+T F → .(E)
E → .T E → .T F → .id
T T*F T T*FT → .T*F T → .T*F .
T → .F T → .F I8: F → (E.)
F → .(E) F → .(E) E → E.+T
F → .id F → .id
I9: E → E+T.
I1: E’ → E I5: F → id. T → T.*F
E → E.+T
I : E → E+ T I : T → T*FI6: E → E+.T I10: T → T*F
I2: E → T. T → .T*F
T → T.*F T → .F I11: F → (E).
F → .(E)
I3: T → F. F → .id
Dr P K Singh TCS 502 Compiler Design 15
Transition Diagram (DFA) of Goto Function
I0 I1 I6 I9 to I7F
E T *+
to I3
to I4
to I5
id
(
F
T
I2
I
I7
to I5
I10
t I
*
F
F
(
I3
I4 I8
to I4
to I5
E
T
)
id
(
id
I5
to I2
to I3
to I4
I11
to I6
+
T
F
(
idid
Dr P K Singh TCS 502 Compiler Design 16
to I4
Constructing SLR Parsing Table
(of an augumented grammar G’)
1. Construct the canonical collection of sets of LR(0) items for G’.
C←{I0,...,In}
2. Create the parsing action table as follows
• If a is a terminal, A→α.aβ in Ii and goto(Ii,a)=Ij then action[i,a] is shift j.
• If A→α. is in Ii , then action[i,a] is reduce A→α for all a in FOLLOW(A)i , [ , ] ( )
where A≠S’.
• If S’→S. is in Ii , then action[i,$] is accept.
• If any conflicting actions generated by these rules, the grammar is not SLR(1).
3. Create the parsing goto table
• for all non-terminals A, if goto(Ii,A)=Ij then goto[i,A]=j
4. All entries not defined by (2) and (3) are errors.
5 Initial state of the parser contains S’→ S
Dr P K Singh TCS 502 Compiler Design 17
5. Initial state of the parser contains S →.S
Parsing Tables of Expression Grammar
state id + * ( ) $ E T F
0 5 4 1 2 3
Action Table Goto Table
0 s5 s4 1 2 3
1 s6 acc
2 r2 s7 r2 r2
3 r4 r4 r4 r4
4 s5 s4 8 2 3
5 r6 r6 r6 r65 r6 r6 r6 r6
6 s5 s4 9 3
7 s5 s4 10
8 6 118 s6 s11
9 r1 s7 r1 r1
10 r3 r3 r3 r3
Dr P K Singh TCS 502 Compiler Design 18
11 r5 r5 r5 r5
SLR(1) Grammar
• An LR parser using SLR(1) parsing tables for a grammar G is
called as the SLR(1) parser for G.
• If a grammar G has an SLR(1) parsing table, it is called SLR(1)
grammar (or SLR grammar in short).
• Every SLR grammar is unambiguous, but every unambiguous
grammar is not a SLR grammar.
Dr P K Singh TCS 502 Compiler Design 19
shift/reduce and reduce/reduce conflicts
• If a state does not know whether it will make a shift operation
or reduction for a terminal, we say that there is a shift/reduce
conflict.
• If a state does not know whether it will make a reduction
operation using the production rule i or j for a terminal, we say
that there is a reduce/reduce conflict.
• If the SLR parsing table of a grammar G has a conflict, we say
that that grammar is not SLR grammar.
Dr P K Singh TCS 502 Compiler Design 20
Conflict Example (Shift-Reduce)
S → L=R I0: S’ → .S I1:S’ → S. I6: S → L=.R
S → R S → .L=R R → .L
L→ *R S → .R I2: S → L.=R L→ .*R
L → id L → .*R R → L. L → .id
R → L L → .id
R → .L I3: S → R. I7: L → *R.
I4: L → *.R I8: R → L.
Problem R → .L
FOLLOW(R)={=,$} L→ .*R I9: S → L=R.FOLLOW(R) { ,$} L→ . R I9: S → L R.
= shift 6 L → .id
reduce by R → L
shift/reduce conflict I5: L → id.
Action[2,=] = shift 6
Action[2,=] = reduce by R → L
Dr P K Singh TCS 502 Compiler Design 21
[ S ⇒L=R ⇒*R=R] so follow(R) contains, =
Conflict Example2 (Reduce-Reduce)
S → AaAb I0: S’ → .S
S → BbBa S → .AaAb
A → ε S → .BbBa
B → ε A → .
B → .
Problem
FOLLOW(A)={a,b}( ) { , }
FOLLOW(B)={a,b}
a reduce by A → ε b reduce by A → ε
reduce by B → ε reduce by B → εy y
reduce/reduce conflict reduce/reduce conflict
Dr P K Singh TCS 502 Compiler Design 22
Constructing Canonical LR(1) Parsing Tables
• In SLR method, the state i makes a reduction by A→α when the current token
is a:
– if the A→α. in the Ii and a is FOLLOW(A)i ( )
• In some situations, βA cannot be followed by the terminal a in a right-
sentential form when βα and the state i are on the top stack This means thatsentential form when βα and the state i are on the top stack. This means that
making reduction in this case is not correct.
S → AaAb S⇒AaAb⇒Aab⇒ab S⇒BbBa⇒Bba⇒baS → AaAb S⇒AaAb⇒Aab⇒ab S⇒BbBa⇒Bba⇒ba
S → BbBa
A → ε Aab ⇒ ε ab Bba ⇒ ε ba
B → ε AaAb ⇒ Aa ε b BbBa ⇒ Bb ε a
Dr P K Singh TCS 502 Compiler Design 23
LR(1) Item
• To avoid some of invalid reductions, the states need to carry more information.
• Extra information is put into a state by including a terminal symbol as a second
component in an item.
• A LR(1) item is:
A → α.β,a where a is the look-head of the LR(1) item
(a is a terminal or end-marker.)
• Such an object is called LR(1) item.
1 f t th l th f th d t– 1 refers to the length of the second component
– The lookahead has no effect in an item of the form [A → α.β,a], where β is not
∈.
But an item of the form [A → α a] calls for a reduction by A → α only if the– But an item of the form [A → α.,a] calls for a reduction by A → α only if the
next input symbol is a.
– The set of such a’s will be a subset of FOLLOW(A), but it could be a proper
subset.
Dr P K Singh TCS 502 Compiler Design 24
subset
LR(1) Item (cont.)
• When β ( in the LR(1) item A → α.β,a ) is not empty, the look-
head does not have any affect.
• When β is empty (A → α.,a ), we do the reduction by A→α only
if the next input symbol is a (not for any terminal in FOLLOW(A)).
• A state will contain A → α.,a1 where {a1,...,an} ⊆ FOLLOW(A)
...
A → α.,an
Dr P K Singh TCS 502 Compiler Design 25
Canonical Collection of Sets of LR(1) Items
• The construction of the canonical collection of the sets of LR(1) items are
similar to the construction of the canonical collection of the sets of LR(0)
items except that closure and goto operations work a little bit differentitems, except that closure and goto operations work a little bit different.
closure(I) is: ( where I is a set of LR(1) items)closure(I) is: ( where I is a set of LR(1) items)
– every LR(1) item in I is in closure(I)
– if A→α.Bβ,a in closure(I) and B→γ is a production rule of G; then
B→.γ,b will be in the closure(I) for each terminal b in FIRST(βa) .
Dr P K Singh TCS 502 Compiler Design 26
goto operation
• If I is a set of LR(1) items and X is a grammar symbol (terminal
or non-terminal), then goto(I,X) is defined as follows:or non terminal), then goto(I,X) is defined as follows:
– If A → α.Xβ,a in I
then every item in closure({A → αX.β,a}) will be iny ({ β, })
goto(I,X).
Dr P K Singh TCS 502 Compiler Design 27
Construction of The Canonical LR(1) Collection
• Algorithm:
C is { closure({S’→.S,$}) }{ ({ ,$}) }
repeat the followings until no more set of LR(1) items can be
added to C.
for each I in C and each grammar symbol Xfor each I in C and each grammar symbol X
if goto(I,X) is not empty and not in C
add goto(I,X) to C
• goto function is a DFA on the sets in C.
Dr P K Singh TCS 502 Compiler Design 28
A Short Notation for The Sets of LR(1) Items
• A set of LR(1) items containing the following items
A → α.β aA → α.β,a1
...
A → α.β,anA → α.β,an
can be written as
A → α.β, a1/a2/.../an
Dr P K Singh TCS 502 Compiler Design 29
An Example 1. S’ → S
2. S → C C
3 C C
I0: closure({(S’ → • S, $)}) =
(S’ → • S, $)
3. C → c C
4. C → d
( , )
(S → • C C, $)
(C → • c C, c/d)
(C → • d c/d)
I3: goto(I1, c) =
(C → c • C, c/d)
(C → • c C c/d)(C → • d, c/d)
I1: goto(I1, S) = (S’ → S • , $)
(C → • c C, c/d)
(C → • d, c/d)
I2: goto(I1, C) =
(S → C • C, $)
I4: goto(I1, d) =
(C → d •, c/d)
( , )
(C → • c C, $)
(C → • d, $)
I5: goto(I3, C) =
(S → C C •, $)
Dr. P K Singh TCS 502 Compiler Design slide30
(S’ → S • , $
S’ → • S, $
S → • C C, $
C → • c C, c/d
S I1
S → C • C, $
C → • c C, $
C → • d $
S → C C •, $
,
C → • d, c/d
C CI0
I5
C
C → • d, $
C → c • C, $
c
I2
I6
CC → c C, $
C → • c C, $
C → • d, $
C → cC •, $
c
I
I9
d
C → c • C, c/d
C → d •, $
c
d
c
C
I7
IC → c C, c/d
C → • c C, c/d
C → • d, c/d C → c C •, c/d
c C
I3
I8
d
Dr. P K Singh TCS 502 Compiler Design slide31
C → d •, c/d
d
I4
d
An Example
I6: goto(I3, c) =
(C C $)
: goto(I4, c) = I4
(C → c • C, $)
(C → • c C, $)
(C → • d, $)
: goto(I4, d) = I5
( )
I7: goto(I3, d) =
(C → d • $)
I9: goto(I7, c) =
(C → c C •, $)
(C → d •, $)
I8: goto(I4, C) =
(C C /d)
: goto(I7, c) = I7
(I d) I(C → c C •, c/d) : goto(I7, d) = I8
Dr. P K Singh TCS 502 Compiler Design slide32
Construction of LR(1) Parsing Tables
1 Construct the canonical collection of sets of LR(1) items for G’1. Construct the canonical collection of sets of LR(1) items for G .
C←{I0,...,In}
2. Create the parsing action table as follows
• If a is a terminal, A→α.aβ,b in Ii and goto(Ii,a)=Ij then action[i,a] is
shift j.
• If A→α.,a is in Ii , then action[i,a] is reduce A→α where A≠S’.
• If S’→S.,$ is in Ii , then action[i,$] is accept.
• If any conflicting actions generated by these rules, the grammar is not
LR(1).
3. Create the parsing goto table
• for all non-terminals A, if goto(Ii,A)=Ij then goto[i,A]=j
4. All entries not defined by (2) and (3) are errors.
5. Initial state of the parser contains S’→.S,$
Dr. P K Singh TCS 502 Compiler Design slide33
5. Initial state of the parser contains S →.S,$
An Example
c d $ S C
0 3 4 1 20 s3 s4 g1 g2
1 a
2 s6 s7 g5
3 s3 s4 g8
4 r3 r3
5 r15 r1
6 s6 s7 g9
7 r3
8 2 28 r2 r2
9 r2
Dr. P K Singh TCS 502 Compiler Design slide34
The Core of LR(1) Items
• The core of a set of LR(1) Items is the set of their first
components (i.e., LR(0) items)
• The core of the set of LR(1) items• The core of the set of LR(1) items
{ (C → c • C, c/d),
(C → • c C, c/d),
(C → • d, c/d) }
is { C → c • C,
C → • c C,
C → • d }C → • d }
Dr. P K Singh TCS 502 Compiler Design slide35
Canonical LR(1) Collection -- Example
S → AaAb I0:S’ → .S ,$ I1: S’ → S. ,$
S → BbBa S → .AaAb ,$
S
A
a IA → ε S → .BbBa ,$ I2: S → A.aAb ,$
B → ε A → . ,a
B → . ,b I3: S → B.bBa ,$
B
a
b
to I4
to I5
3
I4: S → Aa.Ab ,$ I6: S → AaA.b ,$ I8: S → AaAb. ,$
A → b
A a
A → . ,b
I5: S → Bb.Ba ,$ I7: S → BbB.a ,$ I9: S → BbBa. ,$B b
B → . ,a
Dr P K Singh TCS 502 Compiler Design 36
Canonical LR(1) Collection – Example2
S’ → S
1) S → L=R
I0:S’ → .S,$
S → .L=R,$
I1:S’ → S.,$ I4:L → *.R,$/=
R → .L,$/=
to I7
I
S L
R
*
2) S → R
3) L→ *R
4) L → id
S → .R,$
L → .*R,$/=
L → .id,$/=
I2:S → L.=R,$
R → L.,$
I :S → R $
L→ .*R,$/=
L → .id,$/=
I L id $/
to I6
to I8
to I4
to I5
L
R
id
id
*
5) R → L R → .L,$
I3:S → R.,$ I5:L → id.,$/=
I9:S → L=R.,$
I :L → *R $R
I6:S → L=.R,$
R → .L,$
L → .*R,$
L → id $
I10:R → L.,$
I11:L → *.R,$
I13:L → *R.,$
to I10
to I11
to I9
to I13
L
R
R
* I4 and I11
L → .id,$
I7:L → *R.,$/=
11 ,
R → .L,$
L→ .*R,$
L → .id,$
to I12 to I10
to I11
to I13
id
id L
*
I5 and I12
I7 and I13
Dr P K Singh TCS 502 Compiler Design 37
I8: R → L.,$/= I12:L → id.,$
to I12
id
I8 and I10
LR(1) Parsing Tables – (for Example2)
id * = $ S L R
0 s5 s4 1 2 3
1 acc
2 s6 r5
3 r2
4 s5 s4 8 7
5 r4 r4
6 s12 s11 10 9
7 r3 r3
no shift/reduce or
no reduce/reduce conflict
⇓7 r3 r3
8 r5 r5
9 r1
10 r5
⇓
so, it is a LR(1) grammar
10 r5
11 s12 s11 10 13
12 r4
13 r3
Dr P K Singh TCS 502 Compiler Design 38
13 r3
LALR Parsing Tables
• LALR stands for LookAhead LR.
• LALR parsers are often used in practice because LALR parsing tables are• LALR parsers are often used in practice because LALR parsing tables are
smaller than LR(1) parsing tables.
• The number of states in SLR and LALR parsing tables for a grammar G areThe number of states in SLR and LALR parsing tables for a grammar G are
equal.
• But LALR parsers recognize more grammars than SLR parsers.p g g p
• yacc creates a LALR parser for the given grammar.
A t t f LALR ill b i t f LR(1) it• A state of LALR parser will be again a set of LR(1) items.
Dr P K Singh TCS 502 Compiler Design 39
Creating LALR Parsing Tables
Canonical LR(1) Parser LALR Parser( )
shrink # of states
• This shrink process may introduce a reduce/reduce conflict in
th lti LALR ( th i NOT LALR)the resulting LALR parser (so the grammar is NOT LALR)
• But, this shrink process does not produce a shift/reduce conflict.
Dr P K Singh TCS 502 Compiler Design 40
The Core of A Set of LR(1) Items
• The core of a set of LR(1) items is the set of its first component.
Ex: S → L.=R,$ S → L.=R Core
R → L.,$ R → L.
• We will find the states (sets of LR(1) items) in a canonical LR(1) parser with same
cores. Then we will merge them as a single state.
I1:L → id.,= A new state: I12: L → id.,=
L id $L → id.,$
I2:L → id.,$ have same core, merge them
• We will do this for all states of a canonical LR(1) parser to get the states of the LALRWe will do this for all states of a canonical LR(1) parser to get the states of the LALR
parser.
• In fact, the number of the states of the LALR parser for a grammar will be equal to the
number of states of the SLR parser for that grammar.
Dr P K Singh TCS 502 Compiler Design 41
Creation of LALR Parsing Tables
• Create the canonical LR(1) collection of the sets of LR(1) items for the given
grammar.
• For each core present; find all sets having that same core; replace those sets havingFor each core present; find all sets having that same core; replace those sets having
same cores with a single set which is their union.
C={I0,...,In} C’={J1,...,Jm} where m ≤ n
C h i bl ( i d bl ) h i f h• Create the parsing tables (action and goto tables) same as the construction of the
parsing tables of LR(1) parser.
Note that: If J=I1 ∪ ... ∪ Ik since I1,...,Ik have same cores
cores of goto(I1,X),...,goto(I2,X) must be same.
So, goto(J,X)=K where K is the union of all sets of items having same cores as goto(I1,X).
• If no conflict is introduced, the grammar is LALR(1) grammar.
(We may only introduce reduce/reduce conflicts; we cannot introduce a shift/reduce
conflict)
Dr. P K Singh TCS 502 Compiler Design slide42
(S’ → S • , $
S’ → • S, $
S → • C C, $
C → • c C, c/d
S I1
S → C • C, $
C → • c C, $
C → • d $
S → C C •, $
,
C → • d, c/d
C CI0
I5
C
C → • d, $
C → c • C, $
c
I2
I6
CC → c C, $
C → • c C, $
C → • d, $
C → cC •, $
c
I
I9
d
C → c • C, c/d
C → d •, $
c
d
c
C
I7
I
d
C → c C, c/d
C → • c C, c/d
C → • d, c/d C → c C •, c/d
c C
I3
I8
d
Dr. P K Singh TCS 502 Compiler Design slide43
C → d •, c/d
d
I4
d
(S’ → S • , $
S’ → • S, $
S → • C C, $
C → • c C, c/d
S I1
S → C • C, $
C → • c C, $
C → • d $
S → C C •, $
,
C → • d, c/d
C CI0
I5
C
C → • d, $
C → c • C, $
c
I2
I6
CC → c C, $
C → • c C, $
C → • d, $
c
I
d
C → c • C, c/d
C → d •, $
c
d
c
C
I7
I
d
C → c C, c/d
C → • c C, c/d
C → • d, c/d C → c C •, c/d/$
c C
I3
I89
d
Dr. P K Singh TCS 502 Compiler Design slide44
C → d •, c/d
d
I4
d
(S’ → S • , $
S’ → • S, $
S → • C C, $
C → • c C, c/d
S I1
S → C • C, $
C → • c C, $
C → • d $
S → C C •, $
,
C → • d, c/d
C CI0
I5
C
C → • d, $
C → c • C, $
c
I2
I6
d CC → c C, $
C → • c C, $
C → • d, $
c
I
d
C → c • C, c/d
C → d •, c/d/$
c
d
c
C
I47
I
d
dC → c C, c/d
C → • c C, c/d
C → • d, c/d C → c C •, c/d/$
c C
I3
I89
Dr. P K Singh TCS 502 Compiler Design slide45
(S’ → S • , $
S’ → • S, $
S → • C C, $
C → • c C, c/d
S I1
S → C • C, $
C → • c C, $
C → • d $
S → C C •, $
,
C → • d, c/d
C CI0
I5
C
C → • d, $
C → c • C, c/d/$
c
I2
I36
CC → • c C,c/d/$
C → • d,c/d/$
c
I
d
c
C → d •, c/d/$
d
d
I47
I
d
C → c C •, c/d/$
d I89
Dr. P K Singh TCS 502 Compiler Design slide46
LALR Parse Table
c d $ S Cc d $ S C
0 s36 s47 1 2
1 acc
2 s36 s47 5
36 s36 s47 89
47 r3 r3 r347 r3 r3 r3
5 r1
89 r2 r2 r2
Dr. P K Singh TCS 502 Compiler Design slide47
Creation of LALR Parsing Tables
• Create the canonical LR(1) collection of the sets of LR(1) items for the
given grammar.
• Find each core; find all sets having that same core; replace those setsd eac co e; d a sets a g t at sa e co e; ep ace t ose sets
having same cores with a single set which is their union.
C={I0,...,In} C’={J1,...,Jm} where m ≤ n
• Create the parsing tables (action and goto tables) same as the construction
of the parsing tables of LR(1) parser.
– Note that: If J=I1 ∪ ... ∪ Ik since I1,...,Ik have same cores
cores of goto(I1,X),...,goto(I2,X) must be same.
– So, goto(J,X)=K where K is the union of all sets of items having same cores as goto(I1,X).
• If no conflict is introduced, the grammar is LALR(1) grammar. (We may only
introduce reduce/reduce conflicts; we cannot introduce a shift/reduce
conflict)
Dr P K Singh TCS 502 Compiler Design 48
conflict)
Shift/Reduce Conflict
f / f• We say that we cannot introduce a shift/reduce conflict during the
shrink process for the creation of the states of a LALR parser.
• Assume that we can introduce a shift/reduce conflict In this case• Assume that we can introduce a shift/reduce conflict. In this case,
a state of LALR parser must have:
A → α.,a and B → β.aγ,bA → α.,a and B → β.aγ,b
• This means that a state of the canonical LR(1) parser must have:
A → α a and B → β aγ cA → α.,a and B → β.aγ,c
But, this state has also a shift/reduce conflict. i.e. The original
canonical LR(1) parser has a conflict.( ) p
(Reason for this, the shift operation does not depend on
lookaheads)
Dr P K Singh TCS 502 Compiler Design 49
Reduce/Reduce Conflict
• But, we may introduce a reduce/reduce conflict during
the shrink process for the creation of the states of ap
LALR parser.
I1 : A → α.,a I2: A → α.,b
B → β.,b B → β.,c
⇓⇓
I12: A → α.,a/b reduce/reduce
conflict
B → β.,b/c
Dr P K Singh TCS 502 Compiler Design 50
Parser Construction with YACC
YaccYacc
S ifi ti y tab c
CompilerSpecification
Spec.y
y.tab.c
C
Compilery.tab.c a.out
a.outInput outputpu
programs
Dr P K Singh TCS 502 Compiler Design 51
Working with Lex
Yaccparse y
y.tab.c
(yyparse)
Compiler
parse.y (yyparse)
C
compilery.tab.h (with –d)
a.out
Lexscan.l
lex.yy.c
(yylex)
a.out
source outputa.out
program
Dr P K Singh TCS 502 Compiler Design 52
Working with Lex
Yacc
Compiler
parse.y
y.tab.c
(yyparse)
C t
l
C
compiler
a.out
Included
Lexscan.l lex.yy.c
a.out
source
program
output
Dr P K Singh TCS 502 Compiler Design 53
Yacc format Overall structure
Declarations
A yacc program consists of three parts:
%% <- Part separator
translation rules
%%%%
User functions
Dr P K Singh TCS 502 Compiler Design 54
Declarations
• As with Lex, you can include C statements in the
declarations section (for example #include( p
statements, and declarations of temporary variables
that will be used in the user-routines). These should
be surrounded by %{ and %}be surrounded by %{ and %}.
• But more importantly, you can declare the grammar
tokens, for example:, p
%token DIGIT
%token OPERATOR%token OPERATOR
etc..
Dr P K Singh TCS 502 Compiler Design 55
Translation rules
• Translation rules have the format
Grammar Production Rule1 {semantic action1}
G P d i R l 2 { i i 2}Grammar Production Rule2 {semantic action2}
…
• For example for the grammar rule E > Digit OP Digit• For example, for the grammar rule E -> Digit OP Digit
E : DIGIT OP DIGIT { printf(“Expression!n”); }
• The semantic value associated with a token is denoted by $XThe semantic value associated with a token is denoted by $X,
where X is the position of the token in the Expression
For example, $1 is the first digit’s value, and $3 is the third’s
$$ is the resulting value for the non-terminal on the left of the
expression
Dr P K Singh TCS 502 Compiler Design 56
User Functions
The third part can be used to provide auxiliary user
functions that the translation rules use; these will befunctions that the translation rules use; these will be
simply copied along to the generated code
%%%%
void CreateARMHeader(void)
{
printf(“For example, I can write to a file an ARM
program header n”);
}}
Dr P K Singh TCS 502 Compiler Design 57
Yacc examples
ll l l l f l
The grammar we need:
We will construct a simple calculator for evaluating
arithmetic expressions
E -> E + T | T
T -> T * F | F
F -> (E) | digit
%token DIGIT%token DIGIT
%%
Line : Expr ‘n’ {printf(“%dn”,$1); return(1);}
;
Expr : Expr ‘+’ Term {$$ = $1 + $3;}Expr : Expr + Term {$$ = $1 + $3;}
| Term
;
Term : Term ‘*’ Factor {$$ = $1 * $3}
| Factor| Factor
;
Factor : ‘(‘ expr ‘)’ {$$ = $2;}
: DIGIT
;
Dr P K Singh TCS 502 Compiler Design 58
;
Yacc examples
%{%{
#include <ctype.h>
%}
%token DIGIT
%%
Line : Expr ‘n’ {printf(“%dn”,$1); return(1);}Line : Expr n {printf( %dn ,$1); return(1);}
;
Expr : Expr ‘+’ Term {$$ = $1 + $3;}
| Term
;
Term : Term ‘*’ Factor {$$ = $1 * $3}
| Factor
;
Factor : ‘(‘ expr ‘)’ {$$ = $2;}
: DIGIT
;
%%%%
yylex() {
int c;
c= getchar();
if(isdigit(c)){
yylval=c-’0’;yy ;
return DIGIT;
}
return c;
}
Dr P K Singh TCS 502 Compiler Design 59
Yacc examples( ambiguous Grammar )
%{%{
#include <ctype.h>
#include <stdio.h>
#define YYSTYPE double
%}
%token NUM%token NUM
%left ‘+’ ‘-’
%left ‘*’ ‘/’
%%
line : line Expr ‘n’ {printf(“nt Answer = %gn”,$2); }
| line ‘n’
|
;
Expr : Expr ‘+’ Expr {$$ = $1 + $3;}
| Expr ‘-’ Expr {$$ = $1 - $3;}
| Expr ‘/’ Expr {$$ = $1 / $3;}
| Expr ‘*’ Expr {$$ = $1 * $3;}| Expr * Expr {$$ = $1 * $3;}
|‘(‘ expr ‘)’ {$$ = $2;}
|NUM
;
%%
yylex() {yy () {
int c;
while((c= getchar()==‘ ‘);
if((c==‘.’||(isdigit(c))){
ungetc(c,stdin);
scanf(“%lf”,&yylval);
Dr P K Singh TCS 502 Compiler Design 60
return NUM;
}
return c;
}
yylex() (Through Lex) calc.l
NUM [0-9]+.?| [0-9]*.[0-9]+
%%
[ ]
{NUM} {sscanf(yytext,”%lf”, &yylval);
return NUM;}return NUM;}
n|. {return yytext[0];}
Dr P K Singh TCS 502 Compiler Design 61
Yacc examples( with Lex)
%{%{
#include <ctype.h>
#include <stdio.h>
#define YYSTYPE double
%}%}
%token NUM
%left ‘+’ ‘-’
%left ‘*’ ‘/’
%%%%
line : line Expr ‘n’ {printf(“nt Answer = %gn”,$2); }
| line ‘n’
|
;
Expr : Expr ‘+’ Expr {$$ = $1 + $3;}
| Expr ‘-’ Expr {$$ = $1 - $3;}
| Expr ‘/’ Expr {$$ = $1 / $3;}
| Expr ‘*’ Expr {$$ $1 * $3;}| Expr ‘*’ Expr {$$ = $1 * $3;}
|‘(‘ expr ‘)’ {$$ = $2;}
|NUM
;
%%
Dr P K Singh TCS 502 Compiler Design 62
%%
#include “lex.yy.c”
Canonical LALR(1) Collection – Example2
S’ → S
1) S → L=R
I0:S’ → .S,$
S → .L=R,$
I1:S’ → S.,$ I411:L → *.R,$/=
R → .L,$/=
to I713
I
S L
R
*
2) S → R
3) L→ *R
4) L → id
S → .R,$
L → .*R,$/=
L → .id,$/=
I2:S → L.=R,$
R → L.,$
I :S → R $
L→ .*R,$/=
L → .id,$/=
I L id $/
to I6
to I810
to I411
to I512
L
R
id
id
*
5) R → L R → .L,$
I3:S → R.,$ I512:L → id.,$/=
I :S → L=R $R
I6:S → L=.R,$
R → .L,$
L → .*R,$
L → .id $
I9:S → L=R.,$
to I810
to I411
to I9
L
R
*
Same Cores
I4 and I11
I and IL → .id,$
I713:L → *R.,$/=
to I512
id I5 and I12
I7 and I13
I d I
Dr P K Singh TCS 502 Compiler Design 63
I810: R → L.,$/=
I8 and I10
LALR(1) Parsing Tables – (for Example2)
id * = $ S L R
0 s5 s4 1 2 3
1 acc
2 s6 r5
3 r2
4 s5 s4 8 7
5 r4 r4
6 s12 s11 10 9
7 r3 r3
no shift/reduce or
no reduce/reduce conflict
⇓7 r3 r3
8 r5 r5
9 r1
⇓
so, it is a LALR(1) grammar
Dr P K Singh TCS 502 Compiler Design 64
Using Ambiguous Grammars
• All grammars used in the construction of LR-parsing
tables must be un-ambiguous.
• Can we create LR-parsing tables for ambiguous
grammars ?
– Yes, but they will have conflicts., y
– We can resolve these conflicts in favor of one of them to disambiguate
the grammar.
– At the end, we will have again an unambiguous grammar.
h b• Why we want to use an ambiguous grammar?
– Some of the ambiguous grammars are much natural, and a
corresponding unambiguous grammar can be very complex.
Usage of an ambiguous grammar may eliminate unnecessary– Usage of an ambiguous grammar may eliminate unnecessary
reductions.
• Ex.
E → E+T | T
Dr P K Singh TCS 502 Compiler Design 65
E → E+T | T
E → E+E | E*E | (E) | id T → T*F | F
F → (E) | id
Sets of LR(0) Items for Ambiguous
Grammar
I0: E’ → .E
E → .E+E
E → E*E
I1: E’ → E.
E → E .+E
E → E *E
I4: E → E +.E
E → .E+E
E → E*E
I7: E → E+E.
E → E.+E
E → E *E
I5
EE ++
*(
I
I4
E → .E*E
E → .(E)
E → .id
E → E .*E E → .E*E
E → .(E)
E → .id
E → E.*E
*
(
(
id
I2
I3
I2: E → (.E)
E → .E+E
I5: E → E *.E
E → .E+E
E → .E*E
E → (E)
I8: E → E*E.
E → E.+E
E → E.*E
E +
*
(
(
id I2
I3
I4
I5
E → .E*E
E → .(E)
E → .id
E → .(E)
E → .id
I6: E → (E.) I9: E → (E).)
E
id
id
I3
I3: E → id.
I6: E → (E.)
E → E.+E
E → E.*E
I9: E → (E).+
* I4
I5
Dr P K Singh TCS 502 Compiler Design 66
SLR-Parsing Tables for Ambiguous
Grammar
FOLLOW(E) = { $,+,*,) }
State I7 has shift/reduce conflicts for symbols + and *State I7 has shift/reduce conflicts for symbols + and .
I0 I1 I7I4
E+E
when current token is +
shift + is right-associative
reduce + is left-associative
when current token is *when current token is *
shift * has higher precedence than +
reduce + has higher precedence than *
Dr P K Singh TCS 502 Compiler Design 67
SLR-Parsing Tables for Ambiguous
Grammar
FOLLOW(E) = { $,+,*,) }
State I8 has shift/reduce conflicts for symbols + and *State I8 has shift/reduce conflicts for symbols + and .
I0 I1 I7I5
E*E
when current token is *
shift * is right-associative
reduce * is left-associative
when current token is +when current token is +
shift + has higher precedence than *
reduce * has higher precedence than +
Dr P K Singh TCS 502 Compiler Design 68
SLR-Parsing Tables for Ambiguous
Grammar
id + * ( ) $ E
Action Goto
0 s3 s2 1
1 s4 s5 acc
2 s3 s2 6
3 r4 r4 r4 r4
4 s3 s2 74 s3 s2 7
5 s3 s2 8
6 s4 s5 s96 s4 s5 s9
7 r1 s5 r1 r1
8 r2 r2 r2 r2
Dr P K Singh TCS 502 Compiler Design 69
8 r2 r2 r2 r2
9 r3 r3 r3 r3
Error Recovery in LR Parsing
• An LR parser will detect an error when it consults the
parsing action table and finds an error entry. All emptyp g y p y
entries in the action table are error entries.
• Errors are never detected by consulting the goto table.
• An LR parser will announce error as soon as there is no
valid continuation for the scanned portion of the input.
• A canonical LR parser (LR(1) parser) will never make• A canonical LR parser (LR(1) parser) will never make
even a single reduction before announcing an error.
• The SLR and LALR parsers may make several reductions
before announcing an error.
• But, all LR parsers (LR(1), LALR and SLR parsers) will
never shift an erroneous input symbol onto the stack
Dr P K Singh TCS 502 Compiler Design 70
never shift an erroneous input symbol onto the stack.
Panic Mode Error Recovery in LR Parsing
• Scan down the stack until a state s with a goto on a
particular nonterminal A is found. (Get rid of everythingp ( y g
from the stack before this state s).
• Discard zero or more input symbols until a symbol a is
found that can legitimately follow Afound that can legitimately follow A.
– The symbol a is simply in FOLLOW(A), but this may not work for all
situations.
h k h l d h• The parser stacks the nonterminal A and the state
goto[s,A], and it resumes the normal parsing.
• This nonterminal A is normally is a basic programming• This nonterminal A is normally is a basic programming
block (there can be more than one choice for A).
– stmt, expr, block, ...
Dr P K Singh TCS 502 Compiler Design 71
Phrase-Level Error Recovery in LR
Parsingg
• Each empty entry in the action table is marked with a
specific error routine.p
• An error routine reflects the error that the user most
likely will make in that case.
• An error routine inserts the symbols into the stack or the
input (or it deletes the symbols from the stack and the
input, or it can do both insertion and deletion).p , )
– missing operand
– unbalanced right parenthesis
Dr P K Singh TCS 502 Compiler Design 72
Creating an LALR(1) Parser with Yacc/Bison
Yacc or Bison
yacc
specification y tab c
compiler
specification
yacc.y
y.tab.c
y.tab.c C
compiler
a.out
input
stream a.out
output
stream
73
stream stream
Yacc Specification
• A yacc specification consists of three parts:
yacc declarations, and C declarations within %{ %}
%%
translation rules
%%
user-defined auxiliary procedures
• The translation rules are productions with actions:
production1 { semantic action1 }p 1 { 1 }
production2 { semantic action2 }
…
productionn { semantic actionn }p oduct o n { se a t c act o n }
74
Writing a Grammar in Yacc
• Productions in Yacc are of the form
Nonterminal : tokens/nonterminals {/ {
action }
| tokens/nonterminals { action }
…
;
• Tokens that are single characters can be usedTokens that are single characters can be used
directly within productions, e.g. ‘+’
• Named tokens must be declared first in the
declaration part using
%token TokenName
75
Synthesized Attributes
• Semantic actions may refer to values of the
synthesized attributes of terminals andsynthesized attributes of terminals and
nonterminals in a production:
X : Y1 Y2 Y3 … Yn { action }
$$ f t th l f th tt ib t f X– $$ refers to the value of the attribute of X
– $i refers to the value of the attribute of Yi
• For example• For example
factor : ‘(’ expr ‘)’ { $$=$2; }
factor.val=x
$$ $
76
expr.val=x )(
$$=$2
Example 1
%{ #include <ctype.h> %}
%token DIGIT
%%
line : expr ‘n’ { printf(“%dn” $1); }
Also results in definition of
#define DIGIT xxx
line : expr ‘n’ { printf( %dn , $1); }
;
expr : expr ‘+’ term { $$ = $1 + $3; }
| term { $$ = $1; }
;;
term : term ‘*’ factor { $$ = $1 * $3; }
| factor { $$ = $1; }
;
factor : ‘(’ expr ‘)’ { $$ = $2; }factor : ( expr ) { $$ = $2; }
| DIGIT { $$ = $1; }
;
%%
int yylex() Att ib t f t k
Attribute of
term (parent)
Attribute of factor (child)
int yylex()
{ int c = getchar();
if (isdigit(c))
{ yylval = c-’0’;
return DIGIT;
Attribute of token
(stored in yylval)
term (parent)
Example of a very crude lexical
l i k d b th
77
return DIGIT;
}
return c;
}
analyzer invoked by the parser
Dealing With Ambiguous Grammars
• By defining operator precedence levels and
left/right associativity of the operators we canleft/right associativity of the operators, we can
specify ambiguous grammars in Yacc, such as
E → E+E | E-E | E*E | E/E | (E) | -E | num| | | / | ( ) | |
• To define precedence levels and associativity in
Yacc’s declaration part:
%left ‘+’ ‘-’
%left ‘*’ ‘/’
% i ht UMINUS%right UMINUS
78
Example 2
%{
#include <ctype.h>
#include <stdio.h>
#define YYSTYPE double
Double type for attributes
and yylval
#define YYSTYPE double
%}
%token NUMBER
%left ‘+’ ‘-’
%left ‘*’ ‘/’%left * /
%right UMINUS
%%
lines : lines expr ‘n’ { printf(“%gn”, $2); }
| lines ‘n’| lines n
| /* empty */
;
expr : expr ‘+’ expr { $$ = $1 + $3; }
| expr ‘-’ expr { $$ = $1 - $3; }| expr - expr { $$ = $1 - $3; }
| expr ‘*’ expr { $$ = $1 * $3; }
| expr ‘/’ expr { $$ = $1 / $3; }
| ‘(’ expr ‘)’ { $$ = $2; }
| ‘-’ expr %prec UMINUS { $$ = -$2; }
79
| - expr %prec UMINUS { $$ = -$2; }
| NUMBER
;
%%
Example 2 (cont’d)
%%
int yylex()
{ int c;
while ((c = getchar()) == ‘ ‘)
;
if ((c == ‘.’) || isdigit(c)) Crude lexical analyzer for
f d bl d i h i{ ungetc(c, stdin);
scanf(“%lf”, &yylval);
return NUMBER;
}
fp doubles and arithmetic
operators
return c;
}
int main()
{ if (yyparse() != 0)
fprintf(stderr, “Abnormal exitn”);
return 0;
}
int yyerror(char *s)
Run the parser
Invoked by parser
80
{ fprintf(stderr, “Error: %sn”, s);
}
Invoked by parser
to report parse errors
Combining Lex/Flex with Yacc/Bison
Yacc or Bison
compiler
yacc
specification
yacc.y
y.tab.c
y.tab.h
Lex or Flex
compiler
Lex specification
lex.l
and token definitions
lex.yy.c
lex.yy.c C a out
compilerand token definitions
y.tab.h
lex.yy.c
y.tab.c compiler
a.out
81
input
stream a.out
output
stream
Lex Specification for Example 2
%option noyywrap
%{
#include “y.tab.h”
Generated by Yacc, contains
#define NUMBER xxx
extern double yylval;
%}
number [0-9]+.?|[0-9]*.[0-9]+
%%
#
Defined in y.tab.c
%%
[ ] { /* skip blanks */ }
{number} { sscanf(yytext, “%lf”, &yylval);
return NUMBER;
}}
n|. { return yytext[0]; }
yacc -d example2.y
lex example2.l
bison -d -y example2.y
flex example2.l
82
gcc y.tab.c lex.yy.c
./a.out
gcc y.tab.c lex.yy.c
./a.out

Weitere ähnliche Inhalte

Was ist angesagt?

Compiler Design LR parsing SLR ,LALR CLR
Compiler Design LR parsing SLR ,LALR CLRCompiler Design LR parsing SLR ,LALR CLR
Compiler Design LR parsing SLR ,LALR CLRRiazul Islam
 
LR parsing
LR parsingLR parsing
LR parsingichikaz3
 
ALF 5 - Parser Top-Down (2018)
ALF 5 - Parser Top-Down (2018)ALF 5 - Parser Top-Down (2018)
ALF 5 - Parser Top-Down (2018)Alexandru Radovici
 
Bottom - Up Parsing
Bottom - Up ParsingBottom - Up Parsing
Bottom - Up Parsingkunj desai
 
Lecture 07 08 syntax analysis-4
Lecture 07 08 syntax analysis-4Lecture 07 08 syntax analysis-4
Lecture 07 08 syntax analysis-4Iffat Anjum
 
Functional Programming Concepts for Imperative Programmers
Functional Programming Concepts for Imperative ProgrammersFunctional Programming Concepts for Imperative Programmers
Functional Programming Concepts for Imperative ProgrammersChris
 
Data structure lecture7
Data structure lecture7Data structure lecture7
Data structure lecture7Kumar
 
Top down parsing(sid) (1)
Top down parsing(sid) (1)Top down parsing(sid) (1)
Top down parsing(sid) (1)Siddhesh Pange
 
Lecture 05 syntax analysis 2
Lecture 05 syntax analysis 2Lecture 05 syntax analysis 2
Lecture 05 syntax analysis 2Iffat Anjum
 

Was ist angesagt? (20)

Ch4b
Ch4bCh4b
Ch4b
 
Compiler Design LR parsing SLR ,LALR CLR
Compiler Design LR parsing SLR ,LALR CLRCompiler Design LR parsing SLR ,LALR CLR
Compiler Design LR parsing SLR ,LALR CLR
 
LR parsing
LR parsingLR parsing
LR parsing
 
ALF 5 - Parser Top-Down (2018)
ALF 5 - Parser Top-Down (2018)ALF 5 - Parser Top-Down (2018)
ALF 5 - Parser Top-Down (2018)
 
Bottom - Up Parsing
Bottom - Up ParsingBottom - Up Parsing
Bottom - Up Parsing
 
Topdown parsing
Topdown parsingTopdown parsing
Topdown parsing
 
Lecture7 syntax analysis_3
Lecture7 syntax analysis_3Lecture7 syntax analysis_3
Lecture7 syntax analysis_3
 
Parsing LL(1), SLR, LR(1)
Parsing LL(1), SLR, LR(1)Parsing LL(1), SLR, LR(1)
Parsing LL(1), SLR, LR(1)
 
LL(1) parsing
LL(1) parsingLL(1) parsing
LL(1) parsing
 
Ch06
Ch06Ch06
Ch06
 
Lecture 07 08 syntax analysis-4
Lecture 07 08 syntax analysis-4Lecture 07 08 syntax analysis-4
Lecture 07 08 syntax analysis-4
 
Lecture10 syntax analysis_6
Lecture10 syntax analysis_6Lecture10 syntax analysis_6
Lecture10 syntax analysis_6
 
Lecture8 syntax analysis_4
Lecture8 syntax analysis_4Lecture8 syntax analysis_4
Lecture8 syntax analysis_4
 
Ch03
Ch03Ch03
Ch03
 
Functional Programming Concepts for Imperative Programmers
Functional Programming Concepts for Imperative ProgrammersFunctional Programming Concepts for Imperative Programmers
Functional Programming Concepts for Imperative Programmers
 
Polish
PolishPolish
Polish
 
First and follow set
First and follow setFirst and follow set
First and follow set
 
Data structure lecture7
Data structure lecture7Data structure lecture7
Data structure lecture7
 
Top down parsing(sid) (1)
Top down parsing(sid) (1)Top down parsing(sid) (1)
Top down parsing(sid) (1)
 
Lecture 05 syntax analysis 2
Lecture 05 syntax analysis 2Lecture 05 syntax analysis 2
Lecture 05 syntax analysis 2
 

Andere mochten auch

Andere mochten auch (16)

Doc1
Doc1Doc1
Doc1
 
2014 the boulder history museum
2014 the boulder history museum2014 the boulder history museum
2014 the boulder history museum
 
Make an Entrance
Make an EntranceMake an Entrance
Make an Entrance
 
ERP
ERPERP
ERP
 
Conalep tlalnepantla 1
Conalep tlalnepantla      1Conalep tlalnepantla      1
Conalep tlalnepantla 1
 
Producao sustentavelpecuarialeiteira
Producao sustentavelpecuarialeiteiraProducao sustentavelpecuarialeiteira
Producao sustentavelpecuarialeiteira
 
Home technologies
Home technologiesHome technologies
Home technologies
 
Article: ZELA hosts workshop on Corporate Social Responsibility & Business an...
Article: ZELA hosts workshop on Corporate Social Responsibility & Business an...Article: ZELA hosts workshop on Corporate Social Responsibility & Business an...
Article: ZELA hosts workshop on Corporate Social Responsibility & Business an...
 
Project e-commerce
Project e-commerceProject e-commerce
Project e-commerce
 
Mmmec brochure
Mmmec brochureMmmec brochure
Mmmec brochure
 
Londres cris jas
Londres cris jasLondres cris jas
Londres cris jas
 
Pregunta de investigacion
Pregunta  de  investigacionPregunta  de  investigacion
Pregunta de investigacion
 
Expand Your Loft Space
Expand Your Loft Space Expand Your Loft Space
Expand Your Loft Space
 
Codflorestal port digital
Codflorestal port digitalCodflorestal port digital
Codflorestal port digital
 
SQL Server Benchmarking, Baselining and Workload Analysis
SQL Server Benchmarking, Baselining and Workload AnalysisSQL Server Benchmarking, Baselining and Workload Analysis
SQL Server Benchmarking, Baselining and Workload Analysis
 
pregunta de investigasion2014
pregunta  de  investigasion2014pregunta  de  investigasion2014
pregunta de investigasion2014
 

Ähnlich wie Bottomupparser

Ähnlich wie Bottomupparser (20)

LR-Parsing.ppt
LR-Parsing.pptLR-Parsing.ppt
LR-Parsing.ppt
 
lr parsers bottom up parsers slr parser.pptx
lr parsers bottom up parsers slr parser.pptxlr parsers bottom up parsers slr parser.pptx
lr parsers bottom up parsers slr parser.pptx
 
11-SLR input string parsing, CLR introduction-06-06-2023.docx
11-SLR input string parsing, CLR introduction-06-06-2023.docx11-SLR input string parsing, CLR introduction-06-06-2023.docx
11-SLR input string parsing, CLR introduction-06-06-2023.docx
 
compiler-lecture-6nn-14112022-110738am.ppt
compiler-lecture-6nn-14112022-110738am.pptcompiler-lecture-6nn-14112022-110738am.ppt
compiler-lecture-6nn-14112022-110738am.ppt
 
Compiler Design Bottom Up Parsing Technique S
Compiler Design Bottom Up Parsing Technique SCompiler Design Bottom Up Parsing Technique S
Compiler Design Bottom Up Parsing Technique S
 
Ch5b.pdf
Ch5b.pdfCh5b.pdf
Ch5b.pdf
 
Left factor put
Left factor putLeft factor put
Left factor put
 
lect 06 top down p2.ppt
lect 06 top down p2.pptlect 06 top down p2.ppt
lect 06 top down p2.ppt
 
UNIT 2 (1).pptx
UNIT 2 (1).pptxUNIT 2 (1).pptx
UNIT 2 (1).pptx
 
PARSING.ppt
PARSING.pptPARSING.ppt
PARSING.ppt
 
LaplaceTransformIIT.pdf
LaplaceTransformIIT.pdfLaplaceTransformIIT.pdf
LaplaceTransformIIT.pdf
 
Ch5b.ppt
Ch5b.pptCh5b.ppt
Ch5b.ppt
 
ALF 5 - Parser Top-Down
ALF 5 - Parser Top-DownALF 5 - Parser Top-Down
ALF 5 - Parser Top-Down
 
関数プログラミングことはじめ in 福岡
関数プログラミングことはじめ in 福岡関数プログラミングことはじめ in 福岡
関数プログラミングことはじめ in 福岡
 
LISP: Introduction to lisp
LISP: Introduction to lispLISP: Introduction to lisp
LISP: Introduction to lisp
 
LISP: Introduction To Lisp
LISP: Introduction To LispLISP: Introduction To Lisp
LISP: Introduction To Lisp
 
Syntaxdirected
SyntaxdirectedSyntaxdirected
Syntaxdirected
 
Syntaxdirected
SyntaxdirectedSyntaxdirected
Syntaxdirected
 
Syntaxdirected (1)
Syntaxdirected (1)Syntaxdirected (1)
Syntaxdirected (1)
 
sameermlr0parser-200701133032.pptx
sameermlr0parser-200701133032.pptxsameermlr0parser-200701133032.pptx
sameermlr0parser-200701133032.pptx
 

Mehr von Royalzig Luxury Furniture

A Glimpse of Beautiful Hand-Carved Luxury Italian Furniture Photos from Royal...
A Glimpse of Beautiful Hand-Carved Luxury Italian Furniture Photos from Royal...A Glimpse of Beautiful Hand-Carved Luxury Italian Furniture Photos from Royal...
A Glimpse of Beautiful Hand-Carved Luxury Italian Furniture Photos from Royal...Royalzig Luxury Furniture
 
India's Luxury Furniture Brand Royalzig setting-Up a New Production Unit
India's Luxury Furniture Brand Royalzig setting-Up a New Production UnitIndia's Luxury Furniture Brand Royalzig setting-Up a New Production Unit
India's Luxury Furniture Brand Royalzig setting-Up a New Production UnitRoyalzig Luxury Furniture
 
Hand Carved Luxury & Designer Wooden arm chair
Hand Carved Luxury & Designer Wooden arm chairHand Carved Luxury & Designer Wooden arm chair
Hand Carved Luxury & Designer Wooden arm chairRoyalzig Luxury Furniture
 
Hand Carved Luxury & Designer Wooden Dining Table
Hand Carved Luxury & Designer Wooden Dining Table Hand Carved Luxury & Designer Wooden Dining Table
Hand Carved Luxury & Designer Wooden Dining Table Royalzig Luxury Furniture
 
Hand Carved Luxury & Designer Wooden sofa set
Hand Carved Luxury & Designer Wooden sofa setHand Carved Luxury & Designer Wooden sofa set
Hand Carved Luxury & Designer Wooden sofa setRoyalzig Luxury Furniture
 
Royalzig Hand Carved Luxury & Designer Wood Bed
Royalzig Hand Carved Luxury & Designer Wood BedRoyalzig Hand Carved Luxury & Designer Wood Bed
Royalzig Hand Carved Luxury & Designer Wood BedRoyalzig Luxury Furniture
 

Mehr von Royalzig Luxury Furniture (20)

A Glimpse of Beautiful Hand-Carved Luxury Italian Furniture Photos from Royal...
A Glimpse of Beautiful Hand-Carved Luxury Italian Furniture Photos from Royal...A Glimpse of Beautiful Hand-Carved Luxury Italian Furniture Photos from Royal...
A Glimpse of Beautiful Hand-Carved Luxury Italian Furniture Photos from Royal...
 
French Style Slim Carving Bedroom Sets
French Style Slim Carving Bedroom SetsFrench Style Slim Carving Bedroom Sets
French Style Slim Carving Bedroom Sets
 
India's Luxury Furniture Brand Royalzig setting-Up a New Production Unit
India's Luxury Furniture Brand Royalzig setting-Up a New Production UnitIndia's Luxury Furniture Brand Royalzig setting-Up a New Production Unit
India's Luxury Furniture Brand Royalzig setting-Up a New Production Unit
 
Luxury furniture manufacturer in india
Luxury furniture manufacturer in indiaLuxury furniture manufacturer in india
Luxury furniture manufacturer in india
 
bone inlay hand carved luxury table
bone inlay hand carved luxury table bone inlay hand carved luxury table
bone inlay hand carved luxury table
 
Hand Carved Luxury & Designer Wooden arm chair
Hand Carved Luxury & Designer Wooden arm chairHand Carved Luxury & Designer Wooden arm chair
Hand Carved Luxury & Designer Wooden arm chair
 
beautiful hand carved dressing table
beautiful hand carved dressing table  beautiful hand carved dressing table
beautiful hand carved dressing table
 
Hand Carved Luxury & Designer Wooden Dining Table
Hand Carved Luxury & Designer Wooden Dining Table Hand Carved Luxury & Designer Wooden Dining Table
Hand Carved Luxury & Designer Wooden Dining Table
 
Hand Carved Luxury & Designer Wooden sofa set
Hand Carved Luxury & Designer Wooden sofa setHand Carved Luxury & Designer Wooden sofa set
Hand Carved Luxury & Designer Wooden sofa set
 
Royalzig Hand Carved Luxury & Designer Wood Bed
Royalzig Hand Carved Luxury & Designer Wood BedRoyalzig Hand Carved Luxury & Designer Wood Bed
Royalzig Hand Carved Luxury & Designer Wood Bed
 
hand carved luxury wedding throne
hand carved luxury wedding thronehand carved luxury wedding throne
hand carved luxury wedding throne
 
Hand carved Luxury wood divan
Hand carved Luxury wood divanHand carved Luxury wood divan
Hand carved Luxury wood divan
 
Royalzig luxury furniture
Royalzig luxury furnitureRoyalzig luxury furniture
Royalzig luxury furniture
 
Royalzigppt 004
Royalzigppt 004Royalzigppt 004
Royalzigppt 004
 
Royalzig high end furniture
Royalzig high end furnitureRoyalzig high end furniture
Royalzig high end furniture
 
Royalzigppt 002
Royalzigppt 002Royalzigppt 002
Royalzigppt 002
 
Transcript
TranscriptTranscript
Transcript
 
Topdown parsing
Topdown parsingTopdown parsing
Topdown parsing
 
Run time
Run timeRun time
Run time
 
Perceptual rules
Perceptual rulesPerceptual rules
Perceptual rules
 

Kürzlich hochgeladen

4.16.24 21st Century Movements for Black Lives.pptx
4.16.24 21st Century Movements for Black Lives.pptx4.16.24 21st Century Movements for Black Lives.pptx
4.16.24 21st Century Movements for Black Lives.pptxmary850239
 
ANG SEKTOR NG agrikultura.pptx QUARTER 4
ANG SEKTOR NG agrikultura.pptx QUARTER 4ANG SEKTOR NG agrikultura.pptx QUARTER 4
ANG SEKTOR NG agrikultura.pptx QUARTER 4MiaBumagat1
 
AUDIENCE THEORY -CULTIVATION THEORY - GERBNER.pptx
AUDIENCE THEORY -CULTIVATION THEORY -  GERBNER.pptxAUDIENCE THEORY -CULTIVATION THEORY -  GERBNER.pptx
AUDIENCE THEORY -CULTIVATION THEORY - GERBNER.pptxiammrhaywood
 
Oppenheimer Film Discussion for Philosophy and Film
Oppenheimer Film Discussion for Philosophy and FilmOppenheimer Film Discussion for Philosophy and Film
Oppenheimer Film Discussion for Philosophy and FilmStan Meyer
 
GRADE 4 - SUMMATIVE TEST QUARTER 4 ALL SUBJECTS
GRADE 4 - SUMMATIVE TEST QUARTER 4 ALL SUBJECTSGRADE 4 - SUMMATIVE TEST QUARTER 4 ALL SUBJECTS
GRADE 4 - SUMMATIVE TEST QUARTER 4 ALL SUBJECTSJoshuaGantuangco2
 
Daily Lesson Plan in Mathematics Quarter 4
Daily Lesson Plan in Mathematics Quarter 4Daily Lesson Plan in Mathematics Quarter 4
Daily Lesson Plan in Mathematics Quarter 4JOYLYNSAMANIEGO
 
THEORIES OF ORGANIZATION-PUBLIC ADMINISTRATION
THEORIES OF ORGANIZATION-PUBLIC ADMINISTRATIONTHEORIES OF ORGANIZATION-PUBLIC ADMINISTRATION
THEORIES OF ORGANIZATION-PUBLIC ADMINISTRATIONHumphrey A Beña
 
INTRODUCTION TO CATHOLIC CHRISTOLOGY.pptx
INTRODUCTION TO CATHOLIC CHRISTOLOGY.pptxINTRODUCTION TO CATHOLIC CHRISTOLOGY.pptx
INTRODUCTION TO CATHOLIC CHRISTOLOGY.pptxHumphrey A Beña
 
HỌC TỐT TIẾNG ANH 11 THEO CHƯƠNG TRÌNH GLOBAL SUCCESS ĐÁP ÁN CHI TIẾT - CẢ NĂ...
HỌC TỐT TIẾNG ANH 11 THEO CHƯƠNG TRÌNH GLOBAL SUCCESS ĐÁP ÁN CHI TIẾT - CẢ NĂ...HỌC TỐT TIẾNG ANH 11 THEO CHƯƠNG TRÌNH GLOBAL SUCCESS ĐÁP ÁN CHI TIẾT - CẢ NĂ...
HỌC TỐT TIẾNG ANH 11 THEO CHƯƠNG TRÌNH GLOBAL SUCCESS ĐÁP ÁN CHI TIẾT - CẢ NĂ...Nguyen Thanh Tu Collection
 
EMBODO Lesson Plan Grade 9 Law of Sines.docx
EMBODO Lesson Plan Grade 9 Law of Sines.docxEMBODO Lesson Plan Grade 9 Law of Sines.docx
EMBODO Lesson Plan Grade 9 Law of Sines.docxElton John Embodo
 
Integumentary System SMP B. Pharm Sem I.ppt
Integumentary System SMP B. Pharm Sem I.pptIntegumentary System SMP B. Pharm Sem I.ppt
Integumentary System SMP B. Pharm Sem I.pptshraddhaparab530
 
Dust Of Snow By Robert Frost Class-X English CBSE
Dust Of Snow By Robert Frost Class-X English CBSEDust Of Snow By Robert Frost Class-X English CBSE
Dust Of Snow By Robert Frost Class-X English CBSEaurabinda banchhor
 
Activity 2-unit 2-update 2024. English translation
Activity 2-unit 2-update 2024. English translationActivity 2-unit 2-update 2024. English translation
Activity 2-unit 2-update 2024. English translationRosabel UA
 
Student Profile Sample - We help schools to connect the data they have, with ...
Student Profile Sample - We help schools to connect the data they have, with ...Student Profile Sample - We help schools to connect the data they have, with ...
Student Profile Sample - We help schools to connect the data they have, with ...Seán Kennedy
 
ROLES IN A STAGE PRODUCTION in arts.pptx
ROLES IN A STAGE PRODUCTION in arts.pptxROLES IN A STAGE PRODUCTION in arts.pptx
ROLES IN A STAGE PRODUCTION in arts.pptxVanesaIglesias10
 
ICS2208 Lecture6 Notes for SL spaces.pdf
ICS2208 Lecture6 Notes for SL spaces.pdfICS2208 Lecture6 Notes for SL spaces.pdf
ICS2208 Lecture6 Notes for SL spaces.pdfVanessa Camilleri
 
Active Learning Strategies (in short ALS).pdf
Active Learning Strategies (in short ALS).pdfActive Learning Strategies (in short ALS).pdf
Active Learning Strategies (in short ALS).pdfPatidar M
 
TEACHER REFLECTION FORM (NEW SET........).docx
TEACHER REFLECTION FORM (NEW SET........).docxTEACHER REFLECTION FORM (NEW SET........).docx
TEACHER REFLECTION FORM (NEW SET........).docxruthvilladarez
 

Kürzlich hochgeladen (20)

4.16.24 21st Century Movements for Black Lives.pptx
4.16.24 21st Century Movements for Black Lives.pptx4.16.24 21st Century Movements for Black Lives.pptx
4.16.24 21st Century Movements for Black Lives.pptx
 
ANG SEKTOR NG agrikultura.pptx QUARTER 4
ANG SEKTOR NG agrikultura.pptx QUARTER 4ANG SEKTOR NG agrikultura.pptx QUARTER 4
ANG SEKTOR NG agrikultura.pptx QUARTER 4
 
AUDIENCE THEORY -CULTIVATION THEORY - GERBNER.pptx
AUDIENCE THEORY -CULTIVATION THEORY -  GERBNER.pptxAUDIENCE THEORY -CULTIVATION THEORY -  GERBNER.pptx
AUDIENCE THEORY -CULTIVATION THEORY - GERBNER.pptx
 
Oppenheimer Film Discussion for Philosophy and Film
Oppenheimer Film Discussion for Philosophy and FilmOppenheimer Film Discussion for Philosophy and Film
Oppenheimer Film Discussion for Philosophy and Film
 
GRADE 4 - SUMMATIVE TEST QUARTER 4 ALL SUBJECTS
GRADE 4 - SUMMATIVE TEST QUARTER 4 ALL SUBJECTSGRADE 4 - SUMMATIVE TEST QUARTER 4 ALL SUBJECTS
GRADE 4 - SUMMATIVE TEST QUARTER 4 ALL SUBJECTS
 
Daily Lesson Plan in Mathematics Quarter 4
Daily Lesson Plan in Mathematics Quarter 4Daily Lesson Plan in Mathematics Quarter 4
Daily Lesson Plan in Mathematics Quarter 4
 
THEORIES OF ORGANIZATION-PUBLIC ADMINISTRATION
THEORIES OF ORGANIZATION-PUBLIC ADMINISTRATIONTHEORIES OF ORGANIZATION-PUBLIC ADMINISTRATION
THEORIES OF ORGANIZATION-PUBLIC ADMINISTRATION
 
INTRODUCTION TO CATHOLIC CHRISTOLOGY.pptx
INTRODUCTION TO CATHOLIC CHRISTOLOGY.pptxINTRODUCTION TO CATHOLIC CHRISTOLOGY.pptx
INTRODUCTION TO CATHOLIC CHRISTOLOGY.pptx
 
HỌC TỐT TIẾNG ANH 11 THEO CHƯƠNG TRÌNH GLOBAL SUCCESS ĐÁP ÁN CHI TIẾT - CẢ NĂ...
HỌC TỐT TIẾNG ANH 11 THEO CHƯƠNG TRÌNH GLOBAL SUCCESS ĐÁP ÁN CHI TIẾT - CẢ NĂ...HỌC TỐT TIẾNG ANH 11 THEO CHƯƠNG TRÌNH GLOBAL SUCCESS ĐÁP ÁN CHI TIẾT - CẢ NĂ...
HỌC TỐT TIẾNG ANH 11 THEO CHƯƠNG TRÌNH GLOBAL SUCCESS ĐÁP ÁN CHI TIẾT - CẢ NĂ...
 
EMBODO Lesson Plan Grade 9 Law of Sines.docx
EMBODO Lesson Plan Grade 9 Law of Sines.docxEMBODO Lesson Plan Grade 9 Law of Sines.docx
EMBODO Lesson Plan Grade 9 Law of Sines.docx
 
Integumentary System SMP B. Pharm Sem I.ppt
Integumentary System SMP B. Pharm Sem I.pptIntegumentary System SMP B. Pharm Sem I.ppt
Integumentary System SMP B. Pharm Sem I.ppt
 
Dust Of Snow By Robert Frost Class-X English CBSE
Dust Of Snow By Robert Frost Class-X English CBSEDust Of Snow By Robert Frost Class-X English CBSE
Dust Of Snow By Robert Frost Class-X English CBSE
 
Activity 2-unit 2-update 2024. English translation
Activity 2-unit 2-update 2024. English translationActivity 2-unit 2-update 2024. English translation
Activity 2-unit 2-update 2024. English translation
 
Paradigm shift in nursing research by RS MEHTA
Paradigm shift in nursing research by RS MEHTAParadigm shift in nursing research by RS MEHTA
Paradigm shift in nursing research by RS MEHTA
 
Student Profile Sample - We help schools to connect the data they have, with ...
Student Profile Sample - We help schools to connect the data they have, with ...Student Profile Sample - We help schools to connect the data they have, with ...
Student Profile Sample - We help schools to connect the data they have, with ...
 
ROLES IN A STAGE PRODUCTION in arts.pptx
ROLES IN A STAGE PRODUCTION in arts.pptxROLES IN A STAGE PRODUCTION in arts.pptx
ROLES IN A STAGE PRODUCTION in arts.pptx
 
YOUVE_GOT_EMAIL_PRELIMS_EL_DORADO_2024.pptx
YOUVE_GOT_EMAIL_PRELIMS_EL_DORADO_2024.pptxYOUVE_GOT_EMAIL_PRELIMS_EL_DORADO_2024.pptx
YOUVE_GOT_EMAIL_PRELIMS_EL_DORADO_2024.pptx
 
ICS2208 Lecture6 Notes for SL spaces.pdf
ICS2208 Lecture6 Notes for SL spaces.pdfICS2208 Lecture6 Notes for SL spaces.pdf
ICS2208 Lecture6 Notes for SL spaces.pdf
 
Active Learning Strategies (in short ALS).pdf
Active Learning Strategies (in short ALS).pdfActive Learning Strategies (in short ALS).pdf
Active Learning Strategies (in short ALS).pdf
 
TEACHER REFLECTION FORM (NEW SET........).docx
TEACHER REFLECTION FORM (NEW SET........).docxTEACHER REFLECTION FORM (NEW SET........).docx
TEACHER REFLECTION FORM (NEW SET........).docx
 

Bottomupparser

  • 1. lSyntactic Analysis (Bottom-up Parsing)(Bottom up Parsing) Dr. P K Singh Dr P K Singh TCS 502 Compiler Design 1
  • 2. LR Parsers The most powerful shift-reduce parsing (yet efficient) is: LR(k) parsing. left to right right-most k lookhead scanning derivation (k is omitted it is 1) • LR parsing is attractive because: – LR parsing is most general non-backtracking shift-reduce parsing, yet it is still efficient. – The class of grammars that can be parsed using LR methods is a proper superset of the class of grammars that can be parsed with predictive parsers. LL(1)-Grammars ⊂ LR(1)-Grammars A LR d t t t ti it i ibl t d l ft– An LR-parser can detect a syntactic error as soon as it is possible to do so a left- to-right scan of the input. Dr P K Singh TCS 502 Compiler Design 2
  • 3. LR Parsers • LR-Parsers – covers wide range of grammarscovers wide range of grammars. – SLR – simple LR parser – LR – most general LR parserg p – LALR – intermediate LR parser (look-head LR parser) – SLR, LR and LALR work same (they used the same l ith ) l th i i t bl diff talgorithm), only their parsing tables are different. Dr P K Singh TCS 502 Compiler Design 3
  • 4. LR Parsing S a1 ... ai ... an $ stack input Sm Xm Sm-1 LR Parsing Algorithm output m 1 Xm-1 . Algorithm . S1 X1 Action Table terminals and $ s Goto Table non-terminal s 1 S0 t four different a actions t e s t each item is a a state number t e s Dr P K Singh TCS 502 Compiler Design 4 s s
  • 5. A Configuration of LR Parsing Algorithm • A configuration of a LR parsing is: ( S X S X S a a a $ )( So X1 S1 ... Xm Sm, ai ai+1 ... an $ ) Stack Rest of Inputp • Sm and ai decides the parser action by consulting the parsing action table (Initial Stack contains just S )parsing action table. (Initial Stack contains just So ) • A configuration of a LR parsing represents the right sentential form:sentential form: X1 ... Xm ai ai+1 ... an $ Dr P K Singh TCS 502 Compiler Design 5
  • 6. Actions of A LR-Parser 1. shift s -- shifts the next input symbol and the state s onto the stack ( So X1 S1 ... Xm Sm, ai ai+1 ... an $ ) ( So X1 S1 ... Xm Sm ai s, ai+1 ... an $ ) 2. reduce A→β (or rn where n is a production number) – pop 2|β| (=r) items from the stack; th h A d h t [ A]– then push A and s where s=goto[sm-r,A] ( So X1 S1 ... Xm Sm, ai ai+1 ... an $ ) ( So X1 S1 ... Xm-r Sm-r A s, ai ... an $ ) – Output is the reducing production reduce A→β 3. Accept – Parsing successfully completed3. Accept Parsing successfully completed 4. Error -- Parser detected an error (an empty entry in the action table) Dr P K Singh TCS 502 Compiler Design 6
  • 7. Reduce Action • pop 2|β| (=r) items from the stack; let us assume that β = Y1Y2...Yr th h A d h t [ A]• then push A and s where s=goto[sm-r,A] ( So X1 S1 ... Xm r Sm r Y1 Sm r ...Yr Sm, ai ai+1 ... an $ )( So X1 S1 ... Xm-r Sm-r Y1 Sm-r ...Yr Sm, ai ai+1 ... an $ ) ( So X1 S1 ... Xm-r Sm-r A s, ai ... an $ ) • In fact, Y1Y2...Yr is a handle. X1 ... Xm-r A ai ... an $ ⇒ X1 ... Xm Y1...Yr ai ai+1 ... an $ Dr P K Singh TCS 502 Compiler Design 7
  • 8. (SLR) Parsing Tables for Expression Grammar state id + * ( ) $ E T F 0 s5 s4 1 2 3 Action Table Goto Table 1) E → E+T 0 s5 s4 1 2 3 1 s6 acc 2 r2 s7 r2 r2 2) E → T 3) T → T*F 4) T F 3 r4 r4 r4 r4 4 s5 s4 8 2 3 5 r6 r6 r6 r6 4) T → F 5) F → (E) 6) F → id 6 s5 s4 9 3 7 s5 s4 10 8 s6 s11 6) F → id 9 r1 s7 r1 r1 10 r3 r3 r3 r3 11 r5 r5 r5 r5 Dr P K Singh TCS 502 Compiler Design 8
  • 9. Actions of A (S)LR-Parser -- Example stack input action output 0 id*id+id$ shift 5 0id5 *id+id$ reduce by F→id F→id 0F3 *id+id$ reduce by T→F T→F 0T2 *id+id$ shift 7 0T2*7 id+id$ shift 5 0T2*7id5 +id$ d b F id F id0T2*7id5 +id$ reduce by F→id F→id 0T2*7F10 +id$ reduce by T→T*F T→T*F 0T2 +id$ reduce by E→T E→T 0E1 +id$ shift 60E1 +id$ shift 6 0E1+6 id$ shift 5 0E1+6id5 $ reduce by F→id F→id 0E1+6F3 $ reduce by T→F T→F 0E1+6T9 $ reduce by E→E+T E→E+T 0E1 $ accept Dr P K Singh TCS 502 Compiler Design 9
  • 10. Constructing SLR Parsing Tables LR(0) It • An LR(0) item of a grammar G is a production of G a dot at the some position of the right side. LR(0) Item • Ex: A → aBb Possible LR(0) Items: A → .aBb (four different possibility) A → a.Bb A → aB.b A → aBb. • Sets of LR(0) items will be the states of action and goto table of the SLR parser.p • A collection of sets of LR(0) items (the canonical LR(0) collection) is the basis for constructing SLR parsers. A d G• Augmented Grammar: G’ is G with a new production rule S’→S where S’ is the new starting symbol. Dr P K Singh TCS 502 Compiler Design 10
  • 11. The Closure Operation • If I is a set of LR(0) items for a grammar G, then closure(I) is the set of LR(0) items constructed from I by the two rules: 1. Initially, every LR(0) item in I is added to closure(I). 2 If A → α Bβ is in closure(I) and B→γ is a production rule of G;2. If A → α.Bβ is in closure(I) and B→γ is a production rule of G; then B→.γ will be in the closure(I). We will apply this rule until no more new LR(0) items can be dd d t l (I)added to closure(I). Dr P K Singh TCS 502 Compiler Design 11
  • 12. The Closure Operation -- Example E’ → E closure({E’ → .E}) = E → E+T { E’ → .E kernel itemsE → E+T { E → .E kernel items E → T E → .E+T T → T*F E → .T T → F T → .T*F F → (E) T → .F F → id F → .(E) F → .id } Dr P K Singh TCS 502 Compiler Design 12
  • 13. Goto Operation • If I is a set of LR(0) items and X is a grammar symbol (terminal or non- terminal), then goto(I,X) is defined as follows: – If A → α.Xβ in I then every item in closure({A → αX.β}) will be in goto(I,X). Example: I ={ E’ → .E, E → .E+T, E → .T, T → .T*F, T → .F, F → .(E), F → .id } goto(I,E) = { E’ → E., E → E.+T } goto(I,T) = { E → T., T → T.*F } goto(I,F) = {T → F.} goto(I,() = { F → (.E), E → .E+T, E → .T, T → .T*F, T → .F, F → .(E), F → .id } goto(I,id) = { F → id.} Dr P K Singh TCS 502 Compiler Design 13
  • 14. Construction of The Canonical LR(0) Collection • To create the SLR parsing tables for a grammar G, we will create the canonical LR(0) collection of the grammar G’. • Algorithm:• Algorithm: C is { closure({S’→.S}) } repeat the followings until no more set of LR(0) items can be added to C. for each I in C and each grammar symbol X if goto(I,X) is not empty and not in C add goto(I,X) to Cadd goto(I,X) to C • goto function is a DFA on the sets in C. Dr P K Singh TCS 502 Compiler Design 14
  • 15. The Canonical LR(0) Collection -- Example I0: E’ → .E . I4: F → (.E) I7: T → T*.F E → .E+T E → .E+T F → .(E) E → .T E → .T F → .id T T*F T T*FT → .T*F T → .T*F . T → .F T → .F I8: F → (E.) F → .(E) F → .(E) E → E.+T F → .id F → .id I9: E → E+T. I1: E’ → E I5: F → id. T → T.*F E → E.+T I : E → E+ T I : T → T*FI6: E → E+.T I10: T → T*F I2: E → T. T → .T*F T → T.*F T → .F I11: F → (E). F → .(E) I3: T → F. F → .id Dr P K Singh TCS 502 Compiler Design 15
  • 16. Transition Diagram (DFA) of Goto Function I0 I1 I6 I9 to I7F E T *+ to I3 to I4 to I5 id ( F T I2 I I7 to I5 I10 t I * F F ( I3 I4 I8 to I4 to I5 E T ) id ( id I5 to I2 to I3 to I4 I11 to I6 + T F ( idid Dr P K Singh TCS 502 Compiler Design 16 to I4
  • 17. Constructing SLR Parsing Table (of an augumented grammar G’) 1. Construct the canonical collection of sets of LR(0) items for G’. C←{I0,...,In} 2. Create the parsing action table as follows • If a is a terminal, A→α.aβ in Ii and goto(Ii,a)=Ij then action[i,a] is shift j. • If A→α. is in Ii , then action[i,a] is reduce A→α for all a in FOLLOW(A)i , [ , ] ( ) where A≠S’. • If S’→S. is in Ii , then action[i,$] is accept. • If any conflicting actions generated by these rules, the grammar is not SLR(1). 3. Create the parsing goto table • for all non-terminals A, if goto(Ii,A)=Ij then goto[i,A]=j 4. All entries not defined by (2) and (3) are errors. 5 Initial state of the parser contains S’→ S Dr P K Singh TCS 502 Compiler Design 17 5. Initial state of the parser contains S →.S
  • 18. Parsing Tables of Expression Grammar state id + * ( ) $ E T F 0 5 4 1 2 3 Action Table Goto Table 0 s5 s4 1 2 3 1 s6 acc 2 r2 s7 r2 r2 3 r4 r4 r4 r4 4 s5 s4 8 2 3 5 r6 r6 r6 r65 r6 r6 r6 r6 6 s5 s4 9 3 7 s5 s4 10 8 6 118 s6 s11 9 r1 s7 r1 r1 10 r3 r3 r3 r3 Dr P K Singh TCS 502 Compiler Design 18 11 r5 r5 r5 r5
  • 19. SLR(1) Grammar • An LR parser using SLR(1) parsing tables for a grammar G is called as the SLR(1) parser for G. • If a grammar G has an SLR(1) parsing table, it is called SLR(1) grammar (or SLR grammar in short). • Every SLR grammar is unambiguous, but every unambiguous grammar is not a SLR grammar. Dr P K Singh TCS 502 Compiler Design 19
  • 20. shift/reduce and reduce/reduce conflicts • If a state does not know whether it will make a shift operation or reduction for a terminal, we say that there is a shift/reduce conflict. • If a state does not know whether it will make a reduction operation using the production rule i or j for a terminal, we say that there is a reduce/reduce conflict. • If the SLR parsing table of a grammar G has a conflict, we say that that grammar is not SLR grammar. Dr P K Singh TCS 502 Compiler Design 20
  • 21. Conflict Example (Shift-Reduce) S → L=R I0: S’ → .S I1:S’ → S. I6: S → L=.R S → R S → .L=R R → .L L→ *R S → .R I2: S → L.=R L→ .*R L → id L → .*R R → L. L → .id R → L L → .id R → .L I3: S → R. I7: L → *R. I4: L → *.R I8: R → L. Problem R → .L FOLLOW(R)={=,$} L→ .*R I9: S → L=R.FOLLOW(R) { ,$} L→ . R I9: S → L R. = shift 6 L → .id reduce by R → L shift/reduce conflict I5: L → id. Action[2,=] = shift 6 Action[2,=] = reduce by R → L Dr P K Singh TCS 502 Compiler Design 21 [ S ⇒L=R ⇒*R=R] so follow(R) contains, =
  • 22. Conflict Example2 (Reduce-Reduce) S → AaAb I0: S’ → .S S → BbBa S → .AaAb A → ε S → .BbBa B → ε A → . B → . Problem FOLLOW(A)={a,b}( ) { , } FOLLOW(B)={a,b} a reduce by A → ε b reduce by A → ε reduce by B → ε reduce by B → εy y reduce/reduce conflict reduce/reduce conflict Dr P K Singh TCS 502 Compiler Design 22
  • 23. Constructing Canonical LR(1) Parsing Tables • In SLR method, the state i makes a reduction by A→α when the current token is a: – if the A→α. in the Ii and a is FOLLOW(A)i ( ) • In some situations, βA cannot be followed by the terminal a in a right- sentential form when βα and the state i are on the top stack This means thatsentential form when βα and the state i are on the top stack. This means that making reduction in this case is not correct. S → AaAb S⇒AaAb⇒Aab⇒ab S⇒BbBa⇒Bba⇒baS → AaAb S⇒AaAb⇒Aab⇒ab S⇒BbBa⇒Bba⇒ba S → BbBa A → ε Aab ⇒ ε ab Bba ⇒ ε ba B → ε AaAb ⇒ Aa ε b BbBa ⇒ Bb ε a Dr P K Singh TCS 502 Compiler Design 23
  • 24. LR(1) Item • To avoid some of invalid reductions, the states need to carry more information. • Extra information is put into a state by including a terminal symbol as a second component in an item. • A LR(1) item is: A → α.β,a where a is the look-head of the LR(1) item (a is a terminal or end-marker.) • Such an object is called LR(1) item. 1 f t th l th f th d t– 1 refers to the length of the second component – The lookahead has no effect in an item of the form [A → α.β,a], where β is not ∈. But an item of the form [A → α a] calls for a reduction by A → α only if the– But an item of the form [A → α.,a] calls for a reduction by A → α only if the next input symbol is a. – The set of such a’s will be a subset of FOLLOW(A), but it could be a proper subset. Dr P K Singh TCS 502 Compiler Design 24 subset
  • 25. LR(1) Item (cont.) • When β ( in the LR(1) item A → α.β,a ) is not empty, the look- head does not have any affect. • When β is empty (A → α.,a ), we do the reduction by A→α only if the next input symbol is a (not for any terminal in FOLLOW(A)). • A state will contain A → α.,a1 where {a1,...,an} ⊆ FOLLOW(A) ... A → α.,an Dr P K Singh TCS 502 Compiler Design 25
  • 26. Canonical Collection of Sets of LR(1) Items • The construction of the canonical collection of the sets of LR(1) items are similar to the construction of the canonical collection of the sets of LR(0) items except that closure and goto operations work a little bit differentitems, except that closure and goto operations work a little bit different. closure(I) is: ( where I is a set of LR(1) items)closure(I) is: ( where I is a set of LR(1) items) – every LR(1) item in I is in closure(I) – if A→α.Bβ,a in closure(I) and B→γ is a production rule of G; then B→.γ,b will be in the closure(I) for each terminal b in FIRST(βa) . Dr P K Singh TCS 502 Compiler Design 26
  • 27. goto operation • If I is a set of LR(1) items and X is a grammar symbol (terminal or non-terminal), then goto(I,X) is defined as follows:or non terminal), then goto(I,X) is defined as follows: – If A → α.Xβ,a in I then every item in closure({A → αX.β,a}) will be iny ({ β, }) goto(I,X). Dr P K Singh TCS 502 Compiler Design 27
  • 28. Construction of The Canonical LR(1) Collection • Algorithm: C is { closure({S’→.S,$}) }{ ({ ,$}) } repeat the followings until no more set of LR(1) items can be added to C. for each I in C and each grammar symbol Xfor each I in C and each grammar symbol X if goto(I,X) is not empty and not in C add goto(I,X) to C • goto function is a DFA on the sets in C. Dr P K Singh TCS 502 Compiler Design 28
  • 29. A Short Notation for The Sets of LR(1) Items • A set of LR(1) items containing the following items A → α.β aA → α.β,a1 ... A → α.β,anA → α.β,an can be written as A → α.β, a1/a2/.../an Dr P K Singh TCS 502 Compiler Design 29
  • 30. An Example 1. S’ → S 2. S → C C 3 C C I0: closure({(S’ → • S, $)}) = (S’ → • S, $) 3. C → c C 4. C → d ( , ) (S → • C C, $) (C → • c C, c/d) (C → • d c/d) I3: goto(I1, c) = (C → c • C, c/d) (C → • c C c/d)(C → • d, c/d) I1: goto(I1, S) = (S’ → S • , $) (C → • c C, c/d) (C → • d, c/d) I2: goto(I1, C) = (S → C • C, $) I4: goto(I1, d) = (C → d •, c/d) ( , ) (C → • c C, $) (C → • d, $) I5: goto(I3, C) = (S → C C •, $) Dr. P K Singh TCS 502 Compiler Design slide30
  • 31. (S’ → S • , $ S’ → • S, $ S → • C C, $ C → • c C, c/d S I1 S → C • C, $ C → • c C, $ C → • d $ S → C C •, $ , C → • d, c/d C CI0 I5 C C → • d, $ C → c • C, $ c I2 I6 CC → c C, $ C → • c C, $ C → • d, $ C → cC •, $ c I I9 d C → c • C, c/d C → d •, $ c d c C I7 IC → c C, c/d C → • c C, c/d C → • d, c/d C → c C •, c/d c C I3 I8 d Dr. P K Singh TCS 502 Compiler Design slide31 C → d •, c/d d I4 d
  • 32. An Example I6: goto(I3, c) = (C C $) : goto(I4, c) = I4 (C → c • C, $) (C → • c C, $) (C → • d, $) : goto(I4, d) = I5 ( ) I7: goto(I3, d) = (C → d • $) I9: goto(I7, c) = (C → c C •, $) (C → d •, $) I8: goto(I4, C) = (C C /d) : goto(I7, c) = I7 (I d) I(C → c C •, c/d) : goto(I7, d) = I8 Dr. P K Singh TCS 502 Compiler Design slide32
  • 33. Construction of LR(1) Parsing Tables 1 Construct the canonical collection of sets of LR(1) items for G’1. Construct the canonical collection of sets of LR(1) items for G . C←{I0,...,In} 2. Create the parsing action table as follows • If a is a terminal, A→α.aβ,b in Ii and goto(Ii,a)=Ij then action[i,a] is shift j. • If A→α.,a is in Ii , then action[i,a] is reduce A→α where A≠S’. • If S’→S.,$ is in Ii , then action[i,$] is accept. • If any conflicting actions generated by these rules, the grammar is not LR(1). 3. Create the parsing goto table • for all non-terminals A, if goto(Ii,A)=Ij then goto[i,A]=j 4. All entries not defined by (2) and (3) are errors. 5. Initial state of the parser contains S’→.S,$ Dr. P K Singh TCS 502 Compiler Design slide33 5. Initial state of the parser contains S →.S,$
  • 34. An Example c d $ S C 0 3 4 1 20 s3 s4 g1 g2 1 a 2 s6 s7 g5 3 s3 s4 g8 4 r3 r3 5 r15 r1 6 s6 s7 g9 7 r3 8 2 28 r2 r2 9 r2 Dr. P K Singh TCS 502 Compiler Design slide34
  • 35. The Core of LR(1) Items • The core of a set of LR(1) Items is the set of their first components (i.e., LR(0) items) • The core of the set of LR(1) items• The core of the set of LR(1) items { (C → c • C, c/d), (C → • c C, c/d), (C → • d, c/d) } is { C → c • C, C → • c C, C → • d }C → • d } Dr. P K Singh TCS 502 Compiler Design slide35
  • 36. Canonical LR(1) Collection -- Example S → AaAb I0:S’ → .S ,$ I1: S’ → S. ,$ S → BbBa S → .AaAb ,$ S A a IA → ε S → .BbBa ,$ I2: S → A.aAb ,$ B → ε A → . ,a B → . ,b I3: S → B.bBa ,$ B a b to I4 to I5 3 I4: S → Aa.Ab ,$ I6: S → AaA.b ,$ I8: S → AaAb. ,$ A → b A a A → . ,b I5: S → Bb.Ba ,$ I7: S → BbB.a ,$ I9: S → BbBa. ,$B b B → . ,a Dr P K Singh TCS 502 Compiler Design 36
  • 37. Canonical LR(1) Collection – Example2 S’ → S 1) S → L=R I0:S’ → .S,$ S → .L=R,$ I1:S’ → S.,$ I4:L → *.R,$/= R → .L,$/= to I7 I S L R * 2) S → R 3) L→ *R 4) L → id S → .R,$ L → .*R,$/= L → .id,$/= I2:S → L.=R,$ R → L.,$ I :S → R $ L→ .*R,$/= L → .id,$/= I L id $/ to I6 to I8 to I4 to I5 L R id id * 5) R → L R → .L,$ I3:S → R.,$ I5:L → id.,$/= I9:S → L=R.,$ I :L → *R $R I6:S → L=.R,$ R → .L,$ L → .*R,$ L → id $ I10:R → L.,$ I11:L → *.R,$ I13:L → *R.,$ to I10 to I11 to I9 to I13 L R R * I4 and I11 L → .id,$ I7:L → *R.,$/= 11 , R → .L,$ L→ .*R,$ L → .id,$ to I12 to I10 to I11 to I13 id id L * I5 and I12 I7 and I13 Dr P K Singh TCS 502 Compiler Design 37 I8: R → L.,$/= I12:L → id.,$ to I12 id I8 and I10
  • 38. LR(1) Parsing Tables – (for Example2) id * = $ S L R 0 s5 s4 1 2 3 1 acc 2 s6 r5 3 r2 4 s5 s4 8 7 5 r4 r4 6 s12 s11 10 9 7 r3 r3 no shift/reduce or no reduce/reduce conflict ⇓7 r3 r3 8 r5 r5 9 r1 10 r5 ⇓ so, it is a LR(1) grammar 10 r5 11 s12 s11 10 13 12 r4 13 r3 Dr P K Singh TCS 502 Compiler Design 38 13 r3
  • 39. LALR Parsing Tables • LALR stands for LookAhead LR. • LALR parsers are often used in practice because LALR parsing tables are• LALR parsers are often used in practice because LALR parsing tables are smaller than LR(1) parsing tables. • The number of states in SLR and LALR parsing tables for a grammar G areThe number of states in SLR and LALR parsing tables for a grammar G are equal. • But LALR parsers recognize more grammars than SLR parsers.p g g p • yacc creates a LALR parser for the given grammar. A t t f LALR ill b i t f LR(1) it• A state of LALR parser will be again a set of LR(1) items. Dr P K Singh TCS 502 Compiler Design 39
  • 40. Creating LALR Parsing Tables Canonical LR(1) Parser LALR Parser( ) shrink # of states • This shrink process may introduce a reduce/reduce conflict in th lti LALR ( th i NOT LALR)the resulting LALR parser (so the grammar is NOT LALR) • But, this shrink process does not produce a shift/reduce conflict. Dr P K Singh TCS 502 Compiler Design 40
  • 41. The Core of A Set of LR(1) Items • The core of a set of LR(1) items is the set of its first component. Ex: S → L.=R,$ S → L.=R Core R → L.,$ R → L. • We will find the states (sets of LR(1) items) in a canonical LR(1) parser with same cores. Then we will merge them as a single state. I1:L → id.,= A new state: I12: L → id.,= L id $L → id.,$ I2:L → id.,$ have same core, merge them • We will do this for all states of a canonical LR(1) parser to get the states of the LALRWe will do this for all states of a canonical LR(1) parser to get the states of the LALR parser. • In fact, the number of the states of the LALR parser for a grammar will be equal to the number of states of the SLR parser for that grammar. Dr P K Singh TCS 502 Compiler Design 41
  • 42. Creation of LALR Parsing Tables • Create the canonical LR(1) collection of the sets of LR(1) items for the given grammar. • For each core present; find all sets having that same core; replace those sets havingFor each core present; find all sets having that same core; replace those sets having same cores with a single set which is their union. C={I0,...,In} C’={J1,...,Jm} where m ≤ n C h i bl ( i d bl ) h i f h• Create the parsing tables (action and goto tables) same as the construction of the parsing tables of LR(1) parser. Note that: If J=I1 ∪ ... ∪ Ik since I1,...,Ik have same cores cores of goto(I1,X),...,goto(I2,X) must be same. So, goto(J,X)=K where K is the union of all sets of items having same cores as goto(I1,X). • If no conflict is introduced, the grammar is LALR(1) grammar. (We may only introduce reduce/reduce conflicts; we cannot introduce a shift/reduce conflict) Dr. P K Singh TCS 502 Compiler Design slide42
  • 43. (S’ → S • , $ S’ → • S, $ S → • C C, $ C → • c C, c/d S I1 S → C • C, $ C → • c C, $ C → • d $ S → C C •, $ , C → • d, c/d C CI0 I5 C C → • d, $ C → c • C, $ c I2 I6 CC → c C, $ C → • c C, $ C → • d, $ C → cC •, $ c I I9 d C → c • C, c/d C → d •, $ c d c C I7 I d C → c C, c/d C → • c C, c/d C → • d, c/d C → c C •, c/d c C I3 I8 d Dr. P K Singh TCS 502 Compiler Design slide43 C → d •, c/d d I4 d
  • 44. (S’ → S • , $ S’ → • S, $ S → • C C, $ C → • c C, c/d S I1 S → C • C, $ C → • c C, $ C → • d $ S → C C •, $ , C → • d, c/d C CI0 I5 C C → • d, $ C → c • C, $ c I2 I6 CC → c C, $ C → • c C, $ C → • d, $ c I d C → c • C, c/d C → d •, $ c d c C I7 I d C → c C, c/d C → • c C, c/d C → • d, c/d C → c C •, c/d/$ c C I3 I89 d Dr. P K Singh TCS 502 Compiler Design slide44 C → d •, c/d d I4 d
  • 45. (S’ → S • , $ S’ → • S, $ S → • C C, $ C → • c C, c/d S I1 S → C • C, $ C → • c C, $ C → • d $ S → C C •, $ , C → • d, c/d C CI0 I5 C C → • d, $ C → c • C, $ c I2 I6 d CC → c C, $ C → • c C, $ C → • d, $ c I d C → c • C, c/d C → d •, c/d/$ c d c C I47 I d dC → c C, c/d C → • c C, c/d C → • d, c/d C → c C •, c/d/$ c C I3 I89 Dr. P K Singh TCS 502 Compiler Design slide45
  • 46. (S’ → S • , $ S’ → • S, $ S → • C C, $ C → • c C, c/d S I1 S → C • C, $ C → • c C, $ C → • d $ S → C C •, $ , C → • d, c/d C CI0 I5 C C → • d, $ C → c • C, c/d/$ c I2 I36 CC → • c C,c/d/$ C → • d,c/d/$ c I d c C → d •, c/d/$ d d I47 I d C → c C •, c/d/$ d I89 Dr. P K Singh TCS 502 Compiler Design slide46
  • 47. LALR Parse Table c d $ S Cc d $ S C 0 s36 s47 1 2 1 acc 2 s36 s47 5 36 s36 s47 89 47 r3 r3 r347 r3 r3 r3 5 r1 89 r2 r2 r2 Dr. P K Singh TCS 502 Compiler Design slide47
  • 48. Creation of LALR Parsing Tables • Create the canonical LR(1) collection of the sets of LR(1) items for the given grammar. • Find each core; find all sets having that same core; replace those setsd eac co e; d a sets a g t at sa e co e; ep ace t ose sets having same cores with a single set which is their union. C={I0,...,In} C’={J1,...,Jm} where m ≤ n • Create the parsing tables (action and goto tables) same as the construction of the parsing tables of LR(1) parser. – Note that: If J=I1 ∪ ... ∪ Ik since I1,...,Ik have same cores cores of goto(I1,X),...,goto(I2,X) must be same. – So, goto(J,X)=K where K is the union of all sets of items having same cores as goto(I1,X). • If no conflict is introduced, the grammar is LALR(1) grammar. (We may only introduce reduce/reduce conflicts; we cannot introduce a shift/reduce conflict) Dr P K Singh TCS 502 Compiler Design 48 conflict)
  • 49. Shift/Reduce Conflict f / f• We say that we cannot introduce a shift/reduce conflict during the shrink process for the creation of the states of a LALR parser. • Assume that we can introduce a shift/reduce conflict In this case• Assume that we can introduce a shift/reduce conflict. In this case, a state of LALR parser must have: A → α.,a and B → β.aγ,bA → α.,a and B → β.aγ,b • This means that a state of the canonical LR(1) parser must have: A → α a and B → β aγ cA → α.,a and B → β.aγ,c But, this state has also a shift/reduce conflict. i.e. The original canonical LR(1) parser has a conflict.( ) p (Reason for this, the shift operation does not depend on lookaheads) Dr P K Singh TCS 502 Compiler Design 49
  • 50. Reduce/Reduce Conflict • But, we may introduce a reduce/reduce conflict during the shrink process for the creation of the states of ap LALR parser. I1 : A → α.,a I2: A → α.,b B → β.,b B → β.,c ⇓⇓ I12: A → α.,a/b reduce/reduce conflict B → β.,b/c Dr P K Singh TCS 502 Compiler Design 50
  • 51. Parser Construction with YACC YaccYacc S ifi ti y tab c CompilerSpecification Spec.y y.tab.c C Compilery.tab.c a.out a.outInput outputpu programs Dr P K Singh TCS 502 Compiler Design 51
  • 52. Working with Lex Yaccparse y y.tab.c (yyparse) Compiler parse.y (yyparse) C compilery.tab.h (with –d) a.out Lexscan.l lex.yy.c (yylex) a.out source outputa.out program Dr P K Singh TCS 502 Compiler Design 52
  • 53. Working with Lex Yacc Compiler parse.y y.tab.c (yyparse) C t l C compiler a.out Included Lexscan.l lex.yy.c a.out source program output Dr P K Singh TCS 502 Compiler Design 53
  • 54. Yacc format Overall structure Declarations A yacc program consists of three parts: %% <- Part separator translation rules %%%% User functions Dr P K Singh TCS 502 Compiler Design 54
  • 55. Declarations • As with Lex, you can include C statements in the declarations section (for example #include( p statements, and declarations of temporary variables that will be used in the user-routines). These should be surrounded by %{ and %}be surrounded by %{ and %}. • But more importantly, you can declare the grammar tokens, for example:, p %token DIGIT %token OPERATOR%token OPERATOR etc.. Dr P K Singh TCS 502 Compiler Design 55
  • 56. Translation rules • Translation rules have the format Grammar Production Rule1 {semantic action1} G P d i R l 2 { i i 2}Grammar Production Rule2 {semantic action2} … • For example for the grammar rule E > Digit OP Digit• For example, for the grammar rule E -> Digit OP Digit E : DIGIT OP DIGIT { printf(“Expression!n”); } • The semantic value associated with a token is denoted by $XThe semantic value associated with a token is denoted by $X, where X is the position of the token in the Expression For example, $1 is the first digit’s value, and $3 is the third’s $$ is the resulting value for the non-terminal on the left of the expression Dr P K Singh TCS 502 Compiler Design 56
  • 57. User Functions The third part can be used to provide auxiliary user functions that the translation rules use; these will befunctions that the translation rules use; these will be simply copied along to the generated code %%%% void CreateARMHeader(void) { printf(“For example, I can write to a file an ARM program header n”); }} Dr P K Singh TCS 502 Compiler Design 57
  • 58. Yacc examples ll l l l f l The grammar we need: We will construct a simple calculator for evaluating arithmetic expressions E -> E + T | T T -> T * F | F F -> (E) | digit %token DIGIT%token DIGIT %% Line : Expr ‘n’ {printf(“%dn”,$1); return(1);} ; Expr : Expr ‘+’ Term {$$ = $1 + $3;}Expr : Expr + Term {$$ = $1 + $3;} | Term ; Term : Term ‘*’ Factor {$$ = $1 * $3} | Factor| Factor ; Factor : ‘(‘ expr ‘)’ {$$ = $2;} : DIGIT ; Dr P K Singh TCS 502 Compiler Design 58 ;
  • 59. Yacc examples %{%{ #include <ctype.h> %} %token DIGIT %% Line : Expr ‘n’ {printf(“%dn”,$1); return(1);}Line : Expr n {printf( %dn ,$1); return(1);} ; Expr : Expr ‘+’ Term {$$ = $1 + $3;} | Term ; Term : Term ‘*’ Factor {$$ = $1 * $3} | Factor ; Factor : ‘(‘ expr ‘)’ {$$ = $2;} : DIGIT ; %%%% yylex() { int c; c= getchar(); if(isdigit(c)){ yylval=c-’0’;yy ; return DIGIT; } return c; } Dr P K Singh TCS 502 Compiler Design 59
  • 60. Yacc examples( ambiguous Grammar ) %{%{ #include <ctype.h> #include <stdio.h> #define YYSTYPE double %} %token NUM%token NUM %left ‘+’ ‘-’ %left ‘*’ ‘/’ %% line : line Expr ‘n’ {printf(“nt Answer = %gn”,$2); } | line ‘n’ | ; Expr : Expr ‘+’ Expr {$$ = $1 + $3;} | Expr ‘-’ Expr {$$ = $1 - $3;} | Expr ‘/’ Expr {$$ = $1 / $3;} | Expr ‘*’ Expr {$$ = $1 * $3;}| Expr * Expr {$$ = $1 * $3;} |‘(‘ expr ‘)’ {$$ = $2;} |NUM ; %% yylex() {yy () { int c; while((c= getchar()==‘ ‘); if((c==‘.’||(isdigit(c))){ ungetc(c,stdin); scanf(“%lf”,&yylval); Dr P K Singh TCS 502 Compiler Design 60 return NUM; } return c; }
  • 61. yylex() (Through Lex) calc.l NUM [0-9]+.?| [0-9]*.[0-9]+ %% [ ] {NUM} {sscanf(yytext,”%lf”, &yylval); return NUM;}return NUM;} n|. {return yytext[0];} Dr P K Singh TCS 502 Compiler Design 61
  • 62. Yacc examples( with Lex) %{%{ #include <ctype.h> #include <stdio.h> #define YYSTYPE double %}%} %token NUM %left ‘+’ ‘-’ %left ‘*’ ‘/’ %%%% line : line Expr ‘n’ {printf(“nt Answer = %gn”,$2); } | line ‘n’ | ; Expr : Expr ‘+’ Expr {$$ = $1 + $3;} | Expr ‘-’ Expr {$$ = $1 - $3;} | Expr ‘/’ Expr {$$ = $1 / $3;} | Expr ‘*’ Expr {$$ $1 * $3;}| Expr ‘*’ Expr {$$ = $1 * $3;} |‘(‘ expr ‘)’ {$$ = $2;} |NUM ; %% Dr P K Singh TCS 502 Compiler Design 62 %% #include “lex.yy.c”
  • 63. Canonical LALR(1) Collection – Example2 S’ → S 1) S → L=R I0:S’ → .S,$ S → .L=R,$ I1:S’ → S.,$ I411:L → *.R,$/= R → .L,$/= to I713 I S L R * 2) S → R 3) L→ *R 4) L → id S → .R,$ L → .*R,$/= L → .id,$/= I2:S → L.=R,$ R → L.,$ I :S → R $ L→ .*R,$/= L → .id,$/= I L id $/ to I6 to I810 to I411 to I512 L R id id * 5) R → L R → .L,$ I3:S → R.,$ I512:L → id.,$/= I :S → L=R $R I6:S → L=.R,$ R → .L,$ L → .*R,$ L → .id $ I9:S → L=R.,$ to I810 to I411 to I9 L R * Same Cores I4 and I11 I and IL → .id,$ I713:L → *R.,$/= to I512 id I5 and I12 I7 and I13 I d I Dr P K Singh TCS 502 Compiler Design 63 I810: R → L.,$/= I8 and I10
  • 64. LALR(1) Parsing Tables – (for Example2) id * = $ S L R 0 s5 s4 1 2 3 1 acc 2 s6 r5 3 r2 4 s5 s4 8 7 5 r4 r4 6 s12 s11 10 9 7 r3 r3 no shift/reduce or no reduce/reduce conflict ⇓7 r3 r3 8 r5 r5 9 r1 ⇓ so, it is a LALR(1) grammar Dr P K Singh TCS 502 Compiler Design 64
  • 65. Using Ambiguous Grammars • All grammars used in the construction of LR-parsing tables must be un-ambiguous. • Can we create LR-parsing tables for ambiguous grammars ? – Yes, but they will have conflicts., y – We can resolve these conflicts in favor of one of them to disambiguate the grammar. – At the end, we will have again an unambiguous grammar. h b• Why we want to use an ambiguous grammar? – Some of the ambiguous grammars are much natural, and a corresponding unambiguous grammar can be very complex. Usage of an ambiguous grammar may eliminate unnecessary– Usage of an ambiguous grammar may eliminate unnecessary reductions. • Ex. E → E+T | T Dr P K Singh TCS 502 Compiler Design 65 E → E+T | T E → E+E | E*E | (E) | id T → T*F | F F → (E) | id
  • 66. Sets of LR(0) Items for Ambiguous Grammar I0: E’ → .E E → .E+E E → E*E I1: E’ → E. E → E .+E E → E *E I4: E → E +.E E → .E+E E → E*E I7: E → E+E. E → E.+E E → E *E I5 EE ++ *( I I4 E → .E*E E → .(E) E → .id E → E .*E E → .E*E E → .(E) E → .id E → E.*E * ( ( id I2 I3 I2: E → (.E) E → .E+E I5: E → E *.E E → .E+E E → .E*E E → (E) I8: E → E*E. E → E.+E E → E.*E E + * ( ( id I2 I3 I4 I5 E → .E*E E → .(E) E → .id E → .(E) E → .id I6: E → (E.) I9: E → (E).) E id id I3 I3: E → id. I6: E → (E.) E → E.+E E → E.*E I9: E → (E).+ * I4 I5 Dr P K Singh TCS 502 Compiler Design 66
  • 67. SLR-Parsing Tables for Ambiguous Grammar FOLLOW(E) = { $,+,*,) } State I7 has shift/reduce conflicts for symbols + and *State I7 has shift/reduce conflicts for symbols + and . I0 I1 I7I4 E+E when current token is + shift + is right-associative reduce + is left-associative when current token is *when current token is * shift * has higher precedence than + reduce + has higher precedence than * Dr P K Singh TCS 502 Compiler Design 67
  • 68. SLR-Parsing Tables for Ambiguous Grammar FOLLOW(E) = { $,+,*,) } State I8 has shift/reduce conflicts for symbols + and *State I8 has shift/reduce conflicts for symbols + and . I0 I1 I7I5 E*E when current token is * shift * is right-associative reduce * is left-associative when current token is +when current token is + shift + has higher precedence than * reduce * has higher precedence than + Dr P K Singh TCS 502 Compiler Design 68
  • 69. SLR-Parsing Tables for Ambiguous Grammar id + * ( ) $ E Action Goto 0 s3 s2 1 1 s4 s5 acc 2 s3 s2 6 3 r4 r4 r4 r4 4 s3 s2 74 s3 s2 7 5 s3 s2 8 6 s4 s5 s96 s4 s5 s9 7 r1 s5 r1 r1 8 r2 r2 r2 r2 Dr P K Singh TCS 502 Compiler Design 69 8 r2 r2 r2 r2 9 r3 r3 r3 r3
  • 70. Error Recovery in LR Parsing • An LR parser will detect an error when it consults the parsing action table and finds an error entry. All emptyp g y p y entries in the action table are error entries. • Errors are never detected by consulting the goto table. • An LR parser will announce error as soon as there is no valid continuation for the scanned portion of the input. • A canonical LR parser (LR(1) parser) will never make• A canonical LR parser (LR(1) parser) will never make even a single reduction before announcing an error. • The SLR and LALR parsers may make several reductions before announcing an error. • But, all LR parsers (LR(1), LALR and SLR parsers) will never shift an erroneous input symbol onto the stack Dr P K Singh TCS 502 Compiler Design 70 never shift an erroneous input symbol onto the stack.
  • 71. Panic Mode Error Recovery in LR Parsing • Scan down the stack until a state s with a goto on a particular nonterminal A is found. (Get rid of everythingp ( y g from the stack before this state s). • Discard zero or more input symbols until a symbol a is found that can legitimately follow Afound that can legitimately follow A. – The symbol a is simply in FOLLOW(A), but this may not work for all situations. h k h l d h• The parser stacks the nonterminal A and the state goto[s,A], and it resumes the normal parsing. • This nonterminal A is normally is a basic programming• This nonterminal A is normally is a basic programming block (there can be more than one choice for A). – stmt, expr, block, ... Dr P K Singh TCS 502 Compiler Design 71
  • 72. Phrase-Level Error Recovery in LR Parsingg • Each empty entry in the action table is marked with a specific error routine.p • An error routine reflects the error that the user most likely will make in that case. • An error routine inserts the symbols into the stack or the input (or it deletes the symbols from the stack and the input, or it can do both insertion and deletion).p , ) – missing operand – unbalanced right parenthesis Dr P K Singh TCS 502 Compiler Design 72
  • 73. Creating an LALR(1) Parser with Yacc/Bison Yacc or Bison yacc specification y tab c compiler specification yacc.y y.tab.c y.tab.c C compiler a.out input stream a.out output stream 73 stream stream
  • 74. Yacc Specification • A yacc specification consists of three parts: yacc declarations, and C declarations within %{ %} %% translation rules %% user-defined auxiliary procedures • The translation rules are productions with actions: production1 { semantic action1 }p 1 { 1 } production2 { semantic action2 } … productionn { semantic actionn }p oduct o n { se a t c act o n } 74
  • 75. Writing a Grammar in Yacc • Productions in Yacc are of the form Nonterminal : tokens/nonterminals {/ { action } | tokens/nonterminals { action } … ; • Tokens that are single characters can be usedTokens that are single characters can be used directly within productions, e.g. ‘+’ • Named tokens must be declared first in the declaration part using %token TokenName 75
  • 76. Synthesized Attributes • Semantic actions may refer to values of the synthesized attributes of terminals andsynthesized attributes of terminals and nonterminals in a production: X : Y1 Y2 Y3 … Yn { action } $$ f t th l f th tt ib t f X– $$ refers to the value of the attribute of X – $i refers to the value of the attribute of Yi • For example• For example factor : ‘(’ expr ‘)’ { $$=$2; } factor.val=x $$ $ 76 expr.val=x )( $$=$2
  • 77. Example 1 %{ #include <ctype.h> %} %token DIGIT %% line : expr ‘n’ { printf(“%dn” $1); } Also results in definition of #define DIGIT xxx line : expr ‘n’ { printf( %dn , $1); } ; expr : expr ‘+’ term { $$ = $1 + $3; } | term { $$ = $1; } ;; term : term ‘*’ factor { $$ = $1 * $3; } | factor { $$ = $1; } ; factor : ‘(’ expr ‘)’ { $$ = $2; }factor : ( expr ) { $$ = $2; } | DIGIT { $$ = $1; } ; %% int yylex() Att ib t f t k Attribute of term (parent) Attribute of factor (child) int yylex() { int c = getchar(); if (isdigit(c)) { yylval = c-’0’; return DIGIT; Attribute of token (stored in yylval) term (parent) Example of a very crude lexical l i k d b th 77 return DIGIT; } return c; } analyzer invoked by the parser
  • 78. Dealing With Ambiguous Grammars • By defining operator precedence levels and left/right associativity of the operators we canleft/right associativity of the operators, we can specify ambiguous grammars in Yacc, such as E → E+E | E-E | E*E | E/E | (E) | -E | num| | | / | ( ) | | • To define precedence levels and associativity in Yacc’s declaration part: %left ‘+’ ‘-’ %left ‘*’ ‘/’ % i ht UMINUS%right UMINUS 78
  • 79. Example 2 %{ #include <ctype.h> #include <stdio.h> #define YYSTYPE double Double type for attributes and yylval #define YYSTYPE double %} %token NUMBER %left ‘+’ ‘-’ %left ‘*’ ‘/’%left * / %right UMINUS %% lines : lines expr ‘n’ { printf(“%gn”, $2); } | lines ‘n’| lines n | /* empty */ ; expr : expr ‘+’ expr { $$ = $1 + $3; } | expr ‘-’ expr { $$ = $1 - $3; }| expr - expr { $$ = $1 - $3; } | expr ‘*’ expr { $$ = $1 * $3; } | expr ‘/’ expr { $$ = $1 / $3; } | ‘(’ expr ‘)’ { $$ = $2; } | ‘-’ expr %prec UMINUS { $$ = -$2; } 79 | - expr %prec UMINUS { $$ = -$2; } | NUMBER ; %%
  • 80. Example 2 (cont’d) %% int yylex() { int c; while ((c = getchar()) == ‘ ‘) ; if ((c == ‘.’) || isdigit(c)) Crude lexical analyzer for f d bl d i h i{ ungetc(c, stdin); scanf(“%lf”, &yylval); return NUMBER; } fp doubles and arithmetic operators return c; } int main() { if (yyparse() != 0) fprintf(stderr, “Abnormal exitn”); return 0; } int yyerror(char *s) Run the parser Invoked by parser 80 { fprintf(stderr, “Error: %sn”, s); } Invoked by parser to report parse errors
  • 81. Combining Lex/Flex with Yacc/Bison Yacc or Bison compiler yacc specification yacc.y y.tab.c y.tab.h Lex or Flex compiler Lex specification lex.l and token definitions lex.yy.c lex.yy.c C a out compilerand token definitions y.tab.h lex.yy.c y.tab.c compiler a.out 81 input stream a.out output stream
  • 82. Lex Specification for Example 2 %option noyywrap %{ #include “y.tab.h” Generated by Yacc, contains #define NUMBER xxx extern double yylval; %} number [0-9]+.?|[0-9]*.[0-9]+ %% # Defined in y.tab.c %% [ ] { /* skip blanks */ } {number} { sscanf(yytext, “%lf”, &yylval); return NUMBER; }} n|. { return yytext[0]; } yacc -d example2.y lex example2.l bison -d -y example2.y flex example2.l 82 gcc y.tab.c lex.yy.c ./a.out gcc y.tab.c lex.yy.c ./a.out