Antlr4 N元运算符解析
我试图在一个数学表达式中匹配一个变量arity的操作符(例如,“1<3Antlr4 N元运算符解析,antlr4,Antlr4,我试图在一个数学表达式中匹配一个变量arity的操作符(例如,“1
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))。为了给“后代”一个答案:我们通过将算术表达式与其他表达式分离来修复它。我们知道,只有算术表达式可以用作变量算术运算符的操作数(“trueexpression:
'!' expression
| arithmetic (SMALLER_THAN arithmetic)+
| arithmetic (GREATER_THAN arithmetic)+
| ....
;
arithmetic:
'(' expression ')'
| expression ('*' | '/' | '%') expression
| expression ('+' | '-') expression
| IDENTIFIER
| ...
;