プログラミング言語において、演算子の連想性とは、括弧がない場合に同じ優先順位の演算子がどのようにグループ化するかを決定する性質である。 オペランドの前後に演算子(例えば^ 3 ^
)があり、それらの演算子の優先順位が等しい場合、そのオペランドは2つの異なる演算(すなわち2つの演算子によって示される2つの演算)への入力として使用されることがある。 オペランドをどの演算に適用するかは、演算子の連想性によって決定される。 演算子は、連想性(演算を任意にグループ化できること)、左連想性(演算を左からグループ化すること)、右連想性(演算を右からグループ化すること)、非連想性(演算を連結できないこと、多くは出力型と入力型が互換しないため)であることがある。 演算子の連想性と優先順位はプログラミング言語の定義の一部であり、異なるプログラミング言語では同じタイプの演算子でも連想性と優先順位が異なる場合がある。
式 a ~ b ~ c
を考えてみよう。 演算子 ~
が左の連想性を持っていれば、この式は (a ~ b) ~ c
と解釈される。 演算子に右結合性がある場合、この式はa ~ (b ~ c)
と解釈される。 演算子が非連想性である場合、その式は構文エラーであるか、あるいは何か特別な意味を持つ可能性があります。 数学の演算子の中には、本質的に連想性を持つものがあります。 例えば、従来の数学の記法で使われる引き算と割り算は、本質的に左結合性です。 対照的に、足し算と掛け算は、左と右の両方の連想性を持っています。 (例: (a * b) * c = a * (b * c)
).
多くのプログラミング言語のマニュアルでは、演算子の優先順位と連想性のテーブルを提供しています。例えば、C と C++ のテーブルを参照してください。
ここで説明する記法の連想性のコンセプトは、数学の連想性に関連していますが、それとは異なっています。 数学的な連想性を持つ演算は、定義上、表記上の連想性を必要としない。 (例えば、足し算は連想性を持っているので、左連想でも右連想でもなくてもよい)。 しかし、数学的に結合性でない演算は、表記上、左結合性、右結合性、または非結合性でなければならない。 (例えば、引き算は連想性を持たないので、表記上の連想性を持たなければならない。)
。