翻訳指示文(compiler-directing statement)は、翻訳集団の処理を制御する。以下の翻訳指示機能が用意されている。
原始文操作(source text manipulation) は、原始利用者登録集(source user-library)から複写してくる原文を指定する機能を提供する。この原始利用者登録集は、通常、何らかの適切な原始文エディタ(source text editor)を使用して作成する。
また、原始プログラム中の原文を置き換える機能を提供する。
COBOLライブラリ(library)は、COBOLシステムで利用するための原始文を含むファイルから構成されている。COPY(複写)文の働きは、原始プログラム中に原文を挿入して、COBOLシステムがそれを原始プログラムの一部として扱うようにすることである。登録集原文(library text)中の定数や一意名や語や語の集団を指定して、複写処理中にそれらが出てくると、すべて別の原文に置き換えることができる。 原始文操作では、実行用プログラムを作成するときに、複数のCOBOL登録集を使えるようにすることもできる。
REPLACE(置換)文の働きは、原始文中に現れる原文を新しい原文に置き換えて、COBOLシステムがそれを原始文の一部として扱うようにすることである。
機能
COPY(複写)文は、COBOL翻訳集団中に原文を組み入れる。
例
- ANSI'68またはLANGLVL(1) の動作を実現するためのOLDCOPYコンパイラ指令の使用例が『言語リファレンス - 追加トピック』中の「例」の章に掲げられている。
- ANSI'85の規則でサポートされている部分的な語の置換を伴うCOPY文の使用例が『言語リファレンス - 追加トピック』中の「例題」の章に掲げられている。
一般形式
指令
- 予約語リストにフラグを付けたり修正したりするコンパイラ指令に加えて、下記の指令によって、この項に記述した構文または意味が影響を受ける可能性がある。
- COPYEXT - コピー・ファイルの所在を突き止めるために使用する、ファイル名の拡張子を指定する。
- COPYLBR - ライブラリ名が.lbrに相当することを指定する。
- COPYLIST - コピー文の結果をリスティング・ファイルに含めさせる。
- FOLD-COPY-NAME - ディスク上のライブラリ名とCOPY文中の原文名の間で登録集メンバー名の大文字と小文字の指定が違っている場合に、コンパイラ・システムがコピー登録集メンバーを見つけ出せるようにする。
- OLDCOPY - ANS'68およびOS/VS COBOL LANGLVL(1)の規則に合うように、COPY文の取扱いを変更する。
構文規則
- 原始プログラムをCOBOLシステムに渡すときに複数のCOBOL登録集が利用できる場合は、原文名を登録集名で修飾して、原文名の原文が登録されているCOBOL登録集を一意に識別しなければならない。登録集についての詳細は、COBOLシステムのマニュアルを参照。
この制限は廃止された。
- The
COPY文は、前に空白を1つ置き、後ろを分離符の終止符(.)で止める。
-
仮原文-1は、空でも、空白文字だけから成っても、注記行だけから成ってもならない。
- 仮原文-2は、空であってもよい。
- 仮原文-1および仮原文-2の中の文字列は、行をまたがって継続させることができる。ただし、仮原文の区切り記号(psuedo-text delimiter)は、2つとも同じ行にあること。 (COBOLプログラムの概念の章の行のつなぎの節を参照。)
- 語-1または語-2は、任意の単一のCOBOLの語であってよい。
- 文字列または分離符が書けるところならば、原始プログラム中のどこにでもCOPY文を書くことができる。ただし、COPY文の中にはCOPY文を書けない。
- 原文名は、一意の外部ファイル名を定義する。このファイル名は、利用者語の作成規則に準拠していること。
外部ファイル名定数は英数字定数であり、ファイル名に関するオペレーティングシステムの規則に準拠していること。外部ファイル名定数を指定する時は、引用符で囲んでもよいし囲まなくてもよい。
原文名および引用符で囲んでいない外部ファイル名定数は、常に大文字に変換されることに注意。
-
登録集名定数は文字定数であり、ファイル名に関するオペレーティングシステムの規則、または装置一意名に関するオペレーティングシステムの規則に準拠していること。登録集名定数を指定する時は、引用符で囲んでもよいし囲まなくてもよい。
引用符で囲んでいない登録集名定数は、常に大文字に変換されることに注意。
-
SUPPRESSは、原始リスト上にコピー・メンバの内容を印刷しないようにするために指定する。
-
注記項の中または注記項があってもよい場所に語COPYがある場合、注記項の一部とみなされる。
注記項中にあるCOPY文は処理される。
-
外部ファイル名定数および登録集名定数は、引用符で囲まれている場合、文字$、#、@を含んでもよい。
一般規則
-
COPY文を含む翻訳集団をコンパイルすることは、論理的には、すべてのCOPY文を処理してからその結果の翻訳集団をコンパイルすることと同じである。
- COPY文を処理した結果は、予約語COPYに始まり句読文字の終止符で終わるCOPY文全体を論理的に置き換える形で、原文名によって表わされる登録集原文を原始文中に複写したようになる。
- REPLACING指定をしないと、登録集原文はそのままで複写される。
REPLACING指定をすると、複写される登録集原文のうちで、仮原文-1、一意名-1、定数-1、語-1に一致するそれぞれの部分が、対応する仮原文-2、一意名-2、定数-2、語-2によって置き換えられる。
- 登録集と一致するかどうか比較する目的では、一意名-1と定数-1と語-1は、それぞれ一意名-1または定数-1または語-1だけを含む仮原文として扱われる。
- 原文を置換するかどうかを判定するための比較は、以下のように行われる。
- 分離符のコンマでもセミコロンでもない登録集原文語の左端の語が、比較の最初の対象となる。この原文語の前にある原文語または空白は、原始文中に複写される。比較対象の最初の原文語以降が、REPLACINGの作用対象全体と連続する同じ文字数だけ比較される。ここで、REPLACINGの作用対象とは、予約語BYの前までに指定した仮原文-1、一意名-1、定数-1、語-1を指す。
- 仮原文-1、一意名-1、定数-1、語-1は、その語を構成する文字の並びが登録集原文語の文字の並びと、逐一同じであるときにだけ、等しいと判定される。照合の目的では、仮原文-1または登録集原文の中の分離符のコンマとセミコロンと空白は、これらが出てくるたびに単一の空白とみなされる。分離符の空白がいくつか並んで出てきたものは、単一の空白とみなされる。
小文字は、COBOL文字集合に指定されている対応する大文字に等しいものとして扱われる。
- 照合結果が一致しなかった場合、REPLACING指定の続きがあれば、次の各仮原文-1、一意名-1、定数-1、語-1を対象にして比較が繰り返される。このようにして一致するものが見つかるか、
REPLACING指定の作用対象の続きがなくなるまで、比較は繰り返し続けられる。
- REPLACING指定の作用対象のすべてが比較されたが、一致するものが見つからなかった場合、左端の登録集原文語は原始文中に複写される。次いで、その次に続く登録集原文語が左端の登録集原文語であるとみなされて、REPLACING指定中の最初の仮原文-1、一意名-1、定数-1、語-1から始まって、比較周期が再び開始される。
- 仮原文-1、一意名-1、定数-1、語-1と登録集原文との間で比較結果が一致した場合、対応する仮原文-2、一意名-2、定数-2、語-2が原始文中に入れられる。比較の対象とされた登録集原文部分のうちの右端の原文語のすぐ後ろの語が、左端の登録集原文語であるとみなされて、REPLACING指定中の最初の仮原文-1、一意名-1、定数-1、語-1から始まって、比較周期が再び開始される。
- この処理は、登録集原文中の右端の原文語が左端の登録集原文語とみなされて比較され、照合結果が一致するかまたは比較周期を完了したところで、終了する。
- 比較の目的では、登録集原文および仮原文-1中に出てくる注記行は、単一の空白とみなされる。仮原文-2および登録集原文の中に出てくる注記行は、原始文中に元のまま複写される。
- 登録集原文内および仮原文-2には、デバッグ行があってもよい。仮原文-1の中では、デバッグ行は認められない。 デバッグ行の中の原文語が比較されるときは、標識領域中に "D" が記されていないものとして扱われる。
原始文中で、左側の仮原文区切り記号の後ろで、かつ、それに対応する右側の仮原文区切り記号の前でデバッグ行が始まっているならば、そのデバッグ行はその仮原文中に指定されているものとする。
- COPY文の処理を完了した結果の原文中に、
COPY文が含まれていてはならない。
結果の原文中にCOPY文が含まれていてもよい。ただし、そのCOPY文および既に展開済みのCOPY文に、REPLACING指定が含まれていないことが条件である。
任意のレベルまで、COPY文を入れ子にしてもよい。入れ子になった任意のCOPY文の中に、REPLACING指定が含まれていてもよい。下位レベルのすべての COPY文に対して、REPLACING指定は効力を発揮する。
- 登録集原文の構文の正しさは、独立して判定することはできない。
ただし、COPY文は例外である。
すべてのCOPY文の処理が完了するまで、COBOL原始プログラム全体の構文の正しさは判定できない。
- 登録集から複写されたが置換はされなかった各原文語は、結果としてできあがるプログラムの中でも、登録集内の行の中でその語が占めていたのと同じ領域から始まるように複写される。しかし、登録集から複写してきたA領域から始まる原文語の後ろに別のやはりA領域から始まる原文語があって、前の方の原文語がそれよりも長いものに置換された場合、A領域に余裕がなければ、後ろの原文語はB領域から開始されることがある。結果としてできあがる原始文の中に入れられる仮原文-2の中の各原文語は、仮原文-2の中でその語が占めていたのと同じ領域から始まるように配置される。各一意名-2、定数-2、語-2は、結果としてできあがるプログラムの中で、比較の対象となった左端の登録集原文語が置換されなかったならば、位置していたのと同じ領域から開始される。
登録集原文は、COBOLの正書法に適合させること。
COPY文を処理した結果として原始文中に行が追加される場合、COPY文がデバッグ行上から始まるか、または複写される原文語が登録集原文中のデバッグ行上にあると、その原文語はデバッグ行上に置かれる。BY指定の対象の原文語が組み入れられるときに、置換される最初の登録集原文語がデバッグ行上にあると、置き換わる語もデバッグ行上に配置される。上記の場合を除いて、結果としてできあがる原始文中のデバッグ行上に配置されるのは、仮原文-2の中のデバッグ行上に指定されている原文語だけである。定数-2としてまたは仮原文-2か登録集原文の中に指定されている定数が1行に収まりきらないほど長く、かつその定数がデバッグ行上にはない場合、あふれる分を収容する継続行が後ろに追加される。置換の結果、定数の続きがデバッグ行にかかる場合は、翻訳集団はエラーとなる。
- 比較の目的では、置換後の原文語は、COBOLプログラムの概念の章に記述されている正書法の規則に従って、原始文中に配置される。
- 装置一意名を明示的に指定しないと、省略時解釈の装置が使用される。省略時解釈値は、オペレーティングシステムによって異なる。
-
OLDCOPYコンパイラ指令を設定すると、COPY文の内容が原文名の複写ファイルの内容で置き換えられる際に、
COPY文の前にあるデータ名が複写ファイル中の対応するデータ名の代わりに用いられる。
-
登録集原文中で何らかの適用規則が守られている場合、データ名の接頭辞のような名前の一部をREPLACING指定を用いて変更できる。
この方式の「部分的な語の置換」機能を利用するためには、変更の対象とする部分の前後を下記のように囲まなければならない。
- 一組の左かっこと右かっこで。たとえば、 (ABC)。
- コロンで。たとえば、:XYZ:は有効な候補である。
機能
REPLACE(置換)文は、原文を翻訳単位に置き換えるために使用する。
一般形式
書き方 1
書き方 2
構文規則
- REPLACE文は、翻訳集団中で文字列を書くことができる場所ならば、どこにでも書くことができる。翻訳集団中の先頭の文でない場合は、REPLACE文の前に分離符の終止符(.)を打つこと。
- REPLACE文は、分離符の終止符(.)によって止める。
-
仮原文-1には、1語以上の原文語を含める。
- 仮原文-2には、原文語を含めなくても、1語以上の原文語を含めてもよい。
- 仮原文-1および仮原文-2の中の文字列は、次の行へ継続できる。
- 仮原文中の原文語の長さは、1文字から322文字の間とする。
- 仮原文-1は、そのすべてが分離符のコンマまたはセミコロンから構成されていてはならない。
- 注記項の中または注記項を記してもよい場所に語REPLACEがあると、注記項の一部とみなされる。
一般規則
- 仮原文-1には、仮原文-2によって置き換える原文を指定する。
- 書き方2のREPLACE文は、現在働いている原文置換機能を停止することを指定する。
- いったん指定した
REPLACE文の効力は、次のREPLACE文の指定が出てくるか、そのプログラムの終わりに達するまで持続する。
- 原始単位中に含まれるREPLACE文の処理は、その原始単位中に含まれるCOPY文があればその処理の後で行われる。
- REPLACE文を処理した結果の原文には、COPY文もREPLACE文も含まれていてはならない。
- 原文を置換するか否かを判定するための比較は、以下のように行われる。
- 原始文中の左端の原文語と最初の仮原文-1から始まって、仮原文-1が原始文中の連続する同じ文字数の原文語と比較される。
- 仮原文-1は、それを構成する原文語の並びが原始文中の原文語の並びと同じであるときにだけ、等しいと判定される。照合の目的では、仮原文-1または原始文の原文の中の分離符のコンマとセミコロンと空白は、それらが出てくるたびに単一の空白とみなされる。分離符の空白がいくつか並んで出てきたものは、単一の空白とみなされる。
小文字は、COBOL文字集合に指定されている対応する大文字に等しいものとして扱われる。
- 照合結果が一致しなかった場合、以降の各仮原文-1を対象にして比較が繰り返される。このようにして、一致するものが見つかるか、仮原文-1の続きがなくなるまで、比較は繰り返し続けられる。
- 仮原文-1と原始文中の原文との間で比較結果が一致した場合、原始文中のその原文が対応する仮原文-2によって置き換えられる。比較の対象とされた原始文中の原文部分のうちの右端の原文語のすぐ後ろの語が、原始文中の左端の原文語であるとみなされて、最初の仮原文-1から始まって、比較周期が再び開始される。
- この処理は、原始文の原文中の右端の原文語が
REPLACE文の範囲内の左端の原文語とみなされて比較され、照合結果が一致するかまたは比較周期を完了したところで、終了する。
- 原始文中の原文および仮原文-1の中に現れる注記行または空白行は、照合の目的上は無視される。原始文中の原文および仮原文-1の中の原文語の順序は、正書法に関する規則に従って判定される。詳細については、COBOLプログラムの概念の章の正書法の表現の節を参照。原始文中の原文が仮原文-2によって置換される場合は、仮原文-2の中の注記行または空白行は結果の原始文にそのまま入れられる。原始文中にあって仮原文-1に一致する一連の原文語の中に現れる注記行または空白行は、結果の原始文には入れられない。
- 仮原文内には、デバッグ行があってもよい。デバッグ行の中の原文語が比較されるときは、標識領域中に "D" が記されていないものとして扱われる。
- すべてのCOPY文とREPLACE文の処理が完了した後でだけ、残りの原始コードの構文の正しさを判定できる。
- REPLACE文を処理した結果として原始文中に挿入される原文語は、正書法に関する規則に従って原始文中に配置される。詳細については、 COBOLプログラムの概念の章の正書法の表現の節を参照。仮原文-2の原文語を原始文に挿入するときに、追加の空白を組み込むことができるのは、既に空白が空いている原文語の間だけである(原始行の間に想定される空白を含む)。
- REPLACE文を処理した結果として原始文中に行が追加される場合、追加される行の標識領域には置換される行の先頭の文字が入れられる。ただし、置換される行の先頭の文字がハイフン(-)である場合は、空白が入れられる。
仮原文-2の中の定数が1行に収まりきらないほど長く、かつその定数がデバッグ行上にない場合、あふれる分を収容する継続行が後ろに追加される。置換の結果、定数の続きがデバッグ行にかかる場合は、翻訳単位はエラーとなる。

