Remove Useless Production Rules 

> P:=table():
P[S]:={[a,S],[A],[C]}:
P[A]:={[a]}:
P[B]:={[a,a]}:
P[C]:={[a,C,b]}:
cfg:=mkCFG({S,A,B,C},{a,b},S,op(P));
 

`:=`(cfg, CFG({A, C, B, S}, {a, b}, S, TABLE([B = {[a, a]}, A = {[a]}, C = {[a, C, b]}, S = {[a, S], [C], [A]}])))
`:=`(cfg, CFG({A, C, B, S}, {a, b}, S, TABLE([B = {[a, a]}, A = {[a]}, C = {[a, C, b]}, S = {[a, S], [C], [A]}])))
(10.4.1)
 

> removeUselessCFG(cfg);
 

CFG({A, S}, {a}, S, TABLE([A = {[a]}, S = {[a, S], [A]}])) (10.4.2)
 

> cfg := mkCFG({V0, V1, V2, V3},{a1, a2},V0,table([V1 = {[V1, V3, a2, a1], [V2, a1]}, V2 = {[V3, V0]}, V0 = {[V2]}]));
 

`:=`(cfg, CFG({V1, V0, V2, V3}, {a1, a2}, V0, TABLE([V1 = {[V1, V3, a2, a1], [V2, a1]}, V0 = {[V2]}, V2 = {[V3, V0]}])))
`:=`(cfg, CFG({V1, V0, V2, V3}, {a1, a2}, V0, TABLE([V1 = {[V1, V3, a2, a1], [V2, a1]}, V0 = {[V2]}, V2 = {[V3, V0]}])))
(10.4.3)
 

> removeUselessCFG(cfg);
 

CFG({}, {}, V0, TABLE([])) (10.4.4)
 

> cfg := mkCFG({V2, V1, V3, V0},{a2, a1},V0,table([V2 = {[V2, V3], [lambda], [V0], [a1, V3, V1]}, V1 = {[a1, V0]}, V3 = {[lambda]},V0 = {[V2, V3], [a1], [V0], [a1, V3, V2]}]));
 

`:=`(cfg, CFG({V1, V0, V2, V3}, {a1, a2}, V0, TABLE([V1 = {[a1, V0]}, V0 = {[V0], [V2, V3], [a1, V3, V2], [a1]}, V3 = {[lambda]}, V2 = {[lambda], [V0], [V2, V3], [a1, V3, V1]}])))
`:=`(cfg, CFG({V1, V0, V2, V3}, {a1, a2}, V0, TABLE([V1 = {[a1, V0]}, V0 = {[V0], [V2, V3], [a1, V3, V2], [a1]}, V3 = {[lambda]}, V2 = {[lambda], [V0], [V2, V3], [a1, V3, V1]}])))
(10.4.5)
 

> removeUselessCFG(cfg);
 

CFG({V1, V0, V2, V3}, {a1}, V0, TABLE([V1 = {[a1, V0]}, V0 = {[V0], [V2, V3], [a1, V3, V2], [a1]}, V3 = {[lambda]}, V2 = {[lambda], [V0], [V2, V3], [a1, V3, V1]}]))
CFG({V1, V0, V2, V3}, {a1}, V0, TABLE([V1 = {[a1, V0]}, V0 = {[V0], [V2, V3], [a1, V3, V2], [a1]}, V3 = {[lambda]}, V2 = {[lambda], [V0], [V2, V3], [a1, V3, V1]}]))
(10.4.6)
 

> cfg:=mkCFG({V0, V1, V2, V3, V4},{a1, a2, a3},V0,table([V4 = {[a3]}, V0 = {[V3, V0, V4, a2, V1]}, V1 = {[V1, a1, V4, a2, V2]}, V3 = {[a3, V3, a2, V4, V0]}]));
 

`:=`(cfg, CFG({V1, V0, V2, V3, V4}, {a1, a2, a3}, V0, TABLE([V3 = {[a3, V3, a2, V4, V0]}, V4 = {[a3]}, V1 = {[V1, a1, V4, a2, V2]}, V0 = {[V3, V0, V4, a2, V1]}])))
`:=`(cfg, CFG({V1, V0, V2, V3, V4}, {a1, a2, a3}, V0, TABLE([V3 = {[a3, V3, a2, V4, V0]}, V4 = {[a3]}, V1 = {[V1, a1, V4, a2, V2]}, V0 = {[V3, V0, V4, a2, V1]}])))
(10.4.7)
 

> removeUselessCFG(cfg);
 

