用反向波兰表示法解释数学表达式(后缀表示法)

时间:2012-11-04 04:44:36

标签: math interpreter postfix-notation

我找到了一种将中缀表示法中的数学表达式转换为后缀表示法的方法。 (http://en.wikipedia.org/wiki/Shunting-yard_algorithm)但是,我应该如何编码来解释结果表达式?

这是我的想法:

对于仅操作数的表达式:

  1. 查找一组遵循格式operand-operand-operator。
  2. 的对象
  3. 将运算符的计算规则应用于两个操作数。
  4. 将对象集交换为一个操作数,这是计算的结果。
  5. 对于具有函数的表达式(正弦,绝对值,符号......)

    1. 查找一组遵循格式operand-operand -...- operator的对象。
      • 操作数的数量取决于传入函数所需的参数数量。例如:
        • 正弦 - 一个参数(锐角)
        • 电源 - 两个参数( n 电源数 m
        • 3x3矩阵 - 九个参数
    2. 做我上面提到的其他事情。
    3. 我现在的情况是,我没有任何环境可以将我的想法应用到一段代码中,因此我只能说抽象。

      这个想法是否可行?如果可以改进,请注意它们。参考文献也受到欢迎。

      如果您要展示一段代码,请将代码更改为每个人都能理解的字词。例如:

      变化:

      for (var i:int = 0; i < rpn.length; i++) {
          if ("1234567890.".indexOf(rpn[i]) != -1) {
              // do something...
          }
      }
      

      分为:

      for every element in the postfix result,
          if the element is a number,
              do something...
          end if
      end for
      

      结束...... 是可选的。

      谢谢!

1 个答案:

答案 0 :(得分:3)

通常这是一个简单的部分......你只需从左到右遍历你的后缀表达式。每次遇到一个数字时,都会将其推入堆栈。每次遇到操作符时,都会从堆栈中弹出相关数量的操作数,计算结果并将其推入堆栈。