33.2.3 正書法
ここでは,COBOLソースファイルの拡張子と正書法の関係,およびSOURCE FORMAT指令を使った正書法の切り替え方法について説明します。
正書法およびSOURCE FORMAT指令の文法規則については,マニュアル「COBOL2002 言語 標準仕様編」 「2. 正書法(Reference format)」および「COBOL2002 言語 標準仕様編」 「3.3.14 SOURCE FORMAT指令」を参照してください。
(1) 正書法の種類と概要
正書法は,COBOL原始プログラムや登録集原文を記述するための規約です。COBOLには,自由形式正書法と固定形式正書法の二つの正書法があります。それぞれの正書法の特徴を,次に示します。
-
行の文字位置によって,一連番号領域,標識領域,プログラム記述領域などの用途がはっきり決められている書き方です。
-
一連番号領域,標識領域などはなく,プログラムを行中の任意の位置に記述できる書き方です。
また,SOURCE FORMAT指令を使用すると,2種類の正書法を原始プログラムや登録集原文の途中で切り替えることができます。
なお,正書法の言語仕様についてはマニュアル「COBOL2002 言語 標準仕様編」 「2. 正書法(Reference format)」を,SOURCE FORMAT指令の言語仕様についてはマニュアル「COBOL2002 言語 標準仕様編」 「3.3.14 SOURCE FORMAT指令」を,それぞれ参照してください。
(2) 拡張子による正書法の指定
(a) ソースファイルの拡張子と正書法の種類の対応
COBOL2002のコンパイラは,拡張子によってCOBOLソースファイルの種類が固定形式正書法か,自由形式正書法かを区別します。
- 拡張子が.cbl,.cob,.ocbのCOBOLソースファイル
-
固定形式正書法で記述されているものとして扱われます。
- 拡張子が.cbf,.ocfのCOBOLソースファイル
-
自由形式正書法で記述されているものとして扱われます。
また,上記以外の拡張子が付いたファイルであっても,環境変数CBLFIXまたはCBLFREEに設定しておくことで,それぞれ固定形式正書法,自由形式正書法で書かれたCOBOL原始プログラムとしてコンパイルできます。
環境変数CBLFIXまたはCBLFREEを使用して,COBOL原始プログラムの拡張子を指定する方法については,「33.6 コンパイラ環境変数」を参照してください。
(b) 正書法の決定の優先順位
- COBOL原始プログラムの正書法
-
COBOL原始プログラムが,固定形式/自由形式のどちらの正書法としてコンパイルされるかは,次の1.〜3.の判定順序に従って決定されます。
-
環境変数CBLFIXに設定した拡張子のファイルは,固定形式正書法で書かれたCOBOL原始プログラムとしてコンパイルされます。
-
環境変数CBLFREEに設定した拡張子のファイルは,自由形式正書法で書かれたCOBOL原始プログラムとしてコンパイルされます。
-
拡張子が.cbl,.cob,.ocbのファイルは,固定形式正書法で書かれたCOBOL原始プログラムとしてコンパイルされます。また,拡張子が.cbf,.ocfのファイルは,自由形式正書法で書かれたCOBOL原始プログラムとしてコンパイルされます。
したがって,同じ拡張子を環境変数CBLFIX,環境変数CBLFREEの両方に指定した場合,環境変数CBLFIXの指定が有効となり,COBOL原始プログラムは固定形式正書法としてコンパイルされます。
-
- 登録集原文の正書法
-
登録集原文の正書法も,COBOL原始プログラムと同じ規則で決定されます。ただし,原文名定数に書かれた登録集原文ファイルの拡張子が,上記以外の拡張子の場合,登録集原文は,固定形式正書法で書かれたものとして扱われます。
- 登録集原文ファイルの検索
-
登録集原文ファイルは,次の1.〜4.の順に検索されます。ただし,原文名定数で書かれた場合は,除きます。
-
環境変数CBLFIXに設定した拡張子の左から順に,その拡張子が付くファイル。
-
環境変数CBLFREEに設定された拡張子の左から順に,その拡張子が付くファイル。
-
.cbl,.cob,.ocbの順に,その拡張子が付くファイル。
-
.cbf,.ocfの順に,その拡張子が付くファイル。
上記の検索順位は,登録集原文の複写元の原始プログラムの正書法とは関係しません。
例えば自由形式の原始プログラムTP001.cbfの中に「COPY ABC.」という記述があって,ABC.cblとABC.cbfという二つのファイルがある場合,ABC.cblの方が展開されます。
-
- 正書法の異なるプログラム間の複写
-
COPY文を使用して,固定形式正書法の原始プログラムから自由形式正書法の原始プログラムを取り込んだり,自由形式正書法の原始プログラムから固定形式正書法の原始プログラムを取り込んだりできます。
この場合,ファイルの拡張子で正書法が判断されるため,SOURCE FORMAT指令によって明示的に正書法を指定する必要はありません。
(3) SOURCE FORMAT指令による正書法の切り替え
SOURCE FORMAT指令を使用すると,原始プログラムの正書法を切り替えられます。原始プログラムの先頭にSOURCE FORMAT指令を記述すると,原始プログラム全体の正書法を変更できます
また,原始プログラムの途中でSOURCE FORMAT指令を記述すると,SOURCE FORMAT指令の次の行から正書法を変更できます。
次に,SOURCE FORMAT指令の使用例を示します。
- (例1)
-
固定形式正書法のCOBOLソースファイルに自由形式正書法を適用する場合
000100 >>SOURCE FORMAT IS FREE …1. IDENTIFICATION DIVISION. …2. PROGRAM-ID. FIX-FORM-EXAMPLE. DATA DIVISION. WORKING-STORAGE SECTION. 01 A-LONG-ITEM PIC X(100) VALUE 'THE FIRST PART CONTINUED'- ' ON THE NEXT LINE - SIMPLE ENOUGH'. 01 NUM-ITEM PIC 9(10). PROCEDURE DIVISION. A-PARAGRAPH-NAME. :
-
SOURCE FORMAT指令が有効となるのは,SOURCE FORMAT指令の次の行からです。このため,「>>SOURCE FORMAT IS FREE」を指定している行自身は,固定形式正書法に従って記述する必要があります。
-
別のSOURCE FORMAT指令が現れるまで,1.の指定が有効となります。
-
- (例2)
-
自由形式正書法のCOBOLソースファイルに固定形式正書法を適用する場合
>>SOURCE FORMAT IS FIXED …1. 000010 IDENTIFICATION DIVISION. …2. 000020 PROGRAM-ID. FIX-FORM-EXAMPLE. 000030 DATA DIVISION. 000040 WORKING-STORAGE SECTION. 000050 01 A-LONG-ITEM PIC X(100) VALUE 'THE FIRST PART CONTINUED 000060- ' ON THE NEXT LINE - SIMPLE ENOUGH'. 000070 01 NUM-ITEM PIC 9(10). :
-
SOURCE FORMAT指令が有効となるのは,SOURCE FORMAT指令の次の行からです。このため,「>>SOURCE FORMAT IS FIXED」を指定している行自身は,自由形式正書法に従って記述する必要があります。
-
別のSOURCE FORMAT指令が現れるまで,1.の指定が有効となります。
-
(4) 自由形式正書法で指定できないコンパイラオプション
次のオプションは,自由形式正書法で書かれたCOBOL原始プログラムとしてコンパイルされるプログラムには,指定できません。指定してコンパイルした場合,エラーとなってコンパイルが中止されます。
オプション名 |
機能 |
---|---|
-StdVersion |
第1次規格/第2次規格の解釈でコンパイルする |
-V3Rec |
メインフレーム(VOS3)の固定長または可変長レコード形式のプログラムを,VOS3の日本語文字の扱いに合わせてコンパイルする |
-CompatiV3 |
VOS3 COBOL85互換を指定する |
-StdMIA |
MIA仕様の範囲外チェックをする |
-Std85 |
JIS仕様でチェックする |
なお,固定形式正書法で書かれたソースの途中に「>>SOURCE FORMAT IS FREE」が指定されている場合も,これらのコンパイラオプションを指定するとエラーとなります。