Я пытаюсь удалить левую рекурсию в JavaCC для expr, которая должна быть определена как:
expr ::= statement binary_op statement
| **(** expr **)**
| identifier **(** arg **)**
| statement
Этот код вызывает левую рекурсию в моей программе:
void expr() : { }
{
< LPAREN > simpleExpr() < RPAREN >
| < IDENTIFIER > <LPAREN > arg() < RPAREN >
| statement()
}
void simpleExpr() : { }
{
statement() binary_op() statement()
}
операторопределяется как:
statement ::= id | - id | number | false | true | expr
void statement() : { }
{
< ID > | < NOT_OP > < ID >
| < DIGIT >
| < TRUE >
| < FALSE >
| expr()
}
Ошибка, которую я получаю в своей программе:
Left recursion detected: "expr... --> statement... --> expr..."
Как бы это исправить?