7

このページには、「通常、接頭辞演算子は右結合であり、接尾演算子は左結合です」と書かれています(私の強調)。

左結合のプレフィックス演算子、または右結合のポストフィックス演算子の実際の例はありますか?そうでない場合、架空のものはどのように見え、どのように解析されますか?

4

6 に答える 6

2

私は実際の言語でそのようなことを認識していません (たとえば、少なくとも十数人が使用している言語など)。「通常」というのは、否定的なことを証明するのはほとんど不可能だからだと思うので、絶対的な発言をしないことで、トリビアに関する議論を避けやすくなります。

理論的にそのようなことを行う方法については、2 つの可能性があるようです。2 つの前置演算子が@あり、左結合として扱う場合、と同等に#解析できます。少なくとも私には、これは本当に恐ろしいアイデアのように思えます。@#a#(@(a))

他の可能性は、@#aとして解析されること(@#)aです。この場合、基本的に@and#を単一の演算子に構成し、それを に適用しaます。

ほとんどの典型的な言語では、これはおそらくそれほど興味深いものではありません (右結合であるかのように本質的に同じ意味を持つでしょう)。一方、単一の演算子の適用は常にアトミックであることを宣言する、マルチスレッド プログラミング向けの言語を想像することができます。はまだ単一のアトミック操作ですが、それらを連続して適用するだけでは(必ずしも)そうではありません。

正直なところ、それもちょっと無理がありますが、少なくとも可能性としては想像できます。

于 2012-12-30T02:05:35.360 に答える
2

原則としてあり得ます。たとえば、プレフィックスの単項プラス演算子とマイナス演算子を考えてみましょう。+は恒等演算であり-、数値を否定するとします。

それらは「通常」右結合です。つまり、+-1と同等+(-1)で、結果はマイナス 1 になります。

それらが左結合であると仮定すると、式+-1は と同等になり(+-)1ます。

したがって、言語は部分式に意味を与える必要があります+-。言語は「通常」、意味を持つためにこれを必要とせず、意味を与えませんが、アイデンティティ演算子を否定演算子に適用した結果が、正確に否定演算子と同じ効果。この例では、完全な式の結果は再び -1 になります。

実際、関数/演算子を並置した結果が、両方を右から左の順序で適用した場合と同じ効果を持つ関数/演算子であると定義されている場合、それらをどのように関連付けても式の結果に常に違いはありません. これらは、それを定義する 2 つの異なる方法です(f g)(x) == f(g(x))+-ただし、言語が ,以外の意味を定義している場合-、結合性の方向が重要になります (そして、「通常の」言語に慣れている人にとって、その言語は非常に読みにくいと思います...)

一方、言語で演算子/関数の並置が許可されていない場合は、式を許可するために前置演算子を右結合にする必要+-1があります。(+-)並置を禁止することは、意味がないことの別の言い方です。

于 2012-12-29T19:47:10.627 に答える
2
于 2012-12-29T23:52:52.513 に答える
1

私自身が尋ねた質問を撃ち落とすのは嫌いですが、他の2つの答えを見て、私が誤って主観的な質問をしたことを示唆するのは間違っているでしょうか。右結合の接尾辞は単に未定義ですか?

式のように普及している表記法でさえ、少数の規則に基づいて構築されていることを思い出してください。規則が考慮されなかったエッジケースがある場合は、標準委員会が定義を決定するまで、単にそれが考慮されていないふりをする方がよいでしょう。存在。

于 2012-12-29T22:24:24.323 に答える
0

仮定の例。言語には、同じ優先順位の前置演算子@と後置演算子#があります。両方の演算子が左結合の場合、式@x#は(@x)#と等しくなり、両方の演算子が右結合の場合、 @(x#)と等しくなります。

于 2013-01-21T16:42:28.470 に答える
0

左に関連する前置演算子または右に関連する後置演算子は覚えていません。しかし、どちらも簡単に存在できると想像できます。人々がオペレーターをどのように見ているのかという自然な方法は、身体に近い方が最初に適用されるため、一般的ではありません。

C#/C++ 言語からの簡単な例:

~-3は等しい2が、 -~3等しい4

これは、これらの前置演算子が右結合であるためです。~-3これは、最初に - 演算子が適用され、次に ~ 演算子が前の結果に適用されることを意味するためです。式全体の値が等しくなります2

仮説的には、これらの演算子が左結合である場合、~-3最初に左端の演算子~が適用され、その後-前の結果に適用されると想像できます。式全体の値が等しくなります4

[編集] Steve Jessopへの回答:

スティーブは次のように述べています。the meaning of "left-associativity" is that +-1 is equivalent to (+-)1

私はこれに同意しませんし、完全に間違っていると思います。左結合性をよりよく理解するには、次の例を検討してください。

左結合プレフィックス演算子を使用した仮想プログラミング言語があるとします。

@- オペランドを乗算します3

#7-オペランドに追加

@#5私の言語での次の構築よりも、私の言語が(5*3)+7 == 22 (ほとんどの通常の言語と同様に)右結合だった場合、(5+7)*3 == 36

ご不明な点がございましたら、お知らせください。

于 2012-12-29T18:47:13.787 に答える