Index
COPY

【用途】
別ソースプログラムのコピー。命令語パターンや、ファイルデザイン(レコード定義)を共用して別プログラムソースで予め保存しておき、コピー命令で利用する。試験に出題されることはまずありませんが、実務上では頻繁に利用します。翻訳時には自動展開されます。

【使用例】
・共用レコード(顧客マスタとします)のレコード定義原文を利用する場合
FD MST-FILE.
COPY KOKYAKUM.

※顧客マスタレコード文(別プログラムソース)

01 MST-REC. 03 MST-KEY PIC X(01). 03 MST-NAME PIC N(20). 03 MST-JUSYO PIC N(30).

COPY文


機能

COPY(複写)文は,COBOL原始プログラムの中へ,原文を複写する.


一般形式

【書き方1】

【書き方2】

【書き方3】


構文規則

(1)

翻訳時に二つ以上のCOBOL登録集を使用するとき,原文名-1はその原文を含むCOBOL登録集の登録集名で修飾しなければならない.
一つのCOBOL登録集内では,各原文名は一意でなければならない.

(2)

COPY文は,空白の後に続け,分離符の終止符でとめる.

(3)

仮原文-1は,一つ以上の原文語を含まなければならない.

(4)

仮原文-2は,一つ以上の原文語を含んでもよいし,何も含まなくてもよい.

(5)

仮原文-1と仮原文-2中の文字列は,正書法に従い,2行以上に渡って続けることができる.

(6)

語-1,語-2,語-3,語-4及び語-5は,“COPY”以外のCOBOLの一つの語ならば何でもよい.

(7)

COPY文は,原始プログラム中で文字列又は右側の引用符以外の分離符が書けるところなら,どこに書いてもよい.ただし,COPY文の中にCOPY文を書いてはならない.

(8)

仮原文及び登録集原文中の原文語に対して,1〜324文字の長さが指定できる.

(9)

仮原文-1は,分離符のコンマ又は分離符のセミコロンだけから成っていてはならない.

(10)

語COPYを,注記項又は注記項の書けるところに書くと,注記項の一部とみなす.
(注記)文字定数,注記項又は注記行の中にCOPY文を書いた場合,そのCOPY文は,それらを構成する文字の列の一部とみなされる.

(11)

書き方2のCOPY文で複写する原文名-1は,次の条件を満たしていなければならない.そうでない場合には,COPY文の結果は規定されない.
(a)

構文的に正しいデータ記述項だけを含む.

(b)

利用者語は,各データ記述項のレベル番号の直後及びそれに続く,REDEFINES句にだけ現れる.ただし,レベル番号の直後は,FILLERでもよい.また,REDEFINES句はなくてもよい.

(c)

すべての利用者語は,英数字又は日本語文字のいずれかだけで構成される.すなわち,原文名-1の中に,英数字の利用者語と日本語文字の利用者語が混在することはない.

(12)

書き方2のCOPY文において,原文名-1中の利用者語が英数字で構成されているならば,語-3は英数字でなければならない.原文名-1の中の利用者語が日本語文字で構成されているならば,語-3は日本語文字でなければならない.

(13)

書き方2のCOPY文において,JOINING指定とREPLACING指定を同時に記述してはならない.

(14)

このコンパイラでは,登録集名-2はXFDLIB又はXMDLIBでなければならない.


一般規則

(1)

COPY文を含む原始プログラムの翻訳は,論理的には,すべてのCOPY文を処理してから,原始プログラムの処理を行うことと同じとする.

(2)

COPY文を処理することにより,予約語COPYに始まり終止符で終わるCOPY文全体を原文名-1に対する登録集原文で論理的に置き換えて,原始プログラム中に複写する.

(3)

REPLACING(置換え)指定及びJOINING(結合)指定を省略すると,登録集原文はそのまま複写される.
REPLACING指定を書くと,登録集原文を複写し,仮原文-1,一意名-1,定数-1,語-1又は語-4に一致するものがあれば,それに対応する仮原文-2,一意名-2,定数-2,語-2又は語-5によって置き換える.

