【问题标题】:Postfix to infix with unary/binary operators使用一元/二元运算符中缀的后缀
【发布时间】:2010-08-09 09:27:27
【问题描述】:

我正在尝试制作一个从后缀到中缀符号的转换器,需要一些帮助。已经有a question about infix-to-postfix conversion,这是一个我无法转换回来的例子。 (注意:这里少了一个减号!)

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

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 Quiz #148: Postfix to Infix,也可以通过Google Groups
  2. Shunting-yard algorithm (C, Python, Perl) with unary operator support 在 LiteratePrograms 上

【问题讨论】:

  • 我不是专家,但中缀符号不应该使用括号吗?对我来说,第 3 列看起来不像中缀符号,而且含糊不清。

标签: c# c infix-notation postfix-notation shunting-yard


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 2014-11-18
    • 2018-01-18
    • 1970-01-01
    • 2022-11-18
    • 1970-01-01
    • 2016-05-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多