示例#1
0
        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());
        }
示例#2
0
        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());
        }