Previous 手続き部 - ACCEPT - DIVIDE 手続き部 - MERGE - OPEN Next

第 13 章 : 手続き部 - ENTER - INVOKE

13.1 ENTER(導入)文

ENTER(導入)文は、同じプログラム内で2つ以上の言語を使用できるようにする。

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

このCOBOLに組み込まれているすべての方言では、この構文は注記としての役割を果たすだけである。FLAGSTD指令を使用すると、この構文が使われているすべての箇所を見つけ出すことができる。

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

一般形式

構文規則

  1. 言語名および手順名には、任意の利用者語または英数字定数を書くことができる。

一般規則

  1. この文は、注記としての役割を果たすだけである。他の言語を実際に呼び出すには、CALL文を使用する。

13.2 ENTRY(入口)文

ENTRY(入口)文は、呼ばれたCOBOLプログラムへの代替の入口点を設定する。

一般形式

形式 1

形式 2

指令

  1. 予約語リストにフラグを付けたり修正したりするコンパイラ指令に加えて、下記の指令によって、この項に記述した構文または意味が影響を受ける可能性がある。

構文規則

すべての形式
  1. 他のプログラム内に入れ子になっているプログラム内では、ENTRY文を使用できない。

  2. 定数-1は数字であってはならず、表意定数であってもならない。環境によっては、先頭の8文字だけが有効なものがある。

形式 1
  1. 形式 1はプログラム定義中にのみ指定できる。

  2. データ名-1は連絡節、

    ファイル節、および作業場所節

    のいずれかに、レベルが01または77の項目として定義されていなければならない。

  3. データ名-2は連絡節、ファイル節、作業場所節のいずれかに、レベルが01または77の項目として定義されていなければならない。データ名-2は字類は何であってもよいが、長さが8バイトを超えてはならない。

形式 2
  1. 形式 2 を使用できるのは、プログラム名段落にEXTERNAL句が指定されているプログラム、つまり呼び出しプロトタイプ、の中だけである。

  2. データ名-1とデータ名-2は連絡節内の01レベルのレコードとして定義されていなければならない。

  3. 型定義名-1、型定義名-2、型定義名-3は、同じソース・ファイル中にTYPEDEF句を用いて、プログラマによって用途が定義されたものとして、予め定義されていなければならない。

一般規則

すべての形式
  1. 定数-1の内容は入口名を表す。それはプログラムへの入口点を指しており、手続き部の開始時点での省略時のCOBOL入口点の代りの入口点となる。プログラム名段落中のプログラム名は省略時のCOBOL入口点を示すと考えられる。

    実行用のCOBOLのコードが収められているプログラム・ファイルの名前は通常、基本的にプログラム名と同じであることに注意すること。呼出しが行われたときにプログラム名または入口名がまだメモリーにロードされていないと、ファイル名に基づいてプログラム・ファイルが探されるが、プログラム名に基づいて探されているように見える。そのような状況において、プログラム名を参照する呼出しは正常に行われるが、入口名を参照する呼出しはエラーとなる可能性がある。

    入口名は多くの場合にプログラム名に等しく、両者は名前の形成に関する共通の規則に従う。その規則は、見出し部の章のプログラム名段落節に記載されている。定数-1はプログラム名段落の一般形式の定数-1に対応する。

  2. 定数-1に入口名を指定したCALL文を使用して呼ぶプログラムから呼ばれるプログラムを呼び出すと、ENTRY文の後ろの次の実行可能な文に制御が移される。

  3. 連絡節に宣言されているがENTRY文のUSING指定に宣言されていないデータ項目を参照できるのは、SET文を実行してそれらのデータ項目をあるデータ項目にリンクしてある場合、またはコンパイラ指令のSTICKY-LINKAGEが指定されている場合だけである。

  4. USING指定には最大で62個のデータ名を指定できる。

  5. BY REFERENCE指定とBY VALUE指定は共に、別のBY REFERENCE指定またはBY VALUE指定が出てくるまで、後続のパラメータに効力を及ぼす。最初のパラメータの前にBY REFERENCE指定もBY VALUE指定もない場合には、BY REFERENCE指定があるものとみなされる。
形式 1
  1. データ名-1がファイル節または作業場所節の中のレベルが01または77の項目として定義されている場合、オブジェクト・プログラム動作は下記のようになる。具体的には、データ名-1と同じ内容で連絡節内にデータ項目が宣言され、呼ばれるプログラム中の最初の文を実行する前にそのデータ項目の内容がデータ名-1に転記するかのように動作する。初期プログラムでは、それらの値はそのプログラムの作業場所節のデータを初期化するさいに上書きされるので、呼ばれたプログラムからは利用できない。

  2. 稼働しているランタイム要素がCOBOLである場合、下記の規則が適用される。稼働しているランタイム要素がCOBOLでない場合、どういうときにBY REFERENCE指定またはBY VALUE指定を使用する必要があるかの詳細については、インターフェイスに関するCOBOLシステム・ドキュメンテーションを参照。

  3. USING指定はプログラムで使用される仮パラメータまたはプログラムに渡される任意の引数を指す。プログラムに渡された引数は、稼働しているソース要素によって、CALL文のUSING指定を用いて識別される。2つの名前リストの間の対応関係は、位置に基づいて確立される。

  4. 引数が内容によって渡される場合、呼ばれるプログラムの動作は下記のようになる。具体的には、呼出しを開始するプロセスの間に呼ぶランタイム要素によって連絡節内のレコードが割り当てられ、そのレコードは呼び出すランタイム要素中の引数と同じ記憶領域を占めることはないかのように動作する。この割り当てられたレコードの長さは引数とちょうど同じ文字数である。その引数がその割り当てられたレコードに何も変換せずに転記される。その後で、そのレコードは呼ばれたプログラムによって、それは引数であり参照によって渡されたかのように処理される。

  5. 引数が参照によって渡された場合、仮パラメータが引数と同じ記憶領域を占めるかのように、呼ばれるプログラムは動作する。

  6. 引数が値によって渡される場合には、呼ばれるパラメータの動作は下記のようになる。具体的には、呼出しを開始するプロセスの間に呼ぶランタイム要素によって連絡節内のレコードが割り当てられ、そのレコードは呼び出すランタイム要素中の引数と同じ記憶領域を占めることはないかのように動作する。この割り当てられたレコードの長さは引数とちょうど同じ文字数である。その引数がその割り当てられたレコードに何も変換せずに転記される。その後で、そのレコードは呼ばれたプログラムによって、それは引数であり参照によって渡されたかのように処理される。

  7. 稼働している要素においては常に、データ名-1、

    データ名-2およびデータ名-3

    への参照は連絡節中の記述に基づいて解明される。その連絡節中のデータ項目に定義されている文字数が、稼働している要素中の対応するデータ項目よりも多いと、結果はどのようになるか分からない。この規則に外れるか、具体的なランタイム環境において許されるシステム領域の最大許容サイズを超えるかすると、システムは壊滅的な障害を起こす可能性がある。

  8. プログラムが呼ばれ、USING指定中のBY REFERENCEの作用対象が呼ぶプログラム中のパラメータに対応する場合、参照のリンクが確立される。そのリンクは制御が呼んだプログラムに戻されるまで持続する。その後、そのプログラムを取り消すことなく、再びそのプログラムを呼んだ場合、同じBY REFERENCEの作用対象が呼んだプログラムのパラメータに対応しなかったならば、その作用対象を参照してはならない。ただし、コンパイラ指令のSTICKY-LINKAGEを指定した場合を除く。

13.3 EVALUATE(評価)文

EVALUATE(評価)文は、多くの分岐点や合流点がある構造を記述しておいて、複数の条件を評価できるようにする。 その評価の結果によって、ランタイム要素のその後の動きが決まる。

一般形式