CFG({}, {}, V0, TABLE([])) (10.4.8)
 

> cfg:=mkCFG({V0, V1, V4, V2, V3},{a1, a2, a3},V0,table([V1 = {[lambda]}, V3 = {[V1, V0, V4], [a1, V4]}, V0 = {[V1, V2, a1, V0], [lambda], [V4, V1]},V4={[a1,a2]}]));
 

`:=`(cfg, CFG({V1, V0, V2, V3, V4}, {a1, a2, a3}, V0, TABLE([V3 = {[V1, V0, V4], [a1, V4]}, V4 = {[a1, a2]}, V1 = {[lambda]}, V0 = {[V1, V2, a1, V0], [V4, V1], [lambda]}])))
`:=`(cfg, CFG({V1, V0, V2, V3, V4}, {a1, a2, a3}, V0, TABLE([V3 = {[V1, V0, V4], [a1, V4]}, V4 = {[a1, a2]}, V1 = {[lambda]}, V0 = {[V1, V2, a1, V0], [V4, V1], [lambda]}])))
(10.4.9)
 

> removeUselessCFG(cfg);
 

CFG({V1, V0, V4}, {a1, a2}, V0, TABLE([V4 = {[a1, a2]}, V1 = {[lambda]}, V0 = {[V4, V1], [lambda]}])) (10.4.10)
 

> cfg:=mkCFG({V0, V1, V4, V2, V3},{a1, a2, a3},V0,table([V2 = {[lambda], [a2, V3]}, V3 = {[a2, V1, V0, V3]}, V4 = {[a3, a1], [lambda]}, V0 = {[lambda], [V4, V0, V3, a1]}]));
 

`:=`(cfg, CFG({V1, V0, V2, V3, V4}, {a1, a2, a3}, V0, TABLE([V3 = {[a2, V1, V0, V3]}, V4 = {[a3, a1], [lambda]}, V0 = {[V4, V0, V3, a1], [lambda]}, V2 = {[a2, V3], [lambda]}])))
`:=`(cfg, CFG({V1, V0, V2, V3, V4}, {a1, a2, a3}, V0, TABLE([V3 = {[a2, V1, V0, V3]}, V4 = {[a3, a1], [lambda]}, V0 = {[V4, V0, V3, a1], [lambda]}, V2 = {[a2, V3], [lambda]}])))
(10.4.11)
 

> removeUselessCFG(cfg);
 

CFG({V0}, {}, V0, TABLE([V0 = {[lambda]}])) (10.4.12)
 

> cfg:=mkCFG({V0, V1, V2, V3, V4},{a1, a2, a3},V0,table([V0 = {[lambda], [V2]}, V2 = {[a2, a1], [V0, V4, a1, V1, a3], [V2, V1, V3, a1, V0]}, V4 = {[lambda]}, V3 = {[lambda]}]));
 

`:=`(cfg, CFG({V1, V0, V2, V3, V4}, {a1, a2, a3}, V0, TABLE([V3 = {[lambda]}, V4 = {[lambda]}, V0 = {[V2], [lambda]}, V2 = {[a2, a1], [V0, V4, a1, V1, a3], [V2, V1, V3, a1, V0]}])))
`:=`(cfg, CFG({V1, V0, V2, V3, V4}, {a1, a2, a3}, V0, TABLE([V3 = {[lambda]}, V4 = {[lambda]}, V0 = {[V2], [lambda]}, V2 = {[a2, a1], [V0, V4, a1, V1, a3], [V2, V1, V3, a1, V0]}])))
(10.4.13)
 

> removeUselessCFG(cfg);
 

CFG({V0, V2}, {a1, a2}, V0, TABLE([V0 = {[V2], [lambda]}, V2 = {[a2, a1]}])) (10.4.14)
 

>
 

> cfg:=randomCFG(5,3);
 

`:=`(cfg, CFG({V1, V4, V0, V2, V3}, {a1, a2, a3}, V0, TABLE([V4 = {[V1]}, V1 = {[V0, a2, V3]}, V0 = {[V0, a1]}, V3 = {[V3, V1]}])))
`:=`(cfg, CFG({V1, V4, V0, V2, V3}, {a1, a2, a3}, V0, TABLE([V4 = {[V1]}, V1 = {[V0, a2, V3]}, V0 = {[V0, a1]}, V3 = {[V3, V1]}])))
(10.4.15)
 

> removeUselessCFG(cfg);
 

CFG({}, {}, V0, TABLE([])) (10.4.16)
 

>
 

>