50年前に事務処理用に開発されたCOBOLは、いまでも多くの企業で使われ続けている。基盤部分が近代化してもCOBOLは生き残るかもしれない(編集部)
今回からいよいよCOBOLの文法などの詳細に進みます。第1回「Java/.NET開発者のための『ここが変だよ、COBOL』」で述べたとおり、COBOLはその機能の大部分を言語の構文によってサポートしているため、言語の文法を学習するには比較的多くの時間を必要とします。そこでこの連載では基本的な構文要素を学習するにとどめることにします。
なお、現在のCOBOLはオブジェクト指向要素も追加され、多様な記述が可能になっています。しかし、現存するCOBOLソースの大多数は単一のプログラムを定義するような古典的なものです。そこで、本記事でも話題をこの範囲に限定します。
また、読み易さのために意図してリファレンス的な記述を避けていますので、さまざまな例外的な話題には言及しません。この意味でリファレンス的には不正確な記述も含まれていることをあらかじめお断りしておきます。
COBOL言語によるプログラミングの特徴としては、すでに第1回で、(1)カラムに意味がある書法であること、(2)英大文字小文字の区別がなく、ピリオドを終止符とすることを述べました。それでは、実際に動作するCOBOLプログラムを見てみましょう。
123456*8901234567890123456789012345678901234567890 IDENTIFICATION DIVISION. PROGRAM-ID. HELLO. PROCEDURE DIVISION. DISPLAY "Hello World!". STOP RUN.
1行目:
7カラム目に文字“*”がありますのでこの行はコメントになります
2行目:
COBOLプログラムを構成する4つの「部」(DIVISION)のうちの最初のものが見出し部です。この行は見出し部の先頭を宣言するものです
3行目:
プログラムのエントリ名を指定する段落です
4行目:
手続き部の先頭を宣言する行です
5行目:
DISPLAY文はWriteLineメソッドに相当し、オペランドを画面に表示します。文字定数はダブルクオートで囲みますが、ほとんどのコンパイラはシングルクオートも同じ意味で受け付けます
6行目:
STOP RUN文は実行単位の終了を指示します
COBOLプログラムは以下の4つの部から構成されます。上記の例では環境部とデータ部は使用していません。
部の見出しの構文 | 記述する内容 | |
---|---|---|
見出し部 | IDENTIFICATION DIVISION. | プログラム名を命名し、その属性を記述する |
環境部 | ENVIRONMENT DIVISION. | データファイルなど使用する外部要素を記述する |
データ部 | DATA DIVISION. | プログラム内の変数などのメモリ領域を記述する |
手続き部 | PROCEDURE DIVISION. | 手続きロジックを記述する |
このようにCOBOLでは、空白などの分離符で区切られた語が並んだ末尾をピリオドで止めたものでプログラムが構成されています。英語のセンテンスに似せたものであることが分かります。
COBOLの語は予約語(キーワード)と利用者語に分類されます。上記の例で「IDENTIFICATION」「DIVISION」「PROGRAM-ID」などは予約語です。予約語が多いのもCOBOLの特徴であり、COBOL2002規格では403個の予約語があります。ちなみにJava 6のキーワードは50個です。
このほかにコンパイラによって独自にサポートされた構文で使用する予約語もありますので、一般的な英単語の多くが予約語になってしまっています。また、英文ライクであることを標榜するCOBOLでは、同じ単語の単数形と複数形をそれぞれ同義の予約語とすることがあります。例えば、
LABEL RECORD IS STANDARD.
と
LABEL RECORDS ARE STANDARD.
は、どちらもCOBOLのデータファイルの属性を宣言する構文ですが、コンパイラにとっては同じ意味として解釈されます。この「RECORD」「RECORDS」「IS」「ARE」などは予約語です。
なお、われわれ日本人がうっかり、
LABEL RECORDS IS STANDARD.
という、中学の試験ではバツになる構文を書いてもコンパイラは通してくれます。
利用者語はプログラマが変数名やラベルなどに使用するものです。予約語になっている語を利用者語として使うことはできません。400以上もある予約語と衝突しないようにしなければなりません。
では、このHello World!例題を実際にコンパイルして動作させてみたいと思います。ここではWindows版のCOBOLコンパイラを使用しています。上記の例題は以下のように動作しました。
ソースファイルは、cobolコマンドによって、いったん.objにコンパイルされ、続いてcbllinkコマンドによって.exeにリンクされて実行されます。
Copyright © ITmedia, Inc. All Rights Reserved.