我正在使用 Jflex 和 CUP 编写某种计算器,我能够为中缀、后缀和前缀表示法制作语法,如下所示,如果我只使用每种语法而不将它们组合起来,它们就可以很好地工作。
现在的问题是如何将它们组合起来而不会出现减少/移位错误,我已经做了几天了,但我真的无法弄清楚。主要问题是当 F --> NUMBER 和 E --> NUMBER 时它们会出现 reduce/shift 错误,我还尝试添加更多规则来尝试减轻 reduce/shift 错误,但我没有正确理解。另请注意,我能够组合其中两个但不是其中三个的任意组合。
我所做的一种方法是尝试通过将 E 更改为 T 并创建新的规则 T --> E|Number 来将我的前缀和后缀合并到我的中缀,但我仍然
如果有人可以解释我如何尝试将它们结合起来,那将非常有帮助。
这是我的语法
/* INFIX */
E --> E - T | E + T| T
T --> T * F | T / F | F
F --> NUMBER
/*PRE fix */
E --> + E E | - E E | / E E | * E E | NUMBER
/*POST fix*/
E --> E E + | E E -| E E * |E E / |NUMBER