20
2
章 プログラムの意味
結局のところ、構文はプログラムの表面的な見え方にのみ関係しており、その意味には無関係で
す。構文的には有効であっても、何ら有用な意味をなさないプログラムもあり得ます。たとえば、
y =
x + 1
というプログラムは、事前に
x
が何なのか言っていないため、それ自体では意味をなしませ
ん。また、
z = true + 1
というプログラムはブール値に数値を足そうとしているため、実行時にお
かしいと気づくかもしれません(もちろん、これは対象とするプログラミング言語の特性に依存します)。
当然のことですが、プログラミング言語の構文がそこにある意味にどう対応しているかを説明する
「たった1つの真の方法」というのはありません。実際のところ、プログラムが意味するものについて具
体的に説明する方法は複数存在しており、それぞれ堅苦しさ、抽象度、表現力、実用的効率につい
て、異なるトレードオフがあります。これから先、代表的な形式的アプローチについて調べ、それらが
互いにどのように関係しているのか理解していきましょう。
2.3
操作的意味論
プログラムの意味について考えるとき、最も実践的な方法はプログラムが何をするのかを考えること
です。プログラムを実行すると何が起こるのでしょうか。そのとき、プログラミング言語のさまざまな
構成要素はどのように振る舞うのでしょうか。それら構成要素を組み合わせて大きなプログラムを作る
と、どんな効果が得られるのでしょうか。
これが操作的意味論(operational s ...