問題タブ [shunting-yard]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
1 に答える
1090 参照

c++ - Modifying the Shunting Yard Algorithm (c++)

I have a shunting yard algorithm in proper working order, but I noticed a special quirk:

parses correctly to

but

fails, and parses to

I want to get it to parse the second problem properly, so that the result is the same as the first. How can I accomplish this?

Notes: I derived my algorithm from wikipedia: http://en.wikipedia.org/wiki/Shunting-yard_algorithm#The_algorithm_in_detail

My algorithm code is:

Edit: Ok, so I just got an idea. So when the parser encounters the '(3' token, it would otherwise treat the two characters as one, and discard the whole thing, but what if I called the function recursively, passing in the substring of the input string which starts at the '3' character? I would then only need to add the shunted string to the output vector, and call ignore on the stringstream! I'm talking about making these changes:

becomes

and gets added to the end of the while loop. Thoughts?

0 投票する
2 に答える
149 参照

c# - 式から負の数を取得する

文字列式のトークンを分離しようとしています。式は次のようになります。

これは私が使用している正規表現です:

これにより、次の一致が得られます。

私は期待していました:

負の数を演算子と区別するにはどうすればよいですか?

0 投票する
0 に答える
1933 参照

c++ - 分流ヤード アルゴリズムの実装

私は、シャント ヤード アルゴリズムを実装しようとしています。コードはユーザーからの入力を取得し、別の関数によって評価された後 (これは既に行われています)、後置表記に変換されてから計算に渡されます。以下のコードは、アルゴリズム自体のためのものです。つまり、ユーザーの入力から作成されたトークンのベクトルです。コードは私には理にかなっていますが、コンパイルされませんが、どこが正しくないのかわかりません。

0 投票する
1 に答える
1334 参照

javascript - 入替ヤードアルゴリズムの不具合

編集: インタラクティブな完全なコード: http://jsfiddle.net/LDEGe/2/

私は高校の CS 入門生で、クラスとは関係のないサイド プロジェクトとして、Shunting-Yard Algorithm を使用して簡単な数式パーサーを作成しようとしています。ここの疑似コードは理解できますが、Javascript コードに変換するのに問題があります。ここにスタックとキュー オブジェクトを作成しました

まず、単純な数学演算子 を使用し、+ - * / ^各演算子の前後にスペースを入れて文字列をトークン化し、それを分割し、各トークンを次のように型、優先順位、結合性を備えたオブジェクトに変換します。

オブジェクトに変換するには、この関数を実行します。この関数は、入力が何であるかを確認し、優先順位、結合性、名前、および型を割り当てます。

最後に、シャント アルゴリズムがあります。これは、疑似コード here に従っていると思われます。

のような単純なものをトークン化してシャントすると1+1、期待される が返され1 1 +ます。しかし、 を与えると1+1+1、無限ループに陥ります。また、閉じ括弧の認識に問題があり、すべての括弧トークンを削除するわけではありません。たとえば、 と入力すると(1+1)、 が出力され["1", "1", "("]ます。誰かがアルゴリズムのどこにエラーがあるかを教えてくれますか?それを解決する方法についてのヒントを教えてください。何度か見直したのですが、括弧の扱いのどこが間違っているのかわかりません。

ありがとう