(4)

登録集原文との比較では,一意名-1,定数-1又は語-1は,それぞれ一意名-1,定数-1又は語-1だけからなる仮原文とみなす.

(5)

書き方1のCOPY文において,REPLACING指定による原文の置換えとそのための比較は,次の規則に従う.
(a)

分離符のコンマ又は分離符のセミコロンでない最左端の登録集原文語が,比較のために用いる最初の原文語とする. この原文語の前にある原文語又は空白は,原始プログラム中に複写する.REPLACING指定の予約語BYの前にある作用対象全体は,それと同数の連続した登録集原文語と比較される.その比較は,比較のための最初の原文語とREPLACING指定の最初の仮原文-1,一意名-1,語-1又は定数-1とから開始する.

(b)

仮原文-1,一意名-1,語-1又は定数-1は,それらを形成する原文語の並び順が登録集原文語の並び順と文字単位で等しいときに限り,その登録集原文と一致する.この比較では,仮原文-1又は登録集原文中の分離符のコンマ,分離符のセミコロン又は分離符の空白を,それぞれ一つの空白とみなす.一つ以上の分離符の空白は,一つの空白とみなす.

(c)

一致が起こらないとき,REPLACING指定に次の仮原文-1,一意名-1,語-1又は定数-1があればそれと比較し,一致するまで,又はREPLACING指定の作用対象が尽きるまでこの比較を繰り返す.

(d)

すべてのREPLACING指定の作用対象と比較し,どれとも一致しなかったときは,最左端の登録集原文語を,原始プログラム中に複写する.そして,次の登録集原文語を,最左端の登録集原文語とみなし,最初のREPLACING指定に書いた仮原文-1,一意名-1,語-1又は定数-1から再び比較を繰り返す.

(e)

仮原文-1,一意名-1,語-1又は定数-1と登録集原文が一致したときは,対応する仮原文-2,一意名-2,語-2又は定数-2を原始プログラム中に置く.そして,一致した原文語のうちの最右端の原文語のすぐあとに続く登録集原文語を最左端の原文語とみなし,REPLACING指定中に書かれた最初の仮原文-1,一意名-1,語-1又は定数-1から再び比較を繰り返す.

(f)

この比較操作は,登録集原文中の最右端の原文語が,一致するまで,又は最左端の登録集原文語とみなされて比較が完了するまで続けられる.

(6)

登録集原文及び仮原文-1中に現れる注記行や空白行は,登録集原文の比較において無視される.また,もしあれば登録集原文及び仮原文-1中の一連の原文語は,正書法の規則に従う.仮原文-2中に現れる注記行や空白行は,仮原文-2が原文を置き換えた結果として原始プログラム中に置かれるときはいつでも,結果のプログラムにそのまま複写される.登録集原文中に現れる注記行や空白行は,結果のプログラムにそのまま複写される.ただし,注記行や空白行が仮原文-1と一致する一連の原文語中に現れるとき,注記行や空白行は複写されない.

(7)

デバッグ行は,登録集原文及び仮原文中に書ける.デバッグ行中の原文語を比較するときには,“D”が標識領域に書かれていないものとみなす.前の仮原文区切り記号の後でかつ対応する後の仮原文区切り記号の前の原始プログラムにデバッグ行が始まるならば,デバッグ行は,仮原文中に指定されたものとする.
ただし,このコンパイラでは,WITH DEBUGGING MODE句が指定されていない場合には,デバッグ行中の原文語は比較の対象としない.

(8)

登録集原文が文法規則に従っているかどうかは,原文だけでは決定できない.COPY文及びREPLACE文を除いて,COBOL原始プログラム全体が文法規則に従っているかどうかは,すべてのCOPY文及びREPLACE文が完全に処理されるまで決定できない.

(9)

