付録D.1 リストの出力
コンパイラが出力するリストの種類と出力方法について説明します。
(1) コンパイルリストの種類
(2) リストの出力方法
(a) コンパイラオプションの指定
COBOLプログラムをコンパイルしてコンパイルリストを出力するオプションを次に示します。これらのコンパイラオプションを指定しない場合,コンパイルリストを出力しません。
- -SrcList,NoCopy
-
COPY文で複写した登録集原文の内容を原始プログラムリスト中に展開しません。
- -SrcList,CopySup
-
SUPPRESS指定のあるCOPY文で複写した登録集原文の内容は原始プログラムリスト中に展開しません。SUPPRESS指定のないCOPY文の場合はすべて展開します。
- -SrcList,CopyAll
-
COPY文で複写した登録集原文の内容をすべて原始プログラムリスト中に展開します。
- -SrcList,OutputAll
-
COPY文の指定や条件翻訳,LISTING指令にかかわらず,強制的にすべてのソース原文をコンパイルリストに展開します。SUPPRESS指定のあるCOPY文の場合も展開します。
- -SrcList,xxxxx,NoFalsePath
-
条件翻訳結果の無効行はコンパイルリストに出力しません。
xxxxxには,CopyAll,CopySup,NoCopyのどれかを指定します。
- -SrcList,xxxxx,DataLoc
-
コンパイルリスト(原始プログラムリスト)にデータ項目の相対位置と長さ(バイト)を16進数で表示します。相対位置は,データ部のファイル節/作業場所節/局所場所節の各節の先頭からの位置を表示します。
xxxxxには,OutputAll,CopyAll,CopySup,NoCopyのどれかを指定します。
-
NoCopy,CopySup,CopyAll,およびOutputAllサブオプションは,同時には指定できません。同時に指定した場合,最後に指定したオプションが有効になります。
-
NoFalsePathサブオプションは,その他のオプションと同時に指定する必要があります。ただし,OutputAllサブオプションと同時に指定した場合は,すべての行が出力されるため,NoFalsePathサブオプションは意味を持ちません。
-
DataLocサブオプション指定時にSレベル/Uレベルのコンパイルエラーが発生した場合,DataLocサブオプションの指定があっても相対位置は表示しません。
-
DataLocサブオプションを指定する場合,OutputAll,CopyAll,CopySup,NoCopyのどれかと同時に指定する必要があります。指定がない場合は,コンパイルエラーとなります。
(3) コンパイルリストの出力に関連する翻訳指令
コンパイルリストの出力に関連する翻訳指令について,説明します。
(a) LISTING指令
LISTING指令は,コンパイルリストにソースを出力するかどうかを指定します。
- >>LISTING ON
-
この行以降のソースをコンパイルリストに出力します。
- >>LISTING OFF
-
この行の次行以降のソースをコンパイルリストに出力しません。
なお,LISTING指令の行そのものは,ON/OFFの状態に関係なく,常にコンパイルリストに出力されます。
LISTING指令の例を次に示します。下線部分は,コンパイルリストに出力されません(出力されない行は詰められます)。
- (例1)
IDENTIFICATION DIVISION. PROGRAM-ID. SAMPLE1. ENVIRONMENT DIVISION. DATA DIVISION. WORKING-STORAGE SECTION. >>LISTING OFF 01 A PIC X(10). >>LISTING ON 01 B PIC X(10). PROCEDURE DIVISION. DISPLAY 'OK'.
上記のプログラムを-SrcList,CopyAllオプションを指定してコンパイルした場合,次のようなコンパイルリストが出力されます。
IDENTIFICATION DIVISION. PROGRAM-ID. SAMPLE1. ENVIRONMENT DIVISION. DATA DIVISION. WORKING-STORAGE SECTION. >>LISTING OFF >>LISTING ON 01 B PIC X(10). PROCEDURE DIVISION. DISPLAY 'OK'.
コンパイルリストへの出力がOFFの状態でも,LISTING OFFの行は出力されます。LISTING OFFが出力される例を次に示します。
- (例2)
IDENTIFICATION DIVISION. PROGRAM-ID. SAMPLE2. ENVIRONMENT DIVISION. DATA DIVISION. WORKING-STORAGE SECTION. >>LISTING OFF 01 A PIC X(10). >>LISTING OFF ←この行は出力される 01 B PIC X(10). >>LISTING ON PROCEDURE DIVISION. DISPLAY 'OK'.
上記のプログラムを-SrcList,CopyAllオプションを指定してコンパイルした場合,次のようなコンパイルリストが出力されます。
IDENTIFICATION DIVISION. PROGRAM-ID. SAMPLE2. ENVIRONMENT DIVISION. DATA DIVISION. WORKING-STORAGE SECTION. >>LISTING OFF >>LISTING OFF >>LISTING ON PROCEDURE DIVISION. DISPLAY 'OK'.
LISTING指令を含むCOBOLプログラム(登録集原文)をCOPY文で複写した場合,LISTING指令の効果は登録集原文の終わりで終了し,複写元のプログラムのCOPY文が持つLISTING指令の状態に戻ります。COPY文の言語仕様については,マニュアル「COBOL2002 言語 標準仕様編」 「3.2.2 COPY文」を参照してください。
原始プログラム(SAMPLE1.CBL)中のCOPY文で,LISTING指令を含むCOBOLプログラム(登録集原文 SAMPLE2.CBL)を複写した場合の例を次に示します。
- (例3)
-
原始プログラムSAMPLE1.CBL
IDENTIFICATION DIVISION. PROGRAM-ID. SAMPLE1. ENVIRONMENT DIVISION. COPY SAMPLE2. PROCEDURE DIVISION. DISPLAY 'OK'.
登録集原文 SAMPLE2.CBL
DATA DIVISION. WORKING-STORAGE SECTION. >>LISTING OFF 01 A PIC X(10).
登録集原文複写後のプログラム
IDENTIFICATION DIVISION. PROGRAM-ID. SAMPLE1. ENVIRONMENT DIVISION. COPY SAMPLE2. DATA DIVISION. WORKING-STORAGE SECTION. >>LISTING OFF 01 A PIC X(10). PROCEDURE DIVISION. ←この行以降は出力される DISPLAY 'OK'.
上記のプログラムを-SrcList,CopyAllオプションを指定してコンパイルした場合,次のようなコンパイルリストが出力されます。
IDENTIFICATION DIVISION. PROGRAM-ID. SAMPLE1. ENVIRONMENT DIVISION. COPY SAMPLE2. C1 DATA DIVISION. C1 WORKING-STORAGE SECTION. C1 >>LISTING OFF PROCEDURE DIVISION. DISPLAY 'OK'.
(b) PAGE指令
PAGE指令は,コンパイルリストの改ページを指定します。PAGE指令のコンパイルリストでの効果は,固定形式正書法の改ページ標識「/」と同じです。
PAGE指令の例を次に示します。
- (例)
IDENTIFICATION DIVISION. PROGRAM-ID. SAMPLE1. ENVIRONMENT DIVISION. >>PAGE ←この行から改ページする DATA DIVISION. WORKING-STORAGE SECTION.
- コンパイルリスト
IDENTIFICATION DIVISION. PROGRAM-ID. SAMPLE1. ENVIRONMENT DIVISION. (この位置で改ページ) >>PAGE DATA DIVISION. WORKING-STORAGE SECTION.
(c) LISTING指令およびPAGE指令の共通規則
このシステムでは,翻訳処理の最後にLISTING指令およびPAGE指令が処理されます。そのため,条件翻訳の無効行(条件翻訳の結果,コンパイル対象とならなかった行)にLISTING指令またはPAGE指令が現れた場合,これらの指令は無効となります。
LISTING指令およびPAGE指令が条件翻訳の無効行にある場合の例を次に示します。
- (例)
IDENTIFICATION DIVISION. PROGRAM-ID. SAMPLE1. ENVIRONMENT DIVISION. >>DEFINE ABC 123 >>IF ABC = 123 *> コメント >>ELSE >>PAGE ←この>>PAGEは効果がない >>LISTING OFF ←この>>LISTING OFFは効果がない >>END-IF DATA DIVISION. WORKING-STORAGE SECTION. PROCEDURE DIVISION.