Week 10 - Non Recursive Predictive Parsor
Week 10 - Non Recursive Predictive Parsor
Parsing
Lecture 10
Topics Covered in Lecture 9
A general form of top-down parsing where
backtracking may be involved.
Why does Recursive Descent Parser fail at
particular conditions ?
Predictive Parsing is a special case of recursive
descent parsing that needs no back tracking
Transition Diagrams as a plan for predictive
parsing
Optimizing Transition Diagrams
3
Non Recursive Predictive Parser/ LL(k) Parser
4
Table-driven parsing vs. recursive
descent parsing
5
Predictive Parsing using a Parsing Table
Model
a + b $ Input buffer
stack
Output stream
Y Predictive Parser
Z
Parsing table M
6
Non Recursive Predictive Parser/ LL(k) Parser
7
Non Recursive Predictive Parser/ LL(k) Parser
8
9
How to construct Table?
10
Computing FIRST Sets
11
Computing FOLLOW Sets
12
Learn by Example
Production First Follow
S -> A B C D E
A -> a / ε
B -> b / ε
C -> c
D -> d / ε
E -> e / ε
14
Production First Follow
S -> A B C D E {a, b, c} {$}
A -> a / ε {a, ε} {b, c}
B -> b / ε {b, ε} {c}
C -> c {c} {d, e, $}
D -> d / ε {d, ε} {e, $}
E -> e / ε {e, ε} {$}
15
Example 2
16
Example 3
17
18
19
20
Example
E 1 1 2: E’ + T E’ {+}
E’ 2 3 3 3: E’ e {$,)}
T 4 4 4: T F T’ {(,id}
T’ 6 5 6 6 5: T’ * F T’ {*}
F 8 7 6: T’ e {+,$,)}
7: F id {id}
8: F ( E ) {(}
Reference:
http://hackingoff.com/compilers/predict-first-follow-set
22
Parsing Algorithm
E’ 2 3 3
T 4 4
T’ 6 5 6 6
F 8 7
26
Stack Input Action
$E a+b*c$ E T E’
$E’T a+b*c$ T F T’
$E’T’F a+b*c$ F id
NT/T + * ( ) ID $
E 1 1
E’ 2 3 3
T 4 4
T’ 6 5 6 6
F 8 7
27
Stack Input Action
$E a+b*c$ E T E’
$E’T a+b*c$ T F T’
$E’T’F a+b*c$ F id
NT/T + * ( ) ID $
$E’T’id a+b*c$ match
E 1 1
E’ 2 3 3
T 4 4
T’ 6 5 6 6
F 8 7
28
Stack Input Action
$E a+b*c$ E T E’
$E’T a+b*c$ T F T’
$E’T’F a+b*c$ F id
NT/T + * ( ) ID $
$E’T’id a+b*c$ match
E 1 1
$E’T’ +b*c$ T’ e
E’ 2 3 3
T 4 4
T’ 6 5 6 6
F 8 7
29
Stack Input Action
$E a+b*c$ E T E’
$E’T a+b*c$ T F T’
$E’T’F a+b*c$ F id
NT/T + * ( ) ID $
$E’T’id a+b*c$ match
E 1 1
$E’T’ +b*c$ T’ e
E’ 2 3 3 $E’ +b*c$ E’ + T E’
T 4 4
T’ 6 5 6 6
F 8 7
30
Stack Input Action
$E a+b*c$ E T E’
$E’T a+b*c$ T F T’
$E’T’F a+b*c$ F id
NT/T + * ( ) ID $
$E’T’id a+b*c$ match
E 1 1
$E’T’ +b*c$ T’ e
E’ 2 3 3 $E’ +b*c$ E’ + T E’
T 4 4 $E’ T + +b*c$ match
T’ 6 5 6 6
F 8 7
31
Stack Input Action
$E a+b*c$ E T E’
$E’T a+b*c$ T F T’
$E’T’F a+b*c$ F id
NT/T + * ( ) ID $
$E’T’id a+b*c$ match
E 1 1
$E’T’ +b*c$ T’ e
E’ 2 3 3 $E’ +b*c$ E’ + T E’
T 4 4 $E’ T + +b*c$ match
T’ 6 5 6 6 $E’ T b*c$ T F T’
F 8 7
32
Stack Input Action
$E a+b*c$ E T E’
$E’T a+b*c$ T F T’
$E’T’F a+b*c$ F id
NT/T + * ( ) ID $
$E’T’id a+b*c$ match
E 1 1
$E’T’ +b*c$ T’ e
E’ 2 3 3 $E’ +b*c$ E’ + T E’
T 4 4 $E’ T + +b*c$ match
T’ 6 5 6 6 $E’ T b*c$ T F T’
F 8 7 $E’T’F b*c$ F id
33
Stack Input Action
$E a+b*c$ E T E’
$E’T a+b*c$ T F T’
$E’T’F a+b*c$ F id
NT/T + * ( ) ID $
$E’T’id a+b*c$ match
E 1 1
$E’T’ +b*c$ T’ e
E’ 2 3 3 $E’ +b*c$ E’ + T E’
T 4 4 $E’ T + +b*c$ match
T’ 6 5 6 6 $E’ T b*c$ T F T’
F 8 7 $E’T’F b*c$ F id
$E’T id b*c$ match
34
Parsing a + b * c
Stack Input Action Stack Input Action
$E’T’F F id
$E a+b*c$ E T E’
$E’T’id match
$E’T T F T’
$E’T’ *c$ T’ * F T’
$E’T’F F id
$E’T’F* match
$E’T’id match
$E’T’F c$ F id
$E’T’ +b*c$ T’ e
$E’T’id match
$E’ E’ + T E’
$E’T+ match $E’T’ $ T’ e
35
Learn by Doing
Parse Trace of (z + q) * x + w * y
Parse Trace of (z + q) * x + w * y
37
Learn by Doing
S’ eS |Є
E b
39
40
Learn by Doing