Удаление прямой левой рекурсии в JavaCC

У меня есть следующее в файле JavaCC:

void condition() : {}
{
    expression() comp_op() expression()
    | condition() (<AND> | <OR>) condition()
}

где <AND> — это «&&», а <OR> — это «||». Это вызывает проблемы из-за того, что это прямая левая рекурсия. Как я могу это исправить?


person Aine    schedule 26.10.2016    source источник


Ответы (1)


Условие по существу представляет собой 1 или более из expression comp_op expression, разделенных AND или OR. Вы можете сделать следующее

condition --> simpleCondition ( (<AND> | <OR>) simpleCondition )*
simpleCondition --> expression comp_op expression
person Theodore Norvell    schedule 31.10.2016