我正试图创建一个也支持负数的计算器,并最终创建一个lisp风格的树。
我这样定义lexer规则:
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
?
你可以使用否定表达式,而不是否定数。例如:
additiveExpr
: multExpr (('+' |'-' ) multExpr )*;
multExpr
: negationExpr (('*' |'/' ) negationExpr )*;
negationExpr
: ('-')? primary;
primary
: atom
| '(' orExpr ')';
您不应该将< code>INT定义为支持负数。把这留给减法运算符吧。
现在,以下输入:
2-3
将像这样标记:2
-3
,即:INT
INT
。而且您没有定义能够处理它的解析器规则。
如果从 INT
定义中删除“-”?
,您将获得预期的结果:2
-
3
,即 INT
减去
INT
,这是可解析的。
因此,只需定义以下内容:
INT : [0-9]+ ;
此外,应将所需的 EOF
添加到根分析器规则,以便分析器将在意外的其他输入时生成错误。
请看我的答案,这里有一个简单的数学例子。
本文向大家介绍ANTLR语言支持,包括了ANTLR语言支持的使用技巧和注意事项,需要的朋友参考一下 示例 ANTLR能够为多种编程语言生成解析器: C#目标 Python目标 JavaScript目标 Java目标 默认情况下,ANTLR将使用Java编程语言从命令行生成解析器: 要更改目标语言,可以从OS终端/命令行运行以下命令: 不必每次都在命令行/终端上使用“ -Dlanguage”参数来为
我已经用DesktopSSO模块配置了OpenAM,我们的SAML 2.0应用程序在域计算机上一切正常。当他们请求该应用程序时,它会重定向到OpenAM,他们会立即通过身份验证。我试图了解OpenAM中需要什么配置来支持非域名PC。OpenAM中有没有一个选项说‘如果设备不支持这个模块,就用另一个模块’?
我知道Android支持NDK。我找不到一个以某种方式说明Android Things是否支持RenderScript Compute的引用。我的假设是否定的(理由是并非所有平台都会有合适的GPU),但我希望人们已经尝试过,或者知道RenderScript Compute是否可以在Android平台上运行。
我正在为我的小型数据科学项目计算线性回归。 当将list(Dictionary.values())传递到我得到的类中时 回溯(最近的调用为last):文件“C://users/paweé/documents/projects vscode/worldbankdatakeras/tests.py”,第41行,在graph.plot_graph_renewable_electricity_status
分支 开始时间 积极支持截止时间 安全维护截止时间 v4.3.x 2019-2-7 2019-9-30 2019-12-31 v4.4.x 2019-4-15 2020-4-30 2020-7-31 v4.5.x 2019-12-20 2020-12-31 2021-3-31 积极支持 受到官方开发组的积极支持,已报告的错误和安全问题将会立即被修复,并按照常规流程发布正式的版本。 安全维护 仅支持
问题内容: 我的模数做错了吗?因为在Java 中应该评估但我得到。 问题答案: 负数模数的两种定义都在使用-有些语言使用一种定义,而另一种使用。 如果要为负输入获得负数,则可以使用以下方法: 同样,如果你使用的是在否定输入中返回负数的语言,并且你希望使用正数: