プログラミング言語
意味論の仕様は、自然言語などで記述されることが多いが、形式的に与えられている言語もある。
形式意味論(プログラム意味論の記事も参照)で意味論を記述した例として Standard ML や Scheme がある。
これは、次のような規則である。
expression は atom または list である。
atom は number または symbol である。
number は1文字以上の数字列であり、オプションとして符号が前置される(空白は含まない)。
symbol はアルファベットで始まる任意の文字列である(空白は含まない)。
list は括弧記号の対であり、その間に0個以上の expression がある。
これに従う例として、12345、()、(a b c232 (1)) などがある。
構文上正しいプログラムが全て意味的に整合しているとは限らない、という設計の言語も多い。また、意味的に整合していても、それを書いた人が、自分の意図を正しく反映できていない場合もある。
以下のLISPのコード断片は構文上は正しいが、意味的には問題がある。変数 employees には従業員データのリストを入れるべきものであるが、employees は実際には空(nil)なので、employees がリストであることを前提に、employees の後続部分を求める式 (cdr employees) は評価できずエラーになる。