問題タブ [associativity]
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 - 左結合演算子 vs 右結合演算子
式がある場合:
$
は左結合演算子、@
右結合演算子です。優先順位は同じです。
この式はどのように解析されますか? (a $ b) @ c
またはとしてa $ (b @ c)
?
c++ - 結合順序が逆の C++ オーバーロード演算子
タイトルを考えるのはとても難しかったです... (私は英語のネイティブスピーカーではありません.)
このコードは期待どおりにコンパイル/動作しますが、a=a+2 を a=2+a に変更すると、コンパイルされなくなります。GCCは私にこのエラーを与えます:
2+a を a+2 のように機能させる方法はありますか?
c - C における演算子の優先順位と結合規則
次のコード スニペットをご覧ください。
出力:
ステートメント 2 には、4 つの異なる演算子があります。その中で()
最も優先順位が高いもの。演算子の結合性()
は左から右なので、なぜb = 22
ですか21
?
c - 式の中のかっこは、何よりも先に評価されますか?
C では、オペランドの評価順序は、演算子の優先順位や結合規則とは関係ありません。
C: expr1 * expr2 + (expr3 + expr4)
(no sequence points in between) に式があるとします。
この式が評価されると、次のようになります。
部分式 expr3 と expr4 は、括弧のために expr1 と expr2 の前に評価されますか?
または、括弧は、括弧内の演算子が括弧外の演算子の前に評価されることを保証しますか?
括弧は、オペランドまたは演算子の評価順序を保証しますか?
c++ - Boost Spiritを使ったべき乗演算子を使った式文法
Boost精神のサンプルで提供されている表現文法に累乗演算子を追加したいと思います。
BNF文法は次のとおりです。
これを次のように Boost Spirit に翻訳しました。
問題は、この場合の ^ 演算子が連想のままであることです。つまり、の代わりに2 ^ 3 ^ 4
として誤って解析されます。(2 ^ 3) ^ 4
2^ (3 ^ 4)
^
右結合になるように文法を書き直すにはどうすればよいですか? 明らかに、定義で使用したクリーネ星factor
は正しくありません。文法を精神コードに変換する方法は何ですか? 左因数分解された文法からスピリットの実装に移行する方法があるようですが、すぐにはわかりません。
より正式には、Spirit コードは次のようになります (指数を追加する前)。
左因数分解文法は
javascript - Javascript - style.left は減算では更新されますが、加算では更新されません
ここのコードは、ピクセルではなくパーセンテージを更新することで、画像オブジェクトを左右に移動することになっています。moveLeft は機能しますが、moveRight は機能しません。連想性と関係がありますか?
antlr4 - Antlr4 の左再帰ルールは、右結合解析を生成するようです
次の文法は、この問題を示しています。
入力 "a,b,c" を指定すると、リスナー イベント トレース出力を取得します
ここで、(は、 Enter punctuatedを表し、)はexit punctuatedを表し、他のすべてのルールは、簡潔さと明確さのために省略されています。
調べてみると、このリスナー イベントの順序は右結合解析を表しています。
一般的な慣行と The Definitive Antlr 4 Reference により、次のリスナー イベント トレースに対応する左連想解析が期待されます。
文法、期待、リスナー イベントの解釈などに何か問題がありますか?