[antlr-interest] Why i need to use LL(*) ????
Umesh Kalappa
umesh.kalappa0 at gmail.com
Wed Sep 5 00:00:40 PDT 2012
Hi jesse,
Just wondering in this case then ,Could i say that LL(*) = LALR(*) ?????
Thanks
~Umesh
On Wed, Sep 5, 2012 at 12:14 PM, Jesse McGrew <jmcgrew at gmail.com> wrote:
> As it says, "If you have actions at ID, you can't easily refactor."
>
> Consider this version of the original with actions added:
>
> func : type ID {System.out.writeln("A");} '(' arg* ')' ';'
> | type ID {System.out.writeln("B");} '(' arg* ')' '{' body '}'
> ;
>
> How would you implement those actions in your left-factored version?
> Moving them to after the arg* might not be acceptable.
>
> Jesse
>
> On Tue, Sep 4, 2012 at 11:10 PM, Umesh Kalappa <umesh.kalappa0 at gmail.com>
> wrote:
> > Hi Group ,
> >
> > This is regrading about the new feature that ANTLR v3 introduced called
> > LL(*) Parsing i.e
> >
> >
> > Natural grammars are sometimes not LL(k) for any fixed k even if the k is
> > usually small; e.g. C function declarations vs definitions. From the left
> > edge, the lookahead is not fixed to see the ';' vs '{' to distinguish the
> > cases:
> >
> > func : type ID '(' arg* ')' ';'
> > | type ID '(' arg* ')' '{' body '}'
> > ;
> > We need arbitrary lookahead because of the arg*. If you have actions at
> ID,
> > you can't easily refactor. The lookahead will be 5<=k<=10 usually for
> this
> > decision.
> >
> > Here ,in the above example ,i can left factor out the grammar then using
> > LL(*) , which is more efficient like
> >
> > func : type ID '(' arg* ')' funcelse
> > ;
> > funcelse:';'| {' body '}'
> > ;
> >
> > Any inputs regrading this ??
> >
> > Thanks
> > ~Umesh
> >
> > 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