Я думаю, что устранение неоднозначностей в грамматиках не является автоматически решаемой задачей, потому что выбор правильной альтернативы - «субъективный» выбор.
Как только вы определили проблему, создайте различные альтернативные деревья и добавьте новые производственные правила, чтобы запретить недопустимые деревья разбора.
Боюсь, что нет волшебного решения, как удаление левых рекурсий ... Может быть, я ошибаюсь.
В вашем случае вы можете определить
Expression : NIL
| INTEGER
| VARIABLE
| 'not' Expression
| Expression 'or' Expression;
Или вы хотите ограничить правую часть 'или' только переменными?