Удаление прямой левой рекурсии в 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
Другие вопросы по тегам