本記事では、プログラミング言語のひとつであるCOBOLの予約語について説明する。
あくまでCOBOLの予約語のみに焦点をあてた記事とし、COBOLという言語の全体像や、予約語以外の面の説明には立ち入らない。 読者の理解に必要ならば、他のプログラミング言語との比較は適宜行う。
概要 COBOLにおける予約語は、次のような特徴を持っている。
COBOL言語の予約語の特徴 予約語の数が非常に多く、よく使われる英単語のうちかなりの数が予約語になっている。その理由として次のような点があげられる。 英語風の記述が出来ることを原則にしているために他の言語では関数の呼び出しで処理されるようなことがすべて文で処理されるため、関数名やパラメータに相当するものまですべて予約語になる。 他の言語では記号で書かれるものまで英単語で書く手段を用意するために予約語としている。 「PICTURE」と「PIC」のように、正規形と短縮形が、どちらも予約語とされている。 「ZERO」と「ZEROS」のように、単数形と複数形が、どちらも予約語になっている場合がある。 規格にある機能は、たとえそれを実装していなくても、予約語にしている。 またCOBOLの場合、言語仕様の改正にともなって予約語が増えたり予約語であったものが予約語ではなくなったりすることが多いのも特徴である。
COBOLを搭載した各システムの予約語の特徴 環境部で使用するシステム名や装置名等も予約語になっていることが多い。 過去の規格にはあったが現在は廃止された機能に関連する予約語を互換性のために予約語にしていることがある。 よく使われているCOBOLの方言に関連する予約語についても機能を実装していなくても予約語にしていることがある。 実際の各システムでは、予約語に相当する文字列であっても、明らかに当該予約語本来の使い方とは異なった使い方をしていると文脈上判断出来るときは、警告を出すだけで使用できるようになっていることもある。 上記のような理由からコンパイラのマニュアルには通常予約語の表が付いている。
特殊記号の取り扱い 以前は、算術演算子(+ - * / **)や比較文字(> < =)は予約語とされていた。 分類としては「特殊文字語」として「必須語」の中に入れていた。 特殊文字語以外の必須語を「必要語」と呼んだ。 現在、算術演算子や比較文字は予約語ではなく「特殊な記号」であるとされている。
COBOLの予約語の分類 COBOLの予約語は必須語、補助語、特殊目的語の3種類に分かれる。 必須語 あることをする場合には必ず書かなければならない語。書き方の中で下線の引いてある語。 補助語 書いても書かなくてもよい語 書き方の中で下線の引いていない語。 特殊目的語 特殊レジスタおよび表意定数(下節で説明)
必須語の下位分類 必須語の中には次のようなものがある。(網羅しているわけではなく、重複もある。) 識別子 動詞(COBOLでは英語風の表現をとることから命令文の識別子を伝統的にこう呼ぶ。) READ WRITE等 部の識別子 IDENTIFICATION ENVIRONMENT DATA PROCEDURE 節の識別子(環境部およびデータ部) CONFIGURATION INPUT-OUTPUT 等 段落の識別子(手続き部以外) PROGRAM-ID等 範囲明示符 END-PERFORM等 連結語 修飾詞 OF IN 論理連結語 AND OR 論理演算子 AND OR NOT 比較演算子 EQUAL GREATER LESS
特殊目的語の下位分類 上で説明したように特殊目的語というのは、特殊レジスタおよび表意定数である。細かく下位分類すると以下のとおり。 特殊目的語 特殊レジスタ 次の4つ 行数カウンタ LINAGE-COUNTER 行カウンタ LINE-COUNTER ページカウンタ PAGE-COUNTER デバッグ項目 DEBUG-ITEM 表意定数 0 ZERO ZEROS ZEROES 空白 SPACE SPACES 引用符 QUOTE QUOTES 最高値 HIGH-VALUE HIGH-VALUES 最低値 LOW-VALUE LOW-VALUES
過去の予約語の分類 第2次規格以前は予約語を必要語、補助語、連結語、特殊レジスタ、表意定数、特殊目的語の6つに分類していた。 必要語 現在は必須語の中に入る。以下の3つに分けていた。 命令の動詞 機能的な用途を有する語(NEGATIVE SECTION等) 命令などの書き方の中に現れる語 補助語 連結語 現在は必須語の中に入る。以下の3つに分けていた。 修飾詞 OF IN コンマ、セミコロン 論理連結語 AND OR 特殊レジスタ 表意定数 特殊目的語 算術演算子や比較文字のこと。その後必須語の中に入り、現在は予約語ではないとされている。