Note on the Order of Removal Steps 

> cfg1:=mkCFG({S, A, B},{a,b},S,table([A = {[lambda]}, B = {[lambda], [S]}, S = {[lambda], [a, A, b, B]}]));
 

`:=`(cfg1, CFG({A, B, S}, {a, b}, S, TABLE([B = {[S], [lambda]}, A = {[lambda]}, S = {[a, A, b, B], [lambda]}]))) (10.6.1)
 

> # Removal of Lambda Production Rules may
# introduce new useless production rules
removeLambdaCFG(cfg1);
 

CFG({A, B, S}, {a, b}, S, TABLE([B = {[S]}, S = {[a, A, b], [a, b, B], [a, A, b, B], [a, b]}])) (10.6.2)
 

> cfg2:=mkCFG({S,A,B},{a},S,table([S={[a,A]},A={[B]},B={[\lambda]}]));
 

`:=`(cfg2, CFG({A, B, S}, {a}, S, TABLE([B = {[lambda]}, A = {[B]}, S = {[a, A]}]))) (10.6.3)
 

> # Removal of Unit Production Rules may
# introduce new useless production rules
# and new lambda production rules
removeUnitCFG(cfg2);
 

CFG({A, B, S}, {a}, S, TABLE([B = {[lambda]}, A = {[lambda]}, S = {[a, A]}])) (10.6.4)
 

> # Removal of Lambda Production Rules may
# introduce new unit production rules
cfg3:=mkCFG({B, S, A},{a, b},S,table([S = {[a,b], [A,B]}, B = {[lambda], [a, A, b, B]}, A = {[lambda]}]));
 

`:=`(cfg3, CFG({A, B, S}, {a, b}, S, TABLE([B = {[a, A, b, B], [lambda]}, A = {[lambda]}, S = {[A, B], [a, b]}]))) (10.6.5)
 

> removeLambdaCFG(cfg3);
 

CFG({A, B, S}, {a, b}, S, TABLE([B = {[a, A, b], [a, b, B], [a, A, b, B], [a, b]}, S = {[B], [A, B], [a, b], [A]}]))
CFG({A, B, S}, {a, b}, S, TABLE([B = {[a, A, b], [a, b, B], [a, A, b, B], [a, b]}, S = {[B], [A, B], [a, b], [A]}]))
(10.6.6)
 

>
 

>