你好,我们有这个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,而-不是运算符。
发布于 2022-05-11 15:16:41
就像这样做:
c
: '-' c
| c ('*' | '/') c
| c ('+' | '-') c
| '(' c ')'
| ID
| NBR
;这样,所有这些就可以了:
-1- 2-3-45+-6-(7*8)(-2-4)*4例如,对(-3-10)*10的解析如下:

编辑
这就是我解析9+38*(19+489*243/1)*1+3时所发生的事情

发布于 2022-05-11 14:52:06
| '-'? 应:
| '-'? NBR您需要指定它是一个可能(或不)前面有一个-的NBR
https://stackoverflow.com/questions/72202135
复制相似问题