コード例 #1
0
        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);
        }
コード例 #2
0
        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);
        }