public void Should_replace_epsilon_rules_occurences_one_by_one() { var grammar = new ContextFreeGrammar("S") .Produce("S", "vA", "t1", "vA") .Produce("A") .Produce("A", "t1") .ToChomskyNormalForm(); Debug.WriteLine(grammar); var any = grammar.GetRules(grammar.StartVariable).Any(r => r.First().Equals(new Variable("A"))); Assert.That(any, Is.True); }
public void Should_not_produce_unit_rules_when_transforming_grammar_to_chomsky_normal_form() { var grammar = new ContextFreeGrammar("S") .Produce("S", "vA") .Produce("A", "t1") .ToChomskyNormalForm(); Debug.WriteLine(grammar); var existsUnitRules = grammar.GetRules(grammar.StartVariable).Any(r => r.Count() == 1 && r.Single() is Variable); Assert.That(existsUnitRules, Is.False); }