예제 #1
0
 public void TestRemoveLeftRecursion()
 {
     Assert.IsTrue(grammar1.HasLeftRecursion());
     Assert.IsFalse(grammar1.RemoveLeftRecursion().HasLeftRecursion());
     Assert.IsFalse(grammar2.HasLeftRecursion());
     Assert.AreEqual(grammar2, grammar2.RemoveLeftRecursion());
     Assert.IsTrue(grammar3.HasLeftRecursion());
     Assert.IsFalse(grammar3.RemoveLeftRecursion().HasLeftRecursion());
 }
예제 #2
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();
        }