2

我正在使用 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
4

1 回答 1

2

这是语法

程序 -> 中缀 | 前缀 | 后缀

中缀 -> E

E -> E - T | E + T | T | T * F | T / F | F

F -> (E) | n

前缀 -> Epre

Epre -> + Fpre Fpre | - Fpre Fpre | * Fpre Fpre | / Fpre Fpre

Fpre -> Epre | n

后缀-> Epost

Epost -> Fpost Fpost + | Fpost Fpost - | Fpost Fpost * | Fpost Fpost /

Fpost -> Epost | n

于 2014-03-30T14:53:40.310 回答