Consider the following grammar, where A is the initial symbol and {t,u,v,w,x} is the set of terminal symbols:
A -> B D B -> C w B | (eps) D -> D x B | v C -> t | t u
Something to keep in mind at all times: never eliminate the rules corresponding to the initial symbol
We start by noting the C singularities:
A -> B D B -> t w B | t u w B | (eps) D -> D x B | v
First we will eliminate left recursion in D and factoring "t" in B:
A -> B D B -> t B' | (eps) B' -> w B | u w B D -> v D' D' -> x B D' | (eps)
Eliminating the B left-corner in A:
A -> t B' D | D B -> t B' | (eps) B' -> w B | u w B D -> v D' D' -> x B D' | (eps)
Again:
A -> t B' D | v D' B -> t B' | (eps) B' -> w B | u w B D -> v D' D' -> x B D' | (eps)
FIRST(A) = { t, v } FOLLOW(A) = { $ } FIRST(B) = { t, (eps) } FOLLOW(B) = FOLLOW(B') FIRST(D') \ { (eps) } = { v, x, w } FIRST(B') = { w, u } FOLLOW(B') = FIRST(D) FOLLOW(B) = { v, x } FIRST(D) = { v } FOLLOW(D) = FOLLOW(A) = { $ } FIRST(D') = { x, (eps) } FOLLOW(D') = FOLLOW(A) FOLLOW(D) = { $, x, w }
| w | x | y | z | $ | ---+----------------------+----------------------+----------------------+----------------------+-----------------------+ A | | | | | | ---+----------------------+----------------------+----------------------+----------------------+-----------------------+ B | | | | | | ---+----------------------+----------------------+----------------------+----------------------+-----------------------+ B' | | | | | | ---+----------------------+----------------------+----------------------+----------------------+-----------------------+ D | | | | | | ---+----------------------+----------------------+----------------------+----------------------+-----------------------+ D' | | | | | | ---+----------------------+----------------------+----------------------+----------------------+-----------------------+