翻訳群

翻訳群とは、コンパイラに一度にサブミットされる全体のことです。翻訳群には一連のソース単位が含まれます。ソース要素とは、ネストされたソース単位を除いたソース単位のことを指します。翻訳群およびソース単位の詳細については、「翻訳群」を参照してください。

次に、これらの概念を含む翻訳群の例を示します。

  FUNCTION-ID. factorial.
  DATA DIVISION.
  LINKAGE SECTION.
  01  parm1 BINARY-LONG.
  01  fact  BINARY-LONG.
  PROCEDURE DIVISION USING parm1 RETURNING fact.
     IF parm1 = 0
        COMPUTE fact = 1
     ELSE
        COMPUTE fact = parm1 * factorial (parm1 - 1)
     END-IF
     EXIT FUNCTION.
  END FUNCTION factorial.
  PROGRAM-ID. program-1.
  ENVIRONMENT DIVISION.
  CONFIGURATION SECTION.
  REPOSITORY.
      FUNCTION factorial.
  DATA DIVISION.
  WORKING-STORAGE SECTION.
  01  i  BINARY-LONG.
  PROCEDURE DIVISION.
      COMPUTE i = factorial (10)
  ...
  END PROGRAM program-1.
  PROGRAM-ID. program-2.
  ENVIRONMENT DIVISION.
  CONFIGURATION SECTION.
  REPOSITORY.
      FUNCTION-ID. factorial.
  DATA DIVISION.
  WORKING-STORAGE SECTION.
  01  i  BINARY-LONG.
  01  global-item PIC X(30) GLOBAL VALUE "The factorial is: "
  PROCEDURE DIVISION.
      COMPUTE i = factorial (11)
      CALL display-it USING i
      ...

      PROGRAM-ID. display-it.
      LINKAGE SECTION.
      01 n BINARY-LONG.
      PROCEDURE DIVISION USING n.
          DISPLAY global-item, n
      END PROGRAM display-it.

  END PROGRAM program-2.

この翻訳群は、関数 factorial、プログラム program-1、およびプログラム program-2 の 3 つの翻訳単位で構成されています。各翻訳単位はソース単位でもあります。ソース単位 program-2 には、別のソース単位であるプログラム display-it が含まれています。4 つのソース単位はそれぞれソース要素でもあります。ソース要素とソース単位の違いは、ソース要素 program-2 にはネストされたプログラムが含まれていないことです。

コンパイラでは、これらの 3 つの翻訳単位のそれぞれから別々のランタイム モジュールが作成されます。一般的には、1 つまたは複数の翻訳単位から作成されたランタイム モジュールをリンケージ エディターで組み合わせて 1 つの実行単位が構成されます。

関数 factorial のランタイム モジュールは、1 つのランタイム要素 (関数 factorial) で構成されます。プログラム program-1 のランタイム モジュールは、1 つのランタイム要素で構成されます。program-2 のランタイム モジュールは、program-2 と display-it にそれぞれ対応する 2 つのランタイム要素で構成されます。

この例は、ユーザー定義関数 factorial で組み込み関数 factorial をオーバーライドする方法を示したものです。REPOSITORY 段落で FUNCTION factorial INTRINSIC が指定されていれば、コンパイラで factorial 組み込み関数が使用されます。この例では INTRINSIC の指定はないため、ユーザー定義関数が有効になります。

これらのプログラムをコンパイルするには、REPOSITORY 指令を使用します。たとえば、次のようにします。

cobol program-1.cbl nognt repository(update on)