如何手动将括号放在中缀表达式中?

时间:2014-01-13 13:37:37

标签: c++ brackets postfix-notation infix-notation

我无法将转换中缀表达式转换为后置修复,因为我无法正确放置括号。例如,请考虑:3+4*5/6

从左到右我注意到'*'具有更高的优先级。因此我把:3+(4*5)/6

此外,我观察'/',因此:(3+(4*5))/6

但是,这给了我一个错误的后修复表达式。请在我的方法pf中指出括号中的错误。

1 个答案:

答案 0 :(得分:0)

您需要解析不同的术语(词法/语法分析)并生成一种抽象语法树。从那时起,您可以将表达式输出到修复后符号。

例如,从左到右解析表达式,没有任何前瞻:

  • 您解析3,将值存储为操作数
  • 您解析+,检测到它是一个添加
  • 您解析4,将其存储为操作数
  • 您解析*,新操作符的优先级高于当前操作符(+),因此您必须还原最后一步,创建新上下文并添加4这个新运营商的操作数。
  • 您解析5,将其存储为操作数
  • 您解析/,具有相同优先级的新运算符,它应该仅在*之后执行,因此您关闭当前上下文并创建一个新的操作符,用作第一个操作数
  • 最后,解析6,第二个操作数。

最后,从内部上下文开始,将操作符放入操作数,插入括号并对外部上下文执行相同的操作:

  • 4 5 *
  • 4 5 * 6 /
  • 4 5 * 6 / 3 +

或者用前缀表示法:

  • * 4 5
  • / (* 4 5) 6
  • + (/ (* 4 5) 6) 3

在你的问题中,你将/运算符的括号放在整个前一部分而不是前一个操作数上。