[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