[antlr-interest] How to resolve the left-recursion problem?

John B. Brodie jbb at acm.org
Tue Jun 5 12:04:29 PDT 2007


> Thanks for your reply. 
Sure thing. hope the reply was useful...

> Forget about the scope name for now. Say that I want to recognize a series
> of name linked by ".", but I want to treat the "." as an operator which I
> want to associate some operation to it. I also want the . operator to be
> left associative. For example, "employer.ceo.name" is equivalent to
> ((employer.ceo).name) which generates the AST as 
> 
>          .
>        /   \
>       .     name
>     /     \
> employer  ceo
> 
> This is the only parser rule I can think of  that will do what I want. But
> it's left recursive.
> 
> attribute_expression
>   : NAME | dot_operator_exp
>   ;
> 
> dot_operator_exp
>   : attribute_expression DOT NAME
>   ;

ok. ast construction (as opposed to parse trees). have you tried:

attribute_expression : NAME (DOT^ NAME)* ;

> Thanks for any help,
You are welcome.
   -jbb


More information about the antlr-interest mailing list