構文規則

  1. EVALUATE文の最初の WHEN指定の前に現れる作用対象または語TRUEとFALSEを、個別には選択の左辺といい、総称して選択の左辺の組という。

  2. EVALUATE文の最初のWHEN指定の中に現れる作用対象または語TRUEとFALSEとANYを、個別には選択の右辺といい、総称して選択の右辺の組という。

  3. THROUGHとTHRUは同義である。

  4. THROUGH指定によってつないだ2つの作用対象は、同じ字類のものにする。このようにTHROUGH指定によってつないだ2つの作用対象は、単一の選択の右辺を構成する。

  5. 選択の右辺の組に含まれる選択の右辺の数は、選択の左辺の数と等しくする。

  6. 選択の右辺の組に含まれる各選択の右辺は、選択の左辺の組に含まれる同じ順番の位置にある選択の左辺と対応させる。これには、下記の規則が適用される。

    1. 選択の右辺の中に現れる一意名、定数、算術式は、選択の左辺中の対応する作用対象と比較する作用対象として、有効なものにする。(手続き部の章の比較条件節を参照。)

    2. 選択の右辺として現れる条件-1、条件-2あるいは語TRUEまたはFALSEは選択の左辺の組の中の条件式または語TRUEまたはFLASEと対応させる。

    3. 語ANYは、任意の種類の選択の左辺と対応できる。

    4. 一意名を使えるところでは、浮動小数点数データ項目を参照できる。

    5. 数字定数を使えるところでは、浮動小数点数定数を参照できる。

    6. 一意名を使えるところでは、ポインタ・データ項目を参照できる。

  7. 選択の左端部分が相対作用要素、一意名を含まない字類条件、一意名を含まない記号条件、および数式を含まないである記号条件のいずれかである場合は、選択は、部分式である。

  8. 選択の右辺として部分式-1または部分式-2を指定する場合、これらは一意名か定数か算術式である選択の左辺と対応させる。部分式-1および部分式-2は一連のCOBOLの語であり、対応する選択の左辺の後ろに続けたときに、有効な条件式となるものでなければならない。

一般規則

  1. EVALUATE文を実行すると、まず、選択の左辺と選択の右辺が評価されて、1つの数値、1つの文字値、数値の範囲、文字値の範囲、真理値のどれかが割り当てられる。これらの値は下記のように決定される。

    1. 一意名-1および一意名-2によって指定される選択の左辺、および一意名-3および一意名-5によって指定される右辺のうちで、NOT指定またはTHROUGH指定を伴わないものは、その一意名によって参照されるデータ項目の値と字類を割り当てられる。

    2. 定数-1および定数-2によって指定される選択の左辺、および定数-3および定数-5によって指定される右辺のうちでNOT指定もTHROUGH指定も伴わないものは、その定数の値と字類を割り当てられる。定数-3と定数-5が表意定数のZEROであると、それらには対応する選択の左辺の字類が割り当てられる。
    3. 算術式として式-1および式-2を指定された選択の左辺、および算術式-1または算術式-3が含まれるNOT指定もTHROUGH指定も伴わない選択の右辺は、算術式の評価規則に従って数値を割り当てられる。(手続き部の章の算術式節を参照。)

    4. 条件式として式-1および式-2を指定された選択の左辺、および条件-1と条件-2を指定された選択の右辺は、条件式の評価規則に従って真理値を割り当てられる。(手続き部の章の条件式節を参照。)

    5. 語TRUEまたはFALSEを指定された選択の左辺または選択の右辺は、真理値を割り当てられる。語"true" が指定された項目は、真理値の「真」を割り当てられ、語"false" が指定された項目は、真理値の「偽」を割り当てられる。

    6. 語ANYを指定された選択の右辺は、それ以上評価されない。

    7. 選択の右辺にNOT指定を付けずにTHROUGH指定を書くと、選択の左辺と比較したときの値の範囲は、比較の規則に基づいて、最初の作用対象以上で2番目の作用対象以下となる。(選択の右辺にNOT指定を付けずにTHROUGH指定を書くと、選択の左辺と比較したときの値の範囲は、比較の規則に基づいて、最初の作用対象以上で2番目の作用対象以下となる。(手続き部の章の比較条件節を参照。) 最初の作用対象の方が2番目の作用対象よりも大きいと、その範囲には値は何も含まれない。の比較条件の節を参照。) 最初の作用対象の方が2番目の作用対象よりも大きいと、その範囲には値は何も含まれない。

    8. 選択の対象にNOT指定を書くと、割り当てられる値は、その値と等しくないすべての値、またはNOT指定を指定しなかった場合に割り当てられる値以外のものとなる。

  2. EVALUATE文の実行は、選択の左辺と選択の右辺の比較へと進む。そして、選択の左辺の組の中にWHEN指定を満たすものがあるかどうかが判定される。この比較は下記のように行われる。

    1. 最初のWHEN指定の選択の右辺の組の中の各選択の右辺が、選択の左辺の組の中の順序位置が同じ選択の左辺と比較される。

      1. 比較対象の項目に割り当てられている値が数値、文字値、数値の範囲、文字値の範囲である場合は、選択の右辺に割り当てられている値または値の範囲内のどれかの値が、比較規則に照らして選択の左辺に割り当てられている値と等しければ、その比較条件は満足される。(手続き部の章の比較条件節を参照。)

      2. 比較対象の項目に割り当てられている値が真理値である場合は、選択の左辺と選択の右辺に同じ真理値が割り当てられているときに、その比較条件は満足される。

      3. 比較対象の項目に割り当てられている値が語ANYである場合は、その比較条件はつねに満足される。この場合は、選択の左辺の値は何であってもよい。

    2. 比較対象の選択の右辺の組に含まれる各選択の右辺に関して、上記の比較が満足されると、その選択の右辺の組が含まれるWHEN指定が選択の左辺の組を満たすものの1つとして選択される。

    3. 比較対象の選択の右辺の組に含まれる選択の右辺の中に、上記の比較が満足しないものがいくつかあると、その選択の右辺の組は選択の左辺の組を満たさない。

    4. 後続の選択の右辺の組に対して、上記の比較処理が、原始要素の記述されている順序で繰り返し実行される。そして、選択の左辺の組を満たすWHEN指定が選択されるか、またはすべての選択の右辺の組を比較し尽くした時点で、この処理は終わる。

  3. 比較処理が終わると、EVALUATE文の実行は下記のように進む。

    1. WHEN指定が選択された場合、そのWHEN指定の後ろに続く最初の無条件文-1に処理は進む。

    2. WHEN指定が選択されなかった場合、WHEN OTHER指定が指定されていれば、無条件文-2に処理は進む。

    3. EVALUATE文の実行は、選択されたWHEN指定またはWHEN OTHER指定の最後まで到達した時、あるいは選択されたWHEN指定がなくWHEN OTHER指定が指定されていない時に終了する。(COBOL言語の概念の章の明示範囲符と暗黙範囲符節を参照。)

  4. 選択の右辺が部分式-1または部分式-2によって指定されている場合、対応する選択の左辺は語TRUEであるものとみなされる。選択の右辺はそれぞれ条件-1または条件-2とみなされる。ここで、条件-1または条件-2はそれぞれ、元の対応する選択の左辺-1または選択の左辺-2に続く部分式-1または部分式-2から導出される条件式である。

13.4 EXAMINE(検査)文

EXAMINE(検査)文は、データ項目中に現れる指定された文字を置き換えたり、数を数えたりする。

一般形式

形式 1

形式 2

構文規則

すべての形式
  1. 一意名は、明示的または暗黙的に、USAGE IS DISPLAYと記述しておく。

  2. 各定数は、1文字で構成させる。一意名が数字項目である場合、定数は数字定数、値が単一の数字である文字定数、表意定数のZEROのどれかとする。一意名の字類がそれ以外の場合は、定数は数字でも文字でも語ALL以外の任意の表意定数であってもよい。

一般規則

すべての形式
  1. 検査は、下記のように行われる。

    1. 文字データ項目に関しては、検査は左端の文字から開始され、右方向に進められる。一意名に指定したデータ項目中の各文字が、順々に検査される。

    2. EXAMINE文の対象とするデータ項目が数字の場合は、演算符号が付いてもよい。検査は符号を除く左端の文字から開始され、右方向に進められる。符号を除く各文字が順々に検査される。符号はどこに付いていても、EXAMINE文によって完全に無視される。

  2. TALLYINGオプションを指定すると、数が数えられて、TALLYと呼ばれる特殊レジスタの値が置き換えられる。この数は、下記の事柄を表わす。

    1. UNTIL FIRSTオプションを指定した場合は、最初に定数-1が見つかるまでに出て来る定数-1以外の文字の数。

    2. ALLオプションを指定した場合は、定数-1が出て来る数。

    3. LEADINGオプションを指定した場合は、最初に定数-1以外の文字が見つかるまでに出て来る定数-1の数。

  3. REPLACINGオプションを指定した場合は、下記の規則に基づいて置き換えが行われる。

    1. ALLオプションを指定すると、出て来る定数-1はすべて定数-2に置き換えられる。

    2. LEADINGオプションを指定すると、定数-1以外の文字が出て来るか、データ項目の右端に達したときに、定数-2による置き換えが終了される。

    3. FIRSTオプションを指定すると、最初に出て来る定数-1が定数-2に置き換えられる。

    4. UNTIL FIRSTオプションを指定すると、定数-1が出て来るか、データ項目の右端に達したときに、定数-2による置き換えが終了される。

