Unit 3 - Syntax Analysis
Unit 3 - Syntax Analysis
Symbol table
• Parser obtains a string of token from the lexical analyzer and reports syntax error
if any otherwise generates syntax tree.
• There are two types of parser:
1. Top-down parser
2. Bottom-up parser
Mekonen M. # CoSc4072 Unit 3 – Syntax Analysis 4
Context free grammar
• A context free grammar (CFG) is a 4-tuple 𝐺 = (𝑉, 𝛴, 𝑆, 𝑃) where,
𝑉 is finite set of non terminals,
𝛴 is disjoint finite set of terminals,
𝑆 is an element of 𝑉 and it’s a start symbol,
𝑃 is a finite set formulas of the form 𝐴 → 𝛼 where 𝐴 ∈ 𝑉 and 𝛼 ∈ (𝑉 ∪ 𝛴)∗
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
Start symbol: E
Productions: E → E O E| (E) | -E | id
O→+|-|*|/ |↑
S
S Parse tree represents the
→S-S
structure of derivation S - S
→S*S-S
S * S a
→a*S-S
→a*a-S
a a
→a*a-a Parse tree
Leftmost Derivation
S
S
→S*S S S
*
→S*S-S
→S*S-a a S - S
→S*a-a
a a
→a*a-a
Rightmost Derivation Parse Tree
Mekonen M. # CoSc4072 Unit 3 – Syntax Analysis 14
Exercise: Derivation
1. Perform leftmost derivation and draw parse tree.
S→A1B
A→0A | 𝜖
B→0B | 1B | 𝜖
Output string: 1001
2. Perform leftmost derivation and draw parse tree.
S→0S1 | 01 Output string: 000111
3. Perform rightmost derivation and draw parse tree.
E→E+E | E*E | id | (E) | -E
Output string: id + id * id
Chip
𝑁2 → 𝛼
𝜶
• 𝛼 can be derived from either N1 or N2
S S S S
→S*S →S+S S + S
S * S
→S+S*S →a+S
→a+S*S S + S a →a+S*S 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.
𝐴 → 𝐴𝛼
𝛼 |𝛽 𝐴→ 𝐴’
𝐴’→ 𝐴’ | 𝜖
𝐴→ 𝛼𝛽 | 𝛼 δ 𝐴→ 𝐴′
𝐴′ → |
A→ xByAA’ | a
A’→ Є | zA
A→ aAB | aA |a
A→aA’
A’→AB | A | 𝜖
A’→AA’’ | 𝜖
A’’→B | 𝜖
Mekonen M. # CoSc4072 Unit 3 – Syntax Analysis 29
Exercise
1. S→iEtS | iEtSeS | a
2. A→ ad | a | ab | abc | x
Back tracking
Operator precedence
Parsing without
backtracking (predictive LR parsing
parsing)
SLR
LL(1)
CLR
Recursive
descent
LALR
S S S
c A d c A d c A d
Make prediction Make prediction
Parsing without
backtracking (predictive LR parsing
parsing)
SLR
LL(1)
CLR
Recursive
descent LALR
a + b $ INPUT
X
Predictive
Y
Stack parsing OUTPUT
Z program
$
Parsing table M
a + b $ INPUT
X
Predictive
Y
Stack parsing OUTPUT
Z program
$
Parsing table M
A → 𝛼𝐵𝛽
𝛽 𝑖𝑠 𝑎𝑏𝑠𝑒𝑛𝑡 𝛽 𝑖𝑠 𝑝𝑟𝑒𝑠𝑒𝑛𝑡
First(S) S → a B a Rule 1
S→aBa A → 𝛼 add 𝛼 to 𝐹𝐼𝑅𝑆𝑇(𝐴)
FIRST(S)={ a }
First(B)
B→bB B→𝜖
B → b B B → 𝜖
Rule 1
A → 𝛼 A → 𝜖
add 𝛼 to 𝐹𝐼𝑅𝑆𝑇(𝐴) Rule 2
add 𝜖 to 𝐹𝐼𝑅𝑆𝑇(𝐴)
FIRST(B)={ b , 𝜖 }
Mekonen M. # CoSc4072 Unit 3 – Syntax Analysis 46
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 Rule 2 B → b B Rule 3
A → 𝛂 B 𝛃 First(𝛽) − 𝜖 A → 𝛂 B Follow(A)=follow(B)
Follow(B)={ a }
Mekonen M. # CoSc4072 Unit 3 – Syntax Analysis 47
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
Rule: 2
S→aBa A→ 𝛼
a = first(𝛼)
a=FIRST(aBa)={ a } M[A,a] = A→ 𝛼
M[S,a]=S→aBa
Mekonen M. # CoSc4072 Unit 3 – Syntax Analysis 48
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 B→bB
Rule: 2
B→bB A→ 𝛼
a = first(𝛼)
a=FIRST(bB)={ b } M[A,a] = A→ 𝛼
M[B,b]=B→bB
Mekonen M. # CoSc4072 Unit 3 – Syntax Analysis 49
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 Error Error
B B→ϵ B→bB Error
Rule: 3
B→ϵ A→ 𝛼
b = follow(A)
b=FOLLOW(B)={ a } M[A,b] = A→ 𝛼
M[B,a]=B→𝜖
Mekonen M. # CoSc4072 Unit 3 – Syntax Analysis 50
Example-2: LL(1) parsing
S→aB | ϵ
B→bC | ϵ
C→cS | ϵ
FIRST(S)={ a , 𝜖 }
FIRST(B)={ b , 𝜖 }
FIRST(B)={ c , 𝜖 }
N Input Symbol
T a b c $
S S→aB
B
C
S→aB Rule: 2
A→ 𝛼
a=FIRST(aB)={ a } a = first(𝛼)
M[A,a] = A→ 𝛼
M[S,a]=S→aB
Mekonen M. # CoSc4072 Unit 3 – Syntax Analysis 55
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→𝜖 Rule: 3
A→ 𝛼
b=FOLLOW(S)={ $ } b = follow(A)
M[A,b] = A→ 𝛼
M[S,$]=S→𝜖
Mekonen M. # CoSc4072 Unit 3 – Syntax Analysis 56
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 Rule: 2
A→ 𝛼
a=FIRST(bC)={ b } a = first(𝛼)
M[A,a] = A→ 𝛼
M[B,b]=B→bC
Mekonen M. # CoSc4072 Unit 3 – Syntax Analysis 57
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→𝜖 Rule: 3
A→ 𝛼
b=FOLLOW(B)={ $ } b = follow(A)
M[A,b] = A→ 𝛼
M[B,$]=B→𝜖
Mekonen M. # CoSc4072 Unit 3 – Syntax Analysis 58
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 Rule: 2
A→ 𝛼
a=FIRST(cS)={ c } a = first(𝛼)
M[A,a] = A→ 𝛼
M[C,c]=C→cS
Mekonen M. # CoSc4072 Unit 3 – Syntax Analysis 59
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→𝜖 Rule: 3
A→ 𝛼
b=FOLLOW(C)={ $ } b = follow(A)
M[A,b] = A→ 𝛼
M[C,$]=C→𝜖
Mekonen M. # CoSc4072 Unit 3 – Syntax Analysis 60
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
E { (,id }
First(T) T → F T’ Rule 3 E’
A → Y1 Y2 First(A)=First(Y1)
T→FT’ T { (,id }
FIRST(T)=FIRST(F)= {(, id } T’
F { (,id }
First(F) F → ( E ) F → id
F→(E) A → 𝛼 Rule 1 F→id
A → 𝛼 Rule 1
add 𝛼 to 𝐹𝐼𝑅𝑆𝑇(𝐴) add 𝛼 to 𝐹𝐼𝑅𝑆𝑇(𝐴)
FIRST(F)={ ( , id }
Mekonen M. # CoSc4072 Unit 3 – Syntax Analysis 62
Example-3: LL(1) parsing
Step 2: Compute FIRST E→TE’
E’→+TE’ | ϵ
First(E’) T→FT’
T’→*FT’ | ϵ
E’→+TE’ F→(E) | id
E’ → + T E’ Rule 1
add 𝛼 to 𝐹𝐼𝑅𝑆𝑇(𝐴) NT First
A → 𝛼
E { (,id }
E’ { +, 𝜖 }
E’→𝜖 T { (,id }
T’
E’ → 𝜖 Rule 2
F { (,id }
A → 𝜖 add 𝜖 to 𝐹𝐼𝑅𝑆𝑇(𝐴)
FIRST(E’)={ + , 𝜖 }
Mekonen M. # CoSc4072 Unit 3 – Syntax Analysis 63
Example-3: LL(1) parsing
Step 2: Compute FIRST E→TE’
E’→+TE’ | ϵ
First(T’) T→FT’
T’→*FT’ | ϵ
T’→*FT’ F→(E) | id
T’ → * F T’ Rule 1
add 𝛼 to 𝐹𝐼𝑅𝑆𝑇(𝐴) NT First
A → 𝛼
E { (,id }
E’ { +, 𝜖 }
T’→𝜖 T { (,id }
T’ { *, 𝜖 }
T’ → 𝜖 Rule 2
F { (,id }
A → 𝜖 add 𝜖 to 𝐹𝐼𝑅𝑆𝑇(𝐴)
FIRST(T’)={ * , 𝜖 }
Mekonen M. # CoSc4072 Unit 3 – Syntax Analysis 64
Example-3: LL(1) parsing
Step 2: Compute FOLLOW E→TE’
E’→+TE’ | ϵ
FOLLOW(E) 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)={ +, $, )
Mekonen M. # CoSc4072 Unit 3 – Syntax Analysis 67
Example-3: LL(1) parsing
Step 2: Compute FOLLOW E→TE’
E’→+TE’ | ϵ
FOLLOW(T) T→FT’
T’→*FT’ | ϵ
E’→+TE’ 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)={ +, $, ) }
Mekonen M. # CoSc4072 Unit 3 – Syntax Analysis 68
Example-3: LL(1) parsing
Step 2: Compute FOLLOW E→TE’
E’→+TE’ | ϵ
FOLLOW(T’) T→FT’
T’→*FT’ | ϵ
T→FT’ F→(E) | id
NT First Follow
T → F T’ Rule 3 E { (,id } { $,) }
A → 𝛂 B
E’ { +, 𝜖 } { $,) }
T { (,id } { +,$,) }
T’→*FT’ T’ { *, 𝜖 } { +,$,) }
F { (,id }
T’ → *F T’ Rule 3
A → 𝛂 B
FOLLOW(T’)={+ $,) }
Mekonen M. # CoSc4072 Unit 3 – Syntax Analysis 69
Example-3: LL(1) parsing
Step 2: Compute FOLLOW E→TE’
E’→+TE’ | ϵ
FOLLOW(F) 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)={ *, + ,$ , )
Mekonen M. # CoSc4072 Unit 3 – Syntax Analysis 70
Example-3: LL(1) parsing
Step 2: Compute FOLLOW E→TE’
E’→+TE’ | ϵ
FOLLOW(F) 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)={ *,+, $, ) }
Mekonen M. # CoSc4072 Unit 3 – Syntax Analysis 71
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’ Rule: 2
F { (,id } {*,+,$,)}
a=FIRST(TE’)={ (,id } A→ 𝛼
a = first(𝛼)
M[E,(]=E→TE’ M[A,a] = A→ 𝛼
M[E,id]=E→TE’
Mekonen M. # CoSc4072 Unit 3 – Syntax Analysis 72
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’ { *, 𝜖 } { +,$,) }
F { (,id } {*,+,$,)}
Rule: 2
E’→+TE’ A→ 𝛼
a = first(𝛼)
a=FIRST(+TE’)={ + } M[A,a] = A→ 𝛼
M[E’,+]=E’→+TE’
Mekonen M. # CoSc4072 Unit 3 – Syntax Analysis 73
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’ E’→𝜖 E’→𝜖 NT First Follow
T E { (,id } { $,) }
T’ E’ { +, 𝜖 } { $,) }
F T { (,id } { +,$,) }
T’ { *, 𝜖 } { +,$,) }
E’→𝜖 Rule: 3
F { (,id } {*,+,$,)}
b=FOLLOW(E’)={ $,) } A→ 𝛼
b = follow(A)
M[E’,$]=E’→𝜖 M[A,b] = A→ 𝛼
M[E’,)]=E’→𝜖
Mekonen M. # CoSc4072 Unit 3 – Syntax Analysis 74
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’ E’→𝜖 E’→𝜖 NT First Follow
T T→FT’ T→FT’ E { (,id } { $,) }
T’ E’ { +, 𝜖 } { $,) }
F T { (,id } { +,$,) }
T’ { *, 𝜖 } { +,$,) }
T→FT’ Rule: 2
F { (,id } {*,+,$,)}
a=FIRST(FT’)={ (,id } A→ 𝛼
a = first(𝛼)
M[T,(]=T→FT’ M[A,a] = A→ 𝛼
M[T,id]=T→FT’
Mekonen M. # CoSc4072 Unit 3 – Syntax Analysis 75
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’ E’→𝜖 E’→𝜖 NT First Follow
T T→FT’ T→FT’ E { (,id } { $,) }
T’ T’→*FT’ E’ { +, 𝜖 } { $,) }
F T { (,id } { +,$,) }
T’ { *, 𝜖 } { +,$,) }
F { (,id } {*,+,$,)}
Rule: 2
T’→*FT’ A→ 𝛼
a = first(𝛼)
a=FIRST(*FT’)={ * } M[A,a] = A→ 𝛼
M[T’,*]=T’→*FT’
Mekonen M. # CoSc4072 Unit 3 – Syntax Analysis 76
Example-3: LL(1) parsing
Step 3: Construct predictive parsing table E→TE’
E’→+TE’ | ϵ
NT Input Symbol T→FT’
id + * ( ) $ T’→*FT’ | ϵ
E E→TE’ E→TE’ F→(E) | id
M[T’,+]=T’→𝜖 A→ 𝛼
b = follow(A)
M[T’,$]=T’→𝜖 M[A,b] = A→ 𝛼
M[T’,)]=T’→𝜖
Mekonen M. # CoSc4072 Unit 3 – Syntax Analysis 77
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’ E’→𝜖 E’→𝜖 NT First Follow
T T→FT’ T→FT’ E { (,id } { $,) }
T’ T’→𝜖 T’→*FT’ T’→𝜖 T’→𝜖 E’ { +, 𝜖 } { $,) }
F F→(E) T { (,id } { +,$,) }
T’ { *, 𝜖 } { +,$,) }
F { (,id } {*,+,$,)}
Rule: 2
F→(E) A→ 𝛼
a = first(𝛼)
a=FIRST((E))={ ( } M[A,a] = A→ 𝛼
M[F,(]=F→(E)
Mekonen M. # CoSc4072 Unit 3 – Syntax Analysis 78
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’ E’→𝜖 E’→𝜖 NT First Follow
T T→FT’ T→FT’ E { (,id } { $,) }
T’ T’→𝜖 T’→*FT’ T’→𝜖 T’→𝜖 E’ { +, 𝜖 } { $,) }
F F→id F→(E) T { (,id } { +,$,) }
T’ { *, 𝜖 } { +,$,) }
F { (,id } {*,+,$,)}
Rule: 2
F→id A→ 𝛼
a = first(𝛼)
a=FIRST(id)={ id } M[A,a] = A→ 𝛼
M[F,id]=F→id
Mekonen M. # CoSc4072 Unit 3 – Syntax Analysis 79
Example-3: LL(1) parsing
• Step 4: Make each undefined entry of table be Error
NT Input Symbol
id + * ( ) $
E E→TE’ Error Error E→TE’ Error Error
E’ Error E’→+TE’ Error Error E’→𝜖 E’→𝜖
T T→FT’ Error Error T→FT’ Error Error
T’ Error T’→𝜖 T’→*FT’ Error T’→𝜖 T’→𝜖
F F→id Error Error F→(E) Error Error
S→iCtSE | a
E→eS |
C→b
a b e i t $
FIRST(S->iCtSE) = {i}
FIRST(S->a) = {a} S S→a S → iCtSE
• If its (new grammar’s) parsing table still contains multiply defined entries, that
grammar is ambiguous or it is inherently not a LL(1) grammar.
• An ambiguous grammar cannot be a LL(1) grammar.
Back tracking
Operator precedence
Parsing without
backtracking (predictive LR parsing
parsing)
SLR
LL(1)
CLR
Recusive
Descent LALR
Back tracking(Recursive
descent) Operator precedence
Parsing without
backtracking (predictive LR parsing
Parsing)
SLR
LL(1)
CLR
Recursive
Descent LALR
SLR
2. LR-Parsers
• covers wide range of grammars.
• SLR – simple LR parser
• LR – most general LR parser
• LALR – lookhead LR parser-intermediate LR parser
• SLR, LR and LALR work same, only their parsing tables are different.
Parsing without
backtracking (predictive LR parsing
parsing)
SLR
LL(1)
CLR
Recursive
Descent LALR
X
LR parsing
Y
program OUTPUT
Z
$
Parsing Table
Action Goto
Mekonen M. # CoSc4072 Unit 3 – Syntax Analysis 96
LR Parser …
a + b $
X
LR parsing
Y
Stack program OUTPUT
Z
$
A→ b. 𝑰4
5) F → (E) 3 r4 r4 r4 r4
4 s5 s4 8 2 3
6) F → id 5 r6 r6 r6 r6
6 s5 s4 9 3
7 s5 s4 10
8 s6 s11
9 r1 s7 r1 r1
10 r3 r3 r3 r3
11 r5 r5 r5 r5
Mekonen M. # CoSc4072 Unit 3 – Syntax Analysis 107
Rules:
1) E → E+T 4) T → F
3. Parse the input string 2) E → T 5) F → (E)
stack symbol input action output 3) T → T*F 6) F → id
0 id*id+id$ shift 5 state id + * ( ) $ E T F
05 id *id+id$ reduce by F→id F→id 0 s5 s4 1 2 3
03 F *id+id$ reduce by T→F T→F 1 s6 acc
02 T *id+id$ shift 7
2 r2 s7 r2 r2
027 T* id+id$ shift 5
3 r4 r4 r4 r4
0275 T*id +id$ reduce by F→id F→id
02710 T*F(*) +id$ reduce by T→T*F T→T*F 4 s5 s4 8 2 3
02 T +id$ reduce by E→T E→T 5 r6 r6 r6 r6
01 E +id$ shift 6 6 s5 s4 9 3
016 E+ id$ shift 5 7 s5 s4 10
0165 E+id $ reduce by F→id F→id
8 s6 s11
0163 E+F $ reduce by T→F T→F
9 r1 s7 r1 r1
0169 E+T(**) $ reduce by E→E+T E→E+T
10 r3 r3 r3 r3
01 E $ accept
11 r5 r5 r5 r5
E→F–E/F
F → id
Back tracking(Recursive
Operator precedence
descent )
Parsing without
backtracking (predictive LR parsing
Parsing)
SLR
LL(1)
CLR
LALR
Parsing without
backtracking (predictive LR parsing
Parsing)
SLR
LL(1)
CLR
LALR
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
Back tracking(Recursive
Operator precedence
descent )
Parsing without
backtracking (predictive LR parsing
Parsing)
SLR
LL(1)
CLR
LALR