予約語

出典: フリー百科事典『ウィキペディア(Wikipedia)』
移動: 案内検索

予約語(よやくご、: reserved word)とは、プログラミング言語において字句的には識別子(変数名、関数名、クラス名など)としてのルールを満たしているにもかかわらず、識別子にならない字句要素

似ている言葉としてキーワードがある。多くのプログラミング言語において予約語とキーワードはほぼ同じものを指すため、しばしば混同されるが両者は異なる概念である。キーワードは言語仕様上特別な意味を持った語のことである。キーワードであっても予約語でないこともあるし、その逆もある。たとえば ECMAScript[1]では、class は予約されており予約語だが言語で使われておらずキーワードではない(ECMA-262 では、キーワードは予約語の部分集合で、言語で制御構造などの意味を持つ予約語がキーワードである。Java では使っていなくてもキーワードであり、goto もキーワードである)。SQLには予約されたキーワードと予約されていないキーワードがある。例にも出てきたように、個々の規格によっても両者それぞれ微妙に意味が違うこともある。

予約されているのでユーザーは使えない識別子(つまり、使えないだけで、識別子ではある)という意味で(たとえば、処理系で内部的に使う名前と同じであるとか)「予約語」という語を使っている規格もある。この場合キーワードと予約語は別のものである。

FORTRANPL/I のように予約語を持たないプログラミング言語も存在する。 また、共通言語基盤共通言語仕様(CLS))にしたがって実装されたC#やVB.NETでは予約語を識別子として利用する構文が用意されている。

予約語となりうる単語[編集]

  • 流れ制御を表す単語(ifwhile など)
  • プログラムの構成要素を表す単語(functionconst など)
  • 組み込み関数(openreadなど)
  • 組み込みの型(intstringなど)
  • 他の言語などと混同して、誤用される可能性のある語(Javaのgotoconstなど)
  • 将来キーワードとして利用するかも知れない語(JavaScriptのletsuper、C++11のexport(以前は使われていた))

コンテキストキーワード[編集]

コンテキストキーワード(Contextual Keywords)はC#C++などの言語で採用されている特殊なキーワードで、文脈キーワード、文脈依存キーワードとも言われる。

言語を後から拡張する場合、新しい構文や予約語を追加すると既存のコードが壊れてしまう場合がある。(例えば、変数やメソッド名が予約語と同じだった場合) しかし、完全に将来の拡張を予期することは困難であり、予約語が拡張の障害になりうる。

そこで、新しく拡張された構文の中でのみ予約語(キーワード)として動作するのがコンテキストキーワードである。 コンテキストキーワードは特定の構文以外では変数などの名前として使用できるため、既存のコードを破壊することがない。 例えば、C#のプロパティ構文ではget、set、valueという多くの名前に使われているであろう語をコンテキストキーワードとして追加している。

コンテキストキーワードの問題点[編集]

  • 複雑な文脈によってキーワードか否かが決まるので正規表現などでは判断しがたく、テキストエディタのシンタックスハイライトを正確に行うのが困難である。Visual Studioなどの統合開発環境ではパーサを利用してより精密な構文解析を行って実現している。
  • パーサが複雑になる
  • 他のスコープの変数やクラスメンバなどを使用する際に、新しい構文の中でも識別子として利用しないといけない場合がある。(C#では@をつけることで予約語を識別子として利用することができる)

主な言語の予約語やキーワード[編集]

[編集]

  1. ^ ECMA-262 5th Edition
  2. ^ Pascal では綴り記号と言う。『PASCAL 原書第4版』(培風館、1981)では word symbol の訳として「綴り記号」という語を使っている。また、「綴り記号(すなわち予約語)」という記述がある(p. 12)