13.5 EXEC(UTE)(実行)文

EXEC(UTE)(実行)文は、COBOL以外のサブシステムに制御を渡すための連絡機構として設けられている。

一般形式

形式 1

形式 2

構文規則

  1. 原文データは、文字列END-EXECを含まなければ、どんなテキストデータであってもよい。

一般規則

形式 1
  1. 形式 EXEC(UTE) CICS、EXEC(UTE) SQL、およびEXEC(UTE) DLI により、適切なシステムコンポーネント(プリプロセッサ、コプロセッサ、外部コンパイルモジュールなどと呼ばれる)が呼ばれ、原文データを処理する。ただし、対応するコンパイラ指令が指定され、そのシステムコンポーネントを起動する場合に限る。対応するコンパイラ指令が指定されていない場合は、EXEC(UTE) 文が形式 1 EXEC(UTE) 文として扱われる。これらの形式の使用について詳しくは、COBOLシステムのマニュアルでCICSの使用およびデータベースへのアクセスについての情報を参照。
形式 2
  1. この文は、「CALL " テキスト名" USINGテキスト・データ・バッファ」文に翻訳される。 (手続き部 - ACCEPT - DIVIDE の章のCALL(呼出し)文節を参照。) ここで、テキスト・データ・バッファにはEXEC文のすべてのテキスト・データが入れられ(空白は圧縮される)、これが呼ばれるプログラムである 「テキスト名」によってさらに解析される。

    このことは、呼ばれる副プログラム(テキスト名)に、テキスト文字列が渡されることを意味する。このテキスト文字列は、動詞EXEC(UTE)で始まりEND-EXEC指定で終わる間のすべてのCOBOL文が含まれる。呼ばれるプログラムは、渡されるすべての情報を解析して処理しなければならない。

    テキスト・データ内に一意名が含まれている場合、これは副プログラムに渡される一意名を表わしているのであって、データの値を表わしているのではない。

13.6 EXHIBIT(参照)文

EXHIBIT(参照)文は、指定された定数や一意名の内容を表示する。条件付きで表示させることもできる。一意名の場合は、内容の前に名前を表示させることができる。

一般形式

構文規則

  1. EXHIBIT文中に指定した各一意名は、どんな字類のデータであってもよい。一意名として使用できる特殊レジスタは、TALLYおよびRETURN-CODEのみである。

  2. CHANGEDとNAMEDは、両方とも省略できる。

一般規則

  1. EXHIBIT文によって表示される定数および一意名は、表示行上では1つの空白によって区切られる。

  2. 定数には、ALL以外の表意定数を指定できる。

  3. 定数に数字を指定する場合は、符号の付かない整数とする。

  4. EXHIBIT NAMED文を実行すると、指定した各一意名または定数が表示される。一意名の場合は、その名前(修飾語および添字があれば、それを含む)の後に"=" (等号)を付けて、その後ろに現在の値が表示される。表示される一意名または定数は、EXHIBIT文に指定された順番に、1行に並べられる。

  5. EXHIBIT CHANGED NAMED文を実行すると、指定した各一意名または定数が表示される。一意名の場合は、その名前(修飾語および添字があれば、それを含む)の後に"=" (等号)を付けて、その後ろに現在の値が表示される。表示される一意名または定数は、EXHIBIT文に指定された順番に、1行に並べられる。ただし、表示される一意名(名前と値)は、前回このEXHIBIT文を実行した後で値に変更があったものだけである。値が変更されなかった一意名については、その名前も値も表示されない。値が変更された一意名が1つもなく、定数も1つも指定されていないと、何も表示されない(空白行の表示は抑制される)。

  6. EXHIBIT CHANGED文を実行すると、指定した各一意名または定数の現在の値が表示される。表示される一意名または定数は、EXHIBIT文に指定された順番に、1行に並べられる。ただし、表示される値は、前回このEXHIBIT文を実行した後で値に変更があったものだけである。値が変更されなかった一意名については、その値は表示せず、代わりに空白が挿入される。値が変更された一意名が1つもなく、定数も1つも指定されていないと、空白行が表示される(空白行の表示は抑制されない)。

  7. CHANGEDオプションもNAMEDオプションも指定せずにEXHIBIT文を実行すると、指定した各一意名または定数が表示される。表示される一意名または定数は、EXHIBIT文に指定された順番に、1行に並べられる。

13.7 EXIT(出口)文

EXIT(出口)文は、一連の手続きの共通の終了点を設ける。

EXIT文は、内PERFORM、段落、または節の出口とすることもできる。

EXIT PROGRAM文は、呼ばれたプログラムの論理的な終点を示す。

任意の言語で書かれた呼び出し元のランタイム要素に、値を返することもできる。

EXIT METHOD文は、起動されたメソッドの論理的な終点を示す。

EXIT FUNCTION文は、関数の実行の論理的な終点を示す。

一般形式

形式 1

形式 2

形式 3

形式 4

形式 5

形式 6

構文規則

形式 1
  1. EXIT文は、それだけで完結文を構成しなければならない。

    この規則は強制しない。

  2. EXIT文は、段落中の唯一の完結文でなければならない。

    この規則は強制しない。

形式 2
  1. 形式 2 のEXIT文は、内PERFORMの中だけで使用できる。

形式 4
  1. 完結文内の一連の無条件文の中にEXIT PROGRAM文を指定する場合、これをその最後の文としなければならない。

    この規則は強制しない。

  2. EXIT PROGRAM文を含む段落には、それ以外の完結文を含めてはならない。

    この規則は強制しない。

  3. 整数-1は符号付きでもよい。

  4. GIVING指定とRETURNING指定は同義である。

  5. ADDRESS OF句を指定しなかった場合、一意名-1のサイズは8バイトを超えてはならない。
形式 5
  1. EXIT METHOD文を指定できるのは、メソッド手続き部の中だけである。

形式 6
  1. EXIT FUNCTIONを指定できるのは、関数手続き部の中だけである。

形式 4、5 および 6
  1. 関連するUSE文中にGLOBAL指定が書かれている宣言手続中にEXIT文を指定してはならない。

一般規則

形式 1
  1. EXIT文は、手続き部中のある点に、利用者が手続き名を付けられるようにするだけである。 この形式のEXIT文には、翻訳および実行に関して、それ以外の働きはない
形式 2
  1. CYCLE指定を伴わないEXIT PERFORM文を実行すると、最も近い内PERFORM文に対応するEND-PERFORMのすぐ後ろに続く、暗黙のCONTINUE文に制御が移される。

  2. CYCLE指定を伴うEXIT PERFORM文を実行すると、最も近い内PERFORM文に対応するEND-PERFORMの直前にある、暗黙のCONTINUE文に制御が移される。

形式 3
  1. PARAGRAPH指定を伴う形式 3 のEXIT文を実行すると、段落の最後の文の直前にある、暗黙のCONTINUE文に制御が移される。

  2. SECTION指定を伴う形式 3 のEXIT文を実行すると、節の最後の段落にある最後の文の直前にある、暗黙のCONTINUE文に制御が移される。

