[antlr-interest] deleting a left-recursive

Johannes Luber jaluber at gmx.de
Sat May 3 08:38:47 PDT 2008


jabon schrieb:
> oki, I ve reduce the prob,
> now I have this
> 
> expression
>    :      (
>           expression                   
> (T_Ne|T_Eq|T_Ge|T_Le|T_Lt|T_Gt|T_And|T_Mod|T_Star|T_Slash|T_Iff|T_Implies|T_Or|T_Plus|T_Minus)  
> 
>           expression
>       )
>         ;

Remove the outer parentheses - those are unnecessary and confuse 
ANTLRworks. And let ANTLRworks do the SLRR. :)

Johannes
> 
> it's a simple left recuse but in the doc this become this.
> a : a b |b; ==> a : b+;
> 
> So I ve tried
> 
> 
> expression
>    :      (
>               
> (T_Ne|T_Eq|T_Ge|T_Le|T_Lt|T_Gt|T_And|T_Mod|T_Star|T_Slash|T_Iff|T_Implies|T_Or|T_Plus|T_Minus)  
> 
>           expression+
>       )
>         ;
> 
> but That doesn't work.
> any idea??
> 
> thanks
> 
> a++
> 
> Johannes Luber a écrit :
>> jabon schrieb:
>>> hi all,
>>>
>>> I have a little probleme with my grammar , I have a left recursive 
>>> and I have lot of diffcult to remove this.  I need a little help (I m 
>>> not an expert sorry and compilations lessons are far away)
>>>
>>> expression
>>>    : T_LParent expression T_RParent
>>>    | binaryExpression
>>>    | castExpression
>>>    | desig | literal
>>>    | newExpression
>>>    | quantifierExpression
>>>    | unaryExpression
>>>    ;
>>>
>>>
>>> binaryExpression
>>>    : (expression (T_Ne|T_Eq|T_Ge|T_Le|T_Lt|T_Gt) expression)
>>>    |(expression (T_And|T_Mod|T_Star|T_Slash) expression)
>>>    |(expression (T_Iff|T_Implies|T_Or|T_Plus|T_Minus) expression);
>>>
>>> thanks a lot
>>>
>>> a+++
>>>
>>
>> You've reminded me that I didn't posted my tutorial about 
>> left-recursion removal yet. After 1 hour or so intense formatting you 
>> can see the result here: 
>> <http://www.antlr.org/wiki/display/ANTLR3/Left-Recursion+Removal>. 
>> Hopefully it is helpful enough. :)
>>
>> Johannes
> 



More information about the antlr-interest mailing list