Я пытаюсь понять, как сделать левоассоциативное выражение, в котором рекурсивные (ни в чем не заключенные) выражения возможное. Например, я бы хотел сделать:
expr + OP + expr
, который анализирует 2 операции типа 1 x 2 x 3
в (expr OP expr) OP expr
результат.
Если я попытаюсь предотвратить expr
анализируя бесконечную рекурсию, я могу сделать что-то вроде:
expr -> Group(simple_expr + OP + expr)
| simple_expr
, но тогда я получу результат expr OP (expr OR expr)
.
Как принудительно привязать левую сторону?
Изменить: я знаю об операторе operatorPrecedence
, но когда оператор "IS" + необязательный ("NOT")
или аналогичный, похоже, он не соответствует должным образом.