形式 4
  1. 呼び出し側のランタイム要素の制御下にないプログラム内でEXIT PORGRAM文を実行すると、次の実行可能な文に制御が移されて、処理が続行される。

  2. 初期属性を持たない呼ばれたプログラム内でEXIT PROGRAM文を実行すると、呼んだランタイム要素の中のCALL文の次の実行可能な文に制御が移されて、処理が続行される。呼んだランタイム要素の状態はCALL文を実行したときと同じである。ただし、呼んだランタイム要素と呼ばれたランタイム要素の間で共有されるデータ項目およびデータ・ファイルの内容は変更されている可能性がある。呼ばれたプログラムの状態も変更されない。ただし、呼ばれたプログラムによって実行されたすべてのPERFORM文は、その範囲の末尾に達したものとみなされる。

  3. 初期属性をもつ呼ばれたプログラム内でEXIT PROGRAMを実行することは、上記の7の処理に加えて、そのプログラムを対象とするCANCEL文を実行することに等しい。ただし、メモリーの解放は行われない。手続き部 - ACCEPT - DIVIDEの章のCANCEL(取消し)文節を参照。)

  4. GLOBAL句が指定されている宣言手続きが実行されている最中に、EXIT PROGRAM文を実行してはならない。ただし、その宣言手続きの実行中に呼ばれたプログラム内で、EXIT PROGRAM文を実行することは構わない。

  5. 呼んだランタイム要素の制御下にあるプログラム内のEXIT PROGRAM文を実行すると、システム領域に戻り値が設定される。このシステム領域は一般にCOBOL以外のプログラムが値を返すために利用できる。そのサイズは4バイトを下回ることはなく、環境によってはそれよりも大きいことがある。

    GIVING指定を書かず、呼出し方式に特殊レジスタのRETURN-CODE(環境部の章の特殊名段落節の呼出し方式を参照)を更新するように指定した場合、オブジェクト・プログラム動作は下記のようになる。具体的には、システム領域がCOBOLの数字データ項目であり、それにUSAGE COPM-5が指定されていて、そのサイズはCOBOLシステムの外の操作環境によって決定されるものとして宣言されている状態で、RETURN-CODEを送出し側としシステム領域を受取り側として、MOVE文を実行したかのように動作する。(RETURN-CODEの詳細については、COBOL言語の概念の章の特殊レジスタ節を参照。)

    GIVING ADDRESS OF指定を書いた場合、オブジェクト・プログラム動作は下記のようになる。具体的には、システム領域がUSAGE POINTERと指定されたCOBOLのデータ項目として宣言され、「ADDRESS OF 一意名-9」を最初の作用対象としシステム領域を2番目の作用対象として、SET文を実行したかのように動作する。システム領域よりも大きな値を間接的に渡すために、ADDRESS OF指定を使用できる。

    「GIVING 一意名-1」指定を書いた場合、一意名-1はシステム領域に戻り値を収めるのに必要な長さがあり、その型と用途は呼んだランタイム要素によって期待されるのものでなければならない。一意名-1を送出し側項目とし、システム領域を受取り側項目として、MOVE文を実行したかのように、オブジェクト・プログラムは動作する。

    「GIVING 整数-1」指定を書いた場合、整数-1の値はシステム領域に保持可能なよりも大きくてはならない。オブジェクト・プログラム動作は下記のようになる。具体的には、システム領域がCOBOLの数字データ項目であり、それにUSAGE COPM-5が指定されていて、そのサイズはCOBOLシステムの外の操作環境によって決定されるものとして宣言されている状態で、整数-1を送出し側としシステム領域を受取り側として、MOVE文を実行したかのように動作する。

形式 5
  1. EXIT METHOD文を実行すると、実行中のメソッドが停止され、呼出し元の文に制御が戻される。呼出し元のメソッド定義にRETURNING指定があると、RETRUNING指定によって参照されたデータ項目中の値がそのメソッド呼出しの結果となる。
形式 6
  1. EXIT FUNCTION文を実行すると、実行中の関数が停止され、呼出し元の文に制御が戻される。親の関数に含まれるRETURNING指定により参照されるデータ項目の値が、関数呼出しの結果となる。

13.8 GOBACK(復帰)文

GOBACK(復帰)文は、呼ばれたプログラムの論理的な終点を示す。

任意の言語で書かれている呼び出し元のランタイム要素またはオペレーティングシステム環境へ、値を返すこともできる。

一般形式

構文規則

  1. GOBACK文は、一連の無条件文の最後の文とする。

    この規則は強制されないが、その場合GOBACKの後ろに続く文は実行されない。

  2. GIVING 指定とRETURNING指定は同義である。

  3. ADDRESS OF句を指定しない場合、一意名-1によって参照されるデータ項目のサイズは8バイトを超えてはならない。

  4. 整数-1は符号付きでもよい。

一般規則

  1. 呼び出したランタイム要素の制御下にあるプログラム内でGOBACK文を実行した場合、GOBACK文と同じ句が指定されているEXIT PROGRAM文を実行したかのように、オブジェクト・プログラムは動作する。EXIT(出口)文節を参照。

  2. 呼び出した ランタイム要素の制御下にないプログラム内でADDRESS OF句を指定せずにGOBACK文を実行した場合、GOBACK文と同じ句が指定されているSTOP RUN文を実行したかのように、オブジェクト・プログラムは動作する。

  3. 呼び出した ランタイム要素の制御下にないプログラム内でADDRESS OF句を指定してGOBACK文を実行した場合、STOP RUN文を実行したかのように、オブジェクト・プログラムは動作する。ただし、システム領域に設定される戻り値は不定であることが異なる。GOBACK文を使用する方が、同内容のEXIT PROGRAM文やSTOP RUN文よりも、コードが簡潔になることが多い。

  4. GLOBAL句が指定されている宣言手続きが実行されている最中に、GOBACK文を実行してはならない。ただし、その宣言手続きを実行中に呼ばれたプログラム内でGOBACK文を実行することはかまわない。

13.9 GO TO(飛越し)

GO TO(飛越し)文は、手続き部のある部分から別の部分へ制御を移転させる。

形式 1 のGO TO文中の手続き名-1を省略することは、ANSI'85標準では廃棄要素に分類されており、ANSI標準の次回の全面改訂の際に削除される予定である。

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

A標準COBOL定義の一部を構成するにもかかわらず、X/OpenのCOBOL言語定義では、形式 1 で手続き名を省略することは明示的に除外されている。したがって、X/OpenのCOBOLに準拠する原始プログラム内ではこの文を使用するべきではない。

一般形式

形式 1

形式 2

構文規則

すべての形式
  1. 一意名は、整数をとる数字基本項目の名前である。

  2. ALTER(変更)文によって参照される段落は、段落の見出しとその後ろに書いた書き方1のGO TO文だけで構成しなければならない。
形式 1
  1. 手続き名-1を伴わない形式 1 のGO TO文は、単一の文からなる段落内にだけ書ける。

    この規則は強制しない。

  2. 完結文の中の一連の無条件文の1つとして、形式 1 のGO TO文を使用する場合は、その最後の文とする。
形式 2
  1. 形式 2 では、少なくとも2つの手続き名を書く必要がある。

    形式 2 で手続き名が1つだけであってもよい。

一般規則

すべての形式
  1. 形式 1 で手続き名-1を指定しない場合は、このGO TO文を参照するALTER文を、このGO TO文の実行に先立って実行しておく。

    このGO TO文を実行する前に、このGO TO文が含まれる段階を参照するALTERが実行されていない場合には、このGO TO文はCONTINUE(継続)文と同じに扱われる。

形式 1
  1. 形式 1 のGO TO文が実行されると、制御は手続き名-1に移される。ただし、ALTER文によってそのGO TO文が変更されている場合には、変更された手続き名に制御が移される。
形式 2
  1. 形式 2 のGO TO文が実行されると、一意名の値が1, 2, ... nのどれであるかに応じて、手続き名-1、手続き名-2などに制御が移される。一意名の値が正または符号の付かない1, 2, ... nでない場合は、制御の移転は行われず、通常の実行順序の次の文が実行される。

13.10 IF(判断)文

IF文は、評価すべき条件を提示する(手続き部の章の条件式節を参照)。 その結果が「真」であったか「偽」であったかによって、ランタイム要素の以降の制御の流れが変わってくる。

一般形式

構文規則

  1. 文-1と文-2は、無条件文または条件文を表わす。条件文の前に無条件文を書いてもよい。

  2. END-IF指定を書く場合、NEXT SENTENCE指定を書いてはならない。

    END-IF指定と共に、NEXT SENTECE指定を書いてもよい。

    NEXT SENTENCE指定が実行されると、制御はEND-IFの次の文ではなく、後続の最も近い終止符(.)の後ろに続く文に移される。

一般規則

  1. IF文の範囲は、下記のどれかによって区切られる。

    1. 同じ入れ子レベルのEND-IF指定

    2. 分離符の終止符

    3. 入れ子になっている場合、上位レベルのIF文に対応するELSE指定

  2. IF文が実行されると、下記の制御の移転が発生する。

    1. 条件が真のとき、文-1を指定してある場合は、その文が実行される。文-1に手続き分岐文または条件文が含まれると、その文の規則に従って明示的に制御が移転される。文-1に手続き分岐文または条件文が含まれないと、ELSE指定は指定してあっても無視されて、IF文の末尾に制御が移される。

    2. 条件が真のとき、文-1の代わりにNEXT SENTENCE指定を指定してある場合は、ELSE指定は指定してあっても無視されて、次の実行可能文に制御が移される。

    3. 条件が偽のとき、文-1またはその代わりのNEXT SENTENCE指定は無視され、文-2が指定してあればそれが実行される。文-2に手続き分岐文または条件文が含まれると、その文の規則に従って明示的に制御が移転される。文-2に手続き分岐文または条件文が含まれないと、IF文の末尾に制御が移される。ELSE文-2指定を指定してないと、文-1は無視されて、IF文の末尾に制御が移される。

    4. 条件が偽のとき、ELSE NEXT SENTENCE指定を指定してある場合は、文-1は指定してあっても無視されて、次の実行可能文に制御が移される。

  3. 文-1または文-2のどちらか一方または両方に、IF文を含めてもよい。この場合、IF文は入れ子になっている、という。

    IF文の中に含まれるIF文は、左から右方向に、IFとELSEとEND-IFの順に組になったものとみなされる。したがって、文中に出てくるELSEは、まだ他のELSEと組み合わされていないか、または明示的にも暗示的にも終了していない、最も近い先行するIFと組み合わされる。文中に出てくるEND-IFは、明示的にも暗示的にも終了していない、最も先行するIFと組み合わされる。

