关于后缀转换的说明

clarification regarding convertion of postfix

所以这个表达式,A - B + C * (D / E) 结果为 A B - C D E / * +

我认为在将中缀转换为后缀时,您必须将运算符保持在堆栈中,直到您在它后面或表达式末尾看到优先级较低的运算符,然后将其全部写下来。

但是减号与加号的优先级相同,那么为什么要写下减号而不将其保留在堆栈中呢?

我认为我对转换方法的理解有问题。请提供解释,最好提供逐步解决方案。我真的很困惑减号会发生什么,因为我对转换的理解不同。非常感谢。

Shunting yard algorithm 规则状态:

if the token is an operator, then:
    while ((there is a function at the top of the operator stack)
           or (there is an operator at the top of the operator stack with greater precedence)
           or (the operator at the top of the operator stack has equal precedence and is left associative))
          and (the operator at the top of the operator stack is not a left parenthesis):
        pop operators from the operator stack onto the output queue.

注意第二个 or 条件:位于运算符堆栈顶部的运算符具有相同的优先级并且左结合

+- 运算符具有相同的优先级,并且是左关联的。因此,当您看到 +.

时,您将删除 - 运算符

另见 https://www.geeksforgeeks.org/operator-precedence-and-associativity-in-c/。尽管这是特定于 C 的,但大多数语言对常见运算符使用相同的优先级和结合性。