問題タブ [postfix-notation]
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.
parsing - ANTLR 式リストの競合
これは、単純なネストされた式の基本構造です...
これらの式のリストを作成したい場合は、次を使用できます...
ここでは区切り文字として「,」を使用します。
区切り記号なしで式のリストを作成できるようにしたい。
したがって、文字列があれば、それを次の4 5 2+3 1 6
ように解釈できるようにしたいと思います(4) (5) ^(+ 2 3) (1) (6)
問題は、両方が同じ最初のシンボル (INT)4
を2+3
持っているため、競合が発生することです。私はこれをどのように解決できるかを理解しようとしています。
編集
特定の条件に対して正しい書き換えを思いつくのに苦労しているだけで、ほとんど理解できました...
これは、私が欲しいものです1+2+3++4+5+
。^(+ ^(+ 1 2) 3) (+) (+) ^(+ 4 5) (+)
++1+2
として解析されるように、書き換えルールを完成させようとしてい(+) (+) ^(+ 1 2)
ます。全体として、トークンのリストが必要で、すべての中置式を見つけて、残りをリストとして残します。
java - スタックのプッシュと評価
初めて投稿するので改善方法を教えてください。
私は中置記法を後置記法に変換してから評価するプログラムに取り組んでいます。postfix への変換はうまくいきましたが、評価に問題があります。以下のコードでは、オペランドを倍精度変数「数値」に変換しようとすると、値が維持されません (以下の実行時出力を参照)。問題のメソッドの一部を次に示します (print ステートメントはデバッグ専用です)。
---実行時--- 1
番号 = 49.000000
8
番号 = 56.000000
+
val1: 56.000000
val2: 49.000000
val3 = 105.000000
105.0
algorithm - infix から postfix に変更する利点は何ですか?
今日は本を読みました。infix から postfix への変更に関するアルゴリズムが導入されました。利点とは? 前もって感謝します。
c# - 逆ポーランド記法: 指数の計算
現在、逆ポーランド記法を使用しています。指数演算を除くすべての操作を実行できました。C#sharps が指数演算を実行することは承知してMath.Pow
いますが、それをコードで使用するとエラーが発生します'System.Collections.Generic.Stack<T>.Push(T)' is a 'method', which is not valid in the given context
。if else
最後のステートメントで特定の問題を見つけることができます。指数計算を実行する方法を適切に修正または作成する方法はありますか?
コード
java - スタックを使用したJavaコードでのPostfix式の評価について
解読、説明、改善のための推奨事項を提供するためのコードスニペットが提供されました。私はそれが機能すると言われ、それをテストするためのコードを実行することはできません。私はそれをかなり理解していますが、私が理解していることが正しいことを確認するために誰かがそれを実行する必要があります、そして私が理解していないことを説明するのに助けを求めてください。私はたくさんの研究をしていて、まだいくつかあります質問。
このコードは、乗算と加算のみを使用する接尾辞式を読み取るために使用される実装です。次に、結果をスタックに保存しながら式を評価します。次に、結果を出力します。オペランドはスタックにプッシュされ、演算子を読み取るときに、スタックから上位2つのオペランドがポップされて計算が実行され、結果がスタックに格納されます。
プログラムは、整数と演算子が空白などの文字で区切られていることを前提としていますが、入力の合法性はまったくチェックしていません。
修正後の式の例:2 3 5 + * = 16
最後のifステートメントとwhileループに関しては混乱しています。
したがって、最初に0〜9の数字をプッシュすると、#0が格納され、その0がポップアウトされ、10で乗算されて、intに変換される次の数字(存在する場合)に追加されます。結果をスタックにプッシュバックしますか?もしそうなら、なぜ0がスタックにプッシュされるのですか?
最初の0〜9の番号付き文字をintデータ型に変換し、それをスタックにプッシュしてから、whileループに移動するべきではありませんか?
次に、Whileループで、配列を読み取り、0〜9の番号付き文字をintデータ型に変換し続け、異なる文字が読み取られるまでスタックにプッシュしますか?
また、whileループのどこでint iをインクリメントしているのか、次の文字に進むためにwhileループから抜け出しているのかわかりませんか?
c - Cプログラムをコンパイルするときの警告(char形式、異なるタイプの引数)
私はまだポインタを学んでいないので、誰かが同じ質問をしているときに他の答えが何について話しているのかわかりません:S ...
これは、有限スタックで接尾辞と同じ操作を実行するためのプログラムです。他の機能はすべて正常に機能しています。Visual Studioでコンパイルして実行すると正常に動作しますが、Linux(プログラムのテストに使用)で実行すると動作しません。「c:52:警告:char形式、異なるタイプのarg(arg 2)」と表示されます。
問題を引き起こしているのはscanfまたはatoi関数だと思います...
数文字変更するだけでこのプログラムを簡単に修正する方法はありますか?
algorithm - プレフィックス式を評価するアルゴリズム?
4つの二項演算子(+、-、*、/)しかないプレフィックス式があります。このような式を評価する簡単な方法は、後置式に変換してからその式を評価することです。しかし、他の式に変換せずにこれを直接行うアルゴリズムを探していますか?
java - Java/c# と C では異なる接尾辞インクリメントを使用して変数を自分自身に追加する
私がこれを行う場合、JavaとC#で:
j は 3 です。つまり、1+2 に変換され、加算の前に i がインクリメントされます。
ただし、C では j は 2 です。つまり、1+1 に変換されてから i がインクリメントされます。
C と Java/C# の内部メカニズムによって、式とは何かという違いが生じる原因は何ですか?
(ポストフィックスも同様。Java/C# は 4 になり、C は 3 になります。)
ありがとう。
ところで、最初は C の答えだと思っていたので、Java/C# の結果に戸惑いました。
java - スタック実装の問題/特定の文字を印刷しない
後置計算機に中置を書き込もうとしています。私は以下を含むファイルから読んでいます:
(4> 3)+(3 = 4)+2
コードを実行すると、入力の接尾辞表記を含む文字列を取得するはずですが、まったく何も取得しません。私のコードは最終的な印刷ステートメントに到達していないようです。また、少なくとも印刷するようにコードを変更すると(表記は正しくありませんが)、演算子(+、-、&など)ではなく数値のみが出力されます。なぜこれが起こっているのか理解できません!私は以下のコードでラベルを付けました。ここで、printステートメントは次のとおりです。