[antlr-interest] antlr bug or grammar problem?
Monty Zukowski
monty at codetransform.com
Thu Sep 23 11:45:32 PDT 2004
A syntactic predicate doesn't work by modifying the lookahead, it
actually tests the grammar fragment in 'guessing' mode and then if that
is ok it will proceed. I don't think you've found a bug in ANTLR.
However, you were looking at the code for a reason. What's the
original bug?
Monty
ANTLR & Java Consultant -- http://www.codetransform.com
ANSI C/GCC transformation toolkit --
http://www.codetransform.com/gcc.html
Embrace the Decay -- http://www.codetransform.com/EmbraceDecay.html
On Sep 23, 2004, at 11:10 AM, kozchris wrote:
> I'm using antlr 2.7.4.
> I've run the grammar building both a cpp and java version with same
> results.
>
> You can see the grammar file here
> http://www.synergyss.com/SCRExpression.g.
> and the java output here
> http://www.synergyss.com/SCRExpressionParser.java
>
> The issue is showing up in the parser code generated for rule
> eventExpr on line 279.
> The line:
> ( BECAME_TRUE | BECAME_FALSE | CHANGED ) => expr {printf("processing
> simple event expr\n");}
>
> is showing up as this in the generated parser.
>
> <<<< begin code snip
> switch ( LA(1)) {
> case BOOLEAN:
> case DoubleDoubleConst:
> case FloatDoubleConst:
> case LongDoubleConst:
> case IntBinaryConst:
> case IntHexConst:
> case LongHexConst:
> case UnsignedHexConst:
> case IntOctalConst:
> case LongOctalConst:
> case UnsignedOctalConst:
> case IntIntConst:
> case LongIntConst:
> case UnsignedIntConst:
> case LPAREN:
> case PLUS:
> case MINUS:
> case LNOT:
> case BNOT:
> case BECAME_TRUE:
> case BECAME_FALSE:
> case CHANGED:
> case ID:
> {
> expr();
> astFactory.addASTChild(currentAST, returnAST);
> if ( inputState.guessing==0 ) {
> printf("processing simple event expr\n");
> }
> eventExpr_AST = (AST)currentAST.root;
> break;
> }
> <<<< end code snip
>
> What is strange is that if I change line 281 from:
> ( BECAME_TRUE | BECAME_FALSE | CHANGED ) => expr {printf("processing
> simple event expr\n");}
>
> to:
>
> ( BECAME_TRUE | BECAME_FALSE | CHANGED ) => simpleEventExpr
> {printf("processing simple event expr\n");}
>
> the code generated is correct.
>
> <<<< begin code snip
> switch ( LA(1)) {
> case BECAME_TRUE:
> case BECAME_FALSE:
> case CHANGED:
> {
> simpleEventExpr();
> astFactory.addASTChild(currentAST, returnAST);
> if ( inputState.guessing==0 ) {
> printf("processing simple event expr\n");
> }
> eventExpr_AST = (AST)currentAST.root;
> break;
> }
> <<<< end code snip
>
> Any ideas on how to solve this problem?
>
> Thanks for the help.
> Chris
>
>
>
>
>
>
> Yahoo! Groups Links
>
>
>
>
>
>
>
Yahoo! Groups Links
<*> To visit your group on the web, go to:
http://groups.yahoo.com/group/antlr-interest/
<*> To unsubscribe from this group, send an email to:
antlr-interest-unsubscribe at yahoogroups.com
<*> Your use of Yahoo! Groups is subject to:
http://docs.yahoo.com/info/terms/
More information about the antlr-interest
mailing list