COPY 文

COPY 文は、COBOL 翻訳群内に原文を組み込む。

書き方 1 の一般形式


*

書き方 2 の一般形式 (日立の構文)

書き方 3 の一般形式 (富士通の構文)

書き方 4 の一般形式 (富士通の構文)

指令

  1. 予約語リストのフラグ設定および修正を行うコンパイラ指令に加えて、以下の指令が、本セクションに記載の構文または意味内容に影響を与える可能性がある。
    • COPYEXT - コピー ファイルの検索に使用するファイル名の拡張子を指定する。
    • COPYLBR - ライブラリ名が .lbr ファイルと等しいことを指定する。
    • COPYLIST - COPY 文の結果をリスティング ファイルに含めることを指定する。
    • FOLD-COPY-NAME - ディスク上のライブラリ名および COPY 文内の原文名で、ライブラリ メンバー名の大文字小文字の使用が異なる場合に、コンパイラがコピー ライブラリ メンバーを検索できるようにする。
    • OLDCOPY - ANS'68 および OS/VS COBOL LANGLVL(1) の規則に準拠するように COPY 文の取り扱いを変更する。

すべての書き方に関する構文規則

  1. COPY 文は、直前に空白を 1 つ置き、末尾に分離符のピリオド (.) を置く。
  2. COPY 文は、翻訳群内で文字列または分離符を記述できる任意の場所で指定できる。ただし、COPY 文内に COPY 文を含めることはできない。
  3. OSVSVSC2MF SUPPRESS 指定を使用すると、コピー メンバーの内容はソース リストに出力されない。
  4. ANS85 注記項内、または注記項を記述できる場所に語 COPY がある場合は、注記項の一部と見なされる。

    OSVS 注記項内にある COPY 文は処理される。

  5. ライブラリ原文は、COBOL 参照形式の規則に準拠している必要がある。

書き方 1 の構文規則

  1. ソースを COBOL システムに渡す際に複数の COBOL ライブラリを利用できる場合は、原文名をライブラリ名で修飾して、ライブラリ名が原文名の原文が登録されている COBOL ライブラリを示すようにする必要がある。

    OSVSVSC2MF 現在、この制限は廃止されている。

  2. pseudo-text-1 の内容は、空、空白文字のみ、または注記行のみにすることはできない。
  3. pseudo-text-2 は空でもよい。
  4. pseudo-text-1 および pseudo-text-2 内の文字列は、次の行へ継続できる。ただし、仮原文の区切り記号は両方とも同じ行に含める必要がある。「言語の基礎」の章の「行の継続」トピックを参照。
  5. word-1 または word-2 には、任意の単一の COBOL の語を指定できる。
  6. text-name は、一意の外部ファイル名を定義する。このファイル名は利用者定義語の規則に準拠するものとする。

    OSVSVSC2MFCOB370 external-file-name-literal は英数字定数であり、ファイル名に関するオペレーティング システムの規則に準拠するものとする。これを指定する際には、引用符で囲んでも囲まなくてもよい。

    text-name および引用符で囲んでいない external-file-name-literal は、常に大文字に変換される。

  7. MF library-name-literal は英数字定数であり、ファイル名または装置一意名に関するオペレーティング システムの規則に準拠するものとする。これを指定する際には、引用符で囲んでも囲まなくてもよい。

    引用符で囲んでいない library-name-literal は常に大文字に変換される。

  8. OSVSMF external-file-name-literal および library-name-literal は、引用符で囲まれている場合は、$、#、および @ 文字を含められる。
  9. ISO2002MF partial-word-1 は、1 つの原文語で構成する。
  10. ISO2002MF partial-word-2 は、1 つの原文語で構成する (省略も可能)。
  11. ISO2002MF partial-word-1 および partial-word-2 には、文字定数および各国文字定数を指定できない。
  12. ライブラリ原文は、COBOL 参照形式の規則に準拠している必要がある。
  13. ISO2002MFXOPEN external-file-name-literal、library-name-literal、literal-1、または literal-2 には、連結式を指定できない。

書き方 2 から 4 の構文規則

  1. word-3、word-4、word-5、word-6、または word-7 には、任意の単一の COBOL の語を指定できる。

すべての書き方に関する一般規則

  1. COPY 文を含む翻訳群を翻訳することは、論理的には、すべての COPY 文を処理してからその結果の翻訳群を処理することに等しい。
  2. COPY 文を処理する効果は、原文名に関連付けられたライブラリ原文がソース原文にコピーされ、COPY 文全体を論理的に置き換え、予約語 COPY で始まり句読点文字 (ピリオド) で終わる (ピリオドを含む) ことである。
  3. 装置一意名を明示的に指定しない場合は、デフォルトの装置が使用される。デフォルトの設定は、オペレーティング システムによって異なる。

