负号和运算符的 Antlr4 问题

Antlr4 problems with negativ sign and operator

你好,我们有这个 antlr4 树解析器:

grammar calc;

calculator: (d)*;

c
    : c '*' c
    | c '/' c
    | c '+' c
    | c '-' c
    | '(' c ')'
    | '-'? 
    | ID
    ;
d: ID '=' c;

NBR: [0-9]+; 
ID:  [a-zA-Z][a-zA-Z0-9]*;

WS: [ \t\r\n]+ -> skip; 

问题是如果我使用 -,antlr4 无法识别,如果它是 ja 符号或运算符用于特殊输入,如:(-2-4)*4。对于这样的输入,antlr4 不理解 - 在 2 之前属于常量 2 而 - 不是运算符。

    | '-'? 

应该是:

    | '-'? NBR

您需要指定它是 NBR,其前面可能(或可能不)带有 -

就像这样:

c
 : '-' c
 | c ('*' | '/') c
 | c ('+' | '-') c
 | '(' c ')'
 | ID
 | NBR
 ;

这样就OK了:

  • -1
  • - 2
  • -3-4
  • 5+-6
  • -(7*8)
  • (-2-4)*4

例如(-3-10)*10解析为:

编辑

这是我解析 9+38*(19+489*243/1)*1+3:

时发生的情况