13.11 INITIALIZE(初期化)文

INITIALIZE(初期化)文は、選択されたデータ項目を指定された値に設定する。

一般形式

構文規則

  1. 一意名-1 の字類は、英字、英数字、数字、

    各国語型、オブジェクト、またはポインタ

    でなければならない。

  2. DATA-POINTER指定、OBJECT-REFERENCE指定、およびPROGRAM-POINTER指定のいずれかをREPLACING指定で項類名として使用した場合は、一意名-2 を指定しなければならない。

  3. REPLACING指定で使用したデータポインタ、オブジェクト参照、およびプログラムポインタの各項類については、一意名-2 を含むSET文が送出し側作用対象として、また、指定された項類の項目が受取り側作用対象として、有効でなければならない。(手続き部 - SEARCH - WRITEの章のSET(設定)文節を参照。)

    REPLACING指定で使用した、データポインタ、オブジェクト参照、およびプログラムポインタ以外の各項類については、一意名-2 または定数-1を含むMOVE文が送出し側作用対象として、また、指定された項類の項目が受取り側作用対象として、有効でなければならない。手続き部 - MERGE - OPEN の章のMOVE(転記)文節を参照。)

  4. REPLACING指定を使用した場合は、定数-1または一意名-2が参照するデータ項目が送出し側作用対象となる。

    REPLACING指定を使用しない場合は、INITIALIZE文の一般規則に従って、送出し側作用対象が決定される。

  5. 一意名-1が参照するデータ項目は受取り側領域となる。

  6. REPLACING指定内では、同じ項類は繰り返し指定できない。

  7. 一意名-1によって参照されるデータ項目またはその下位に属するデータ項目のデータ記述には、OCCURS句のDEPENDING指定が含まれていてはならない。

    一意名-1によって参照されるデータ項目の位置が可変であってはならない。つまり、同じレコード記述内にあってOCCURS句のDEPENDING指定があるデータ項目の後ろに、一意名-1を置くことはできない。ただし、OCCURS句のある項目の下位に一意名-1が属する場合は別である。

    一意名-1によって参照されるデータ項目は、位置が可変であってもよい。

  8. 一意名-1によって参照されるデータ項目のデータ記述項に、RENAMES句を含めてはならない。

  9. 数字の一意名または定数を指定できるところでは、どこでも浮動小数点数のデータ項目または定数を使用できる。

一般規則

  1. 項類名中のキーワードは、本書の中で定義したデータの項類に対応する。(COBOL言語の概念の章のデータの字類と項類節を参照。)

    VALUE指定でALLが示されている場合、項類名のリスト中のすべての項類が指定されていると見なされる。

  2. 一意名-1によって参照されるデータ項目が基本項目であっても集団項目であっても、INITIALIZE文の実行の結果は、各文の受取り側作用対象が基本項目である、一連のMOVE文またはSET文が実行されたものと同様である。これらの文の送出し側作用対象は一般規則 4 で、また、受取り側作用対象は一般規則 3 で定義される。

    受取り側作用対象の項類がデータポインタ、オブジェクト参照、またはプログラムポインタである場合の明示文は、以下の通り。

    SET 受取り側作用対象 TO送出し側作用対象

    そうでない場合の明示文は、以下の通り。

    MOVE 送出し側作用対象 TO 受取り側作用対象

  3. 暗黙的に指定された各MOVE文またはSET文中の受取り側作用対象は、以下の手順を順に実行することにより決定される。

    1. まず、以下のデータ項目が、受取り側作用対象としては除外される。

      1. MOVE文の有効な受取り側作用対象でない、あらゆる一意名。ただし、項類がデータポインタ、オブジェクト参照、またはプログラムポインタであるデータ項目を除く。

      2. FILLER指定が使用されない場合は、明示的または暗黙的なFILLER句を含む基本データ項目。

      3. データ記述項にREDEFINES句またはRENAMES句を含む一意名-1、またはデータ記述項にREDEFINES句を含むデータ項目のいずれかの下位項目である、あらゆる基本データ項目。ただし、この一意名-1自体がREDEFINES句を含んでいてもよい。または、REDEFINES句を含むデータ項目の下位項目であってもよい。

    2. 次に、以下のいずれかに該当する場合は、基本データ項目が受取り側作用対象となる可能性がある。

      1. 一意名-1 が明示的に基本データ項目を参照している。

      2. 一意名-1が参照する集団データ項目に基本データ項目が含まれる。基本データ項目が表要素の場合、出現する各基本データ項目が受取り側作用対象となる可能性がある。

    3. 最後に、可能性のある項目のうち、以下の条件の1つ以上が真であるものが受取り側作用対象となる。

      1. VALUE指定が使用されており、基本データ項目の項類がVALUE指定で明示的または暗黙的に指定された項類のどれかである。さらに、以下の条件のいずれかが真である。

        1. 基本データ項目の項類が、データポインタ、オブジェクト参照、またはプログラムポインタである。

        2. データ項目形式または表形式のVALUE句が基本データ項目のデータ記述項で指定されている。

      2. REPLACING指定が使用され、基本データ項目の項類が、REPLACING指定で指定された項類のどれかである。

      3. DEFAULTが使用されている。

      4. REPLACING指定もVALUE指定も使用されていない。

  4. 暗黙的な各MOVE文およびSET文の送出し側作用対象は、以下のように決定される。

    1. データ項目が、VALUE指定を含んでいるために受取り側作用対象とされた場合、

      1. 受取り側作用対象の項類がデータポインタまたはプログラムポインタであれば、送出し側作用対象は定義済みの番地 NULL となる。

      2. 受取り側作用対象の項類がオブジェクト参照であれば、送出し側作用対象は定義済みのオブジェクト参照 NULL となる。

      3. 上記のどちらでもない場合は、データ項目もデータ記述項で指定されたVALUE句中の定数により、送出し側作用対象が決定される。データ項目が表要素であれば、初期化される対象に対応する、VALUE句中の定数により、送出し側作用対象が決定される。実際の送出し側作用対象は定数で、MOVE文で受取り側作用対象に転記されたときに、VALUE句の適用により生成されるデータ項目の初期値と同じ値を結果をもたらす。

    2. データ項目が、VALUE指定を含んでいないが、REPLACING指定を含んでいるために受取り側作用対象とされた場合、送出し側作用対象は、REPLACING指定で指定された項類に関連づけられた定数-1または一意名-2となる。

    3. データ項目が、一般規則 4a または 4b により、送出し側作用対象とされない場合、使用される送出し側作用対象は、以下の表に従い、受取り側作用対象の項類により変わる。

      受取り側作用対象 表意定数
      英字 表意定数英数字 SPACES
      英数字 表意定数英数字 SPACES
      英数字編集 表意定数英数字 SPACES
      データポインタ 定義済みの番地 NULL
      各国語型 表意定数各国語型 SPACES
      各国語型編集 表意定数各国語型 SPACES
      数字 表意定数 ZEROES
      数字編集 表意定数 ZEROES
      オブジェクト参照 定義済みのオブジェクト参照 NULL
      プログラムポインタ 定義済みの番地 NULL

  5. すべての場合において、一意名-1によって参照されるデータ項目の内容は、INITIALIZE文に書かれている順番(左から右)に、初期化される。その過程で集団項目が出てきた場合には、その集団の中で記述されている順に、基本項目が初期化される。可変出現データ項目については、初期化された出現回数は、受取り側データ項目のOCCURS句の規則により決定される。

  6. 一意名-1と一意名-2が同じ記憶領域を指す場合には、INITIALIZE文の実行結果はどうなるかわからない。両者が同じデータ記述項に定義されていたとしても、そのことは変わらない。(手続き部の章の作用対象の重なり節を参照。)

13.12 INSPECT(文字列検査)文

INSPECT(文字列検査)文は、データ項目内に出てくる単一の文字または一連の文字の数を数えたり(形式 1)、置き換えたり(形式 2)、数を数えて置き換えたり(形式 3)、

または、変換(形式 4)する。

  1. INSPECT TALLYING、REPLACING、CONVERTING の使用例は、言語リファレンス - 追加トピックINSPECT文(カウント、置換、および変換)節を参照。

