SimplifyCFG
| > | cfg:=mkCFG({V0, V1, V2, V3, V4}, {a1, a2, a3}, V0, table([
V0 = {[lambda], [a3, V1, a1, a2]}, V1 = {[a1], [a3],[V3]}, V2 = {[V2]}, V4 = {[lambda]}, V3 = {[a2, V1, V3, a1], [a1, V0, V2, V1]} ])); |
| (10.5.1) |
| > | removeLambdaCFG(cfg);
removeUnitCFG(%); removeUselessCFG(%); |
| (10.5.2) |
| (10.5.2) |
| (10.5.2) |
| > | ## Question 1
cfg:=mkCFG({V0, V1, V2, V3, V4},{a1, a2, a3},V0,table([V0 = {[lambda], [a1, V3, V2, a2, a3, V4]}, V1 = {[a2, V3, V2]}, V2 = {[lambda], [V2]}, V4 = {[V0], [lambda]}, V3 = {[lambda]}])); |
| (10.5.3) |
| > | removeLambdaCFG(cfg);
removeUnitCFG(%); #removeUselessCFG(%); |
| (10.5.4) |
| (10.5.4) |
| > | ## Question 2
cfg:=mkCFG({V0, V1, V2, V3, V4},{a1, a2, a3},V0,table([V0 = {[lambda], [V3]}, V1 = {[lambda]}, V2 = {[V1, a3]}, V4 = {[V1]}, V3 = {[V4, V3, V0], [a1, a3, V0, V1, V4]}])); |
| (10.5.5) |
| > | removeLambdaCFG(cfg);
removeUnitCFG(%); #removeUselessCFG(%); |
| (10.5.6) |
| (10.5.6) |
| > |
| > | while true do
cfg:=randomCFG(5,3): cfg1:=removeLambdaCFG(cfg): if nops(op(op(4,cfg))) = nops(op(op(4,cfg1))) then next: fi: cfg2:=removeUnitCFG(cfg1): if nops(op(op(4,cfg1))) = nops(op(op(4,cfg2))) then next: fi: cfg3:=removeUselessCFG(cfg2): if nops(op(op(4,cfg2))) <> nops(op(op(4,cfg3))) and nops(op(op(4,cfg3))) >= 2 then break: fi: od: cfg; cfg1; cfg2; cfg3; |
| (10.5.7) |
| (10.5.7) |
| (10.5.7) |
| (10.5.7) |
| > |