Computer science 组合语法中缀后缀前缀
我正在使用Jflex和CUP编写某种计算器,我能够制作中缀、后缀和前缀符号的语法,如下图所示,如果我只使用每种语法,而不将它们组合在一起,它们就会工作得很好 现在的问题是,我如何才能在不出现减少/移位错误的情况下组合它们,我已经这样做了几天了,但我真的弄不明白。主要的问题是,当F-->NUMBER和E-->NUMBER出现reduce/shift错误时,我也尝试添加更多规则来减轻reduce/shift错误,但我没有正确地得到它。还要注意的是,我能够组合两个但不是三个的任意组合 我所做的一种方法是尝试将前缀和后缀合并到中缀,将E改为T,并创建一个新规则T-->E|Number,但我仍然 如果有人能给我解释一下如何将它们结合起来,那将非常有帮助 这是我的语法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错误,但我没有正确地得到它。还要注意的是,我能够组合两个但不是三个的任意组合 我所做的一种方法
/* 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文件,我现在能够得到正确的语法,我如何回答我自己的问题:)你可以像对任何其他问题一样发布一个答案,然后立即接受它为正确的。