一般形式

形式 1

形式 2

形式 3

形式 4

構文規則

すべての形式
  1. 一意名-1は、集団項目、あるいは明示的または暗黙的にUSAGE IS DISPLAYと記述された基本項目とする。

  2. 一意名-3から一意名-n までの一意名は、

    集団項目、あるいは

    明示的または暗黙的にUSAGE IS DISPLAYと記述された英字または英数字、

    英数字編集、数字編集、

    または数字の基本項目とする。

  3. 各定数は、文字定数または表意定数とする。ただし、表意定数のALLは使用できない。定数-1、定数-2、定数-4が表意定数のときは、暗黙的に1文字のデータ項目を表わす。

  4. ALL、LEADING、CHARACTERS、FIRST、

    またはCONVERTING

    の各指定には、 BEFORE 指定、

    および /、

    またはAFTER指定を2つ以上書くことはできない

  5. 定数-1、定数-2、定数-3、定数-4、定数-5および一意名-3、一意名-4、一意名-5、一意名-6、一意名-7のデータ項目の長さは、定数またはデータ項目が取る限度内ならば、何文字でもよい。

  6. 一意名-2(TALLYING項目)を除くすべての一意名は、外部浮動小数点数であってもよい。英数字項目を参照するINSPECT文に関しては、外部浮動小数点項目は英数字に再定義されているように扱われる。
形式 1 および 3
  1. 一意名-2は、基本数字データ項目とする。

形式 2 および 3
  1. 定数-3または一意名-5のデータの大きさは、定数-1または一意名-3のデータの大きさと等しくする。定数-3に表意定数を指定すると、その大きさは、定数-1または一意名-3のデータ項目の大きさに等しく扱われる。

  2. CHARACTERS指定を行う場合、定数-3または一意名-5のデータ項目の大きさは1文字にする。

    定数-2および一意名-4には、この制限は適用されない。

形式 4
  1. 定数-5または一意名-7のデータの大きさは、定数-4または一意名-6のデータの大きさと等しくする。定数-5に表意定数を指定すると、その大きさは、定数-4または一意名-6のデータ項目の大きさに等しく扱われる。

  2. 定数-4または一意名-6のデータ項目中に、同じ文字が2回以上現れてはならない。

一般規則

すべての形式
  1. 長さを判定する目的では、一意名-1は送出し側データ項目であるかのように扱われる。(データ部 - ファイルおよびデータ記述の章のOCCURS(反復)句節を参照。)

  2. 文字列検査を行うためには、比較の周期、BEFORE指定やAFTER指定の範囲の設定、計数または置換の機構などが必要である。これらの設定を含めて、文字列検査は一意名-1のデータ項目の左端の文字位置から開始され、左から右へ、右端の文字位置に達するまで進められる。この文字列検査の進め方には、字類による違いはない。具体的には、下記の一般規則11、12、13に説明する。

  3. INSPECT文の中で使用するデータ項目の一意名-1、一意名-3、一意名-4、一意名-5、一意名-6、一意名-7の内容は、下記のように扱われる。

    1. 一意名-1、一意名-3、一意名-4、一意名-5、一意名-6、一意名-7のどれかが英数字と記述されているならば、これらの各一意名の内容は文字列として扱われる。

    2. 一意名-1、一意名-3、一意名-4、一意名-5、一意名-6、一意名-7のどれかが英数字編集か数字編集か符号なし数字項目と記述されているならば、これらの各一意名は英数字に再定義されているように扱われる。 (一般規則3aを参照。)INSPECT文は、再定義されたデータ項目を参照するように書かれる。

    3. 一意名-1、一意名-3、一意名-4、一意名-5、一意名-6、一意名-7のどれかが符号付き数字と記述されているならば、データ項目は符号部分を除いたその符号付き数字項目と長さの等しい符号なし数字項目に転記されたように扱われる。そして、その結果に対して上記の一般規則3bが適用される。(手続き部 - MERGE - OPENの章のMOVE(転記)文節を参照。)

  4. 一般規則6から19において、定数-1、定数-2、定数-3、定数-4、定数-5に関する規則は、それぞれ、一意名-3、一意名-4、一意名-5、一意名-6、一意名-7のデータ項目の内容にも同様に当てはまる。

  5. 一意名の中に添字付きのもの

    または関数一意名

    があると、その添字

    または関数一意名

    は、INSPECT文の実行の最初に1回だけ評価される。

形式 1
  1. 一意名-1は、送出し側データ項目である。

  2. 必要語のALLとLEADINGは、後続の各定数-1にかかる形容詞である。その効力の範囲は、次の形容詞が出てくるまでである。

  3. 一意名-2のデータ項目の内容は、INSPECT文を実行することによって初期化されることはない。

  4. 計数に関する規則は、下記のとおり。

    1. ALL指定を書くと、一意名-1の中に定数-1が出現する回数が一意名-2に加えられる。

    2. LEADING指定を書くと、一意名-1の中に定数-1が最初に出現して以降連続して出現する回数が一意名-2に加えられる。ただし、一意名-1の中に定数-1が最初に出現する場所は、定数-1が比較の対象となる最初の比較周期が始まる点とする。

    3. CHARACTERS指定を書くと、一意名-1の中にその文字が出現する回数が一意名-2に加えられる。その数え方は書き方1 および2の一般規則12eに従う。

  5. 一意名-1、一意名-3、一意名-4のどれかが一意名-2と同じ記憶領域を占めると、INSPECT文の実行結果はどうなるかわからない。たとえそれらのデータ項目が同じデータ記述項に記述されたものであっても、そのことは変わらない。(手続き部の章の作用対象の重なり節を参照。)

形式 1 および 2
  1. 一意名-1のデータ項目の内容を文字列検査する間、その中に定数-1が出現するたびに、計数(形式 1 の場合)または定数-3による置換(形式 2 の場合)が行われる。

  2. 計数または置換するために定数-1の出現を調べる比較は、下記のように行われる。

    1. TALLYING指定またはREPLACING指定の作用対象は、INSPECT文中に書かれた順に左から右に取り上げられる。一意名-1のデータ項目の左端の文字位置から開始して、最初の定数-1が、一意名-1中の等しい文字数と比較される。 両者を1文字ずつ比較した結果が等しく、さらに下記の条件のどれかを満たす場合、定数-1と一意名-1中の該当部分とは等しいと判定される。

      1. LEADING指定もFIRST指定も書かれていない。

      2. 定数-1に形容詞LEADINGがかかっている場合、一般規則9および15に照らして、定数-1は先頭に現れている。

      3. 定数-1に形容詞FIRSTがかかっている場合、一般規則9に照らして、定数-1は最初に現れている。

    2. 最初の定数-1が一意名-1中の比較対象部分と一致しないと、後続の定数-1が存在すれば、そのそれぞれについて比較が繰り返される。この比較は、両者が一致するか、後続の定数-1がなくなるまで続けられる。後続の定数-1がない場合には、一意名-1のデータ項目の文字位置のうちで、前回の比較周期で取り上げられた部分のすぐ右隣の部分が、次回の比較周期での比較対象部分として取り上げられる。そして、最初の定数-1との比較が繰り返される。

    3. 比較結果が一致すると、一般規則9と15に説明してあるように、計数と置換のどちらか一方または両方が行われる。すると今度は、一意名-1のデータ項目中の現在比較の対象となった部分の右端の文字位置のすぐ右隣の部分が、次回の比較周期での比較対象部分として取り上げられる。そして、最初の定数-1との比較が繰り返される。

    4. この比較処理は、一意名-1のデータ項目中の右端の文字位置が比較の対象として取り上げられるか、または比較部分の左端の文字位置とみなされるまで続けられる。この状態に達すると、文字列検査は終了する。

    5. CHARACTERS指定を書くと、定数-1に文字を1つ暗黙に指定したものとして、上記の12aから12dに記述した比較処理が行われる。ただし、一意名-1のデータ項目の内容との比較は実際には行われない。この場合、暗黙の定数-1は現在の比較周期において、一意名-1のデータ項目の内容の比較対象部分の左端文字位置とつねに一致するものとみなされる。

  3. 一般規則12に定義した比較処理は、BEFORE指定およびAFTER指定の影響を受ける。その様子は下記のとおり。

    1. BEFORE指定もAFTER指定も書かないと、定数-1またはCHARACTERS指定の暗黙の作用対象が一意名-1と比較される開始点は、一意名-1の左端の文字位置からとなる。

    2. BEFORE指定を書くと、定数-1またはCHARACTERS指定の暗黙の作用対象と比較される一意名-1のデータ項目の内容の範囲は、その左端の文字位置から定数-2が最初に出現するまで(定数-2を含まない)となる。

      定数-2が最初に出現する位置は、一般規則12に記述した比較処理の最初の周期が始まる前に判定される。どれかの比較周期において、定数-1またはCHARACTERS指定の暗黙の作用対象が比較の対象とならない場合は、一意名-1のデータ項目の内容と一致しないものとみなされる。一意名-1のデータ項目の中に定数-2が出てこなかった場合は、定数-1またはCHARACTERS指定の暗黙の作用対象は、BEFORE指定がなかったのと同様に比較処理の対象とされる。

    3. AFTER指定を書くと、定数-1またはCHARACTERS指定の暗黙の作用対象と比較される一意名-1のデータ項目の内容の範囲は、最初に出現する定数-2の右端のすぐ右の文字位置から末尾までとなる。

      定数-2が最初に出現する位置は、一般規則12に記述した比較処理の最初の周期が始まる前に判定される。どれかの比較周期において、定数-1またはCHARACTERS指定の暗黙の作用対象が比較の対象とならない場合は、一意名-1のデータ項目の内容と一致しないものとみなされる。一意名-2のデータ項目の中に定数-2が出てこなかった場合は、定数-1またはCHARACTERS指定の暗黙の作用対象は、まったく比較処理の対象とならない。

