Ejemplo n.º 1
0
        public void TestGreibachNormalForm()
        {
            Assert.IsFalse(grammar1.InGreibachNormalForm());
            Assert.IsFalse(grammar2.InGreibachNormalForm());
            Assert.IsFalse(grammar3.InGreibachNormalForm());
            Assert.IsTrue(grammar1.ToGreibachNormalForm().InGreibachNormalForm());
            Assert.IsTrue(grammar2.ToGreibachNormalForm().InGreibachNormalForm());
            CFG grammar3Greibach = grammar3.ToGreibachNormalForm();

            Assert.IsTrue(grammar3Greibach.InGreibachNormalForm());
            Assert.IsTrue(derives(grammar3Greibach, ""));
            Assert.IsTrue(derives(grammar3Greibach, "()"));
            Assert.IsTrue(derives(grammar3Greibach, "()()"));
            Assert.IsTrue(derives(grammar3Greibach, "(())"));
            Assert.IsTrue(derives(grammar3Greibach, "(()())"));
            Assert.IsTrue(derives(grammar3Greibach, "()(()(()))(())"));
            Assert.IsFalse(derives(grammar3Greibach, "("));
            Assert.IsFalse(derives(grammar3Greibach, ")"));
            Assert.IsFalse(derives(grammar3Greibach, "())"));
            Assert.IsFalse(derives(grammar3Greibach, "(()()"));
            Assert.IsFalse(derives(grammar3Greibach, "((())))"));
            Assert.IsFalse(derives(grammar3Greibach, "(()(())"));
            Assert.IsFalse(derives(grammar3Greibach, "()(()((()))(())))"));
            Assert.IsTrue(CFGBuilder.Start("A")
                          .Derive("A").To("a")
                          .Derive("A").ToEpsilon()
                          .Build().InGreibachNormalForm());
            Assert.IsFalse(CFGBuilder.Start("A")
                           .Derive("A").To("a", "A")
                           .Derive("A").ToEpsilon()
                           .Build().InGreibachNormalForm());
        }
Ejemplo n.º 2
0
        public void TestReversed()
        {
            CFG reversed = CFGBuilder.Start("a")
                           .Derive("a").To("c", "b")
                           .Derive("a").To("f", "e", "d")
                           .Derive("b").To("a")
                           .Derive("c").ToEpsilon()
                           .Build();

            Assert.AreEqual(reversed, grammar1.Reversed());
        }
Ejemplo n.º 3
0
        public void TestRemoveEpsilonProductions()
        {
            CFG grammar2Transformed = grammar2.RemoveEpsilonProductions();
            CFG expectedresult      = CFGBuilder.Start("a")
                                      .Derive("a").ToEpsilon()
                                      .Derive("a").To("c", "d")
                                      .Derive("a").To("d")
                                      .Derive("c").To("d")
                                      .Build();

            Assert.AreEqual(expectedresult, grammar2Transformed);
        }
Ejemplo n.º 4
0
        public void TestSimplify()
        {
            Assert.AreEqual(grammar1, grammar1.Simplify());
            Assert.AreEqual(grammar2, grammar2.Simplify());
            Assert.AreEqual(grammar3, grammar3.Simplify());
            CFG expectedResult = CFGBuilder.Start("S")
                                 .Derive("S").To("S", "A")
                                 .Derive("A").ToEpsilon()
                                 .Build();

            Assert.AreEqual(expectedResult, grammar4.Simplify());
        }
Ejemplo n.º 5
0
        public void TestMoreGrammars()
        {
            CFG grammar = CFGBuilder.Start("X")
                          .Derive("X").To("a", "Y")
                          .Derive("X").ToEpsilon()
                          .Derive("Y").To("b", "Z")
                          .Derive("Z").To("c", "X")
                          .Build().Reversed();

            Assert.IsTrue(grammar.HasLeftRecursion());
            grammar.ToGreibachNormalForm();
        }
Ejemplo n.º 6
0
 /// <summary>
 /// Constructs a new offset registration mapping.
 /// </summary>
 /// <param name="builder">The parent builder instance.</param>
 /// <param name="instructionIndex">
 /// The current instruction index to map to.
 /// </param>
 public RegisterOffsetMapping(CFGBuilder builder, int instructionIndex)
 {
     Builder          = builder;
     InstructionIndex = instructionIndex;
 }
Ejemplo n.º 7
0
 public CFGBuilderDerive(CFGBuilder parent, string lhs)
 {
     this.parent = parent;
     this.lhs    = lhs;
 }