[antlr-interest] Why is ANTLR getting lost?
shmuel siegel
antlr at shmuelhome.mine.nu
Wed Feb 20 06:04:06 PST 2008
Jon Schewe wrote:
> I've figured out that ANTLR is dying in the DFA when it's trying to
> determine which branch of the constraintDecl rule to follow. Attached
> is the grammar, suggestions on how to resolve this are very welcome.
>
> Test case is here:
> /**
> * @throws RecognitionException
> */
> @Test
> public void testConstraintDecl0() throws RecognitionException {
> final String data = "constraint3: 5.0 <= 6 + 6 * a[1 + 3] * c - 1
> <= 10.0;";
>
> final GHOCESLexer lexer = new GHOCESLexer(new
> ANTLRStringStream(data));
> final CommonTokenStream tokens = new CommonTokenStream(lexer);
> final GHOCESParser parser = new GHOCESParser(tokens);
> final GHOCESParser.constraintDecl_return r = parser.constraintDecl();
> Assert.assertNotNull(r);
> }
>
I can't tell you why but I can tell you that the dfa predictor is
failing on
(addExpr[true] EQ) => addExpr[true] EQ addExpr[false]
| (number LE addExpr[true] LE) => lb=number LE addExpr[false] LE
ub=number
| (addExpr[true] LE) => ae+=addExpr[true] LE ae+=addExpr[false]
Note that the second alternative satisfies the conditions of the
condition of the third alternative. If you eliminate the third
alternative, the rule works. The rule also works if you change the third
alternative to be different then the second, say by adding LE before
addExpr. I suspect that something is wrong with the dfa predictor.
More information about the antlr-interest
mailing list