書き方 1 の一般規則

  1. REPLACING を指定しない場合、ライブラリ原文はそのままコピーされる。

    REPLACING を指定すると、ライブラリ原文がコピーされライブラリ原文内の、pseudo-text-1、identifier-1、literal-1、word-1、および partial-word-1 に一致するそれぞれの部分が、対応する pseudo-text-2、identifier-2、literal-2、word-2、または partial-word-2 で置き換えられる。

  2. 一致処理の都合上、identifier-1、literal-1、および word-1 は、それぞれ identifier-1、literal-1、または word-1 のみを含む仮原文として扱われる。
  3. 原文を置換するかどうかを判別するための比較操作は、以下のように行われる。
    1. 分離符のカンマでもセミコロンでもない左端のライブラリ原文語が、比較の最初の対象となる。この原文語の前にある原文語または空白は、ソース原文にコピーされる。比較対象の最初の原文語、および REPLACING で指定した pseudo-text-1、identifier-1、word-1、literal-1、または partial-word-1 を起点として、予約語 BY に先行する REPLACING 指定の作用対象全体が、等価な数の連続したライブラリ原文語と比較される。
    2. pseudo-text-1、identifier-1、word-1、または literal-1 がライブラリ原文と一致するのは、pseudo-text-1、identifier-1、word-1、または literal-1 を構成する一連の順番の原文語が、一連の順番のライブラリ原文語と一字一句同じである場合のみである。
    3. ISO2002MF LEADING を指定する場合、partial-word-1 がライブラリ原文と一致するのは、partial-word-1 を構成する一連の順序の文字列が、ライブラリ原文語の左端の文字位置から開始する同数の連続する文字列と一字一句同じである場合のみである。TRAILING を指定する場合、partial-word-1 がライブラリ原文と一致するのは、partial-word-1 を構成する一連の順序の文字列が、ライブラリ原文語の右端の文字位置で終了する同数の連続する文字列と一字一句同じである場合のみである。
    4. 一致処理では次の規則が適用される。
      1. pseudo-text-1 またはライブラリ原文内では、分離符のカンマ、セミコロン、または空白の登場箇所はすべて単一の空白と見なされる。1 つ以上の空白の分離符は、単一の空白と見なされる。
      2. 各小文字は、COBOL 文字集合に指定されている対応する大文字と等しい。ただし、文字定数または各国文字定数で使用されている場合は除く。
      3. デバッグ行内の原文語は、「D」が指示子領域にない場合と同様に一致処理の対象となる。
      4. ISO2002MFXOPEN 連結式の各作用対象および演算子は、別個の原文語である。
    5. 一致しなかった場合、REPLACING 指定の続きがあれば、次の各 pseudo-text-1、identifier-1、word-1、literal-1、または pseudo-text-1 を対象にして比較が繰り返される。このようにして一致対象が見つかるまで、または REPLACING の後続の作用対象がなくなるまで、比較は繰り返される。
    6. REPLACING 指定の作用対象をすべて比較して一致するものがなかった場合、左端のライブラリ原文語はソース原文にコピーされる。その後、後続のライブラリ原文語が左端のライブラリ原文語であると見なされて、REPLACING で指定された最初の pseudo-text-1、identifier-1、word-1、literal-1、または partial-word-1 を起点とした比較のサイクルが再開される。
    7. pseudo-text-1、identifier-1、word-1、または literal-1 およびライブラリ原文との間で比較結果が一致した場合は常に、対応する pseudo-text-2、identifier-2、word-2、または literal-2 がソース原文に配置される。

      ISO2002MF partial-word-1 およびライブラリ原文語との間で比較結果が一致した場合、ライブラリ原文語は結果の原文に配置され、一致した文字が partial-word-1 で置き換えられるか、partial-word-2 内に原文語がない場合は削除される。

      比較の対象とされた右端の原文語の直後のライブラリ原文語は、その後に左端の原文語と見なされる。REPLACING で指定された最初の pseudo-text-1、identifier-1、word-1、literal-1、または partial-word-1 を起点として、比較サイクルが再開する。

    8. 比較操作は、ライブラリ原文内の右端の原文語が一致処理に入るか、左端のライブラリ原文語と見なされ、比較サイクルが完了するまで続く。
  4. ライブラリ原文または pseudo-text-1 に含まれる注記行は、一致処理の都合上、単一の空白として解釈される。pseudo-text-2 またはライブラリ原文に含まれる注記行は、ソース原文にそのままコピーされる。
  5. COPY 文の処理を完了した結果として生成された原文には COPY 文を含められない。

    VSC2 この原文に COPY 文を含められる。ただし、内包される COPY 文およびすでに展開済みの COPY 文は REPLACING 指定を含まないものとする。また、再帰的な COPY 文 (COPY 文が内部でライブラリ原文を参照する) は許可されない。

    MF この方法では、任意のレベルまで COPY 文を入れ子構造にできる。入れ子構造のいずれかの COPY 文に REPLACING 指定を含められる。この場合、下位レベルのすべての COPY 文で REPLACING 指定が有効になる。

  6. ライブラリ原文の構文の正確さは、個別に判別できない。

    ANS85 ただし COPY 文は例外である。

    すべての COPY 文の処理が完了するまで、COBOL 翻訳群全体の構文の正しさは判別できない。

  7. MF REPLACING を指定する場合は、ライブラリ原文に EXEC HTML 文を含められない。この規則に違反すると、予期しない動作および構文エラーが発生する可能性がある。
  8. ライブラリからコピーされた原文語のうち、置換されなかったものまたは部分的にのみ置換されたものはそれぞれ、結果のソース原文内の行で、ライブラリ内の行でその語が開始したのと同じ領域で開始するようにコピーされる。ただし、ライブラリからコピーした原文語が A 領域で開始し、その後に別の原文語 (同じ行の A 領域から開始する) が続き、その行で先行する原文語がそれよりも長い原文で置換されると、後続の原文語が A 領域で開始できない場合は B 領域から開始される。結果のソース原文に配置される pseudo-text-2 内の各原文語は、結果のソース原文内で、pseudo-text-2 内と同じ領域で開始する。結果のソース原文に配置される identifier-2、literal-2、および word-2 はそれぞれ、比較の対象となった左端のライブラリ原文語が置換されなかった場合に、結果のソース原文内で、それと同じ領域で開始する。

    COPY 文の処理結果としてソース原文に行が追加される場合、COPY 文がデバッグ行で開始するか、コピー中の原文語がライブラリ原文内のデバッグ行にあると、その原文語はデバッグ行に配置される。BY で指定する原文語が導入されると、置換される最初のライブラリ原文語をデバッグ行で指定する場合に、BY で指定する原文語がデバッグ行上に配置される。上記の場合を除き、結果のソース原文内のデバッグ行に配置されるのは、pseudo-text-2 内のデバッグ行で指定されている原文語のみである。literal-2 として指定する定数、または pseudo-text-2 かライブラリ原文内で指定する定数が、結果のソース原文内で 1 行に収まらない長さであり、かつその定数がデバッグ行に配置されていない場合、定数の超過分を収容する継続行が追加される。置換した結果、定数の超過分がデバッグ行にかかる場合は、翻訳群はエラーとなる。

  9. 比較処理の都合上、置換後の原文語は、「言語の基礎」の章の「正書法」セクションに記載の正書法の規則に従って、ソース原文に配置される。
  10. OSVS OLDCOPY コンパイラ指令は、記述項全体を原文名が示す情報で置換する。ただし、COPY 文に先行するデータ名は、原文名内の対応するデータ名を置換する。
  11. ANS85 ライブラリ原文で何らかの規則が遵守されている場合、データ名の接頭辞のような名前の一部を REPLACING 指定を用いて変更できる。この方式の「部分的な語の置換」機能を使用するには、変更対象部分の前後を以下を用いて囲む。
    1. 一組の左かっこおよび右かっこで囲む。例:(ABC)
    2. コロンで囲む。例::XYZ:
    注: LEADING および TRAILING 指定は、部分的な語の置換にも使用できる。LEADING および TRAILING 指定は、MF 方言および ISO2002 でサポートされているが、ANSI '85 COBOL 規格には含まれていない。

