- Data Structure
- Networking
- RDBMS
- Operating System
- Java
- MS Excel
- iOS
- HTML
- CSS
- Android
- Python
- C Programming
- C++
- C#
- MongoDB
- MySQL
- Javascript
- PHP
- Physics
- Chemistry
- Biology
- Mathematics
- English
- Economics
- Psychology
- Social Studies
- Fashion Studies
- Legal Studies
- Selected Reading
- UPSC IAS Exams Notes
- Developer's Best Practices
- Questions and Answers
- Effective Resume Writing
- HR Interview Questions
- Computer Glossary
- Who is Who
Find FIRST & FOLLOW for the following Grammar
E → TE′
E → +TE′|ε
T → FT′
T′ →* FT′|ε
F → (E)|id
Solution
Computation of FIRST
- E →TE′
Applying Rule (4b) of FIRST
Since FIRST (T) does not contain ε, or T does not derive ε.
∴ FIRST (E) = FIRST(TE′) = FIRST(T)
∴ FIRST (E) = {FIRST(T)} (1)
- E → +TE′|ε
Applying Rule (3) of FIRST
Comparing E′ → +TE′with X → aα
∴ FIRST(E′) = {+}
Apply Rule (2) on E′ → ε
FIRST (E′) = {ε}
∴ FIRST(E′) = {+, ε} (2)
- T→FT′
Apply rule (4b) of FIRST
Since, FIRST(F) does not derive ε
∴ FIRST(T) = FIRST(FT′) = FIRST(F)
∴ FIRST(T) = {FIRST(F)} (3)
- T′→*FT′|ε
Comparing with rule (2) & (3) of FIRST, we get
∴ FIRST(T′) = {ε,∗} (4)
- F→(E)|id
Comparing with rule (3) of FIRST
∴ FIRST(F) = {(, id} (5)
Combining statement (1), (2), (3),(4),(5)
FIRST (E) = {FIRST(T)}
FIRST(E′) = {+, ε}
FIRST(T) = {FIRST(F)}
FIRST(T′) = {ε,*}
FIRST(F) = {(, id}
∴ FIRST (E) = FIRST(T) = FIRST(F) = {(, id}
FIRST(E′) = {+, ε}
FIRST(T′) = {ε,*}
Computation of FOLLOW
E → TE′
E → +TE′|ε
T → FT′
T′ →∗ FT′|ε
F → (E)|id
Applying Rule (1) FOLLOW
∴ FOLLOW (E) = {$} (1)
- E → TE′
Applying Rule (2) FOLLOW
E → | ε | T | E′ |
A → | α | B | β |
∴ A = E, α = ε, B = T, β = E′
Since FIRST (β) = FIRST (E′) contains ε.
∴ Rule (2b) of FOLLOW
FOLLOW (T) = FIRST (E′) − {ε} ∪ FOLLOW (E)
FOLLOW (T) = {+, ε} − {ε} ∪ FOLLOW (E)
∴ FOLLOW (T) = {+} ∪ FOLLOW (E) (2)
Applying Rule (3) of FOLLOW
E → | T | E′ |
A → | α | β |
A = E, α = T, B = E′
∴ FOLLOW (E′) = {FOLLOW (E)} (3)
- E′ → +TE′
Applying Rule (2)
E → | T | E′ |
A → | B | β |
A = E, α = +, B = T, β = E′
Since FIRST(β) = FIRST(E′)contains ε.
∴ Rule (2b) of FOLLOW
∴ FOLLOW (T) = FIRST(E′) − {ε} ∪ FOLLOW(E′)
∴ FOLLOW (T) = {+, ε} − {ε} ∪ FOLLOW(E′)
∴ FOLLOW (T) = {+} ∪ FOLLOW(E′) (4)
- Applying Rule (3)
E → | +T | E′ |
A → | α | B |
∴ FOLLOW(E′) = {FOLLOW(E′)} (5)
- T′ →FT′
Applying Rule (2)
T → | ε | F | T′ |
A → | α | B | β |
Since FIRST(β)derives ε.
∴ Rule (2b) of FOLLOW
∴ FOLLOW (F) = FIRST(T′) − {ε} ∪ FOLLOW(T)
∴ FOLLOW (F) = {∗, ε} − {ε} ∪ FOLLOW(T)
∴ FOLLOW (F) = {∗} ∪ FOLLOW(T) (6)
Applying Rule (3)
T → | F | T′ |
A → | α | B |
∴ FOLLOW(T′) = {FOLLOW(T)} (7)
- T →*FT′|ε
Applying Rule (2) FOLLOW
T′ → | * | F | T′ |
A → | α | B | β |
FIRST(β) = FIRST(T′) contains ε or T′ derives ε.
∴ Rule (2b)
∴ FOLLOW (F) = FIRST(T′) − {ε} ∪ FOLLOW(T′)
∴ FOLLOW (F) = {*, ε} − {ε} ∪ FOLLOW(T′)
∴ FOLLOW (F) = {*} ∪ FOLLOW(T′) (8)
Applying Rule (3) of FOLLOW
T′ → | *F | T′ |
A → | α | B |
∴ FOLLOW(T′) = {FOLLOW(T′)} (9)
- F→(E)
Applying Rule (2)
F → | ( | E | ) |
A → | α | B | β |
FIRST(β) or FIRST( )) = {)} do not contain ε.
∴ Rule (2a)
∴ FOLLOW (E) = FIRST( ))
∴ FOLLOW (E) = {)} (10)
Rule (3) does not apply to this production.
As A → α B has B nonterminal at the right corner of R. H. S of production. But F → (E)has ) the terminal on its right corner.
Rule (2) and Rule (3) does not apply to the remaining productions, as they don’t match with rules.
Combining Production (1) to (10)
FOLLOW (E) = {$} (1)
FOLLOW (T) = {+} ∪ FOLLOW (E) (2)
FOLLOW (E′) = {FOLLOW (E)} (3)
FOLLOW (T) = {+} ∪ FOLLOW(E′) (4)
FOLLOW(E′) = {FOLLOW(E′)} (5)
FOLLOW (F) = {*} ∪ FOLLOW(T) (6)
FOLLOW(T′) = {FOLLOW(T)} (7)
FOLLOW (F) = {*} ∪ FOLLOW(T′) (8)
FOLLOW(T′) = {FOLLOW(T′)} (9)
FOLLOW (E) = {)} (10)
From (1), (3) and (10)
FOLLOW (E) = FOLLOW(E′) = {$, )} (11)
∴ From rule 4, 7, and 11
∴ FOLLOW (T) = {+} ∪ FOLLOW(E′)
∴ FOLLOW (T) = {+} ∪ {$, )}
∴ FOLLOW (T) = {+, ), $}
FOLLOW (T′) = { FOLLOW (T)} = {+, ), $} (12)
∴ From statement 6, 8 and 12
FOLLOW (F) = {*} ∪ FOLLOW(T)
FOLLOW (F) = {*} ∪ {+, ), $, }
FOLLOW (F) = (*, +, ), $} (13)
∴ Statements 11, 12 and 13 give the required answer
FOLLOW (E) = FOLLOW(E′) = { ), $}
FOLLOW (T) = FOLLOW(T′) = {+, ), $}
FOLLOW (F) = {+,*, ), $}