COPY ステートメント
COPY ステートメントは、事前に書かれたテキストを COBOL コンパイル単位に入れるライブラリー・ステートメントです。
事前に書かれたソース・コード項目を、コンパイル時にコンパイル単位の中に含めることができます。 したがって、インストール先は、標準のファイル記述、レコード記述、 またはプロシージャーを再度コーディングすることなく使用することができます。 その後、これらの項目とプロシージャーは、ユーザー作成のライブラリーに保管できます。 また、COPY ステートメントによってプログラムおよびクラス定義に組み込むこともできます。
COPY ステートメントを含むソース・コードをコンパイルするのは、すべての COPY ステートメントを処理してから、 その結果として得られるソース・テキストの処理と同じになります。
COPY ステートメントが処理されると、COPY ワードで始まりピリオドで終わる COPY ステートメント全体が論理的に 置き換えられ、テキスト名 に関連するライブラリー・テキストがコンパイル単位にコピーされます。 REPLACING 句を指定していない場合、 ライブラリー・テキストは変更されずにコピーされます。
- テキスト名、ライブラリー名
- テキスト名 はコピー・テキストを識別します。 ライブラリー名 はコピー・テキストが存在する場所を識別します。
- 1 から 30 文字の長さにできます。
- 使用できる文字は、ローマ字の大文字 A から Z、ローマ字の小文字 a から z、数字 0 から 9、 ハイフン、および下線 です。
text-name も library-name もプログラム内で固有である必要はありません。 これらは、プログラム内の他のユーザー定義語と同じであっても構いません。
テキスト名 を修飾する必要はありません。 テキスト名 を修飾しない場合には、ライブラリー名は SYSLIB とみなされます。
- literal-1 , literal-2
- 英数字リテラルでなければなりません。 リテラル-1 はコピー・テキストを識別します。 リテラル-2 はコピー・テキストが存在する場所を識別します。
リテラルは 1 から 160 文字の長さにできます。
テキスト名 およびライブラリー名 の固有性は、システム依存名の形成規則と変換規則が適用された後で判定されます。
テキスト名、 ライブラリー名、およびリテラルの文字のマッピングについては、 COBOL for Linux® on x86 プログラミング・ガイドの コンパイラー・ディレクティブ・ステートメント を参照してください。
- operand-1, operand-2
- 疑似テキスト、ID、関数 ID、リテラル、または COBOL ワード (COPY ワードを除く) のいずれかを指定できます。 詳しくは、 REPLACING 句を参照してください。
ライブラリー・テキストには、ソース・テキストに記述可能な任意のワード、ID、またはリテラルのいずれでも使用できます。 これには、マルチバイト・ユーザー定義語、マルチバイト・リテラル、および国別リテラルが含まれます。
- partial-word-1, partial-word-2
- 部分語を指定できます。 詳しくは、 REPLACING 句を参照してください。
各 COPY ステートメントは、 前にスペースが 1 つなければならず、 分離文字ピリオドで終わらなければなりません。
文字ストリングまたは区切り文字が使用できるところならばどこでも、ソース・テキストの中で COPY ステートメントを使用することができます。
COPY ステートメントはネストできます。 また、ネストされた COPY ステートメントのチェーン内のどの COPY ステートメントにも、REPLACING 句を指定できます。 これは、チェーン内にそのような COPY ステートメントが 1 つだけ存在する場合に限られます。 ネストされた COPY ステートメントのチェーン内に現れる COPY ステートメントに REPLACING 句が指定されると、その REPLACING 句は、REPLACING 句のある COPY ステートメントの下にネストされた COPY ステートメントに含まれている、すべてのライブラリー・テキストに適用されます。
ネストされた COPY ステートメントが再帰することはできません。 すなわち、ある COPY メンバーに関してファイルの終わりに達するまでに、
その COPY メンバーは、
1 組のネストされた COPY ステートメントの中で一度しか指定できません。 例えば、ソース・テキストにステートメント COPY X. が含まれ、ライブラリー・テキスト X にステートメント COPY Y.が含まれているとします。
この場合、Y に入っているライブラリー・テキストに COPY X または COPY Y ステートメントがあってはなりません。
ライブラリー・テキストおよび疑似テキストには、デバッグ行を入れることができます。 デバッグ行内のテキスト・ワードは、「D」が標識域にない場合と同様に、突き合わせ規則の適用対象になります。 デバッグ行は、ソース・テキスト内の、開始疑似テキスト区切り文字の後、対応する終了疑似テキスト区切り文字の前で始まる場合に、疑似テキスト内で指定されます。
COPY ステートメントの結果としてさらに行がソース・テキストに挿入される場合、COPY ステートメントがデバッグ行上で開始されているか、挿入されるテキスト・ワードがライブラリー・テキスト内のデバッグ行にあると、挿入される各テキスト・ワードはデバッグ行上に置かれます。 BY 句の中で指定されたテキスト・ワードが挿入されるときには、 そのテキスト・ワードは、 置き換えられるその最初のライブラリー・テキスト・ワードがデバッグ行上で指定されている場合には、 デバッグ行上に置かれます。
COPY ステートメントがデバッグ行上に指定されているときには、コピーされるテキストは、 そのテキスト中のコメント行がその COPY ステートメントの実行結果として得られた ソース・テキストの中でコメント行として現れる場合を除き、デバッグ行上に入れられたものとして扱われます。
COPY ワードがコメント項目に置かれているか、 またはコメント項目を指定できるところにある場合には、 その COPY ワードはコメント項目の一部とみなされます。
SOURCE-COMPUTER 段落に WITH DEBUGGING MODE 節が指定されていない場合、すべての COPY ステートメントおよび REPLACE ステートメントの処理後に、デバッグ行はコメント行のすべての特性を持つものと見なされます。
コメント行、インライン・コメント、またはブランク行は、ライブラリー・テキスト中に置かれることがあります。 ライブラリ テキスト内に表示されるコメント行、 インラインコメント、または空白行は、次の例外を除いて、結果のソース テキストに変更されずにコピーされます。ライブラリ テキスト内のコメント行、インライン コメント、 または空白行は、そのコメント行 、インライン コメント、 または空白行が、 operand-1 に一致するテキスト ワードのシーケンス内に表示される場合はコピーされません ( 比較および置換規則を参照)。
*CONTROL (*CBL)、EJECT、SKIP1、SKIP2、SKIP3、または TITLE の各ステートメントを含む行を、 ライブラリー・テキストの中に記述することができます。 それらの行は、COPY ステートメントの処理中はコメント行として扱われます。
ライブラリー・テキストが構文上正しいかどうかは、別々に判定することはできないので、 すべての COPY ステートメントおよび REPLACE ステートメントの処理が完全に終了するまで、 COBOL ソース・テキスト全体が構文的に正しいかどうかは判定できません。
ライブラリーからコピーされるライブラリー・テキストは、 結果として得られるプログラムの中で、 そのライブラリー・テキストがライブラリーの中にあったときと同じ領域に入れられます。 ライブラリーのテキストは、 85 COBOL 標準フォーマットの規則に従わなければならない。
注: COBOL ワードおよびセパレーター用に定義されるそれらの外側の文字は、コメント 行、インライン・コメント、コメント項目、英数字リテラル、DBCS リテラル、または国別リテラルである場合 を除いて、ライブラリー・テキストまたは疑似テキストで表示してはいけません。
SUPPRESS 句
SUPPRESS 句は、ライブラリー・テキストをソース・リストに印刷させないように指定します。
REPLACING 句
REPLACING 句を指定すると、ライブラリー・テキストがコピーされ、ライブラリー・テキスト内にあるオペランド-1 または部分語-1 は、それが完全に一致するたびに関連するオペランド-2 または部分語-2 によって置き換えられます。
以下の説明で、REPLACING 句の LEADING キーワードまたは TRAILING キーワードを指定する場合、REPLACING 句の各オペランドは部分語でなければなりません。 そうでない場合、各オペランド は、以下のいずれかの項目によって構成できます。
- 疑似テキスト
- ID
- リテラル
- COBOL ワード (COPY ワードを除く)
- 関数 ID
- 部分語
- 疑似テキスト
疑似テキスト区切り文字 (==) を含めず、バインドされた文字ストリングまたは区切り文字 ( あるいはその両方) のシーケンス。ただし、これらは含まれません。 各疑似テキスト区切り文字の両方の文字は 1 行に指定する必要があります。ただし、疑似テキスト内の文字ストリングは継続することができます。
疑似テキスト内の個々の文字ストリングは、いずれも最大 322 文字までが可能です。 これらの文字ストリングは、ソース・コード形式の通常の継続規則に従って継続させることができます。
文字ストリングは区切り文字によって区切らなければならないことに注意してください。 詳しくは 、文字を参照してください
疑似テキスト-1 は、オペランド-1 として使用されるときの疑似テキストを指し、疑似テキスト-2 は、オペランド-2 として使用されるときの疑似テキストを指しています。
疑似テキスト-1 は、分離文字コンマまたは分離文字セミコロンのみで構成することができます。 疑似テキスト-2 は、ヌルであり、スペース文字、コメント行、またはインライン・コメントだけで構成することができます。
疑似テキストに COPY ワードを含めることはできません。
プログラムの中にコピーされる疑似テキスト-2 の中の各テキスト・ワードは、 結果として得られるプログラムの中で、それが疑似テキスト-2 の中にあったときと同じ領域に入れられます。
疑似テキストには、ソース・テキストに記述可能な任意のワード (COPY ワードを除く)、ID、またはリテラルのいずれでも使用できます。 これには、 マルチバイト ・ユーザー定義語、DBCS リテラル、および国別リテラルが含まれます。
マルチバイト ・ユーザー定義語は、完全に形成されている必要があります。つまり、 マルチバイト ・ワードの部分ワード置換はありません。
マルチバイト 文字を含むワードまたはリテラルは、複数行にまたがって継続することはできません。
PICTURE 文字ストリングを置き換える場合は、疑似テキストを使用します。 あいまいさを回避するため、キーワード PICTURE や PIC などを含め、PICTURE 節全体を 疑似テキスト-1 で指定する必要があります。
- 識別子
- DATA DIVISION の任意のセクションで定義することができます。
- リテラル
- 数字リテラル、英数字リテラル、DBCS リテラル、または国別リテラルにすることができます。
- ワード
- マルチバイトのユーザー定義語を含め、 COBOL の単一語(COPY を除く)である。 マルチバイト ・ユーザー定義語は、完全形式でなければなりません。 マルチバイト ・ワードの一部を置き換えることはできません。
分離文字以外の COBOL 文字 (例えば + * / $ < > =) は、REPLACING オペランドとして使用する場合は COBOL ワードの一部として組み込むことができます。 さらに、 ハイフンまたは下線を語の先頭に使用することも、ハイフンを語の末尾に使用することもできます。
- 関数 ID
- 関数の評価からの結果であるデータ項目を一意的に参照する、文字ストリングおよび分離文字のシーケンス。 詳細は、 関数識別子を参照してください。
- 部分語
- 疑似テキスト区切り文字
(==)によって区切られた単一のテキスト・ワード。ただし、疑似テキスト区切り文字は含まれません。 各疑似テキスト区切り文字の両方の文字が 1 つの行になければなりません。 ただし、部分語内のテキスト・ワードは継続することができます。以下の規則が部分語-1 および部分語-2 に適用されます。- 部分語-1 は 1 つのテキスト・ワードから構成されます。
- 部分語-2 はゼロまたは 1 つのテキスト・ワードから構成されます。
- partial-word-1 および partial-word-2 は、英数字リテラル、国別リテラル、DBCS リテラル、または マルチバイト ・ワードであってはなりません。
突き合わせのために、各 ID、リテラル、ワード、または関数 ID はそれぞれ、その ID、リテラル、ワード、または関数 ID のみを含む疑似テキストとして扱われます。
