[antlr-interest] Re: antlr bug or grammar problem?
kozchris
csnyder at alumni.ncsu.edu
Thu Sep 23 11:55:15 PDT 2004
shouldn't a line like this
> > ( BECAME_TRUE | BECAME_FALSE | CHANGED ) => expr
produce code like this
> > switch ( LA(1)) {
> > case BECAME_TRUE:
> > case BECAME_FALSE:
> > case CHANGED:
> > {
> > expr();
--- In antlr-interest at yahoogroups.com, Monty Zukowski <monty at c...> wrote:
> 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