標準のShunting Yard Algorithmには、関数のパラメータの終わりを表す「ウォール」記号が含まれていますか?つまり、任意の数のパラメータを持つ関数を可能にする後置記法(逆ポーランド記法)の変更をサポートすることです。シャントヤードアルゴリズムを変更して壁操作を含める|
修飾ポストフィックス表記法の例をいくつ:(1,2)+9⟶F
| 1 2 f 9 +
f(1,2,3)+9⟶| 1 2 3 f 9 +
どうすればいいのかというアイデアだけでなく、実際の修正を探しています。
- 読み取られるトークンがありますが
。
- トークンが数字の場合は、出力キューにプッシュします。
- トークンが関数トークンの場合は、トークンをスタックにプッシュします。
- トークンは、関数の引数の区切り(例えば、コンマ)の場合:スタックの最上位トークンが左括弧であるまで、出力キューにスタックからポップオペレータ、
- 。左括弧が見つからない場合、セパレータの配置が間違っているか、かっこが一致していません。
トークンは、オペレータ、O1、場合:そこ演算子トークンO2はオペレータ・スタックの最上部にあるいずれか
- O1がある間
左結合およびその優先順位がo2のそれ以下であるか、または
o1が右結合であり、o2の優先順位よりも低い、
-pop o2をオペレータスタックから出力キューに移動します。
- 反復の最後にオペレータスタックにo1をプッシュします。
- O1がある間
- トークンは左括弧である場合(つまり、 "(")、その後、スタックにプッシュ
- トークンが右括弧(すなわちある場合 ")"。):
- スタックの一番上のトークンが左括弧になるまで、pop演算子はスタックから出力キューに移動します。
- スタックから左括弧をポップしますが、出力キューにはポップしません。
- スタックの先頭のトークンが関数トークンの場合は、出力キューにポップします。
- 左括弧が見つからずにスタックがなくなった場合、括弧が一致しません。
- 読むためにトークンがなくなる:
- オペレータトークンがスタックに残っていますが:
- スタックの一番上のオペレータのトークンが括弧の場合は、カッコが一致していません。
- オペレータを出力キューにポップします。
- オペレータトークンがスタックに残っていますが:
- 終了します。
'f'が関数であることをどのように知っていますか?たとえば、入力が '| | a b c d 'd(c(a、b))'または 'd(b(a)、c)'ですか? – rici
申し訳ありませんが、fは以前に関数として識別されていたとしてください。さらに、入力中置式には変数がなく、数字だけである。 – bitsmcgee77
私は通常、関数、引数、引数の数、そして最後に呼び出しオペレータを出力して関数呼び出しを行います。しかし、 'f'が関数であると言うことができるなら、それはうまくいくと思います。 – rici