[antlr-interest] Rewrite bug?

Surj Basan s.basan at surge.it
Fri Jul 20 03:56:24 PDT 2012


Thanks Jim - yep I'm on 3.4.

Can you confirm: if I get the latest v3 from git I should have a working
version?

Surj

On 19 July 2012 18:59, Jim Idle <jimi at temporal-wave.com> wrote:

> You are using 3.3, he is likely using 3.4, which has the big and which is
> now fixed in the mainline at least.
>
> Jim
>
> > -----Original Message-----
> > From: antlr-interest-bounces at antlr.org [mailto:antlr-interest-
> > bounces at antlr.org] On Behalf Of Bart Kiers
> > Sent: Thursday, July 19, 2012 10:51 AM
> > To: Surj Basan
> > Cc: antlr-interest at antlr.org
> > Subject: Re: [antlr-interest] Rewrite bug?
> >
> > Hi Surj,
> >
> > I could not reproduce this. Here's what I did on my (Linux) pc:
> >
> > wget http://surge.it/static/antlr/JavaBroken.g
> > wget http://www.antlr.org/download/antlr-3.3-complete.jar
> > java -cp antlr-3.3-complete.jar org.antlr.Tool JavaBroken.g javac -cp
> > antlr-3.3-complete.jar *.java
> >
> > ANTLR does produce an error because you have an empty `tokens{ ... }`
> > block, but it does generate the .java source files of the lexer and
> > parser.
> > And these .java source files get compiled just fine.
> >
> > Regards,
> >
> > Bart.
> >
> >
> > On Thu, Jul 19, 2012 at 7:13 PM, Surj Basan <s.basan at surge.it> wrote:
> >
> > > Hi Bart,
> > >
> > > Thanks for your reply.
> > >
> > > I've posted a cut-down grammar which exhibits the errors, along with
> > > generated files here:
> > >
> > > http://surge.it/static/antlr/
> > >
> > > The grammar rule is in JavaBroken.g:180-183, the Java error is in
> > > JavaBrokenParser.java:8659.
> > >
> > > Any help greatly appreciated,
> > > Surj
> > >
> > >
> > > On 19 July 2012 17:01, Bart Kiers <bkiers at gmail.com> wrote:
> > >
> > >> Hi Surj,
> > >>
> > >> Can you:
> > >>
> > >>    - post a complete grammar that reproduces this (not just a small
> > >>    snippet), and
> > >>    - indicate what ANTLR version you're using
> > >>
> > >> Regards,
> > >>
> > >> Bart.
> > >>
> > >>
> > >> On Thu, Jul 19, 2012 at 5:56 PM, Surj Basan <s.basan at surge.it>
> > wrote:
> > >>
> > >>> 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_AntlrJava
> > >>> 4927);
> > >>> > 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-
> > addre
> > >>> ss
> > >>>
> > >>
> > >>
> > >
> >
> > List: http://www.antlr.org/mailman/listinfo/antlr-interest
> > Unsubscribe: http://www.antlr.org/mailman/options/antlr-interest/your-
> > email-address
>
> 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