問題タブ [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.
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 toI 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?c# - 式から負の数を取得する
文字列式のトークンを分離しようとしています。式は次のようになります。
これは私が使用している正規表現です:
これにより、次の一致が得られます。
私は期待していました:
負の数を演算子と区別するにはどうすればよいですか?
c++ - 分流ヤード アルゴリズムの実装
私は、シャント ヤード アルゴリズムを実装しようとしています。コードはユーザーからの入力を取得し、別の関数によって評価された後 (これは既に行われています)、後置表記に変換されてから計算に渡されます。以下のコードは、アルゴリズム自体のためのものです。つまり、ユーザーの入力から作成されたトークンのベクトルです。コードは私には理にかなっていますが、コンパイルされませんが、どこが正しくないのかわかりません。
javascript - 入替ヤードアルゴリズムの不具合
編集: インタラクティブな完全なコード: http://jsfiddle.net/LDEGe/2/
私は高校の CS 入門生で、クラスとは関係のないサイド プロジェクトとして、Shunting-Yard Algorithm を使用して簡単な数式パーサーを作成しようとしています。ここの疑似コードは理解できますが、Javascript コードに変換するのに問題があります。ここにスタックとキュー オブジェクトを作成しました
まず、単純な数学演算子 を使用し、+ - * / ^
各演算子の前後にスペースを入れて文字列をトークン化し、それを分割し、各トークンを次のように型、優先順位、結合性を備えたオブジェクトに変換します。
オブジェクトに変換するには、この関数を実行します。この関数は、入力が何であるかを確認し、優先順位、結合性、名前、および型を割り当てます。
最後に、シャント アルゴリズムがあります。これは、疑似コード here に従っていると思われます。
のような単純なものをトークン化してシャントすると1+1
、期待される が返され1 1 +
ます。しかし、 を与えると1+1+1
、無限ループに陥ります。また、閉じ括弧の認識に問題があり、すべての括弧トークンを削除するわけではありません。たとえば、 と入力すると(1+1)
、 が出力され["1", "1", "("]
ます。誰かがアルゴリズムのどこにエラーがあるかを教えてくれますか?それを解決する方法についてのヒントを教えてください。何度か見直したのですが、括弧の扱いのどこが間違っているのかわかりません。
ありがとう