Computer science 组合语法中缀后缀前缀

Computer science 组合语法中缀后缀前缀,computer-science,context-free-grammar,parser-generator,jflex,Computer Science,Context Free Grammar,Parser Generator,Jflex,我正在使用Jflex和CUP编写某种计算器,我能够制作中缀、后缀和前缀符号的语法,如下图所示,如果我只使用每种语法,而不将它们组合在一起,它们就会工作得很好 现在的问题是,我如何才能在不出现减少/移位错误的情况下组合它们,我已经这样做了几天了,但我真的弄不明白。主要的问题是,当F-->NUMBER和E-->NUMBER出现reduce/shift错误时,我也尝试添加更多规则来减轻reduce/shift错误,但我没有正确地得到它。还要注意的是,我能够组合两个但不是三个的任意组合 我所做的一种方法

我正在使用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
这是语法

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

中缀->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


只是确认一下,您正在从这里使用java CUP,对吗?是的,这就是我正在使用的,我只是展示我的语法,而不是cup文件,我现在能够得到正确的语法,我如何回答我自己的问题:)你可以像对任何其他问题一样发布一个答案,然后立即接受它为正确的。