【发布时间】:2015-11-22 21:52:52
【问题描述】:
除了一件事之外,我还有一个可以工作的计算器:一元运算符'-'。
必须在两种不同的情况下进行评估和处理:
- 当有一些表达式进一步像这样 -(3+3)
- 当没有时:-3
对于案例 1,我想得到一个后缀输出 3 3 + - 对于案例 2,我想在此字段中获取此标记的正确值,例如在 Z10 中为 10-3 = 7。
我目前的想法:
E: ...
| '-' NUM %prec NEGATIVE { $$ = correct(-yylval); appendNumber($$); }
| '-' E %prec NEGATIVE { $$ = correct(P-$2); strcat(rpn, "-"); }
| NUM { appendNumber(yylval); $$ = correct(yylval); }
其中 NUM 是一个标记,但显然编译器说存在冲突减少/减少,因为 E 在某些情况下也可以是 NUM,尽管它有效,但我想摆脱编译器警告......我用完了想法。
【问题讨论】:
-
E can also be a NUM in some cases- 对,那你为什么还需要第一条规则呢? -
因为我必须做不同的事情,以防'-'之后只有标记 NUM,而当'-'之后有整个表达式时,我必须做不同的事情
-
编辑代码以使差异更清晰
-
对于案例 2,为什么不使用相同的 rpn 输出? (即:3 - )。您只需删除第一条规则即可获得此信息。
-
因为 -(2+2) 无法识别。
标签: parsing compiler-construction grammar bison