Antlr4 N元运算符解析

Antlr4 N元运算符解析,antlr4,Antlr4,我试图在一个数学表达式中匹配一个变量arity的操作符(例如,“1

我试图在一个数学表达式中匹配一个变量arity的操作符(例如,“1<3
expression: '(' expression ')'                  # parenthesisExpression
      | expression ('*' | '/' | '%') expression # multiplicationExpression
      | expression ('+' | '-') expression       # additionExpression
      | expression (SMALLER_THAN expression)+   # smallerThanExpression
      | IDENTIFIER                              # variableExpression
      ;
我们如何保持优先级,但仍然尽可能贪婪地解析smallerthan表达式

比如,;“1<1+1<3”应解析为一个单独的解析节点“smallerThanExpression”,其中包含三个子节点,每个子节点都是一个表达式。此时,smallerthan表达式被分解为两个smallerthan表达式(1<(1+1<3))。

为了给“后代”一个答案:我们通过将算术表达式与其他表达式分离来修复它。我们知道,只有算术表达式可以用作变量算术运算符的操作数(“true 这将强制将诸如“x (请注意,标识符可能引用非整数对象;这在上下文检查器中进行检查)

expression: 
        '!' expression
      | arithmetic (SMALLER_THAN arithmetic)+
      | arithmetic (GREATER_THAN arithmetic)+
      | ....
      ;

arithmetic:
        '(' expression ')'                 
      | expression ('*' | '/' | '%') expression 
      | expression ('+' | '-') expression 
      | IDENTIFIER
      | ...
      ;