Я пытаюсь сопоставить оператор переменной арности (например, «1 ‹ 3 ‹ x ‹ 10» дает true, учитывая, что 3 ‹ x ‹ 10) в математическом выражении. Обратите внимание, что это не похоже на то, что большинство языков будут анализировать выражение) (упрощенное) правило производства:
expression: '(' expression ')' # parenthesisExpression
| expression ('*' | '/' | '%') expression # multiplicationExpression
| expression ('+' | '-') expression # additionExpression
| expression (SMALLER_THAN expression)+ # smallerThanExpression
| IDENTIFIER # variableExpression
;
Как сохранить приоритет, но по-прежнему максимально жадно анализировать smallThanExpression?
Например; «1 ‹ 1+1 ‹ 3» следует анализировать как один узел анализа «smallerThanExpression» с тремя дочерними узлами, каждый из которых является выражением. На данный момент, smallThanExpression разбивается на два smallThanExpression (1 ‹ (1+1 ‹ 3)).