使用一元/二元运算符将后缀添加到中缀

我试图从postfix转换为中缀表示法,需要一些帮助。 已经存在关于中缀到后缀转换的问题 ,这给出了一个我无法转换回来的示例。 (注意:那里缺少一个减号!)

以下是我的转换器的输出,其中第一个“列”是后缀输入,第二个是我的中缀输出,第三个是我可能得到的(?):

2 - = - 2 =? - 2 true 1 + 2 + = + 1 + 2 =? + 1 + 2 true 1 + 2 + + = + (+ 1 + 2) =? + 1 + + 2 false 1 + 2 + + 3 - - 4 - - = - (- (+ (+ 1 + 2) - 3) - 4) =? + 1 + + 2 - - 3 - - 4 false 

您是否认为可以解决此问题,或者最后两行实际上是否正确转换? 你会如何编写算法来解决这个问题?

请假设更多运算符(不仅仅是+- )可以设置为一元运算符和二元运算符,其中一元运算符的优先级高于二元运算符。

参考

  1. Ruby测验#148:Postix到Infix ,也可以通过Google网上论坛
  2. 分流码算法(C,Python,Perl),对LiteratePrograms 具有一元运算符支持

Postfix表示法没有优先级的概念,因为任何运算符的操作数总是堆栈上的前N个值(然后由运算符的结果替换)。

后缀表示法的一个问题是它不能很好地处理可以根据操作数的数量引用不同运算符的运算符符号(例如 – ,它可以表示一元或二元减号)。 唯一的出路是确保每个操作员都有一个代表它的唯一符号。