問題タブ [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# - 分流ヤード検証式
Shunting-Yard アルゴリズムを使用して式を評価します。アルゴリズムを適用するだけで式を検証できます。オペランドの欠落、括弧の不一致などがあると失敗します。ただし、Shunting-Yard アルゴリズムには、人間が読めるインフィックスよりも多くの構文がサポートされています。例えば、
Shunting-Yard アルゴリズムへの入力として「1+2」を提供するすべての許容可能な方法です。'+ 1 2' と '1 2 +' は有効なインフィックスではありませんが、標準の Shunting-Yard アルゴリズムで処理できます。アルゴリズムは実際には順序を気にしません。「最も近い」オペランドを取得する優先順位に従って演算子を適用します。
入力を人間が読める有効なインフィックスに制限したいと思います。Shunting-Yard アルゴリズムを変更して無効な infix で失敗するようにするか、Shunting-Yard を使用する前に infix 検証を提供する方法を探しています。
これを行うための公開された手法を知っている人はいますか? 基本演算子、カスタム演算子、括弧、および関数 (複数の引数を持つ) の両方をサポートする必要があります。基本的なオペレーター以外で動作するものはオンラインで見たことがありません。
ありがとう
java - infix から postfix への変換出力の問題
中置から後置へのコンバーターを実装しようとしていますが、出力、つまり括弧で問題が発生しています。括弧で何かを渡そうとするときは、次のように言います。
NoSuchElementException が発生します。誰が何が悪いのか知っていますか?
いくつかのメモ: トークン化された文字列の両端キューをインフィックスとして渡し (したがって、両端キュー メソッドに制限されています)、後置の文字列両端キューを返します。どんな助けでも大歓迎です。
問題の私の方法は次のとおりです。
java - 後置数字または文字連結への中置
中置記法を後置記法に変換するプログラムに取り組んでいます。文字の連結が必要な場合を除いて、ほとんどの場合に機能します。たとえば、数値の文字列 (1002+304) を渡すと、1002、304、+ ではなく、1、0、0、2、3、0、4、+ が出力されます。
python - 分流場アルゴリズムの複雑な式で電卓エラーが発生する
ここに見られるように、私は分流場アルゴリズムを実装しました:
「3 + 4」などの単純な式には問題なく機能しますが、複雑なものを入力すると、次のようになります。
$ ./rpn.py
-> 4 - 5 * 6 + 3 ^ 2
(エラー) 値が多すぎます
事前に感謝します。助けていただければ幸いです。
java - 条件付き逆ポーランド表記式で AND/OR を使用する方法は?
「(a > b) OR (c < d)」という形式の条件があるとします。逆ポーランド記法に変換して計算するにはどうすればよいですか?「and/or」トークンを最低の優先順位レベルに設定して試してみたところ、「abc OR > d <」が得られました。そうですか?
基本的に、私はこの分水車場アルゴリズムの実装に条件付き機能を追加したいと考えています。http://eddmann.com/posts/shunting-yard-implementation-in-Java/
shunting-yard - InfixToPostfix 文字を文字列に変換する
このコードの文字を文字列に変換するにはどうすればよいですか? InfixToPostfix は、2 桁の数字とスペースを受け入れることができるように、文字ではなく文字列を取り込める必要があります。助言がありますか?前もって感謝します。
}
java - 操車場機能
電卓を作成するために、Java プログラムでShunting-Yard アルゴリズム ( https://en.wikipedia.org/wiki/Shunting-yard_algorithm ) を使用しています。ほぼ完了しましたが、まだ関数を実装する必要があります。問題が発生しました。計算機で x と y などの変数を自動的に乗算するようにしたい - 例: 計算機は xy を x*y に変換します。また、電卓で (x)(y) を (x)*(y) に、x(y) を x*(y) に変換する必要があります。次のコードを使用して、これらすべてを実行しました。
(私の電卓では、変数名は常に 1 文字です。)
これは今のところ問題なく機能しますが、関数を実装すると、もちろん機能しなくなります。「sin(1)」を「s*i*n*(1)」に変換します。このコードで、関数ではなく演算子のみを乗算変換するようにするにはどうすればよいですか?
java - ロジックを使用した分流ヤードの実装
だから私はロジックで動作するようにシャント ヤードを実装しようとしています。マテリアルの条件付き (->) と二重条件付き (<->) の優先順位を設定するという問題に遭遇するまで、それは簡単だと思っていました。 char ではなく String として表す必要があるためです。(つまり、(A OR B) は NOT C を意味する)などのステートメントを含むファイルを読み取り、(A|B) -> !C
それを後置表記に変換できる必要があります。115 行目で NullPointerException が発生し続けていますが、実際には理由がわかりません。char 値を使用してのみケースを設定できますか? または、シンボルの優先順位を設定する別の方法を見つける必要がありますか。これが私のコードです
}
binary-tree - 単項演算子、二分式ツリー、および分流アルゴリズム
私は、中置式を取り、それらを解決する数学式ソルバーを作成しています。二項式ツリーとシャンティング ヤードの両方がうまく機能しています (単項演算子と三項演算子の処理の問題も解決しました)。三角関数で問題が発生しました。45sin または (45)sin または (44+1)sin と書くと、shunting-yard はそれを有効な逆ポーランド記法 (RPN) に変換し、評価は成功します。有効な中置式は sin(44+1) または sin45 + 1 ですが、この問題を解決する方法を提案してください。
infix を RPN に変換するクラス ExpressionEval の Java コードを次に示します。
後置式を取得すると、ExpressionEval クラスのこの関数で評価が行われます
Operator クラスは、これにいくらか似ています。