public void BeforeEveryTest()
        {
            var grammar = new ContextFreeGrammar('S');
            grammar.Produce("S", "t2");
            grammar.Produce("S", "vA", "vT");
            grammar.Produce("A", "t0");
            grammar.Produce("T", "vS", "vB");
            grammar.Produce("B", "t1");

            _parser = new TopDownParser(grammar);
        }
        public void Should_eliminate_all_epsilon_rules_when_converting_grammer_to_chomsky_normal_form()
        {
            var grammar = new ContextFreeGrammar("S");
            grammar.Produce("S", "vA", "vB");
            grammar.Produce("A", "t0");
            grammar.Produce("B");
            grammar.Produce("B", "t1");

            var cnf = grammar.ToChomskyNormalForm();
            var rules = cnf.GetRules("B");

            Assert.That(rules, Has.None.Empty);
        }
        public void Should_check_grammar_for_chomsky_normal_form()
        {
            var grammar = new ContextFreeGrammar("S");
            grammar.Produce("S", "t1", "t2", "t3");

            Assert.That(grammar.IsInChomskyNormalForm, Is.False);
        }
 public void Should_not_allow_creation_of_topdown_parser_with_invalid_grammar()
 {
     Assert.That(() =>
     {
         var grammar = new ContextFreeGrammar("S");
         grammar.Produce("S", "A", "B");
         new TopDownParser(grammar);
     }, Throws.ArgumentException);
 }
 public void BeforeEveryTest()
 {
     _grammar = new ContextFreeGrammar("S");
     _grammar.Produce("S");
     _grammar.Produce("S", "t2");
     _grammar.Produce("S", "vA", "vT");
     _grammar.Produce("A", "t0");
     _grammar.Produce("A", "t1");
     _grammar.Produce("T", "vS", "vB");
     _grammar.Produce("B", "t1");
 }
        public void Should_eliminate_all_unit_rules_when_converting_grammer_to_chomsky_normal_form()
        {
            var grammar = new ContextFreeGrammar("S");
            grammar.Produce("S", "vA", "vB");
            grammar.Produce("A", "vB");
            grammar.Produce("B", "t1");

            var cnf = grammar.ToChomskyNormalForm();
            var rules = cnf.GetRules("A");

            Debug.WriteLine(cnf);

            Assert.That(rules.Single().Single(), Is.Not.EqualTo(new Variable("B")));
        }
        public void Should_transform_all_rules_into_proper_form_when_converting_grammer_to_chomsky_normal_form()
        {
            var grammar = new ContextFreeGrammar("S");
            grammar.Produce("S", "t1", "t2", "t3");

            var cnf = grammar.ToChomskyNormalForm();
            var rules = cnf.GetRules("S");

            Assert.That(rules.Select(r => r.ToList()), Has.All.Count.LessThanOrEqualTo(2));
        }
 public void Should_not_allow_creation_of_recursive_unit_rules()
 {
     var grammar = new ContextFreeGrammar("S");
     Assert.That(() => grammar.Produce("S", "vS"), Throws.Exception);
 }