ToCNF creates unreachable nonterminals
Nonterminals [0]
and [1]
are unreachable in this example.
> execute string::Parse @Grammar "CFG ({A,B,C,D},
{0,1},
{
A -> B C | 0 | #E,
B -> B C | 0,
C -> C B | B C | 1,
D -> B D | 0 | 1
},
A)" | ToCNF - > $g
> print $g
(CNF nonterminalAlphabet = {[A], [B], [C], [D], [0], [1]}terminalAlphabet = {0, 1}initialSymbol = [A]rules = {([A], {0, ([B], [C])}), ([B], {0, ([B], [C])}), ([C], {1, ([B], [C]), ([C], [B])}), ([D], {0, 1, ([B], [D])}), ([0], {0}), ([1], {1})}generatesEpsilon = 1)
According to BI-AAG slides we should create these nonterminals (that generate only one terminal) only when needed.