我正在使用Jflex和CUP编写某种计算器,我能够将我的语法用于中缀,后缀和前缀表示法,如下所示,如果我只是使用每种语法并且不使用它们,它们的效果很好。结合它们。
现在的问题是如何在不出现减少/换档错误的情况下将它们组合起来,我现在已经做了几天而且我无法解决这个问题。主要问题是当F - > NUMBER和E - > NUMBER他们将有一个减少/移位错误,我也尝试添加更多规则,以尝试减轻减少/移位错误但我没有正确得到它。请注意,我能够组合两个但不是三个的任意组合。
我做的一种方法是尝试将我的前缀和后缀合并到我的中缀,方法是将E更改为T并创建新的规则T - > E |数字,但我还是
如果有人能给我解释我如何尝试将它们组合起来,那将是非常有帮助的。
这是我的语法
/* 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
答案 0 :(得分:2)
这是语法
程序 - >中缀|前缀|后缀
中缀 - > ë
E - > E - T | E + T | T | T * F | T / F | ˚F
F - > (E)| Ñ
前缀 - > EPRE
Epre - > + Fpre Fpre | - Fpre Fpre | * Fpre Fpre | / Fpre Fpre
Fpre - > Epre | Ñ
后缀 - > Epost
Epost - > Fpost Fpost + | Fpost Fpost - | Fpost Fpost * | Fpost Fpost /
Fpost - > Epost | Ñ