予約語
予約語と似ていてしばしば混同されてしまう言葉に「キーワード」(keyword) があるが、プログラミング言語の種類、また文脈によってreserved wordとkeywordは全く違う意味を持ちうるので、両者は異なる用語・概念と扱われている場合が多い。そのため、一旦は別物である可能性が高いとみなして扱うほうが安全である。
たとえば「予約語」という用語を「処理系で内部的に使う名前と同じであるといった理由で予約されているためにユーザーは使えない識別子」という意味で使っている規格もある。この場合予約語はキーワードとは別のものである。
一方、「キーワード」は言語仕様上特別な意味を持った語のことである。キーワードであっても予約語でないこともあるし、その逆もある。たとえばECMAScript (ECMA-262) 5th Edition (ES5) では、classやextendsは予約されており予約語だが言語で使われておらずキーワードではない。しかしECMA-262 6th Edition (ES6) では新たにサポートしたクラス構文のために使われるキーワードとなった。ECMA-262 では、キーワードは予約語の部分集合で、言語で制御構造などの意味を持つ予約語がキーワードである。Javaでは言語で使われていないgotoやconstもキーワードである。SQLには予約されたキーワードと予約されていないキーワードがある。
例にも出てきたように、個々の規格によっても両者それぞれ微妙に意味が違うこともある。
なお、FORTRANやPL/Iのように予約語を持たないプログラミング言語もある。
「予約されたキーワード」(reserved keywords) や「予約されていないキーワード」(unreserved keywords) という用語が使用されている場合もある。
共通言語基盤 (CLI) 向けの共通言語仕様 (CLS) にしたがって実装されたC#やVB.NETでは、キーワードを識別子として利用する構文が用意されている。
C#では@classなどのように先頭に@をつけることで識別子として利用することができる。
VB.NETでは[Class]などのように[...]で囲むことで識別子として利用することができる。
F#では``class``などのように``...``で囲むことで識別子として利用することができる。
上記の機能は、CLSを満たす他の.NET言語で記述されてアセンブリに公開されたシンボルの名前を使う場合などでも有用である。例えばC#ではDimはキーワードではないため、プロパティなどの名前として使用できるが、VB.NETではキーワードであるためそのままでは使えず、相互運用に支障が出る。そこで、シンボル名を使用する際に[Dim]と記述することでVB.NETでも識別子として使えるようになる。