负号和运算符的 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
:
时发生的情况
你好,我们有这个 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
: