ホームページ  >  記事  >  バックエンド開発  >  演算子の優先順位テーブルと結合テーブルは、プログラミング言語の式の評価について実際に何を示しているのでしょうか?

演算子の優先順位テーブルと結合テーブルは、プログラミング言語の式の評価について実際に何を示しているのでしょうか?

DDD
DDDオリジナル
2024-11-01 12:32:02728ブラウズ

What do operator precedence and associativity tables actually tell us about expression evaluation in programming languages?

演算子の優先順位と結合性: 定義と評価順序との関係

はじめに

プログラミングにおける言語、演算子の優先順位、結合性によって、演算子が評価される順序が決まります。多くのプログラミングの教科書にはこれらのプロパティをリストした表が記載されていますが、その解釈とその定義のソースに関して疑問が生じます。

質問

  1. 関数が常に左から右に評価されるのは正しくありません。演算子の優先順位と結合性の表は実際に何を示していますか?
  2. ANSI 標準でない場合、演算子の優先順位と結合性は誰が確立しますか? ANSI がそれを定義しているのであれば、なぜ規格内に明示的な言及がほとんどないのでしょうか?この情報は ANSI C 標準から推測されたものですか、それとも他の場所で確立されたものですか?

回答

演算子の優先順位と結合性の定義

演算子の優先順位と結合性は、言語標準自体の中で定義されます。標準文法は、式を構築するための規則を指定します。これらのルールを調べることで、演算子の優先順位と結合性を導き出すことができます。

たとえば、 C では、加法式 (加算と減算) の文法は次のとおりです。

additive-expression:
  multiplicative-expression
  additive-expression + multiplicative-expression
  additive-expression - multiplicative-expression

この規則から、乗法式 (乗算と除算) は加法式の部分規則であるため、加法式よりも優先順位が高いことが推測できます。さらに、演算子と - の左から右への結合性は、加算式が他の加算式で再帰的に構成される可能性があるというルールから推測できます。

評価順序

演算子の優先順位と結合性、および評価の順序を区別することが重要です。優先順位と結合性によって演算子がどのようにグループ化されるかが決まりますが、評価の順序は個々の式が評価される順序を指します。 C では、評価が優先順位と結合性に従って厳密に行われることは保証されていません。

たとえば、式 f1() f2() * f3() では、 * 演算子は演算子よりも高い優先順位を持ちます。 f1() (f2() * f3()) のグループ化。ただし、評価の順序は定義されていないため、f3()、f1()、または f2() が最初に評価される可能性があります。

論理 OR (||) 演算子などの特定の演算子は、オペランドの評価にシーケンスを課し、短絡を許可します。 x || でy の評価が必要かどうかを決定するために、y、x は常に y より前に評価されます。

以上が演算子の優先順位テーブルと結合テーブルは、プログラミング言語の式の評価について実際に何を示しているのでしょうか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。