中置記法:演算子をオペランド間に記す表記法
中置記法は、2 + 2のように演算子をオペランドの間に置く表記法である。括弧、優先順位、結合規則によって演算順序を示し、数学やプログラミングで広く使われる。
概要
中置記法は、算術式や論理式を記述する際に、各演算子を結合する要素の間に置く、よく知られた表記法である。たとえば 2 + 2 や a * (b + c) がこれに当たる。この形式は、演算の表し方に関する人間の期待に近いため、学校での算数・数学、多くの科学文献、そして主流のプログラミング言語の大半で通常用いられている。
仕組みと主な特徴
演算子がオペランドの間に置かれるため、中置式は解釈の規則がなければ曖昧になり得る。この曖昧さは、括弧によるグループ化と、優先順位および結合規則の体系という二つの仕組みによって解消される。括弧は、どの演算を一緒に評価するかを明示的に定める。一方、優先順位は特定の演算子により高い優先度を割り当てる。たとえば通常は、乗算が加算より先に処理される。結合規則は、同じ優先順位をもつ演算子をどのようにまとめるかを決める。たとえば減算が左結合である場合、a - b - c は (a - b) - c と読まれる。
- 二項演算子と単項演算子:中置記法は一般に二項演算子(a + b)を指す。ただし、否定記号のようにオペランドの前に書かれる単項演算子もあり、二項としての用法と区別する必要がある。
- 括弧:優先順位を上書きし、意図した評価順序を明示するために用いる。
- 優先順位と結合規則:括弧がなくても、構文解析器と読者が評価を決定できるようにする規則である。演算の順序も参照。
- 可読性:接頭記法や後置記法と比べ、人間にとってより自然な形式と考えられる。接頭記法および後置記法と比較できる。
構文解析と実装
中置記法は人には直感的である一方、処理系が優先順位、結合規則、括弧を扱わなければならないため、接頭形式や後置形式よりコンピュータによる構文解析が複雑である。中置式を評価しやすい形式へ変換するよく知られた手法に、ダイクストラの操車場アルゴリズムがある。このアルゴリズムは後置(逆ポーランド)列を生成する。多くのコンパイラやインタプリタは、中置式を解析するためにパーサジェネレータや再帰下降パーサを実装している。単純な電卓でも、評価の前に中置式を内部的に後置式へ変換することが多い。
用途と例
中置記法は、数学、工学、日常的な計算、および現代のプログラミング言語の大半のソースコードに見られる。C、Java、Pythonなどの言語は、算術、比較、論理式に中置演算子を採用している。これは、配置が慣習的な数式表記を反映し、利用者にとって簡潔だからである。形式論理学や一部の関数型プログラミングの文脈では、曖昧さのない機械処理のため、接頭形式や後置形式を含む別の表記法が選ばれることがある。
歴史、区別と注目すべき事項
量の間に演算子を書く慣行には、算術と代数学における長い非公式の歴史がある。今日この表記法が優勢であるのは、親しみやすさと教育上の伝統による。重要な区別としては、同一の記号における単項形式と二項形式の扱い、慣習的な優先順位が書き手の意図と一致しない場合に明示的なグループ化が必要なこと、さらに同じ演算子であってもシステムごとに異なる優先順位が割り当てられる場合があることが挙げられる。異なる文脈での演算子の相互作用については、プログラミング言語に関する資料や、演算子とオペランドを扱う初等的な文献を参照できる。
これらの側面を理解することは、読者と実装者の双方が誤りを避け、期待される動作に従う構文解析器や電卓を設計する助けとなる。
関連項目
著者
AlegsaOnline.com 中置記法:演算子をオペランド間に記す表記法 Leandro Alegsa
URL: https://ja.alegsaonline.com/art/47286