12.3.2 暗黙的影響2項関係
実行文の影響2項関係のうち,暗黙的な作用対象に対する影響2項関係である暗黙的影響2項関係の説明です。
別名の暗黙的影響2項関係
日立のCOBOL言語仕様で,記憶領域が同じで名前が異なるデータ項目(別名のデータ項目)には,次のものがあります。
[別名1]被再定義項目と再定義項目(REDEFINES句)※1
[別名2]被再命名項目と再命名項目(RENAMES句)※2
[別名3]集団項目と従属項目
[別名4]反復データ項目
[別名5]プログラム間で使用される外部データ項目(EXTERNAL句)
[別名6]ADDRESSED句指定のデータ項目とアドレス名にアドレスが格納されたデータ項目
- 注※1
-
被再定義項目が集団項目の場合,その従属項目も再定義項目とは別名関係です。さらに,再定義項目が集団項目なら領域を共有するその従属項目(集団項目または基本項目)とも別名関係です。
また,再定義項目が集団項目の場合,その従属項目も被再定義項目とは別名関係です。さらに,被再定義項目が集団項目なら領域を共有するその従属項目(集団項目または基本項目)とも別名関係です。
- 例)
01 A. 02 B. 03 C. 04 D PIC X. 03 E PIC X(2). 02 F REDEFINES B. 03 G PIC X(2). 03 H PIC X.
被再定義項目(B)と再定義項目(F)の関係に加えて,次の関係も別名関係です。
CとF CとG DとF DとG EとF EとG EとH
再定義項目(F)と被再定義項目(B)の関係に加えて,次の関係も別名関係です。
GとB(GとC)(GとD)(GとE)HとB(HとE)
()の部分は上記と重複を示します。
- 注※2
-
被再命名項目の上位集団項目も,再命名項目と別名関係です。また,被再命名項目が集団項目の場合,その従属項目も再命名項目と別名関係です。
これらのデータ項目の場合,一方のデータ項目が影響を受けると,そのデータ項目の別名のデータ項目も同じ影響を受けます。
被再定義項目と再定義項目の暗黙的影響2項関係の例を次の図に示します。この図では,次に示すソースプログラムの影響波及の連鎖(影響2項関係の連鎖)を説明しています。
01 A PIC X(3) VALUE 'ABC'. …[1] 01 B PIC X(3). 01 C REDEFINES B PIC X(3). 01 D PIC X(3). 01 E PIC X(3). MOVE A TO B. …[2] MOVE B TO D. …[3] MOVE C TO E. …[4]
実行文[2]で被再定義項目Bがデータ項目Aから影響を受けた場合,同じ影響を再定義項目Cも受けます。そのため,明示的影響2項関係[2]だけでなく,点線矢印のような暗黙的影響2項関係(再定義項目Cは実行文[2]には記述されていません)も解析されないと,正しい影響範囲解析の結果となりません。
影響範囲を漏れなく解析するには,[別名1]〜[別名3]の暗黙的影響2項関係も必要です。データ影響波及分析では,別名に対する暗黙的影響2項関係も解析します。ソースファイルをわたる[別名4][別名5]については,ソースファイルの解析時に暗黙的影響2項関係を抽出できないため,特殊な実装方法となります。詳細については,「12.3.3 ソースファイルをわたった影響2項関係」を参照してください。
ただし,明示的影響2項関係,または暗黙転記の暗黙的影響2項関係で作用対象でない別名の暗黙的影響2項関係は,影響範囲を漏れなく解析するのに必要でないため,そのデータ項目は抽出対象となりません。この別名を未使用の影響波及データ項目といいます。
未使用の影響波及データ項目の例を次の図に示します。この図では,次に示すソースプログラムの影響波及の連鎖を説明しています。
01 A PIC X(3) VALUE "ABC". …[1] 01 B PIC X(3). 01 C REDEFINES B PIC X(3). 01 D PIC X(3). 01 E PIC X(3). 01 F REDEFINES B PIC X(3). MOVE A TO B. …[2] MOVE B TO D. …[3] MOVE C TO E. …[4]
データ項目Fは,データ項目Cと同様にデータ項目Bと別名関係にありますが,明示的な作用対象となる実行文や,暗黙転記の作用対象となる実行文がありません。このため,データ項目Aからの暗黙的影響2項関係は抽出されないで,未使用の影響波及データ項目となります。
なお,未使用の影響波及データ項目は,影響範囲解析の結果として影響波及データ項目一覧だけに表示されます。
暗黙転記の暗黙的影響2項関係
次の表に示す実行文では,環境部やデータ部で指定したデータ項目や特殊レジスタとの間の暗黙的な転記(実行文に明示的に指定された作用対象間の転記ではない転記)を実行するものがあります。
暗黙転記を実行文で展開する機能 |
暗黙転記を内部的に展開する実行文 |
---|---|
画面機能(SCREEN SECTION) |
ACCEPT,DISPLAY |
画面機能(WINDOW SECTION) |
ACCEPT,DISPLAY,ERASE,REPLY,SET |
画面機能(通信節) |
SEND,RECEIVE,TRANSCEIVE,DISABLE |
データコミュニケーション機能 |
SEND,RECEIVE,ENABLE,DISABLE |
データベースアクセス機能 |
埋め込みSQL文(EXEC SQL文,END-EXEC) |
報告書作成機能 |
INITIATE,GENERATE,SUPPRESS,TERMINATE |
入出力機能 |
OPEN,START,READ,WRITE,REWRITE,DELETE,CLOSE,UNLOCK |
整列併合機能 |
SORT,MERGE,RETURN,RELEASE |
上記の表の暗黙転記も,暗黙的影響2項関係を含んでいます。データ影響波及分析で暗黙的影響2項関係の抽出対象とする暗黙転記を次の表に示します。
項番 |
実行文 |
影響2項関係 |
|
---|---|---|---|
影響を与える作用対象 |
影響を受ける作用対象 |
||
1 |
PROCEDURE DIVISION |
データ記述項のVALUE句の定数 |
データ記述項のデータ項目 |
2 |
入出力文※1 |
ファイル名 |
ファイル記述項のFILE STATUS句のデータ項目 |
3 |
RETURNING指定のないCALL文 |
返却項目(RETURNING指定がない場合はRETURN-CODE特殊レジスタ) |
CALL文を含むプログラムのRETURN-CODE特殊レジスタ |
4 |
READ文 RETURN文 |
ファイル名 |
ファイル名に関連するレコード※2 |
ファイル名に関連するレコード※2 |
INTO指定に指定されたデータ項目 |
||
5 |
集団項目指定のINITIALIZE文 |
(REPLACING ALPHABETIC無) SPACES (REPLACING ALPHABETIC有) 定数/データ項目 |
英字の基本従属項目 |
(REPLACING ALPHANUMERIC無) SPACES (REPLACING ALPHANUMERIC有) 定数/データ項目 |
英数字の基本従属項目 |
||
(REPLACING ALPHANUMERIC-EDITED無) SPACES (REPLACING ALPHANUMERIC-EDITED有) 定数/データ項目 |
英数字編集の基本従属項目 |
||
(REPLACING BOOLEAN無) ZEROS (REPLACING BOOLEAN有) 定数/データ項目 |
ブールの基本従属項目 |
||
(REPLACING NATIONAL無) SPACES (REPLACING NATIONAL有) 定数/データ項目 |
日本語の基本従属項目 |
||
(REPLACING NATIONAL-EDITED無) SPACES (REPLACING NATIONAL-EDITED有) 定数/データ項目 |
日本語編集の基本従属項目 |
||
(REPLACING NUMERIC無) ZEROS (REPLACING NUMERIC有) 定数/データ項目 |
数字の基本従属項目 外部浮動小数点の基本従属項目 |
||
(REPLACING NUMERIC-EDITED無) ZEROS (REPLACING NUMERIC-EDITED有) 定数/データ項目 |
数字編集の基本従属項目 |
||
(REPLACING OBJECT-REFERENCE無) NULL (REPLACING OBJECT-REFERENCE有) 定数/データ項目 |
オブジェクト参照の基本従属項目 |
||
6 |
CORRESPONDING指定のMOVE文, ADD文,SUBTRACT文 |
送り出し集団項目の基本従属項目※3 |
受け取り集団項目の基本従属項目※3 |
7 |
条件名の構文のSET文 |
条件名 |
条件名の属す条件変数 |
- 注※1
-
CLOSE文,DELETE文,OPEN文,READ文,REWRITE文,START文,WRITE文を示します。
- 注※2
-
ファイルが複数のレコードを持つ場合は,レコードの数だけ影響2項関係を抽出します。
- 注※3
-
対応する基本従属項目の数分の影響2項関係を抽出します。
文で使用されている暗黙的影響2項関係の抽出の対象になった暗黙的なデータ項目の参照に対しては,そのデータ項目が影響波及元データ項目や影響波及先データ項目になった場合は,そのデータ項目の暗黙参照によって文が影響波及元コードや影響波及先コードとして扱われます。
(例)READ文のファイルのレコードは,影響2項関係の抽出の対象なので,そのレコードが影響波及元データ項目になった場合,READ文は影響波及元コードとして扱われます。
文で使用されている暗黙的影響2項関係の抽出の対象にならない暗黙的なデータ項目の参照に対しては,そのデータ項目が影響波及元データ項目や影響波及先データ項目になったとしても,そのデータ項目の暗黙参照によって文が影響波及元コードや影響波及先コードとして扱われることはありません。ただし,条件で現れた条件名による条件変数の暗黙参照は除きます。
(例)ファイル記述項のLINAGE句に書かれたデータ項目は,WRITE文で暗黙的に参照されますが,影響2項関係の抽出の対象になっていないため,そのデータ項目が影響波及先データ項目になったとしても,それによってWRITE文が影響波及先コードとして扱われることはありません。