形式 2
  1. 必要語のALLとLEADINGとFIRSTは、後続の各BY指定にかかる形容詞である。その効力の範囲は、次の形容詞が出てくるまでである。

  2. 置換に関する規則は、下記のとおり。

    1. CHARACTERS指定を書くと、一意名-1のデータ項目の中で書き方1と2の一般規則12eに照らして一致する各文字が、定数-3で置き換えられる。

    2. ALL指定を書くと、一意名-1のデータ項目の中の定数-1に一致する各文字が、定数-3で置き換えられる。

    3. LEADING指定を書くと、一意名-1のデータ項目の中の定数-1に一致する最初以降の連続する各文字が、定数-3で置き換えられる。ただし、一意名-1の中に定数-1が最初に出現する場所は、定数-1が比較の対象となる最初の比較周期が始まる点とする。

    4. FIRST指定を書くと、一意名-1のデータ項目の中の定数-1に一致する左端の文字が、定数-3で置き換えられる。

  3. 一意名-3、一意名-4、一意名-5のどれかが一意名-1と同じ記憶領域を占めると、INSPECT文の実行結果はどうなるかわからない。たとえそれらのデータ項目が同じデータ記述項に記述されたものであっても、そのことは変わらない。(手続き部の章の作用対象の重なり節を参照。)

形式 3
  1. 形式 3 のINSPECT文は、同じ一意名-1に対して、形式 1 のTALLYING指定と形式 2 のREPLACING指定を2つ続けて書いたものとして解釈され実行される。形式 1 のINSPECT文の比較照合と計数に関する一般規則、および形式 2 のINSPECT文の比較照合と置換に関する一般規則が、形式 3 にも当てはまる。

形式 4
  1. 形式 4 のINSPECT文は、定数-4に含まれる各文字に関して1つずつ、同じ一意名-1に対してALL指定をした、形式 2 のINSPECT文を続けて書いたものとして解釈され実行される。これらのALL指定をした個々の仮想のINSPECT文は、定数-1の代わりに定数-4を、定数-3の代わりに定数-5を用いたものと解釈される。定数-4の文字と定数-5の文字との対応関係は、データ項目内の順序位置によって付けられる。

  2. 一意名-4、一意名-6、一意名-7のどれかが一意名-1と同じ記憶領域を占めると、INSPECT文の実行結果はどうなるかわからない。たとえそれらのデータ項目が同じデータ記述項に記述されたものであっても、そのことは変わらない。

13.13 INVOKE(メソッド呼出し)文

INVOKE文はメソッドを呼び出す働きをする。

一般形式

構文規則

  1. オブジェクト一意名-1はオブジェクト参照またはクラス名でなければならない。

  2. 一意名-1は 4 バイトのデータ項目でなければならない。

  3. 定数-1は英数字の定数でなければならない。

  4. 定数-1も定数-2も表意定数であってはならない。

  5. オブジェクト一意名-1が一般的オブジェクト参照を参照する場合、BY CONTENT指定もBY VALUE指定も書いてはならない。また、BY REFERENCE指定を書かなくとも、暗黙的に指定されているものとみなされる。

    BY CONTENT指定およびBY VALUE指定を書ける。

  6. 一意名-2は英数字のデータ項目として定義しなければならない。

  7. 一意名-2を指定した場合、オブジェクト一意名-1は一般的オブジェクト参照でなければならない。

    一般的オブジェクト参照であるために、オブジェクト一意名-1は必須ではない。

  8. 一意名-1によって参照されるデータ項目が一般的オブジェクト参照ではない場合、手続き部の章のパラメータおよび返却する項目節に指定されている規則が適用される。

  9. 一意名-1によって参照されるデータ項目が一般的オブジェクト参照ではなく、引数にBY CONTENT指定またはBY REFERENCE指定がある場合、手続き部の見出し中の対応する仮パラメータにBY REFERENCE指定がなければならない。

  10. 一意名-3は、ファイル節、作業場所節、

    オブジェクト記憶節、

    局所記憶節、連絡節 のいずれかに定義されているデータ項目を参照しなければならない。

  11. 一意名-4、一意名-5、一意名-6、一意名-7、一意名-8の いずれも、関数一意名であってはならない。

  12. 引数にBY VALUEを指定した場合、手続き部の見出し中の対応する仮パラメータにBY VALUE指定がなければならない。

  13. 整数-1は符合付きでもゼロでもよい。

  14. GIVINGとRETURNINGは同等である。

  15. 一意名-9はサイズが 8 バイト以内のデータ項目であり、ファイル節、作業場所節、

    オブジェクト記憶節、

    局所記憶節、連絡節 のいずれかに定義されていなければならない。

  16. 一意名-10は連絡節にレベル番号が01または77のデータ項目として定義されていなければならない。

  17. 一意名-3は送出し側と受取り側の両方の作用対象である。

  18. 一意名-1、一意名-2、一意名-4、一意名-5、一意名-6、一意名-7、一意名-8および、算術式-1で指定されたあらゆる一意名-1は、送出し側の作用対象である。

  19. 一意名-9と一意名-10は受取り側の作用対象である。

  20. OMITTED指定が含まれる場合は、手続き部見出しの対応する仮パラメータにつして、OPTIONAL指定が含まれなければならない。

