1
我正在尝试创建一个支持负数的计算器,并最终创建一个lisp样式的树。负数支持的ANTLR计算器
我定义了词法规则是这样的:
INT :'-'? [0-9]+ ;
LBRACKET : '(';
RBRACKET : ')';
MULTIPLICATION : '*' ;
DIVISION: '/' ;
PLUS: '+' ;
MINUS: '-' ;
而且我会为每个操作的规则,例如:
e13=exp MINUS e14=exp{
SPTree tempTree= new SPTree("-");
tempTree.insertChild($e13.tree);
tempTree.insertChild($e14.tree);
$tree=tempTree;
}
但是,当我试图输入表达式:2-3
出来的lisp树是(2)
。
为什么忽略-3
?
通过这种方式2 - 3正在工作,但-3 + 2不是。 为什么? 它打印5结果,忽略减号。 – SctALE
@SctALE这应该可以正常工作,您的规则必须有问题(问题中没有解析器规则)。看到我的链接的答案,它工作正常,它不会帮助你,与您的代码一起发布一个新的问题。你可能没有包含一个一元减法则。 –
https://stackoverflow.com/questions/48267834/antlr-parsing-and-code-generation-with-operator-and-number-sign我应该写些什么来帮助理解我的问题吗? – SctALE