Удаление прямой левой рекурсии в JavaCC
У меня есть следующее в файле JavaCC:
void condition() : {}
{
expression() comp_op() expression()
| condition() (<AND> | <OR>) condition()
}
где <AND>
это "&&" и <OR>
это "||". Это вызывает проблемы из-за того, что это прямая левая рекурсия. Как я могу это исправить?
1 ответ
Решение
Состояние по существу 1 или более expression comp_op expression
разделены AND
или OR
, Вы могли бы сделать следующее
condition --> simpleCondition ( (<AND> | <OR>) simpleCondition )*
simpleCondition --> expression comp_op expression