COBOL2002 使用の手引 手引編

[目次][用語][索引][前へ][次へ]

付録C.1 リストの出力

コンパイラが出力するリストの種類と出力方法について説明します。

<この項の構成>
(1) コンパイルリストの種類
(2) リストの出力方法
(3) コンパイルリストの出力に関連する翻訳指令

(1) コンパイルリストの種類

(a) 情報リスト

プログラム情報やエラー総数などのコンパイル時の情報を要約して出力したものです。

(b) 原始プログラムリスト

コンパイル時に入力した原始プログラムを出力したものです。相互参照情報やコンパイル時にエラーが検出されたときのエラーメッセージなども出力されます。

(c) エラーリスト

コンパイルエラーのエラーレベルやエラーメッセージを出力したものです。

(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(HP-UX(IPF),AIX(32),AIX(64),Linux(x86),Linux(x64)で有効)
コンパイルリスト(原始プログラムリスト)にデータ項目の相対位置と長さ(バイト)を16進数で表示します。相対位置は,データ部のファイル節/作業場所節/局所場所節の各節の先頭からの位置を表示します。
xxxxxには,OutputAll,CopyAll,CopySup,NoCopyのどれかを指定します。
(b) コンパイルリストの出力先

情報リストと原始プログラムリストはコンパイルリストファイル(.lst)に出力されます。

また,エラーリストは標準エラー出力(stderr)に出力されます。

(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.