コンパイラ指令はコンパイラによって使用される選択機能や変数を指定するためのものである。
一般形式
>>翻訳指令
構文規則
- コンパイラ指令は1行に指定しなければならない。ただし、EVALUATEとIFは別である。この2つの指令には別の規則が適用される。
- コンパイラ指令の前に置けるのは1つ以上の空白文字だけである。空白がなくともかまわない。
- 固定方式の正書法を採る場合、コンパイラ指令はプログラム原文領域に記すものとし、その後ろには空白文字だけを記してよい。
- 自由方式の正書法を採る場合、コンパイラ指令の後ろに記してよいのは空白文字と書いても書かなくてもよい行内注記だけである。
- コンパイラ指令は2つの連続したCOBOLの文字>>とそれに続くCOBOLの空白文字と翻訳指令から構成される。ただし、空白文字は書かなくともかまわない。>>の後ろに空白文字を書かなかった場合、>>の後ろに空白が1つあるように扱われる。
- 翻訳指令は、いくつかのコンパイラ指令語から構成される。各コンパイラ指令語にはそれなりの構文の定義がある。
- コンパイラ指令語は該当のコンパイラ指令の文脈内で予約されている。それを、任意の型のCOBOLの語として、どこでも使用できる。
- コンパイラ指令は翻訳集団内のどこにでも指定できる。ただし、下記を除く。
- 個々のコンパイラ指令の規則で制限されている場所
- 原始文操作文の中
- 継続されている文字列の行の間
- デバッグ行の上
- 登録集原文内にコンパイラ指令の行を指定できる。
- コンパイラ指令内に、連結式または表意定数として、定数を指定してはならない。
一般規則
- COPY文またはREPLACE文の照合処理の間は、コンパイラ指令は単一の空白行として扱われる。コンパイラ指令はいかなる仮原文あるいは部分語とも合致しない。したがって、置換処理の影響を受けない。
- COPY文およびREPLACE文の処理にさいしては、コンパイラ指令は該当の指令の規則に従って、処理の前、間、後のいずれかの時点で処理される。
- >>IF指令および>>EVALUATE指令の原始文に指定された場合、コンパイラ指令の>>EVALUATEと>>IFは条件付き翻訳の間に出てきたときに効力を発揮する。それ以外のコンパイラ指令はすべて、条件付き翻訳の結果として得られた原始文が処理されるときに処理される。
コンパイラ指令を使用すると、原始文の範囲を選択して対象に含めたり対象から除外したりすることができる。そのような翻訳方法を条件付き翻訳と呼ぶ。そのために使用するコンパイラ指令はEVALUATEとIFである。EVALUATE指令およびIF指令を使用して、原始文の行を選択し、翻訳の対象に含めたり対象から除外したりする。
EVALUATE指令および定数の条件式の中に算術式を指定できる。それらの算術式の構成と優先順位と評価規則
を以下に示す。
- 作用対象はすべて、固定小数点の数字定数、または使用されるすべての作用対象が固定小数点の数字定数である算術式のどちらかでなければならない。
注: この中には固定小数点の数字定数に等しい定数を含む。
- 各算術演算の後で、結果の値の小数部分が切り捨てられて、結果は整数とみなされる。
- 算術式が評価された後で、結果の値は数字定数とみなされる。
- 算術演算の結果、桁あふれが発生してはならない。
定数条件式とは、すべての作用対象が定数であるか、定数項だけが含まれる算術式である、条件式である。定義済み条件として知られる特殊な形の条件も、定数条件式の一部として使用できる。
構文規則
- 定数条件式は下記のどれかに該当しなければならない。
- 単純比較条件であって、両方の作用対象が定数、または定数項だけを含む算術式であり、
下記の規則に当てはまる。
- 比較演算子の両側の作用対象の項類が同じでなければならない。算術式の項類は数字である。
- 数字以外の定数を指定した場合、比較演算子は"IS [ NOT ] EQUAL TO"または"IS [ NOT ] ="でなければならない。
- 定義済みの条件
- 上記の単純条件を組み合わせて構成した複合条件。
省略した形の比較条件の組合せを指定してはならない。
一般規則
- 複合条件は
10.1.4.3「複合条件」の規則に従って評価される。
- 作用対象が数字ではない単純比較条件に関しては、文字の照合順序は適用されない。1文字ずつ比較して、等しいか否かが判定される。
注: したがって、大文字と小文字は等しくないとみなされる。
一般形式
翻訳変数名-1 IS [ NOT ] DEFINED
一般規則
- IS DEFINED構文を使用した定義済み条件は、翻訳変数名-1が現在定義されている場合にTRUEと評価される。
- IS NOT DEFINED構文を使用した定義済み条件は、翻訳変数名-1が現在定義されていない場合にTRUEと評価される。
EVALUATE指令を使用すると、複数の分岐のある条件付き翻訳を行える。
一般形式
書き方 1
書き方 2

