区分化

区分化機能単位(segmentation module)は、実行用プログラムのオーバレイに必要な情報をコンパイラに与える。

区分化(segmentation)機能を利用することによって、常駐区分(permanent segment)および独立区分(independent segment)を指定できる。また、区分番号(segment-number)が異なる節を混在させたり、原始プログラムの固定部分(fixed portion)にオーバレイされてもよい区分(segment)を含めたりすることができる。

区分化機能単位は、ANSI '85標準では廃要素に分類されており、ANSI標準の次回の全面改訂の際に削除される予定である。

この構文は、Micro Focus COBOLに組み込まれているすべての方言で全面的に使用できる。FLAGSTD指令を使用すると、この構文が使われているすべての箇所を見つけ出すことができる。

標準COBOL定義の一部を構成するにもかかわらず、X/OpenのCOBOL言語定義では、区分化機能単位は明示的に除外されている。したがって、X/OpenのCOBOLに準拠する原始プログラム内ではこの機能単位を使用するべきではない。

区分化の一般説明

COBOLの区分化は、ユーザーが実行用プログラムのオーバレイに必要な情報をコンパイラに与えることができるようにする機能である。

COBOLでの区分化は、手続きだけを対象にしている。したがって、実行用プログラムを区分化するのに必要な事項は、手続き部に関してだけ規定する。

構成

プログラムの区分

原始プログラムの手続き部は、必ずしも節に分けて構成する必要はない。しかし、手続き部をいくつかの節の集団を連続して記述したものとして構成することはよく行われる。この場合、各集団は、密接に関連する一連の処理を集めて、全体として所定の機能を果たすように設計される。一方、区分化を適用するときは、手続き部全体をいくつかの節に分け、各節が実行用プログラムの固定部分または独立区分のどちらに入るのかを区別しておかなければならない。区分化をしても、手続き名を一意にするための修飾の必要性は変わらない。

固定部分

固定部分とは、実行用プログラムのうちの、論理的に常に記憶領域にあるように扱われる部分である、と定義される。固定部分は、 常駐区分とオーバレイ可能な固定区分(fixed overlayable segment)から成る。

常駐区分とは、固定部分のうちで、プログラムの他のどの部分によってもオーバレイされない区分を言う。

オーバレイ可能な固定区分とは、固定部分のうちで、論理的には常に記憶領域中にあるように扱われるが、記憶領域の利用を最適化するために他の区分によってオーバレイされてもよいものを言う。

独立区分

独立区分とは、実行用プログラムのうちで、オーバレイ可能な独立区分や他の独立区分と、オーバレイしたりオーバレイされたりする部分である、と定義される。独立区分は、プログラムの実行中に初めて(明示的または暗示的に)その区分に制御が移されたときには、初期状態にある。また、以降その区分に制御が移されたときにも、下記の場合には独立区分は初期状態にある。

独立区分に2回目移行に制御が移されたとき、下記の場合は、最後に使用された状態になっている。

区分化の分類

区分化される節は、節番号および下記の基準に基づいて、分類される。

区分化の制御

プログラムの論理的な順序は、通常は物理的な順序と同じである。ただし、制御の移行が行われたときは、両者の間にずれが生じる。原始プログラム中で制御を移す先は、節内の任意の段落とすることができる。これは、必ずしも節の先頭へ制御を移す必要はない、ということである。

プログラム区分の構造

区分番号

節の分類は、区分番号によって行われる。区分番号は、 節の見出しに含まれる。

一般形式

構文規則

  1. 区分番号は、0から99までの整数とする。

  2. 節の見出しに区分番号を書かなかったときは、区分番号は0であるとみなされる。

  3. 宣言部分中の節の区分番号は、49以下とする。

  4. 区分番号は、符号付き整数とする。浮動小数点数定数であってはならない。

一般規則

  1. 同じ区分番号のすべての節が、1つの区分を構成する。同じ区分番号を持つすべての節が、原始プログラム中で物理的に隣接していなくてもよい。

  2. 区分番号が0から49までの区分は、実行用プログラムの固定部分を構成する。

  3. 区分番号が50から99までの区分は、独立区分である。

常駐区分の範囲

一般形式

SEGMENT-LIMIT(常駐区分の範囲)句は、実行用計算機段落中に下記の形式で書く。

構文規則

  1. 区分番号は、1から49までの整数とする。

一般規則

  1. SEGMENT-LIMIT句は注記にとどまる。

プログラムの流れに関する制限

区分化を行うときは、ALTER, PERFORM, MERGE, SORTの各文に関して、下記の制限が課される。

ALTER文

区分番号が50以上の節内にあるGO TO文は、別の区分番号に属する節内のALTER文によって参照されてはならない。

それ以外のALTER文の使用法はすべて有効であり、ALTER文が参照するGO TO文がオーバレイ可能な固定区分中にあっても実行される。

PERFORM文

PERFORM文が固定区分中の節にある場合、これは範囲を持つ。その範囲内の文を実行することによって実行される宣言節の他に、下記の範囲がある。

PERFORM文が独立区分中の節にある場合、これはその中に範囲を持つ。その範囲内の文を実行することによって実行される宣言節の他に、下記の範囲がある。

MERGE文

固定区分中の節に書いたMERGE文によって参照される出力手続きは、下記の範囲になければならない。

独立区分中に書いたMERGE文によって参照される出力手続きは、下記の範囲になければならない。

SORT文

固定区分中の節に書いたSORT文によって参照される出力手続きは、下記の範囲になければならない。

独立区分中に書いたSORT文によって参照される出力手続きは、下記の範囲になければならない。