[antlr-interest] Rewrite bug?

Jim Idle jimi at temporal-wave.com
Thu Jul 19 10:53:01 PDT 2012


I believe that this is a bug that has already been fixed in the
development version of the code.

Jim

> -----Original Message-----
> From: antlr-interest-bounces at antlr.org [mailto:antlr-interest-
> bounces at antlr.org] On Behalf Of Surj Basan
> Sent: Thursday, July 19, 2012 8:56 AM
> To: antlr-interest at antlr.org
> Subject: Re: [antlr-interest] Rewrite bug?
>
> Hi,
>
> No replies yet, so I'm guessing I've either missed something or this is
> a genuine bug.
>
> If anyone knows, could you send a quick reply so I can move forward.
>
> To recap: ANTLR is producing code that does not have a variable
> declaration in the Parser.
>
> Thanks,
> Surj
>
> On 16 July 2012 07:24, Surj Basan <s.basan at surge.it> wrote:
>
> > Hi All,
> >
> > I have a Java grammar (taken from the openjdk, one linked off the
> > ANTLR site:
> > http://openjdk.java.net/projects/compiler-grammar/antlrworks/Java.g).
> >
> > One of the rewrite rules produces Java code which does not have a var
> > decl, and so does not compile.
> >
> > I took the rule straight out of Terrence Parr's page on rewrite rules
> > and added it to the grammar (
> > http://www.antlr.org/wiki/display/ANTLR3/Tree+construction, paragraph
> > beginning "Using a rewrite rule at a
> > non-extreme-right-edge-of-production
> > location is ok..").
> >
> > Can someone explain if this is a bug in ANTLR? Code is below, for
> ref.
> >
> > Grammar rule:
> >
> > statement
> >     :   [more rules here]
> >     |   'if' parExpression s1=statement ('else' s2=statement ->
> ^('if'
> > parExpression $s1 $s2)
> >                                         |                      ->
> ^('if'
> > parExpression $s1)
> >                                         )
> >     [more rules here]
> >     ;
> >
> >
> > Generated parser code:
> >
> >     // $ANTLR start synpred139_AntlrJava
> >     public final void synpred139_AntlrJava_fragment() throws
> > RecognitionException {
> >         void  =null;
> >
> >
> >         // AntlrJava.g:926:42: ( 'else' s2= statement )
> >         // AntlrJava.g:926:42: 'else' s2= statement
> >         {
> >
> >
> match(input,KEYWORD_ELSE,FOLLOW_KEYWORD_ELSE_in_synpred139_AntlrJava49
> > 27);
> > if (state.failed) return ;
> >
> >         pushFollow(FOLLOW_statement_in_synpred139_AntlrJava4931);
> >         s2=statement();
> >
> >         state._fsp--;
> >         if (state.failed) return ;
> >
> >         }
> >
> >     }
> >
> > (For what it's worth, I find that various permutations of rewrite
> > rules exhibit the same behaviour: missing var decls in the generated
> parser.
> > Java.g is a pretty complex grammar. Would I have more luck if I split
> > the grammar into the lexer/parser and a separate tree building one,
> > instead of combining it all into a single file?)
> >
> > Any help greatly appreciated.
> >
> > Thanks,
> > Surj
> >
>
> List: http://www.antlr.org/mailman/listinfo/antlr-interest
> Unsubscribe: http://www.antlr.org/mailman/options/antlr-interest/your-
> email-address


More information about the antlr-interest mailing list