書き方 2 の一般規則

  1. PREFIXING を指定すると、ライブラリ原文がコピーされ、以下の各データ名の前に word-3 が付けられる。
    • レベル番号の直後のデータ名、条件名、定数名 (FILLER は除く)
    • REDEFINES の直後のデータ名 (01 レベルは除く)
    • RENAMES の直後のデータ名および修飾子
    • OCCURS の指標、KEY IS のデータ名、修飾子
    • アドレス名
  2. SUFFIXING を指定すると、PREFIXING と同じ規則に従って、データ名の後ろに word-4 が付けられる。
制約事項: 置換後の原文はリスト ファイルおよびデバッガーに表示されない。

書き方 3 の一般規則

  1. JOINING 指定で PREFIX を指定すると、ライブラリ原文がコピーされ、以下の各データ名の前に word-5 と 1 つのハイフン「-」が付けられる。
    • レベル番号の直後のデータ名、条件名、定数名 (FILLER は除く)
    • REDEFINES の直後のデータ名 (01 レベルは除く)
  2. JOINING 指定で SUFFIX を指定すると、PREFIX と同じ規則に従って、データ名の後ろに 1 つのハイフン「-」と word-5 が付けられる。
制約事項: 置換後の原文はリスト ファイルおよびデバッガーに表示されない。

書き方 4 の一般規則

  1. DISJOINING word-6 JOINING word-7 AS PREFIX の指定は REPLACING LEADING word-6 BY word-7 に等しい。
  2. DISJOINING word-6 JOINING word-7 AS SUFFIX の指定は REPLACING TRAILING word-6 BY word-7 に等しい。

以下の例は、「言語リファレンス - 第 3 部:追加トピック」の「」の章に含まれている。

  • OLDCOPY コンパイラ指令を使用した ANSI'68 または LANGLVL(1) の動作の実現。「COPY (ANSI'68 または LANGLVL(1) の変形)」トピックを参照。
  • ANSI'85 の規則でサポートされている部分的な語の置換を伴う COPY 文の使用。「COPY (部分語置換)」トピックの「ANSI'85 での特殊文字の使用例」セクションを参照。
  • ISO2000 の規則でサポートされている部分的な語の置換を伴う COPY 文の使用。「COPY (部分語置換)」トピックの「ISO 2002 および Micro Focus 方言の使用例」セクションを参照。