翻訳群とは、コンパイラに一度にサブミットされる全体のことです。翻訳群には一連のソース単位が含まれます。ソース要素とは、ネストされたソース単位を除いたソース単位のことを指します。翻訳群およびソース単位の詳細については、「翻訳群」を参照してください。
次に、これらの概念を含む翻訳群の例を示します。
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)