一般規則

  1. INVOKE文を実行するプログラムまたはメソッドのインスタンスは起動力のあるランタイム要素である。

  2. オブジェクト一意名-1

    または一意名-1

    はオブジェクト・インスタンスを指す。オブジェクト一意名-1をクラス名として指定した場合は、そのクラス名のファクトリ・オブジェクトを指す。定数-1、または一意名-2によって参照されるデータ項目の内容は、そのオブジェクト・インスタンスに対して作用するそのオブジェクトのメソッドを指す。

    1. 呼び出す対象のメソッドがCOBOLのメソッドである場合、定数-1、または一意名-2によって参照されるデータ項目の内容は、呼出し対象のメソッドのメソッド名段落に指定されている名前を指す。

      オブジェクト・インスタンスが一般的オブジェクト参照により定義されている場合、呼び出されたメソッド中の仮パラメータと返却する項目のいずれも、ANY LENGTH句を使用して記述されてはならない。

    2. 呼び出す対象のメソッドがCOBOLのメソッドではない場合、メソッド名を構成する規則は関係するドメインによって異なる。

  3. AS指定を書くと、COBOLのデータ項目に対してメソッドを呼び出すことができる。テンプレート-1を指定すると、クラス・テンプレートとして使用される。テンプレートを作成することは、クラス・ライブラリ中のオブジェクトによって提供される機能である。(詳細については、使用しているCOBOLシステムのマニュアルを参照。)

  4. INVOKE文を実行すると、指定したメソッドが実行可能になり、呼び出されたメソッドに制御が移される。呼び出されたメソッドがCOBOLのメソッドである場合、手続き部の章の手続き部の見出し節に記述されている一般規則に従って、メソッドが実行される。そうでない場合には、メソッドが記述されている言語の作成者によって定義されている規則に従って、メソッドが実行される。メソッドから制御が戻されると、INVOKE文の最後に制御が移される。

  5. 呼び出されたメソッドを実行できるようにするさいに、その所在が把握されるまで、実行単位にはそれがCOBOLのメソッドであるか否かは分からない。メソッド名の形式からCOBOLのメソッドであるか否かを判定することはできない。

  6. メソッドの呼出しまたはメソッドの終了のプロセスによって、何らかの外部ファイル結合子に関連するファイルの状態または位置づけが変更されることはない。

  7. この処理系では、引数と連絡節内のデータ項目の間の同期を維持することはない。それは利用者の責任である。

    注: COBOL言語では、データ項目の番地の桁寄せに制約はない。他方、COBOL以外の言語では、通常は番地について前提があり、桁寄せされていないデータ項目が参照されると何らかのエラーを起こす。桁寄せは下記の措置のうちのいくつかを用いて実現される。

    • 集団項目に無名項目を追加する

    • ALIGNコンパイラ指令を使用するとともに、USING指定中の作用対象を01レベルまたは77レベルのデータ項目にする

    • SYNCHRONIZED句とIBMCOMPコンパイラ指令を併用する

    INVOKE文にRETURNING指定を書いた場合、COBOL以外のメソッドは適切な形式の結果を返さなければならない。

  8. INVOKE文のUSNIG指定の引数と呼び出されるメソッドの手続き部の見出しのUSING指定の中の対応する仮パラメータの順序によって、引数と仮パラメータの対応関係が決まる。この対応は位置で決まるのであって、名前が等しいことによるのではない。最初の引数が最初の仮パラメータに対応し、次にそれらの2番目同士が対応する、といったぐあいである。

    パラメータが指標名の場合は、そのような対応関係は確立されない。呼び出されたメソッドと呼び出すランタイム要素の指標名は常に別々の指標を参照する。

    起動されたランタイム要素上のUSING指定の効果については、手続き部の章の手続き部の見出し節の一般規則に記述されている。

  9. 単一の一意名または定数から成る引数は、算術式ではなく、一意名または定数と見なされる。

  10. INVOKE文のUSNIG指定の中で参照されるパラメータの値は、INVOKE文が実行されたときに、呼び出されるメソッドで利用できるようになる。

  11. BY CONTENT、BY REFERENCE、BY VALUEの各指定はその後ろに続くパラメータに効力を及ぼすが、別のBY CONTENT、BY REFERENCEまたはBY VALUEの指定が出てきたところでその効力は停止する。

    最初のパラメータの前にBY CONTENT、BY REFERENCE、BY VALUEのどの指定もないと、BY REFERENCE指定があるものとみなされる。

  12. BY REFERENCE ADDRESS OF指定が明示的または暗黙的に使用されている場合、USAGE POINTERを用いてデータ項目が宣言され、「SET データ項目 TO ADDRESS OF 一意名-4」文によって取得された値がBY REFERENCEによってそのデータ項目に渡されたかのように、メソッドは動作する。

  13. パラメータに対してBY CONTENT指定を明示的または暗黙的に使用すると、呼び出されたメソッドは、INVOKE文のUSING指定に従ってこのパラメータの値を変更することができない。ただし、呼び出されたメソッドの手続き部見出し中の対応するデータ名が参照するデータ項目の値を変更することはできる。INVOKE文のBY CONTENT指定中の各パラメータのデータ記述は、手続き部見出しのUSING指定中の対応するパラメータのデータ記述と同じでなければならない。つまり、変換、拡張、および切り詰めはまったく行われない。

    パラメータに対してBY CONTENT指定を明示的または暗黙的に使用している場合、実行プログラムは、追加データ項目が宣言され、BY REFERENCE指定中で使用されたかのように動作する。一意名-5 を指定した場合は、追加項目の暗黙的なデータ記述とその内容が、一意名-5のものと同じとなる。定数-3を指定した場合は、追加項目の暗黙的なデータ記述が、定数-3 と同じサイズで、内容が定数-3の値に設定された英数字データ項目と同じとなる。LENGTH OF 一意名-6 を指定した場合は、追加項目のデータ記述が、PIC S9(n) USAGE COMP-5と同じとなる。ここで、 n の値は、9 以上で、COBOLシステムでのデータ項目の最大長を保持できるサイズのデータ項目を定義するものとする。追加データ項目の内容は、一意名-6に割り当てられた記憶用バイト数に設定される。

  14. パラメータに対してBY VALUE指定を明示的または暗黙的に使用している場合、呼び出されたメソッドは、INVOKE文のUSING指定に従ってこのパラメータの値を変更することができない。ただし、呼び出されたメソッドの手続き部見出し中の対応するデータ名が参照するデータ項目の値を変更することはできる。概念としては、メソッドの動作により、追加データ項目がシステム領域(典型的な例はスタック)内で宣言され、これを使用してCOBOL以外の言語がパラメータを渡すことができるようになる。さらに、この追加データ項目が、呼び出されたメソッド中のデータ項目と同じ記憶領域を占める。

    一意名-7 が指定され、BINARY、COMP-4、COMP-5、またはCOMP-Xである場合、追加データ項目のデータ記述は一意名-7のものと同じとなる。ただし、その用途はCOMP-5である。追加データ項目の内容は、COMP-5 で表示される 一意名-7の内容と同じとする。この変換と形式により、COBOL以外のプログラムの呼出しが容易となる。

    これ以外の場合で一意名-7が指定された場合は、追加データ項目の暗黙的なデータ記述および内容は、一意名-7のものと同じとなる。

    整数-1 を指定すると、追加データ項目のデータ記述は、整数-2が指定されていれば、その値で示された記憶用バイト数を占める符号付き数字項目 USAGE COMP-5と同じとなる。整数-2が指定されていない場合は、システム領域のサイズ(典型的な例は、システム上のPOINTERのサイズ)と同じとなる。

    「LENGTH OF 一意名-8」を指定すると、追加データ項目のデータ記述は、PIC S9(n) USAGE COMP-5と同じとなる。ここで n の値は 9 以上で、COBOLシステムでのデータ項目の最大長を保持できるサイズのデータ項目を定義するものとする。追加データ項目の内容は、一意名-8に割り当てられた記憶用バイト数に設定される。

    呼び出されるメソッドがCOBOLメソッドの場合、INVOKE文のBY VALUE指定中の各パラメータには、対応するパラメータが、手続き部見出しのUSING指定中で宣言されなければならない。このパラメータにも、明示的または暗黙的にBY VALUE指定を使用しているものとする。

    上記のようにINVOKE文の結果として生成された追加データ項目と、呼び出されるメソッド中のこの対応するパラメータの関係は、以下のようになる。

    呼び出されるメソッドがCOBOLメソッドでない場合、 BY VALUE指定を使用しなければならない場合の詳細は、関連するドメインにより異なる。

  15. 一意名-4が連絡節にあってそのレベル番号か01または77以外であるか、または作業場所節にある場合、そのデータ項目がBY CONTENTによって渡され、一意名-4の番地を呼び出されたメソッドによっては変更できないことに等しい。

  16. 「BY REFERENCE 定数-2」を明示的または暗黙的に指定すると、メソッドは定数-2を定数-3のために記述されたものとして処理する。

  17. 「LENGTH OF 一意名-6」を指定すると、引数のデータ記述は、形式がPIC S9 (9) USAGE BINARYで内容が一意名-6に割り当てられた記憶領域のバイト数に設定されたものと等しくなる。

  18. 整数-1を指定すると、引数の暗黙的なデータ記述は、符合付き数字項目でUSAGE COMP-5に等しくなる。その記憶領域内でのバイト数は、整数-2の指定があればその値によって示され、指定がなければ 4 バイトとなる。

  19. 「LENGTH OF 一意名-8」を指定すると、引数のデータ記述は、形式がPIC S9 (9) USAGE BINARYで内容が一意名-8に割り当てられた記憶領域のバイト数に設定されたものと等しくなる。

  20. 一意名-10を指定すると、呼び出されたメソッドは、明示的または暗黙的にUSAGE POINTERと指定された値を返す。メソッドの結果は、SET文の規則に従って、一意名-10に代入される。

  21. 呼び出されるメソッド中にINVOKE文が含まれていてもよい。呼び出されるメソッドは、呼び出すメソッドを直接的または間接的に呼び出すINVOKE文を実行できる。

  22. OMITTED指定が含まれるか、または後続の引数が省略されている場合、省略された引数の条件は、呼び出されたメソッド中で、そのパラメータについて真となる。

  23. 省略された引数の条件が真であるパラメータが、呼び出されたメソッド中で参照されている場合、RTSエラーメッセージ 203 が返される。ただし、引数として参照されている場合、および省略された引数の条件中で参照される場合を除く。


Copyright © 2002 Micro Focus International Limited. All rights reserved.
本書、ならびに使用されている固有の商標および商品名は国際法によって保護されています。


Previous 手続き部 - ACCEPT - DIVIDE 手続き部 - MERGE - OPEN Next