問題タブ [expression-evaluation]
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.
programming-languages - EBNF を使用した演算子の優先順位の記述
私は、後のプロジェクトで使用する予定のプリプロセッサ言語用のトークナイザーと式評価器を作成しました。言語を EBNF (Extended Backus-Naur Form) で記述して、構文をより保守しやすくしたり、それを使用して新しいバージョンのパーサーを生成したりする必要があるのではないかと考え始めました。
私の第一印象は、トークン化プロセスと構文検証に EBNF が使用されているということでした。後で、この投稿やウィキペディアの記事のように、演算子の優先順位を記述するためにも使用できることを発見しました。
ジェネレーターが組み込みの演算子の優先順位を使用してコードを生成できるようにする方法はわかりますが、これは実際にどのように優先順位を表現する必要がありますか? 演算子の優先順位はセマンティクスに関するものであり、EBNF は構文に関するものではありませんか? 自分の言語の説明を EBNF で書くことにした場合、演算子の優先順位を考慮して書くか、それとも別のセクションで文書化する必要がありますか?
java - C++ と PHP と C# と Java - 不等な結果
C# と Java で少し奇妙なことがわかりました。この C++ コードを見てみましょう。
コンソールに X = 11 と表示されます (ここで結果を見てください - IdeOne C++ )。
次に、C# で同じコードを見てみましょう。
コンソールには 1 (11 ではありません!) が表示されます (ここで結果を見てください - IdeOne C# 今あなたが何を考えているかはわかります - 「どうしてそんなことができるの?」ということですが、次のコードに進みましょう。
Java コード:
結果は C# と同じです (X = 1、結果はこちらをご覧ください)。
最後に、PHP コードを見てみましょう。
結果は 11 です (結果はこちらをご覧ください)。
私にはちょっとした理論があります - これらの言語 (C# と Java) は、スタック上に静的変数 X のローカル コピーを作成しています (それらはstaticキーワードを無視していますか?)。それが、これらの言語での結果が 1 である理由です。
他のバージョンを持っている人はいますか?
java - パターン評価者
次のパターンで評価する必要がある文字列がいくつかあります-
上記の入力には同じパターンがあり、'()' または null は ' * ' として表されます。出力は int/string 配列に保存されているため、出力形式はそのようになっています。
この種のパターンを出力フォームに評価する方法を親切に提案してください。
c# - カスタム関数名に記号を使用する NCalc
式の入力で、次のような特別な接頭辞で関数を目立たせたいとしましょう$
。
と のカスタム関数を記述$proper
し$upper
ます。
ただし、「文字 '$' には実行可能な代替手段がありません」というコンソール エラーが発生します。シンボルを削除するか、アンダースコアを使用すると機能します。
NCalcの関数名に記号文字を使用する方法はありますか? これは、関数が数字で始まる場合にも機能しません (関数名を のように短縮したい場合double
など2x
)。
(入力 ',' で NCalc 評価エラーに実行可能な代替手段がないのと似ています)
r - Rの複合式の戻り値は何ですか?
R では、次のことができます。
または、必要に応じて:
当然のことながら、これらの (複合) 式は両方とも 6 に評価されます。
これは、複合式の値が複合式で最後に評価されたステートメントと等しいという R 言語の (文書化された) 機能ですか?
公式ドキュメントはこのトピックに軽いです: http://cran.r-project.org/doc/manuals/r-release/R-lang.html#Compound-expressions
haskell - Haskell での各関数呼び出しでの式評価の順序の変更
次のプログラムがあるとします。
これは単純な例ですが、デモンストレーション目的には十分だと思います。fooを新しく (再帰的に) 呼び出すたびに、 l1とl2の式の評価順序を変更するにはどうすればよいでしょうか? それらが宣言されたときではなく、式(この場合は演算子内の式)内で遅延評価されることはわかっていますが、プログラムが無限ループに入る場合があるため、述べたように行う方法が必要です。この無限再帰が 2 番目に評価される引数l2で発生する場合、 l1は常に*l2の前に評価されるため問題はありませんが、その逆、つまりl1式を無限に評価する場合、*l2*** は評価する機会がありません。したがって、新しいfoo関数の呼び出しごとに ***l1*式とl2式の評価をうまくやりくりできれば、問題は解決します。素敵な/一般的な解決策を探しています。
編集: xまたはyまたはその両方が無限の構造 (リスト) である可能性があることを忘れており、そこに問題があります。