0

中置記法の数式を後置記法に変換する方法を見つけました。(http://en.wikipedia.org/wiki/Shunting-yard_algorithm)では、結果の式を解釈するためにどのようにコーディングする必要がありますか?

これが私の考えです:

オペランドのみの式の場合:

  1. 形式operand-operand-operatorに従うオブジェクトのセットを探します。
  2. 演算子の計算規則を2つのオペランドに適用します。
  3. オブジェクトのセットを、計算の結果である1つのオペランドに交換します。

関数(正弦、絶対値、符号など)を持つ式の場合

  1. 形式operand-operand-...-operatorに従うオブジェクトのセットを探します。
    • オペランドの数は、関数に渡すために必要なパラメーターの数によって異なります。例えば:
      • サイン-1つのパラメーター(鋭角)
      • power-2つのパラメーター(数値mのn乗)
      • 3x3マトリックス-9つのパラメーター
  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 に答える