You are on page 1of 26

Compiler

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 → 12k  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(E ) = {FIRST(T )  {} }


FIRST(T ) = {FIRST(F )  {} }
FIRST(F ) = {FIRST( '(')  {} }
={(}
10
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 → 12k  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

By rule (2) applied to production


F → ( E ), ‘)’ is also in
FOLLOW(E )

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

By rule (3) applied to


production E →T E' , $ and ‘)’
are in FOLLOW(E' )

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

You might also like