Левая рекурсия JavaCC
Я пытаюсь удалить левую рекурсию для этой грамматики JavaCC. Я получаю ошибку, обнаруженную рекурсией Left, в минуту для условия, приведенной ниже, и я не могу понять, как ее исправить. Любая помощь будет принята с благодарностью:)
void condition(): {}
{
<TILDA> condition()
| <LEFT_BRACKET> condition() <RIGHT_BRACKET>
| expression() comp_op() expression()
| condition() <LEFT_BRACKET> <OR> | <AND> <RIGHT_BRACKET> condition()
}
void comp_op() : {}
{
<EQUALS> | <NOT_EQUAL> | <LESS_THAN> | <LESS_THAN_OR_EQUAL> |
<GREATER_THAN> | <GREATER_THAN_OR_EQUAL>
}
void expression() : {}
{
fragment() binary_arith_op() fragment()
| <LEFT_BRACKET> expression() <RIGHT_BRACKET>
| <IDENTIFIER> <LEFT_BRACKET> arg_list() <RIGHT_BRACKET>
| fragment()
}