Unit 3 Parsing Methods
Unit 3 Parsing Methods
Unit-3
Parsing Methods
Outline
• Top Down Parsing: Recursive-Descent Parsing, FIRST and FOLLOW, LL(1) grammar
• Non-recursive Predictive Parsing
• Construction of Non-recursive Predictive Parsing Table
• Error Recovery in Predictive Parsing
• Bottom-up Parsing: Shift-Reduce Parsing, Conflicts during Shift-Reduce Parsing
• Introduction to LR Parsing, L-R Parsing Algorithm, Viable Prefixes
• Simple LR Parser (SLR), Construction of Simple LR Parsing Table
• Canonical LR(1), Construction of LR(1) Parsing Table
• Look Ahead LR (LALR), Construction of LALR Parsing Table
• Parser Generator – Yacc
🡪 Nonterminal symbol:
🡪 The name of syntax category of a language, e.g., noun, verb, etc.
🡪 The It is written as a single capital letter, or as a name enclosed between < … >, e.g., A or
<Noun>
<Noun Phrase> → <Article><Noun>
<Article> → a | an | the
<Noun> → boy | apple
🡪 Terminal symbol:
🡪 A symbol in the alphabet.
🡪 It is denoted by lower case letter and punctuation marks used in language.
🡪 Start symbol:
🡪 First nonterminal symbol of the grammar is called start symbol.
🡪 Production:
🡪 A production, also called a rewriting rule, is a rule of grammar. It has the form of
A nonterminal symbol → String of terminal and nonterminal symbols
Non terminals: E, O
Terminals: id + - * / ↑ ( )
Start symbol: E
Productions: E 🡪 E O E | (E) | id
O🡪+|-|*|/ |↑
Chip
S S S S
🡪S*S 🡪S+S
S * S S + S
🡪S+S*S 🡪a+S
🡪a+S*S S + 🡪a+S*S
S a a S * S
🡪a+a*S 🡪a+a*S
🡪a+a*a a 🡪a+a*a
a a a
🡪 Here, Two leftmost derivation for string a+a*a is possible hence, above grammar is ambiguous.
Top down parsing: In top down parsing Bottom up parsing: Bottom up parser starts
parser build parse tree from top to bottom. from leaves and work up to the root.
Grammar: String: abbcde
S
S🡪aABe S
A🡪Abc | b
A
B🡪d a A B e
A B
A b c d
a b b c d e
b
Prof. Jay R Dhamsaniya #3130006 (PS) ⬥ Unit 1 – Basic Probability 13
Classification of Parsing
Classification of parsing
Parsing
Parsing without
backtracking (predictive LR parsing
parsing)
SLR
LL(1)
CLR
Recursive
descent LALR
Prof. Dixita
Jay R Dhamsaniya
B Kagathara #3170701 (PS) ⬥⬥ Unit
#3130006(CD) Unit 31 –– Syntax
Basic Probability
Analysis (I) 15
Recursive descent parsing
🡪 A top down parsing that executes a set of recursive procedure to process the input without
backtracking is called recursive descent parser.
🡪 There is a procedure for each non terminal in the grammar.
🡪 Consider RHS of any production rule as definition of the procedure.
🡪 As it reads expected input symbol, it advances input pointer to next position.
S S S
c A d c A d c A d
Make prediction Make prediction
NT First
First(T) E { (,id }
T 🡪 F T’ Rule 3 E’
T🡪FT’
A 🡪 Y1 Y2 First(A)=First(Y1)
T { (,id }
FIRST(T)=FIRST(F)= {(, id } T’
First(F) F { (,id }
F🡪(E) F🡪id F id
F 🡪 ( E ) 🡪
A 🡪 A 🡪
FIRST(F)={ ( , id }
Prof. Jay R Dhamsaniya #3130006 (PS) ⬥ Unit 1 – Basic Probability 25
Example-1: First & Follow
Compute FIRST E🡪TE’
First(E’) E’🡪+TE’ | ϵ
T🡪FT’
E’🡪+TE’ T’🡪*FT’ | ϵ
F🡪(E) | id
E’ 🡪 + T E’
A 🡪 NT First
E { (,id }
E’🡪𝜖 E’ { +, 𝜖 }
T { (,id }
T’
E’ 🡪
F { (,id }
A 🡪
FIRST(E’)={ + , 𝜖 }
Prof. Jay R Dhamsaniya #3130006 (PS) ⬥ Unit 1 – Basic Probability 26
Example-1: First & Follow
Compute FIRST E🡪TE’
First(T’) E’🡪+TE’ | ϵ
T🡪FT’
T’🡪*FT’ T’🡪*FT’ | ϵ
F🡪(E) | id
T’ 🡪 * F T’
A 🡪 NT First
E { (,id }
T’🡪𝜖 E’ { +, 𝜖 }
T { (,id }
T’ { *, 𝜖 }
T’ 🡪
F { (,id }
A 🡪
FIRST(T’)={ * , 𝜖 }
Prof. Jay R Dhamsaniya #3130006 (PS) ⬥ Unit 1 – Basic Probability 27
Example-1: First & Follow
Compute FOLLOW E🡪TE’
FOLLOW(E) E’🡪+TE’ | ϵ
T🡪FT’
Rule 1: Place $ in FOLLOW(E) T’🡪*FT’ | ϵ
F🡪(E) | id
F🡪(E)
NT First Follow
E { (,id } { $,) }
E’ { +, 𝜖 }
F 🡪 ( E ) Rule 2 T { (,id }
A 🡪 B
T’ { *, 𝜖 }
F { (,id }
FOLLOW(E)={ $, ) }
FOLLOW(E’)={ $,) }
FOLLOW(T)={ +, $, )
Prof. Jay R Dhamsaniya #3130006 (PS) ⬥ Unit 1 – Basic Probability 30
Example-1: First & Follow
Compute FOLLOW E🡪TE’
FOLLOW(T) E’🡪+TE’ | ϵ
T🡪FT’
E’🡪+TE’ T’🡪*FT’ | ϵ
F🡪(E) | id
NT First Follow
E’ 🡪 + T E’ Rule 2 E { (,id } { $,) }
A 🡪 B
E’ { +, 𝜖 } { $,) }
T { (,id } { +,$,) }
T’ { *, 𝜖 }
F { (,id }
E’ 🡪 + T E’ Rule 3
A 🡪 B
FOLLOW(T)={ +, $, ) }
Prof. Jay R Dhamsaniya #3130006 (PS) ⬥ Unit 1 – Basic Probability 31
Example-1: First & Follow
Compute FOLLOW E🡪TE’
FOLLOW(T’) E’🡪+TE’ | ϵ
T🡪FT’
T🡪FT’ T’🡪*FT’ | ϵ
F🡪(E) | id
NT First Follow
T 🡪 F T’ Rule 3 E { (,id } { $,) }
A 🡪 B
E’ { +, 𝜖 } { $,) }
T’🡪*FT’ T { (,id } { +,$,) }
T’ { *, 𝜖 } { +,$,) }
F { (,id }
T’ 🡪 *F T’ Rule 3
A 🡪 B
FOLLOW(T’)={+ $,) }
Prof. Jay R Dhamsaniya #3130006 (PS) ⬥ Unit 1 – Basic Probability 32
Example-1: First & Follow
Compute FOLLOW E🡪TE’
FOLLOW(F) E’🡪+TE’ | ϵ
T🡪FT’
T🡪FT’ T’🡪*FT’ | ϵ
F🡪(E) | id
NT First Follow
T 🡪 F T’ Rule 2 E { (,id } { $,) }
A 🡪 B
E’ { +, 𝜖 } { $,) }
T { (,id } { +,$,) }
T’ { *, 𝜖 } { +,$,) }
F { (,id }
T 🡪 F T’ Rule 3
A 🡪 B
FOLLOW(F)={ *, + ,$ , )
Prof. Jay R Dhamsaniya #3130006 (PS) ⬥ Unit 1 – Basic Probability 33
Example-1: First & Follow
Compute FOLLOW E🡪TE’
FOLLOW(F) E’🡪+TE’ | ϵ
T🡪FT’
T’🡪*FT’ T’🡪*FT’ | ϵ
F🡪(E) | id
NT First Follow
T’ 🡪 * F T’ Rule 2 E { (,id } { $,) }
A 🡪 B
E’ { +, 𝜖 } { $,) }
T { (,id } { +,$,) }
T’ { *, 𝜖 } { +,$,) }
F { (,id } {*,+,$,)}
T’ 🡪 * F T’ Rule 3
A 🡪 B
FOLLOW(F)={ *,+, $, ) }
Prof. Jay R Dhamsaniya #3130006 (PS) ⬥ Unit 1 – Basic Probability 34
Example-2: First & Follow
S🡪ABCDE
A🡪 a | 𝜖
B🡪 b | 𝜖
C🡪 c NT First Follow
D🡪 d | 𝜖 S {a,b,c} {$}
E🡪 e | 𝜖 A {a, 𝜖} {b, c}
B {b, 𝜖} {c}
C {c} {d, e, $}
D {d, 𝜖} {e, $}
E {e, 𝜖} {$}
a + b $ INPUT
X
Predictive
Y
Stack parsing OUTPUT
Z program
$
Parsing table M
First(S) S 🡪 a B a
S🡪aBa A 🡪
FIRST(S)={ a }
First(B)
B🡪bB B🡪𝜖
B 🡪 b B B 🡪 𝜖
A 🡪 A 🡪
FIRST(B)={ b , 𝜖 }
Prof. Jay R Dhamsaniya #3130006 (PS) ⬥ Unit 1 – Basic Probability 39
Example-1: LL(1) parsing
S🡪aBa
B🡪bB | NT First Follow
ϵ S {a} {$}
Step 2: Compute FOLLOW B {b,𝜖} {a}
Follow(S)
Rule 1: Place $ in FOLLOW(S)
Follow(S)={ $ }
Follow(B)
S🡪aBa B🡪bB
S 🡪 a B a B 🡪 b B Rule 3
A 🡪 B A 🡪 B Follow(A)=follow(B)
Follow(B)={ a }
Prof. Jay R Dhamsaniya #3130006 (PS) ⬥ Unit 1 – Basic Probability 40
Example-1: LL(1) parsing
S🡪aBa
B🡪bB | NT First Follow
ϵ S {a} {$}
Step 3: Prepare predictive parsing table B {b,𝜖} {a}
NT Input Symbol
a b $
S S🡪aBa
B
S🡪aBa
a=FIRST(aBa)={ a }
M[S,a]=S🡪aBa
NT Input Symbol
a b $
S S🡪aBa
B B🡪bB
B🡪bB
a=FIRST(bB)={ b }
M[B,b]=B🡪bB
NT Input Symbol
a b $
S S🡪aBa Error Error
B B🡪ϵ B🡪bB Error
B🡪ϵ
b=FOLLOW(B)={ a }
M[B,a]=B🡪𝜖
S 🡪 a B S 🡪 𝜖
A 🡪 A 🡪
FIRST(S)={ a , 𝜖 }
B 🡪 b C B 🡪 𝜖
A 🡪 A 🡪
FIRST(B)={ b , 𝜖 }
C 🡪 c S C 🡪 𝜖
A 🡪 A 🡪
FIRST(B)={ c , 𝜖 }
Prof. Dixita
Jay R Dhamsaniya
B Kagathara #3170701 (PS) ⬥⬥ Unit
#3130006(CD) Unit 31 –– Syntax
Basic Probability
Analysis (I) 47
Example-2: LL(1) parsing
S🡪aB | ϵ
NT First Follow
B🡪bC | ϵ
S {a,𝜖} {$}
C🡪cS | ϵ
B {b,𝜖} {$}
Step 3: Prepare predictive parsing table C {c,𝜖} {$}
N Input Symbol
T a b c $
S S🡪aB
B
C
S🡪aB
a=FIRST(aB)={ a }
M[S,a]=S🡪aB
Prof. Jay R Dhamsaniya #3130006 (PS) ⬥ Unit 1 – Basic Probability 48
Example-2: LL(1) parsing
S🡪aB | ϵ
NT First Follow
B🡪bC | ϵ
S {a} {$}
C🡪cS | ϵ
B {b,𝜖} {$}
Step 3: Prepare predictive parsing table C {c,𝜖} {$}
N Input Symbol
T a b c $
S S🡪aB S🡪 𝜖
B
C
S🡪𝜖
b=FOLLOW(S)={ $ }
M[S,$]=S🡪𝜖
Prof. Jay R Dhamsaniya #3130006 (PS) ⬥ Unit 1 – Basic Probability 49
Example-2: LL(1) parsing
S🡪aB | ϵ
NT First Follow
B🡪bC | ϵ
S {a} {$}
C🡪cS | ϵ
B {b,𝜖} {$}
Step 3: Prepare predictive parsing table C {c,𝜖} {$}
N Input Symbol
T a b c $
S S🡪aB S🡪 𝜖
B B🡪bC
C
B🡪bC
a=FIRST(bC)={ b }
M[B,b]=B🡪bC
Prof. Jay R Dhamsaniya #3130006 (PS) ⬥ Unit 1 – Basic Probability 50
Example-2: LL(1) parsing
S🡪aB | ϵ
NT First Follow
B🡪bC | ϵ
S {a} {$}
C🡪cS | ϵ
B {b,𝜖} {$}
Step 3: Prepare predictive parsing table C {c,𝜖} {$}
N Input Symbol
T a b c $
S S🡪aB S🡪 𝜖
B B🡪bC B🡪𝜖
C
B🡪𝜖
b=FOLLOW(B)={ $ }
M[B,$]=B🡪𝜖
Prof. Jay R Dhamsaniya #3130006 (PS) ⬥ Unit 1 – Basic Probability 51
Example-2: LL(1) parsing
S🡪aB | ϵ
NT First Follow
B🡪bC | ϵ
S {a} {$}
C🡪cS | ϵ
B {b,𝜖} {$}
Step 3: Prepare predictive parsing table C {c,𝜖} {$}
N Input Symbol
T a b c $
S S🡪aB S🡪 𝜖
B B🡪bC B🡪𝜖
C C🡪cS
C🡪cS
a=FIRST(cS)={ c }
M[C,c]=C🡪cS
Prof. Jay R Dhamsaniya #3130006 (PS) ⬥ Unit 1 – Basic Probability 52
Example-2: LL(1) parsing
S🡪aB | ϵ
NT First Follow
B🡪bC | ϵ
S {a} {$}
C🡪cS | ϵ
B {b,𝜖} {$}
Step 3: Prepare predictive parsing table C {c,𝜖} {$}
N Input Symbol
T a b c $
S S🡪aB Error Error S🡪 𝜖
B Error B🡪bB Error B🡪𝜖
C Error Error C🡪cS C🡪𝜖
C🡪𝜖
b=FOLLOW(C)={ $ }
M[C,$]=C🡪𝜖
Prof. Jay R Dhamsaniya #3130006 (PS) ⬥ Unit 1 – Basic Probability 53
Example-3: LL(1) parsing
E🡪E+T | T
T🡪T*F | F
F🡪(E) | id
Step 1: Remove left recursion
E🡪TE’
E’🡪+TE’ | ϵ
T🡪FT’
T’🡪*FT’ | ϵ
F🡪(E) | id
NT First
First(T) E { (,id }
T 🡪 F T’ Rule 3 E’
T🡪FT’
A 🡪 Y1 Y2 First(A)=First(Y1)
T { (,id }
FIRST(T)=FIRST(F)= {(, id } T’
First(F) F { (,id }
F🡪(E) F🡪id F id
F 🡪 ( E ) 🡪
A 🡪 A 🡪
FIRST(F)={ ( , id }
Prof. Jay R Dhamsaniya #3130006 (PS) ⬥ Unit 1 – Basic Probability 55
Example-3: LL(1) parsing
Step 2: Compute FIRST E🡪TE’
First(E’) E’🡪+TE’ | ϵ
T🡪FT’
E’🡪+TE’ T’🡪*FT’ | ϵ
F🡪(E) | id
E’ 🡪 + T E’
A 🡪 NT First
E { (,id }
E’🡪𝜖 E’ { +, 𝜖 }
T { (,id }
T’
E’ 🡪
F { (,id }
A 🡪
FIRST(E’)={ + , 𝜖 }
Prof. Jay R Dhamsaniya #3130006 (PS) ⬥ Unit 1 – Basic Probability 56
Example-3: LL(1) parsing
Step 2: Compute FIRST E🡪TE’
First(T’) E’🡪+TE’ | ϵ
T🡪FT’
T’🡪*FT’ T’🡪*FT’ | ϵ
F🡪(E) | id
T’ 🡪 * F T’
A 🡪 NT First
E { (,id }
T’🡪𝜖 E’ { +, 𝜖 }
T { (,id }
T’ { *, 𝜖 }
T’ 🡪
F { (,id }
A 🡪
FIRST(T’)={ * , 𝜖 }
Prof. Jay R Dhamsaniya #3130006 (PS) ⬥ Unit 1 – Basic Probability 57
Example-3: LL(1) parsing
Step 2: Compute FOLLOW E🡪TE’
FOLLOW(E) E’🡪+TE’ | ϵ
T🡪FT’
Rule 1: Place $ in FOLLOW(E) T’🡪*FT’ | ϵ
F🡪(E) | id
F🡪(E)
NT First Follow
E { (,id } { $,) }
E’ { +, 𝜖 }
F 🡪 ( E ) Rule 2 T { (,id }
A 🡪 B
T’ { *, 𝜖 }
F { (,id }
FOLLOW(E)={ $, ) }
FOLLOW(E’)={ $,) }
FOLLOW(T)={ +, $, )
Prof. Jay R Dhamsaniya #3130006 (PS) ⬥ Unit 1 – Basic Probability 60
Example-3: LL(1) parsing
Step 2: Compute FOLLOW E🡪TE’
FOLLOW(T) E’🡪+TE’ | ϵ
T🡪FT’
E’🡪+TE’ T’🡪*FT’ | ϵ
F🡪(E) | id
NT First Follow
E’ 🡪 + T E’ Rule 2 E { (,id } { $,) }
A 🡪 B
E’ { +, 𝜖 } { $,) }
T { (,id } { +,$,) }
T’ { *, 𝜖 }
F { (,id }
E’ 🡪 + T E’ Rule 3
A 🡪 B
FOLLOW(T)={ +, $, ) }
Prof. Jay R Dhamsaniya #3130006 (PS) ⬥ Unit 1 – Basic Probability 61
Example-3: LL(1) parsing
Step 2: Compute FOLLOW E🡪TE’
FOLLOW(T’) E’🡪+TE’ | ϵ
T🡪FT’
T🡪FT’ T’🡪*FT’ | ϵ
F🡪(E) | id
NT First Follow
T 🡪 F T’ Rule 3 E { (,id } { $,) }
A 🡪 B
E’ { +, 𝜖 } { $,) }
T’🡪*FT’ T { (,id } { +,$,) }
T’ { *, 𝜖 } { +,$,) }
F { (,id }
T’ 🡪 *F T’ Rule 3
A 🡪 B
FOLLOW(T’)={+ $,) }
Prof. Jay R Dhamsaniya #3130006 (PS) ⬥ Unit 1 – Basic Probability 62
Example-3: LL(1) parsing
Step 2: Compute FOLLOW E🡪TE’
FOLLOW(F) E’🡪+TE’ | ϵ
T🡪FT’
T🡪FT’ T’🡪*FT’ | ϵ
F🡪(E) | id
NT First Follow
T 🡪 F T’ Rule 2 E { (,id } { $,) }
A 🡪 B
E’ { +, 𝜖 } { $,) }
T { (,id } { +,$,) }
T’ { *, 𝜖 } { +,$,) }
F { (,id }
T 🡪 F T’ Rule 3
A 🡪 B
FOLLOW(F)={ *, + ,$ , )
Prof. Jay R Dhamsaniya #3130006 (PS) ⬥ Unit 1 – Basic Probability 63
Example-3: LL(1) parsing
Step 2: Compute FOLLOW E🡪TE’
FOLLOW(F) E’🡪+TE’ | ϵ
T🡪FT’
T’🡪*FT’ T’🡪*FT’ | ϵ
F🡪(E) | id
NT First Follow
T’ 🡪 * F T’ Rule 2 E { (,id } { $,) }
A 🡪 B
E’ { +, 𝜖 } { $,) }
T { (,id } { +,$,) }
T’ { *, 𝜖 } { +,$,) }
F { (,id } {*,+,$,)}
T’ 🡪 * F T’ Rule 3
A 🡪 B
FOLLOW(F)={ *,+, $, ) }
Prof. Jay R Dhamsaniya #3130006 (PS) ⬥ Unit 1 – Basic Probability 64
Example-3: LL(1) parsing
Step 3: Construct predictive parsing table E🡪TE’
E’🡪+TE’ | ϵ
T🡪FT’
NT Input Symbol
T’🡪*FT’ | ϵ
id + * ( ) $ F🡪(E) | id
E E🡪TE’ E🡪TE’
E’ NT First Follow
T E { (,id } { $,) }
T’ E’ { +, 𝜖 } { $,) }
F T { (,id } { +,$,) }
T’ { *, 𝜖 } { +,$,) }
E🡪TE’ F { (,id } {*,+,$,)}
a=FIRST(TE’)={ (,id }
M[E,(]=E🡪TE’
M[E,id]=E🡪TE’
Prof. Jay R Dhamsaniya #3130006 (PS) ⬥ Unit 1 – Basic Probability 65
Example-3: LL(1) parsing
Step 3: Construct predictive parsing table E🡪TE’
E’🡪+TE’ | ϵ
T🡪FT’
NT Input Symbol
T’🡪*FT’ | ϵ
id + * ( ) $ F🡪(E) | id
E E🡪TE’ E🡪TE’
E’ E’🡪+TE’ NT First Follow
T E { (,id } { $,) }
T’ E’ { +, 𝜖 } { $,) }
F T { (,id } { +,$,) }
T’ { *, 𝜖 } { +,$,) }
E’🡪+TE’ F { (,id } {*,+,$,)}
a=FIRST(+TE’)={ + }
M[E’,+]=E’🡪+TE’
E EàTE’ EàTE’
T TàFT’ TàFT’
F Fàid Fà(E)
NT Input Symbol
id + * ( ) $
Table :Handles
S
Parse tree represents the
structure of derivation
S - S
S * S a
a a
Leftmost Derivation Parse tree
S * S
a S - S
a a
Rightmost Derivation Parse Tree
Prof. Jay R Dhamsaniya #3130006 (PS) ⬥ Unit 1 – Basic Probability 90
Left Recursion
Left recursion
🡪
A A
A
A
A
A
A
| δ
A🡪 xByAA’ | a
A’🡪 Є | zA
Relation Meaning
a<.b a “yields precedence to” b
a=b a “has the same precedence as” b
a.>b a “takes precedence over” b
Precedence & associativity of operators
$ $ Parsing Done
Operator precedence function
Operator precedence function
🡪
Operator precedence function
🡪 E🡪 E+T | T
T🡪 T*F | F F🡪 id
f+ f* fid f$
g+ g* gid g$
Operator precedence function
🡪 Partition the
.
symbols in as many as groups possible, in such a way that f a and gb are in the same
group if a = b.
+ * id $
.
+ > <. <. .
>
gid fid . .
* > > <. .
>
id . . .
> > >
$ <. <. <.
f* g*
g+ f+
f$ g$
Operator precedence function
3. if a <· b, place an edge from the group of gb to the group of fa
if a ·> b, place an edge from the group of fa to the group of gb
g
+ * id $
.
+ > <. <. .
>
gid fid
. .
f * > > <. .
>
id . . .
> > >
f* g* $ <. <. <.
f+ .> g+ f+ 🡪 g+
g+ f+
f* .> g+ f* 🡪 g+
fid .> g+ fid 🡪 g+
f$ g$ f$ <. g+ f$ 🡪 g+
Operator precedence function
3. if a <· b, place an edge from the group of gb to the group of fa
if a ·> b, place an edge from the group of fa to the group of gb
g
+ * id $
.
+ > <. <. .
>
gid fid
. .
f * > > <. .
>
id . . .
> > >
f* g* $ <. <. <.
f+ <. g* f+ 🡪 g*
g+ f+
f* .> g* f* 🡪 g*
fid .> g* fid 🡪 g*
f$ g$ f$ <. g* f$ 🡪 g*
Operator precedence function
3. if a <· b, place an edge from the group of gb to the group of fa
if a ·> b, place an edge from the group of fa to the group of gb
g
+ * id $
.
+ > <. <. .
>
gid fid
. .
f * > > <. .
>
id . . .
> > >
f* g* $ <. <. <.
g
+ * id $
.
+ > <. <. .
>
gid fid
. .
f * > > <. .
>
id . . .
> > >
f* g* $ <. <. <.
f+ <. g$ f+ 🡪 g$
g+ f+
f* <. g$ f* 🡪 g$
fid <. g$ fid 🡪 g$
f$ g$
Operator precedence function
+ * id $
f 2
gid fid g
f* g*
4. If the constructed graph has
a cycle then no precedence
g+ f+ functions exist. When there
are no cycles collect the
length of the longest paths
f$ g$ from the groups of fa and gb
respectively.
Operator precedence function
+ * id $
f 2
gid fid
g 1
f* g*
g+ f+
f$ g$
Operator precedence function
+ * id $
f 2 4
gid fid
g 1
f* g*
g+ f+
f$ g$
Operator precedence function
+ * id $
f 2 4
gid fid
g 1 3
f* g*
g+ f+
f$ g$
Operator precedence function
+ * id $
f 2 4 4
gid fid
g 1 3
f* g*
g+ f+
f$ g$
Operator precedence function
+ * id $
f 2 4 4
gid fid
g 1 3 5
f* g*
g+ f+
f$ g$
Operator precedence function
+ * id $
f 2 4 4 0
gid fid
g 1 3 5 0
f* g*
g+ f+
f$ g$
Introduction to LR Parser
LR parser
🡪 LR parsing is most efficient method of bottom up parsing which can be used to parse large
class of context free grammar.
🡪 The technique is called LR(k) parsing:
1. The “L” is for left to right scanning of input symbol,
2. The “R” for constructing right most derivation in reverse,
3. The “k” for the number of input symbols of look ahead that are used in making parsing
decision. a + b $ INPUT
X
LR parsing
Y
program OUTPUT
Z
$
Parsing Table
Action Goto
Closure & goto function
Computation of closure & goto function
S🡪AS | b
S’🡪S.
A🡪SA | a
Closure(I): S🡪A.S
)
(I,S
S🡪.AS
)
to
(I ,A S🡪.b
Go o to A🡪.SA
G A🡪.a
S’🡪.S
S🡪.AS Goto(I,b)
S🡪.b S🡪b.
A🡪.SA A🡪S.A
A🡪.a
Goto(I,S) A🡪.SA
Go A🡪.a
to(
I,a S🡪.AS
) S🡪.b
A🡪a.
SLR Parser
Shift reduce parser
🡪 The shift reduce parser performs following basic operations:
1. Shift: Moving of the symbols from input buffer onto the stack, this action is called shift.
2. Reduce: If handle appears on the top of the stack then reduction of it by appropriate rule is
done. This action is called reduce action.
3. Accept: If stack contains start symbol only and input buffer is empty at the same time then
that action is called accept.
4. Error: A situation in which parser cannot either shift or reduce the symbols, it cannot even
perform accept action then it is called error action.
A🡪 b.
Rules to construct SLR parsing table
🡪
Example: SLR(1)- simple LR
S🡪 AA .
S’🡪 S.
A🡪 a . A
A🡪. aA
S🡪 A . A A🡪. b Action Go to
S’🡪. S
A🡪. aA Item a b $ S A
S🡪. AA
A🡪. b A🡪 b. set
A🡪. aA
0 S3 S4 1 2
A🡪. b
A🡪 aA . 1 Accept
2 S3 S4 5
A🡪 a . A
3 S3 S4 6
A🡪. aA A🡪 a . A 4 R3 R3 R3
A🡪. b A🡪. aA
A🡪 b. 5 R1
A🡪. b
6 R2 R2 R2
S 🡪 AA
A 🡪 aA | b A🡪 b.
CLR Parser
How to calculate look ahead?
How to calculate look ahead?
S🡪CC
S’ 🡪 . S , $
C🡪 cC | d
A 🡪 . X ,
Closure(I)
S’🡪.S,$
S🡪.CC, $
C🡪.cC, c|d S 🡪 . C C , $
C🡪.d, c|d A 🡪 . X ,
Example: CLR(1)- canonical LR
S🡪 AA. ,$ A🡪 aA.,$
S’🡪 S., $ A🡪 a.A,$
A🡪 a.A,$
A🡪. aA,$
A🡪. aA,$
A🡪. b, $
S🡪 A.A,$ A🡪. b, $
S’🡪.S,$ A🡪 b. ,S
A🡪.aA, $
S🡪.AA,$
A🡪. b, $ A🡪 b. ,$
A🡪.aA, a|b
A🡪.b, a|b
A🡪 aA.,a|b LR(1) item set
Augmented
grammar A🡪a.A, a|b
A🡪.aA ,a|b A🡪 a.A , a|b
A🡪. b, a|b A🡪.aA , a|b
A🡪 b., a|b
A🡪.b , a|b
S 🡪 AA
A 🡪 aA | b A🡪 b., a|b
Example: CLR(1)- canonical LR
S🡪 AA. ,$ A🡪 aA.,$
S’🡪 S., $ A🡪 a.A,$
A🡪 a.A,$
A🡪. aA,$
A🡪. aA,$
A🡪. b, $
S🡪 A.A,$ A🡪. b, $
S’🡪.S,$ A🡪 b. ,$
A🡪.aA, $
S🡪.AA,$
A🡪. b, $ A🡪 b. ,$
A🡪.aA, a|b Item Action Go to
set a b $ S A
A🡪.b, a|b
A🡪 aA.,a|b 0 S3 S4 1 2
1 Accept
A🡪a.A, a|b 2 S6 S7 5
A🡪.aA ,a|b A🡪 a.A , a|b 3 S3 S4 8
A🡪. b, a|b 4 R3 R3
A🡪 b., a|b A🡪.aA , a|b
5 R1
A🡪.b , a|b 6 S6 S7 9
S 🡪 AA 7 R3
A 🡪 aA | b A🡪 b., a|b 8 R2 R2
9 R2
LALR Parser
Example: LALR(1)- look ahead LR
S🡪 AA. ,$ A🡪 aA.,$
S’🡪 S., $ A🡪 a.A,$
A🡪 a.A,$
A🡪. aA,$
A🡪. aA,$
A🡪. b, $
S🡪 A.A,$ A🡪. b, $
S’🡪.S,$ A🡪 b. ,$
A🡪.aA, $
S🡪.AA,$
A🡪. b, $ A🡪 b. ,$
A🡪.aA, a|b CLR
A🡪.b, a|b
A🡪 aA.,a|b A🡪a.A, a|b|$
A🡪.aA , a|b|$
A🡪a.A, a|b
A🡪. b, a|b|$
A🡪.aA ,a|b A🡪 a.A , a|b
A🡪. b, a|b A🡪.aA , a|b
A🡪 b., a|b
A🡪.b , a|b A🡪 b., a|b|$
S 🡪 AA
A 🡪 aA | b A🡪 b., a|b A🡪 aA.,a|b|$
Example: LALR(1)- look ahead LR
Item Action Go to
set a b $ S A
0 S3 S4 1 2 Item Action Go to
1 Accept set a b $ S A
2 S6 S7 5 0 S36 S47 1 2
3 S3 S4 8 1 Accept
4 R3 R3 2 S36 S47 5
5 R1 36 S36 S47 89
6 S6 S7 9 47 R3 R3 R3
5 R1
7 R3
89 R2 R2 R2
8 R2 R2
9 R2
Yacc
Yacc Compiler y.tab.c
specification
(translate.y)
Structure of Program
<left side>🡪<alt 1>|<alt 2>|……..|<alt n>
Declaration It is used to declare variables, constant & Header files
%%
Example:
<left side> : <alt 1> {semantic action 1}
%{
%% | <alt 2> {semantic action 2}
int x,y;
Translation rule | <alt n> {semantic action n}
const int digit=50;
%% %%
#include <ctype.h>
%}
Supporting C routines All the function needed are specified over here.
Example: Yacc Program
🡪 Program: Write Yacc program for simple desk calculator
/* Declaration */ /* Translation rule */ /* Supporting C routines*/
%{ %% yylex()
#include <ctype.h> line : expr ‘\n’ {print(“%d\n”,$1);} {
%} expr : expr ‘+’ term {$$=$1 + $3;} int c;
% token DIGIT | term; c=getchar();
term : term ‘*’ factor{$$=$1 * $3;} if(isdigit(c))
| factor; {
factor : ‘(‘ expr ‘)’ {$$=$2;} yylval= c-’0’
| DIGIT; return DIGIT
%% }
E🡪E+T | T return c;
T🡪T*F | F }
F🡪(E) | id
References
Books:
1. Compilers Principles, Techniques and Tools, PEARSON Education (Second Edition)
Authors: Alfred V. Aho, Monica S. Lam, Ravi Sethi, Jeffrey D. Ullman
2. Compiler Design, PEARSON (for Gujarat Technological University)
Authors: Alfred V. Aho, Ravi Sethi, Jeffrey D. Ullman