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()); }
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(); }