结合语法中缀后缀前缀

时间:2014-03-21 20:31:19

标签: computer-science context-free-grammar parser-generator jflex

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

1 个答案:

答案 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 | Ñ