COBOL読解の知識マップ(知識グラフ)
COBOLはPROCEDURE DIVISIONによる処理手順の言語である前に、DATA DIVISIONでレコードの形を定義する言語であり、各データ項目はPICTURE句で形を、USAGE句でCOMP-3のような内部表現を指定します。COMP-3は10進数字を2桁ずつ1バイトに詰めるpacked decimalで、テキストとして開くと意味不明なバイト列に見えます。REDEFINESは同じ領域を別の形で読み替え、OCCURSは配列を、88レベルは直前項目の値に名前を付けた条件を表します。COPY文は外部のcopybookをコンパイル時に取り込むため、開いているソース単体では全体像が見えず、PERFORM文とスコープ終端子で処理の流れを追い、FILE STATUSやEXEC SQL、EXEC CICSで外部境界を押さえる必要があります。
COBOL
DATA DIVISIONによるレコード定義とPROCEDURE DIVISIONによる処理手順を柱とする、業務システムで使われてきたプログラミング言語。
COBOL言語
DATA DIVISION
COBOLプログラムでレコード定義や作業領域などデータの構造を宣言する部分。
データ部
COMP-3(packed decimal)
1バイトに10進数字を2桁ずつ詰め、最後のバイトだけ下位1桁と符号を格納するCOBOLの数値内部表現。
パックド10進数
PROCEDURE DIVISION
COBOLプログラムで実際の処理手順を記述する部分。
手続き部
PICTURE句(PIC)
COBOLのデータ項目の形(文字数・桁数・符号の有無・小数点位置など)を指定する句。
PIC句
USAGE句
COBOLのデータ項目をどのような内部表現(DISPLAY・COMP・COMP-3など)で保持するかを指定する句。
COMP-5
PICTUREで指定した桁数ではなく、2/4/8バイトというネイティブな2進数の容量まで値を保持し、切り捨てもそのバイナリのサイズ側で起きるCOBOLの数値内部表現。
REDEFINES句
同じメモリ領域を別のデータ構造として重ねて定義する、COBOLの句。
OCCURS句
COBOLで配列(テーブル)を定義する句。
OCCURS DEPENDING ON
テーブルの要素数を実行時のデータ項目の値に応じて変える、OCCURS句の拡張。
可変長テーブル
88レベル(条件名)
直前のデータ項目が特定の値を持つときに真になる、名前付きの条件を宣言するCOBOLのレベル番号。
条件名
COPY文
コンパイル時に外部のcopybookをソースへ取り込む、COBOLの文。
copybook
COPY文で取り込まれる、レコード定義や共通項目などをまとめた外部ソースファイル。
コピー簿
PERFORM文
指定した段落やブロックを呼び出して戻る、COBOLの基本的な制御移動を行う文。
スコープ終端子(scope terminator)
IFやPERFORMなど未終了の文をどこまで閉じるかを決める、明示的なEND-*、または暗黙のスコープ終端子として働くピリオドによる終端の仕組み。
暗黙終端のピリオド
MOVE文
受け側の型に応じて変換・桁合わせ・ゼロ埋め・切り詰め・編集/逆編集などを伴う、COBOLの値の転記を行う文。
固定形式(参照形式)
ソース行の列位置(一連番号・indicator・Area A・Area B)に構文上の意味を持たせる、COBOLの伝統的なソース記述形式。
参照形式
IBM Enterprise COBOL
z/OS向けのIBM製COBOLコンパイラー製品で、ライブラリ処理後の入力ソースを書き出すMDECKなど独自のコンパイラーオプションを持つ。
EBCDIC
z/OS系メインフレームで前提とされることが多い文字コード体系で、数字や英字に見えるバイトでもASCIIとはバイト値の対応が異なる。
EBCDIC文字コード
FILE STATUS句
ファイルへの入出力操作ごとの結果コードを受け取る、COBOLのSELECT句で指定するデータ項目。
EXEC SQL
COBOLソースに埋め込まれたSQL文の区間を示す構文で、COBOL側はホスト変数の受け渡しを担う。
埋め込みSQL
EXEC CICS
CICSのトランザクション処理をCOBOLソースの中で呼び出す構文で、画面・応答コード・COMMAREAなど外部文脈込みで読む必要がある。
CICSコマンド
COBOLはPROCEDURE DIVISIONだけ読んでも半分しか分からず、まずDATA DIVISIONでレコードの形を押さえる必要があるほど、レコード定義中心の言語である。
COBOLプログラムは実際の処理手順をPROCEDURE DIVISIONに記述する。
DATA DIVISIONの各データ項目は、PICTURE句でその形(文字数・桁数・符号の有無)を指定する。
DATA DIVISIONの各データ項目は、USAGE句でDISPLAYやCOMP-3のような内部表現を指定する。
USAGE句の値の1つがCOMP-3(PACKED-DECIMAL)で、金額・件数・レート系の項目でよく使われる。
USAGE句の値の1つがCOMP-5で、PICTUREの桁数ではなくネイティブな2進数の容量まで値を保持する。
DATA DIVISIONではREDEFINES句で、同じメモリ領域を別のレコード種別として重ねて定義できる。
DATA DIVISIONではOCCURS句で配列(テーブル)を定義できる。
OCCURS DEPENDING ONはOCCURS句を拡張し、要素数を実行時の値に応じて可変にする。
DATA DIVISIONでは88レベルで、直前項目の値に名前を付けた条件名を宣言できる。
COBOLソースはCOPY文でcopybookをコンパイル時に取り込むことができ、その場合いま開いているソースはまだ完成形ではない。
COPY文は、レコード定義や共通フラグなどをまとめたcopybookという外部ソースファイルを取り込む。
PROCEDURE DIVISIONの主な制御移動はPERFORM文で、段落やブロックを呼んで戻る。
PROCEDURE DIVISIONの文は、END-IFなどの明示的な終端か、暗黙のスコープ終端子であるピリオドで閉じられる。
PROCEDURE DIVISIONのMOVE文は単純代入ではなく、受け側の型に応じた変換・桁合わせ・ゼロ埋め・切り詰めを伴うことがある。
古いCOBOLソースは、列位置(一連番号・indicator・Area A・Area B)に意味を持たせる固定形式で書かれていることがある。
z/OS系(IBM Enterprise COBOL)ではEBCDICが文字コードの前提になる。
z/OS系(IBM Enterprise COBOL)ではfixed形式が伝統的な既定の参照形式であり、free形式も選べる。
ファイル入出力の結果コードを見るため、COBOLはSELECT句でFILE STATUS項目を指定できる。
COBOLソースにはEXEC SQLで埋め込みSQLを書けることがあり、その場合COBOLはホスト変数の器になる。
COBOLソースにはEXEC CICSでCICSのトランザクション処理を書けることがあり、その場合は画面・応答コード・COMMAREAなど外部文脈込みで読む必要がある。