I am trying to remove left recursion in JavaCC for expr, which should be defined as:
expr ::= statement binary_op statement
| **(** expr **)**
| identifier **(** arg **)**
| statement
This code causes a left recursion in my program:
void expr() : { }
{
< LPAREN > simpleExpr() < RPAREN >
| < IDENTIFIER > <LPAREN > arg() < RPAREN >
| statement()
}
void simpleExpr() : { }
{
statement() binary_op() statement()
}
statement is defined as:
statement ::= id | - id | number | false | true | expr
void statement() : { }
{
< ID > | < NOT_OP > < ID >
| < DIGIT >
| < TRUE >
| < FALSE >
| expr()
}
The error I get in my program:
Left recursion detected: "expr... --> statement... --> expr..."
How would I fix this?
statementrule (or mutually betweenexprandstatement). - sepp2kexprandstatement. @sepp2k - webchatowner