登録集から置き換えずに複写する各原文語は,その登録集中の行中に置かれていた領域と等しい結果のプログラム中の行中での領域から始まるように複写される.しかしながら,登録集から複写される原文語がA領域から始まり,更に同じ行のA領域から始まる他の原文語が続くとき,前の原文語がより大きな長さの原文によって置き換えがなされると,後の原文語がA領域から始めることができなければB領域から始める.結果のプログラムに置かれる仮原文-2中の各原文語は,仮原文-2中に現れたのと同じ結果のプログラムの領域から始める.結果のプログラムに置かれる各一意名-2,定数-2,語-2及び語-5は,それらと一致に関係した最左端の登録集原文語がその一意名-2,定数-2,語-2及び語-5によって置換えられなかったときに複写されたはずの結果のプログラムの領域から始める.
登録集原文は,COBOLの正書法の規則に従わなければならない.COPY文の結果として原始プログラム中に行が追加されると,追加されるその原文語が登録集原文語中のデバッグ行上に現れるならば,各原文語はデバッグ行に現れる.置き換えられる最初の登録集の原文語をデバッグ行に記述すると,BY指定で記述した原文語は,デバッグ行に現れる.前記の場合を除いて,仮原文-2中のデバッグ行に記述した原文語だけが,結果のプログラム中のデバッグ行に現れる.定数-2,仮原文-2又は登録集原文として記述された定数が,結果のプログラム中の他の行に続けることなく,一つの行に収容することができなく,かつその定数がデバッグ行に置かれることがなければ,定数の残りを含む後の行が追加される.

(10)

翻訳のために,置換え後の原文語は,正書法の規則に従って原始プログラム中に置く.仮原文-2の原文語を原始プログラムに複写するとき,空白は,原文語間にすでに空白(原始行の間の想定した空白を含む)が存在する場合にだけ追加される.

(11)

COPY文の処理の結果として,原始プログラム中に行が追加されると,追加される行の標識領域は,置き換えられる原文が始まる行と同じ文字を含む.ただし,その行が標識領域にハイフンを含むならば,追加される行の標識領域は,空白を含む.置き換えられる原文語が,デバッグ行でない追加される行に続けられる場合,ハイフンが追加される行の標識領域に置かれる.

(12)

原文名及び登録集名は,プログラム名の構成規則に従って決定された後に,名前を識別するのに使われる.

(13)

書き方2のCOPY文において,JOINING指定による原文の置換えは,次の規則に従う.
(a)

登録集原文語のうち,データ記述項のレベル番号の直後のデータ名及びREDEFINES句のデータ名を除き,すべての原文語を原始プログラム中に複写する.

(b)

データ記述項のレベル番号の直後のデータ名及びREDEFINES句のデータ名は,次のような文字列と置き換えて原始プログラム中に複写する.
(i)

登録集原文語の利用者語及び語-3が共に英数字で構成されている場合.
語-3に対してPREFIXが指定されているならば,語-3にハイフンを続け,更にその登録集原文語をつなげた文字列.
語-3に対してSUFFIXが指定されているならば,その登録集原文語にハイフンを続け,更に語-3をつなげた文字列.

(ii)

登録集原文語の利用者語及び語-3が共に日本語文字で構成されている場合.
語-3に対してPREFIXが指定されているならば,語-3にJIS非漢字の負符号を続け,更にその登録集原文語をつなげた文字列.
語-3に対してSUFFIXが指定されているならば,その登録集原文語にJIS非漢字の負符号を続け,更に語-3をつなげた文字列.

(14)

書き方2のCOPY文によって登録集原文語が置き換えられる場合,置き換えられる登録集原文及び置き換える文字列をそれぞれ語-1及び語-2として指定した書き方1のCOPY文を実行したものとして,一般規則(9),(10)及び(11)を適用する.

(15)

登録集名-2が,XFDLIB又はXMDLIBであり,かつその登録集がプログラムの外部でオぺレーティングシステムに対して定義されていない(すなわち,その登録集が割り当てられていない)場合,原文名-1はファイル定義体又はフォーマット定義体(標準メッセージ定義体)として扱われる.

(16)

REPLACING指定又はJOINING指定を持つCOPY文からは,いかなるCOPY文も生成されてはならない.

(17)

SQL文を複写する場合,書き方3のCOPY文を使わなければならない.


Index