[antlr-interest] Why i need to use LL(*) ????

Jesse McGrew jmcgrew at gmail.com
Tue Sep 4 23:44:22 PDT 2012


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