否定运算符的运算符优先级

Operator precedence for negate operator

更新:这不是 ANTLR 的问题

它是我正在使用的 antlr-kotlin 生成器中的 bug

原问题

我想解析一些包含变量的数学表达式。这是我的语法:

expr
  : '-' expr                # Negate
  | expr ( '*' | '/' ) expr # MultDiv
  | expr ( '+' | '-' ) expr # AddSub
  | '(' expr ')'            # Paren
  | ID                      # Var
  | NUM                     # Num
  ;

但是当我尝试解析 -a + b 时,我总是得到 -(a + b) 而不是 (-a) + b。我该如何解决这个问题?

正如 sepp2k 在评论中提到的,这是不可重现的: