Professional Documents
Culture Documents
Construction
CS 551
Rehan Ullah
Lecture 18
Computing FIRST Sets
For terminal symbols,
FIRST(b) = {b}
2
Computing FIRST Sets
For all productions
X → A1... An
Add FIRST(A1) {} to
FIRST(X), stop if FIRST(A1)
Add FIRST(A2) {} to
FIRST(X), stop if FIRST(A2)
3
Computing FIRST Sets
For all productions
X → A1... An
Add FIRST(A1) {} to
FIRST(X), stop if FIRST(A1)
Add FIRST(A2) {} to
FIRST(X), stop if FIRST(A2)
4
Computing FIRST Sets
For all productions
X → A1... An
Add FIRST(A1) {} to
FIRST(X), stop if FIRST(A1)
Add FIRST(A2) {} to
FIRST(X), stop if FIRST(A2)
5
Computing FIRST Sets
.....
Add FIRST(An) {} to FIRST(X),
stop if FIRST(An)
Add to FIRST(X)
6
for each a ( T )
FIRST(a) ← {a}
for each A NT
FIRST(A) ← Ø
while ( FIRST sets are still changing)
for each A → 12k P
FIRST(A) ←FIRST(A) (FIRST(1) – {})
i ←1
while ( FIRST(i) and i ≤ k-1 )
FIRST(A) ←FIRST(A) (FIRST(i+1) – {})
i ← i+1
if (i == k and FIRST(k)
FIRST(A) ←FIRST(A) {}
7
Computing FIRST Sets
the expression grammar again
1 E → T E'
2 E' → + T E'
3 |
4 T → F T'
5 T' → * F T'
6 |
7 F → (E )
8 | id
8
Computing FIRST Sets
E → T E'
E' → +T E' |
T → F T'
T' → * F T' |
F → ( E ) | id
FIRST(id) = { id }
FIRST('(' ) = { ( }
FIRST(‘+' ) = { + }
9
Computing FIRST Sets
E → T E'
E' → +T E' |
T → F T'
T' → * F T' |
F → ( E ) | id
FIRST(F ) =
{ '(' } + {FIRST( id ) {} }
= { ( , id}
11
Computing FIRST Sets
E → T E'
E' → +T E' |
T → F T'
T' → * F T' |
F → ( E ) | id
FIRST(E' ) = { +, }
FIRST(T' ) = { , }
12
Computing FIRST Sets
Thus,
FIRST(E ) =
FIRST(T ) =
FIRST(F ) = { (, id }
FIRST(E' ) = { +, }
FIRST(T' ) = { , }
13
FOLLOW Sets
Definition:
FOLLOW(X) = { b | S → Xb}
14
Computing FOLLOW Sets
1. Add $ to FOLLOW(S)
where S is the start non-
terminal
15
Computing FOLLOW Sets
2. If there is a production
A → B, then everything
in FIRST() – {} is in
FOLLOW(B)
16
Computing FOLLOW Sets
3. If there is a production
A → B, or A → B,
where in FIRST()
(i.e., → ), then
everything in FOLLOW(A)
is in FOLLOW(B)
17
for each A NT
FOLLOW(A) ← Ø
FOLLOW(S) ← {$}
while ( FOLLOW sets are still changing)
for each A → 12k P
FOLLOW(k) ←FOLLOW(k) FOLLOW(A)
T ← FOLLOW(A)
for i ← k downto 2
if ( FIRST(i) )
FOLLOW(i-1) ←FOLLOW(i-1)
(FIRST(i) – {}) T
else
FOLLOW(i-1) ←FOLLOW(i-1) FIRST(i)
T←Ø 18
E → T E'
E' → +T E' |
T → F T'
T' → * F T' |
F → ( E ) | id
Put $ in FOLLOW(E )
19
E → T E'
E' → +T E' |
T → F T'
T' → * F T' |
F → ( E ) | id
20
E → T E'
E' → +T E' |
T → F T'
T' → * F T' |
F → ( E ) | id
Thus, FOLLOW(E ) = { ), $}
21
E → T E'
E' → +T E' |
T → F T'
T' → * F T' |
F → ( E ) | id
22
E → T E'
E' → +T E' |
T → F T'
T' → * F T' |
F → ( E ) | id
thus,
FOLLOW(E ) =
FOLLOW (E' ) = { ), $ }
23
E → T E'
E' → +T E' |
T → F T'
T' → * F T' |
F → ( E ) | id
Similarly,
FOLLOW(T ) =
FOLLOW (T' ) = { +, ), $ }
24
E → T E'
E' → +T E' |
T → F T'
T' → * F T' |
F → ( E ) | id
and
FOLLOW(F ) = { +, , ), $ }
25
LL(1) Table Construction
Here now is the algorithm
to construct a predictive
parsing table.
26