我正在使用Jflex和CUP编写某种计算器,我能够制作中缀、后缀和前缀表示法的语法,如下所示,如果我只使用每种语法而不组合它们,它们就能很好地工作。
现在的问题是我如何能结合他们没有得到减少/移位错误,我已经这样做了几天了,我不能真正弄清楚。主要问题是当F -> NUMBER和E -> NUMBER时,它们会有减少/移位错误,我也尝试添加更多规则来减轻减少/移位错误,但我没有正确地得到它。还请注意,我可以组合任意两个组合,但不能组合三个。
我所做的一种方法是尝试通过将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
语法
program ->中缀|前缀|后缀
E -> E - T | E + T | T | T * F | T/F | F
F -> (E) | n
prefix -> Epre
Fpre -> + Fpre Fpre | - Fpre Fpre | * Fpre Fpre |/Fpre Fpre
Fpre -> Epre | n
postfix -> post
Epost -> Fpost Fpost + | Fpost Fpost - | Fpost Fpost * | Fpost Fpost Fpost/
Fpost -> Epost | n