0

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

这是我的想法:

对于仅操作数表达式:

  1. 寻找一组遵循操作数-操作数-操作符格式的对象。
  2. 将运算符的计算规则应用于两个操作数。
  3. 将一组对象交换为一个操作数,这是计算的结果。

对于具有函数的表达式(正弦、绝对值、符号...)

  1. 寻找一组遵循操作数-操作数-...-操作符格式的对象。
    • 操作数的数量取决于需要传递给函数的参数数量。例如:
      • 正弦 - 一个参数(锐角)
      • 幂 - 二参数(数字m的n次方)
      • 3x3 矩阵 - 九个参数
  2. 做我上面提到的任何其他事情。

我现在的情况是我没有任何环境可以将我的想法实现为一段代码,因此我只能抽象地说。

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

如果你在展示一段代码,请将代码改成大家都能理解的文字。例如:

改变:

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

end ...不过是可选的。

谢谢!

4

1 回答 1

3

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

于 2012-11-04T04:48:19.687 回答