構文規則
すべての書き方
- 連続したCOBOLの文字>>およびそれに続くコンパイラ指令語および原始文-1と原始文-2の直前までの一組の記述を、新しい行にすべて収まるように指定しなければならない。原始文-1の最初の原文語および原始文-2の最初の原文語はそれぞれ新しい行の先頭から記入しなければならない。
- 原始文-1および原始文-2はどのような種類のものであってもよい。その中には、コンパイラ指令も含む。原始文-1および原始文-2は複数の行にまたがってよい。
書き方 1
- EVALUATE指令の作用対象の項類はすべて同じでなければならない。この規則に関しては、算術式の項類は数字である。
- THROUGH指定を書いた場合、選択の左辺および選択の右辺はすべて、項類が数字でなければならない。
- 語THROUGHとTHRUは同等である。
一般規則
すべての書き方
- EVALUATE指令はCOPY文およびREPLACE文の処理の間に処理される。
書き方 1
- 選択の左辺である定数-1または算術式-1が各WHEN指定中の値と比較される。その結果は下記のようになる。
- THROUGH指定がない場合は、選択の左辺が定数-2または算術式-2と等しいと、TRUEが返される。
- THROUGH指定がある場合は、選択の左辺が定数-2または算術式-2以上であり定数-3または算術式-3以下であると、TRUEが返される。
結果がTRUEとなるWHEN指定が見つかると、対応する原始文-1が翻訳されて、>>END-EVALUATEに至るまでの残りの行は>>END-EVALUATEも含めて無視される。
書き方 2
- 各WHEN指定に関して、順々に、定数条件式が評価される。
結果がTRUEとなるWHEN指定が見つかった場合、関連する原始文-1が翻訳されて、>>END-EVALUATEに至るまでの残りの行は>>END-EVALUATEも含めて無視される。結果がTRUEとなるWHEN指定が見つからなかった場合、>>WHEN OTHERに対応する原始文-2が指定されていれば、それが翻訳される。
IF指令は選択肢が1つまたは2つの
条件付き翻訳を行えるようにする。
一般形式
>>IF 定数条件式-1 [原始文-1]
[ >>ELSE [原始文-2] ]
>>END-IF
構文規則
- 連続したCOBOLの文字>>およびそれに続くコンパイラ指令語および原始文-1と原始文-2の直前までの一組の記述を、新しい行にすべて収まるように指定しなければならない。原始文-1の最初の原文語および原始文-2の最初の原文語はそれぞれ新しい行の先頭から記入しなければならない。
- 原始文-1および原始文-2はどのような種類のものであってもよい。その中には、コンパイラ指令も含む。原始文-1および原始文-2は複数の行にまたがってよい。
一般規則
- IF指令はCOPY文およびREPLACE文の処理の間に処理される。
- 定数条件式-1の評価結果がTRUEであると、原始文の一部として原始文-1が翻訳されて、原始文-2は無視される。
- 定数条件式-1の評価結果がFALSEであると、原始文-1は無視されて、原始文-2が指定されていると、原始文の一部として翻訳される。
REPOSITORY指令は外部リポジトリに情報を追加するかどうかを指定する。また、外部リポジトリ中のインターフェイス情報に照らして、プロトタイプおよび定義をチェックするかどうかも指定する。
一般形式
指令
- 予約語リストにフラグを付けたり修正したりするコンパイラ指令に加えて、下記の指令によって、この項に記述した構文または意味が影響を受ける可能性がある。
- RDFPATH - リポジトリ・ファイル用の登録集の所在を指定する。
構文規則
- REPOSITORY指定を書ける場所は、翻訳単位の最初の見出し部の前だけである。翻訳単位の中にREPOSITORY指定を書いてはならない。
- REPOSITORY指令の効力は後続の翻訳集団に及ぶ。他のREPOSITORY指定が出てくると、新しい指定が発効する。
一般規則
- 省略時のREPOSITORY指定は下記のとおり。
>>REPOSITORY UPDATE OFF WITH CHECKING.
- ON指定を明示的または暗黙的に指定すると、翻訳単位に関する情報が外部リポジトリに追加される。それから、次の翻訳単位の翻訳が行われる。次の翻訳単位がない場合には、外部リポジトリに情報を追加した後で、翻訳が終了する。
- OFF指定を書くと、外部リポジトリは更新されない。
- CHECKING指定を書くと、外部リポジトリ中のソース単位に関する情報と異なるクラス定義またはインターフェイス定義に警告のフラグが付けられる。外部リポジトリ中の情報の詳細については、3.3「外部リポジトリ」に指定されている。
.
BASIS機構は、COBOLの原始ファイルを非対話的に(一時的に)編集し、その結果をCOBOLシステムに投入できるようにする。 一時的編集の源として参照されるCOBOLの原始ファイル("編集元プログラム")は、変更されることはない。また、COBOLシステムによって出力されたファイル(リストなど)以外には、編集結果の記録は残らない。結果として出力されるコード・ファイルは、参照する原始ファイルが存在しないため、アニメートすることはできない。
BASIS機構は固定形式の原始ファイルにだけ有効である。
COBOLシステムに投入されるプログラムは、2つのファイルから構成される。1つは編集制御ファイル(edit control file)(BASIS文と編集情報を記録している)であり、もう1つはCOBOL原始ファイル(上記の"編集元プログラム")である。
BASIS機構の中で特別な働きをする文が3つある。それらは下記のとおり。
- BASIS
- INSERT
- DELETE
これらのBASIS機構用の文は、COBOL言語の一部を構成するものではない。これらの文は1行に完全に収まっていなければならず、大文字で記さなければならない。
INSERT文またはDELETE文を使用して、BASIS文によって用意されたCOBOLの原始プログラムを変更する場合、COBOL原始プログラムの一連の項目は、昇順に一連番号を持っていなくてはならない。
BASIS機構文に関する一般的注意
- 原始プログラム行のB領域に完全に含まれ、その後ろに有効な編集元順序番号または編集元順序番号の範囲が続かないDELETE文は、COBOLシステムによってCOBOLのDELETE文として扱われる。
- BASIS機構のDELETE文で、編集元順序番号または編集元順序番号の範囲は、すべて数字の昇順になっていなければならない。
- 編集制御ファイル内では、編集元順序番号または編集元順序番号の範囲は、すべて数字の昇順になっていなければならない。
機能
BASIS文は、該当するプログラム(編集制御ファイルとCOBOL原始ファイル)をBASIS機構の規則に従って、COBOLシステムに投入することを示す。
一般形式
構文規則
- BASIS文は、編集制御ファイルの最初の行に置く。
- 予約語BASISは、その文を記述する行のカラム1から66の間のどこから書き始めてもよい。
- 順序番号は、その文を記述する行のカラム1から6の間のどこに書いてもよい。その後ろには空白文字を1つ置く。
- 原文名は、一意の外部ファイル名を定義する。このファイル名は、利用者語の作成規則に準拠していること(小文字は大文字に変換されることに注意)。外部ファイル名定数は、引用符で囲んだ文字定数である。ファイル名に関するオペレーティングシステムの規則に準拠していること。
一般規則
- 原文名または外部ファイル名定数は、編集制御ファイルによって編集するCOBOL原始ファイルを指名する。
- COBOL原始ファイルの編集は、編集制御ファイル中のINSERT文およびDELETE文によって行われる。
機能
DELETE(削除)文は、(BASIS機構のもとで)COBOLシステムに無視させるCOBOL原始ファイル中の行を指定する。 DELETE文の後ろに続くCOBOL文は、(編集制御ファイル中に次のBASIS機構のINSERT文またはDELETE文が出てくるまで)原始ファイル中に残される。
一般形式
構文規則
- 予約語DELETEは、その文を記述する行のカラム1から6の間のどこから書き始めてもよい。
- 順序番号は、その文を記述する行のカラム1から6の間のどこに書いてもよい。その後ろには空白文字を1つ置く。
- 編集元順序番号-1や編集元順序番号-2などは、引用符で囲まない6文字の正の整数とする(整数数字定数に関する規則に従う)。
- 編集元順序番号の範囲-1や編集元順序番号の範囲-2などは、2つの編集元順序番号(上記)をハイフン(-)でつないだものとする。
- 編集元順序番号または編集元順序番号の範囲の間のコンマは、必須である。
一般規則
- 編集元順序番号-1や編集元順序番号-2などは、COBOL原始ファイル中の文のうちCOBOLシステムに無視させるものの順序番号を表わす。
- 編集元順序番号の範囲-1や編集元順序番号の範囲-2などは、COBOL原始ファイル中の文のうち中間コードを生成するときに、COBOLシステムに無視させるものの順序番号の範囲を表わす。この範囲は両端を含む。
- 編集制御ファイル中に次のBASIS機構のINSERT文またはDELETE文が出てくるまで、
DELETE文の後ろに続くCOBOL文は、COBOLシステムに投入される原始ファイル中に残される。それらのCOBOL原始プログラムの文は、BASIS機構のDELETE文によって削除された最後の文に代わって、挿入される。
機能
INSERT(挿入)文は、(BASIS機構のもとで)COBOLシステムに投入するプログラム中に挿入する、COBOL原始プログラムの行をリストする。
一般形式
構文規則
- 予約語のINSERTは、その文を記述する行のカラム1から66の間のどこからでも書き始めることができる。.
- 編集元順序番号は、引用符で囲まない正の整数とする(整数数字定数に関する規則に従う)。
一般規則
- 編集元順序番号は、COBOL原始ファイル中のどの文の後ろにCOBOL文を挿入するかを示す。
- 編集制御ファイル中のINSERT文の後ろに続くすべてのCOBOL文は、次のBASIS機構のDELETE文またはINSERT文が出てくるまで、COBOLシステムに投入される原始プログラム中に含められる。BASIS機構のINSERT文の直後には、COBOL文が少なくとも1行はあること。
++INCLUDE機構および-INC機構は、COBOLプログラムの原始ファイルまたは原始コードの一部をコンパイル対象のファイルに組み込めるようにする、もう1つの(IBMメインフレーム互換の)手段である。
これらの++INCLUDE機構および-INC機構の文は、COBOL言語の一部を構成するものではない。これらの文は1行に完全に収まっていなければならず、大文字で記さなければならない。
機能
-INC文は、コンパイル時に、ある原始ファイルのすべてのデータ・レコードを別の原始ファイルに組み込むために使用する。
一般形式
指令およびランタイム・スイッチ
- 予約語リストにフラグを付けたり修正したりするコンパイラ指令に加えて、下記の指令によって、この項に記述した構文または意味が影響を受ける可能性がある。
- LIBRARIAN - -INCの構文を使用できるようにする。
構文規則
- -INCはカラム1から書き始め、後ろに1つ以上の空白文字を置く。
- 原文名は、一意の外部ファイル名を定義する。このファイル名は利用者語の作成規則に準拠していること。
- -INC文は、COBOL言語の一部を構成するものではない。これらの文は1行に完全に収まっていなければならず、大文字で記さなければならない。
一般規則
- 原文名は、原始コード中でこの文を書いた場所に組み込む、COBOL原始ファイルを指名する。
- この行に原文名以外のテキストを書くと、注記として扱われる。
機能
++INCLUDE文は、コンパイル時に、ある原始ファイルのすべてのデータ・レコードを別の原始ファイルに組み込むために使用する。
一般形式
指令およびランタイム・スイッチ
- 予約語リストにフラグを付けたり修正したりするコンパイラ指令に加えて、下記の指令によって、この項に記述した構文または意味が影響を受ける可能性がある。
- PANVALET - ++INCLUDEの構文を使用できるようにする。
構文規則
- ++INCLUDEはカラム8から書き始め、 すべて大文字とし、後ろに1つ以上の空白文字を置く。
- 原文名は、一意の外部ファイル名を定義する。このファイル名は、利用者語の作成規則に準拠していること。
- ++INCLUDE文は、COBOL言語の一部を構成するものではない。これらの文は1行に完全に収まっていなければならず、大文字で記さなければならない。
一般規則
- 原文名は、原始コード中でこの文を書いた場所に組み込む、COBOL原始ファイルを指名する。
- この行に原文名以外のテキストを書くと、注記として扱われる。
COBOLシステムには、COBOL原始コードの一部またはすべてを選択してコンパイルする機能が備わっている。条件付き翻訳の利点を十分に活かすためには、
78レベル(データ部 - データ記述の章を参照) およびCONSTANT
コンパイラ指令を使用するのがよい。条件付き翻訳を行うには、$IF、$ELSE、$ENDの構造を用いる。この構造は、COBOL IF 構造と同様の働きをする。
条件付き翻訳文に関する一般規則
- 条件付き翻訳の文は、固定形式原始コードのカラム7にドル記号($)を書き、その後ろにIF、DISPLAY、ELSE、ENDのどれかを続けたものである。
- 条件付き翻訳は、COBOLの文字列を分ける形で使用してはならない。つまり、継続する行の間に、条件付き翻訳制御を割り込ませることはできない。
機能
原始行の処理中に$DISPLAY文が出て来ると(条件に従って除外された原始行を含まない)、 標準の出力装置上にテキスト・データが表示される。
一般形式
構文規則
- 文全体を1行に収めなければならない。
機能
最も近い$IF文条件の逆を適用する。最も近い$IF文が真と評価されると、$ELSE文の後ろに続く原始行が処理される。最も近い$IF文が偽と評価されると、次の条件付翻訳行が出て来るまで、COBOL原始行は無視される。
一般形式
構文規則
- 文全体を1行に収めなければならない。
機能
最も内側の$IF文条件を終了させる。次いで、その時点で働いている$IF文に従って、処理が行われる。この条件が真と評価されると、$END文の後ろに続く原始行が処理される。この条件が偽と評価されると、次の条件翻訳行が出て来るまで、COBOL原始行は無視される。
一般形式
構文規則
- 文全体を1行に収めなければならない。
機能
$IF文は原始文の選択した部分を翻訳に含めないようにする機能を提供する。
例
- 条件付き翻訳の使用例が『言語リファレンス - 追加トピック』中の「例」の章に掲げられている。
一般形式
書き方 1
書き方 2
構文規則
- 定数名-1はレベル78の記述項またはCONSTANTコンパイラ指令によって定義される。
- 定数-1が数字である場合、正の整数またはゼロでなければならない。
- 文全体を1行に収めなければならない。
- $IF文は、他の$IF文の中に入れ子にすることができる。
一般規則
- レベル78の記述項またはCONSTANTコンパイラ指令の左辺である場合、定数名-2は「定義されており」、そうでない場合は「定義されていない」。[?]
- 条件が真と評価されると、$IF文の後ろに続く原始行が処理される。 条件が偽と評価されると、次ぎの条件付き翻訳行が出て来るまで、COBOL原始行は無視される。
リスト制御文(listing control statement)は、コンパイル処理中に出力ファイルのリストの作成を制御する。
リスト制御文には下記の3つがある。
- EJECT
- SKIP1, SKIP2 AND SKIP3
-
TITLE
機能
EJECT(改ページ)文は、原始コードの次の行を次のページの冒頭に印刷するように、COBOLシステムに指示する。
一般形式
構文規則
- EJECT文は、A領域またはB領域から書き始めてよいが、1行に単独で書く。最後に終止符を付けなくてもよい。
一般規則
- EJECT文自体は印刷されない。
機能
SKIP1, SKIP2, SKIP3の各文は、COBOLシステムによって作成される
原始コードのリストの縦の間隔を制御する。これらは、原始コードのリスト中で空ける行間隔を指定する。
一般形式
構文規則
- これらの文は、A領域またはB領域から書き始めてよいが、1行に単独で書かなければならない。
最後に終止符を付けても付けなくてもよい。
一般規則
- SKIP1は、COBOLシステムに1行間隔を空けるように(2行改行)指示する。SKIP2は、COBOLシステムに2行間隔を空けるように(3行改行)指示する。SKIP3は、COBOLシステムに3行間隔を空けるように(4行改行)指示する。
- SKIP文自体は印刷されない。
機能
TITLE(標題)文は、リストの後続のすべての先頭行に印刷する標題を、COBOLシステムに知らせる。
一般形式
構文規則
- 定数-1は文字とする。後ろに終止符を付けてもよい。表意定数であってはならない。
- 語TITLEは、A領域またはB領域から書き始めてよいが、1行に単独で書かなければならない。
- TITLE文は、翻訳集団中のどこに書いてもよい。
一般規則
- 定数-1は、リストの後続のすべてのページに付ける標題として使用される。TITLE指令が出てくるまでは、省略時解釈の標題が使用される。省略時解釈の標題には、使用されているCOBOLシステムの識別情報と現在のリリース番号が示される。
- 指定した標題または省略時解釈の標題は、各ページの先頭行の左側に寄せて印刷される。その行の右側には、中間コードが生成された日付と時刻およびページ番号が表示される。
- 2番目の標題行も出力される。この行には、主原始ファイルおよび最新の複写ファイルの名前が表示される。
- TITLE文を指定すると、すぐに改ページが行われる。
- TITLE文自体は印刷されない。