[antlr-interest] StackOverflowError exception due to long nested expression

Abdul Sami Siddiqui abdulsamiku at yahoo.com
Thu May 26 00:35:18 PDT 2011


Hi,

I have grammar like this:

expr
: andExpr ( OR^ andExpr )*
;
andExpr
: relExpr ( AND^ relExpr )*
;
relExpr
: aexpr ( (EQUAL ^|NOTEQUAL ^| LESSTHANEQUAL ^| LESSTHAN  ^| GREATERTHANEQUAL ^| 
GREATERTHAN ^ ) aexpr )*
;
aexpr
: mexpr ( ( PLUS^ | MINUS^ )  mexpr)*
;

mexpr
: unaryExpr ( ( MULT ^ | DIVIDE^ )unaryExpr)*
;
unaryOperator
: PLUS 
| MINUS
| NOT
;
unaryExpr
:  unaryOperator? atom -> ^(ATOM unaryOperator? atom? )
;
atom
:UINT
| DBL
| ID 
| STRING
| BOOL
| function
| LEFT_PAREN expr RIGHT_PAREN -> expr 
;

If I try a long nested expression using the above binary operands, I get a 
StackOverflowError exception. 

How can I avoid StackOverflowError due to long nested expressions? Any ideas?

Thanks


More information about the antlr-interest mailing list