[antlr-interest] infinite recursion

Alexey Demakov demakov at ispras.ru
Sun Feb 27 23:05:52 PST 2005


> Hi,
> Is it possible to resolve the infinite recursion to rule expression
> from rule6?
> 
> expression
> : LPAREN rule1 RPAREN
> | IDENTIFIER
> | rule2
> | rule3
> | rule4
> | rule5
> | rule6
> ;
> 
> rule6
> : "first" LPAREN rule1 RPAREN
> | "last" LPAREN rule1 RPAREN
> | expression LBRACKET rule1 RBRACKET
> | expression rule7 IDENTIFIER
> | expression rule7 IDENTIFIER LPAREN RPAREN
> | expression rule7 IDENTIFIER LPAREN rule8 RPAREN
> ;

1. Substitute rule6 in expression:

expression
: LPAREN rule1 RPAREN
| IDENTIFIER
| rule2
| rule3
| rule4
| rule5
| "first" LPAREN rule1 RPAREN
| "last" LPAREN rule1 RPAREN
| expression LBRACKET rule1 RBRACKET
| expression rule7 IDENTIFIER
| expression rule7 IDENTIFIER LPAREN RPAREN
| expression rule7 IDENTIFIER LPAREN rule8 RPAREN
;

2. Last 4 alternatives mean that expression can end with 

( LBRACKET rule1 RBRACKET
| rule7 IDENTIFIER
| rule7 IDENTIFIER LPAREN RPAREN
| rule7 IDENTIFIER LPAREN rule8 RPAREN
)*

3. The final rules:

expression
: ( LPAREN rule1 RPAREN
  | IDENTIFIER
  | rule2
  | rule3
  | rule4
  | rule5
  | "first" LPAREN rule1 RPAREN
  | "last" LPAREN rule1 RPAREN
  )
  ( LBRACKET rule1 RBRACKET
  | rule7 IDENTIFIER
  | rule7 IDENTIFIER LPAREN RPAREN
  | rule7 IDENTIFIER LPAREN rule8 RPAREN
  )*

If rule6 is not referenced anymore, it can be removed.

Regards,
Alexey

-----
Alexey Demakov
TreeDL: Tree Description Language: http://treedl.sourceforge.net
RedVerst Group: http://www.unitesk.com




More information about the antlr-interest mailing list