gpt4 book ai didi

支持负数的 ANTLR 计算器

转载 作者:行者123 更新时间:2023-12-02 04:14:57 33 4
gpt4 key购买 nike

我正在尝试创建一个也支持负数的计算器,并最终创建一个 lisp 风格的树。

我像这样定义词法分析器规则:

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

最佳答案

您不应该将 INT 定义为支持负数。将其留给减法运算符。

现在,输入以下内容:

2-3

将被标记为这样:2 -3,即:INT INT。并且您没有定义能够处理该问题的解析器规则。

如果从 INT 定义中删除 '-'?,您将得到预期的结果:
2 - 3,即 INT MINUS INT >,这是可解析的。

因此,只需定义以下内容:

INT : [0-9]+ ;

此外,您应该向根解析器规则添加必需的 EOF,这样解析器就会在出现意外的附加输入时生成错误。

查看我的回答 here一个简单的数学示例。

关于支持负数的 ANTLR 计算器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34368305/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com