[antlr-interest] Improvements to left recursive grammars

David Daeschler david.daeschler at gmail.com
Thu Jan 5 21:59:16 PST 2012


This really has been an incredible development to follow. Even though I
don't have the time I am so tempted to port over my current grammar!

Very nice work Mr. Parr  :)

- David



On Fri, Jan 6, 2012 at 12:55 AM, Kyle Ferrio <kferrio at gmail.com> wrote:

> OMG.  Honey Badger isn't afraid of anything.  He just keeps going!
>
> This does work just like I hope/expect.  I might have to remind myself that
> it really is LL* under the hood.  Cool!
>
> Kyle
>
> On Jan 5, 2012 7:47 PM, "Terence Parr" <parrt at cs.usfca.edu> wrote:
> >
> > Howdy. Ok,These left recursive grammar rules are craaaazy. Now they
> behave just as you would expect regular rules. For example, you could have
> return values and actions (on the right edge). The cool thing is you can
> label the left recursive rule references (a=e) even though those disappear
> in the implementation. :)
> >
> >    s : e {System.out.println($e.v);} ;
> >    e returns [int v]
> >      : a=e '*' b=e {$v = $a.v * $b.v;}
> >      | a=e '+' b=e {$v = $a.v + $b.v;}
> >      | INT         {$v = $INT.int;}
> >      | '(' x=e ')' {$v = $x.v;}
> >      ;
> >
> > For example, I passed an input 1+2*3 and got the following parse tree
> >
> > (s (e (e 1) + (e (e 2) * (e 3))))
> >
> > just like you would get if this were a bottom-up tool. Moreover, it fires
> exit rule events as you would expect. you will see something like this, if
> you pass in a listener that prints out the ctx. see the example page.
> >
> > exit 1: (e 1)
> > exit 1: (e 2)
> > exit 1: (e 3)
> > exit 1: (e (e 2) * (e 3))
> > exit 1: (e (e 1) + (e (e 2) * (e 3)))
> > 7
> > exit 0: (s (e (e 1) + (e (e 2) * (e 3))))
> >
> > just pushed to the website dist directory. also updated this page:
> >
> > http://www.antlr.org/wiki/display/ANTLR4/Examples
> >
> > see
> >
> > http://antlr.org/depot/antlr4/main/CHANGES.txt
> >
> > Ter
> >
> >
> > 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
>



-- 
David Daeschler


More information about the antlr-interest mailing list