Predictive Parser
Predictive Parsing Algorithm
Eliminate Left Recursion
Algorithm to Compute First
Algorithm to Compute Follow
Algorithm to Construct Parsing Table
Parsing of Input String
Elimination of Left Recursion
A A α | β where α , β are strings and A is non
terminal.
After Elimination of Left Recursion
A β A ‘
A’ α A’ | ε
Algorithm to Compute First
Step 1 :- If ‘a’ is terminal then first of ‘a’ is { a}.
Means if A a , then First (A) = { a }, where a is terminal symbol.
Step 2:- If there is production of form
A A1 A2 A3 … An , where A1, A2, A3,…, An are non terminal
symbol, then First (A) = { First(A1) U First(A2) U First (A3) U …. U
First (An) } if A1,A2,A3,…,An derives to ε.
Cases :-
If A1 is not deriving to ε, then First(A) = { First (A1)}
If A1 derives to ε, then First(A) = { First(A1) U First(A2)}
If A1 and A2 derive to ε, then First (A) = { First(A1) U First(A2) U
First (A3) }
Algorithm to Compute Follow
Step 1:- Add ‘$’ to Follow(S), where S is a start symbol.
Step 2:- A α B β , then add First (β) except ε to
Follow(B).
Step 3:- If the production is of form A αB or A α
B β where β derives to ε with one or more derivation,
then copy Follow(A) into Follow(B).
S D V
D int | float | char
V id V’
V’ , id V’ | ε
First(S) = {
First (D) ={int , float, char }
First (V) = {
First(V’) ={
S D V
D int | float | char
V id V’
V’ , id V’ | ε
First(S) = {
First (D) ={ int , char, float }
First (V) = { id }
First(V’) ={
S D V
D int | float | char
V id V’
V’ , id V’ | ε
First(S) = {
First (D) ={ int , char, float }
First (V) = { id }
First(V’) ={ , }
S D V
D int | float | char
V id V’
V’ , id V’ | ε
First(S) = { First(D) } = { int, char, float }
First (D) ={ int , char, float }
First (V) = { id }
First(V’) ={ , }
S DV
D int | float | char
V id V’
V’ , id V’ | ε
Follow(S) = {$
Follow(D)={
Follow(V){
Follow(V’)={
S DV
D int | float | char
V id V’
V’ , id V’ | ε
Follow(S) = {$
Follow(D)={
Follow(V){$
Follow(V’)={
S DV
D int | float | char
V id V’
V’ , id V’ | ε
Follow(S) = {$
Follow(D)={id
Follow(V){$
Follow(V’)={
S DV
D int | float | char
V id V’
V’ , id V’ | ε
Follow(S) = {$ }
Follow(D)={id }
Follow(V){$ }
Follow(V’)={ }