public void TestIdenticalRules() /*throws Exception*/ { Grammar g = new Grammar( "lexer grammar t;\n" + "A : 'a' ;\n" + "B : 'a' ;\n"); // can't reach this string expecting = ".s0-'a'->.s1\n" + ".s1-<EOT>->:s2=>1\n"; ErrorQueue equeue = new ErrorQueue(); ErrorManager.SetErrorListener(equeue); checkDecision(g, 1, expecting, new int[] { 2 }); assertEquals("unexpected number of expected problems", 1, equeue.size()); Message msg = (Message)equeue.errors[0]; assertTrue("warning must be an unreachable alt", msg is GrammarUnreachableAltsMessage); GrammarUnreachableAltsMessage u = (GrammarUnreachableAltsMessage)msg; assertEquals("[2]", u.alts.ToElementString()); }
public void TestNonGreedyLoopThatNeverLoops() /*throws Exception*/ { Grammar g = new Grammar( "lexer grammar t;\n" + "DUH : (options {greedy=false;}:'x')+ ;"); // loop never matched string expecting = ":s0=>2" + NewLine; ErrorQueue equeue = new ErrorQueue(); ErrorManager.SetErrorListener(equeue); checkDecision(g, 1, expecting, new int[] { 1 }); Assert.AreEqual(1, equeue.size(), "unexpected number of expected problems"); Message msg = (Message)equeue.errors[0]; Assert.IsTrue(msg is GrammarUnreachableAltsMessage, "warning must be an unreachable alt"); GrammarUnreachableAltsMessage u = (GrammarUnreachableAltsMessage)msg; Assert.AreEqual("[1]", u.alts.ToElementString()); }