我正在尝试用 ANTLR4 解析代数表达式。我试图用我的解析器完成的一项功能是百分比表达式的“智能”处理。
编辑:目标是使餐厅的折扣或小费计算更容易。例如,如果您看到“30% 折扣”的广告,您可以输入“价格 - 30%”并获得正确的结果。或者在餐厅,您可以输入餐费加上 15%,然后得到您必须支付的金额,包括 15% 的小费。但这种解释只有在表达式看起来像“表达式 1(- 或 +)表达式 2”时才会出现。在所有其他情况下,百分号应照常解释。谷歌搜索框计算器的行为就是这样。/编辑
100-30%
应该返回70
100-(20+10)%
也应该返回70
3+(100-(20+10)%)
应该返回73
但
5%
应该返回0.05
(5+5)%
应该返回0.10
我的语法如下所示:
expr:
e EOF
;
e:
'-'a=e
| '(' a=e ')'
| a=e op=(ADD|SUB) b=e '%'
| a=e op=(ADD|SUB) b=e
| a=e'%' //**PERCENTRULE**
| FLT
;
ADD : '+' ;
SUB : '-' ;
FLT: [0-9]+(('.'|',')[0-9]+)?;
NEWLINE:'\r'? '\n' ;
WS : [ \t\n]+ -> skip ;
对于表达式100-30%
,我希望这棵树:
但我明白了:
我怎样才能得到正确的树(不删除 PERCENTRULE)?