COBOL言語の概念

この章では、COBOL言語の概念を説明する。

文字集合

COBOL言語の最も基本的でそれ以上分割できない単位は、文字である。COBOLの文字列および分離符として 使用できる文字集合は、英字、数字、特殊文字から構成される。文字集合を構成する文字を以下に示す。

文字
意味
0 から 9 数字
A から Z 大文字の英字
a から z 小文字の英字
  空白
+ 正号
- 負号またはハイフン
* 星印
/ 斜線
= 等号
\ 通貨記号
. 終止符または小数点
, コンマまたは小数点
; セミコロン
" 引用符
' アポストロフィ
( 左かっこ
) 右かっこ
> より大きい記号
< より小さい記号
: コロン
& アンパサンド
_ 下線
   

小文字を文字列や原文語に使用できる。 ただし、文字定数や絵記号として使用した場合は例外である。各小文字は、対応する大文字と等しいものとする。

このCOBOLシステムは、上記の文字集合に制限されている。しかし、文字定数、注記行、注記項、データの内容には、 COBOL 翻訳集団の文字を入れることができる。(付録の文字集合と文字の照合順序 を参照。)

言語の構造

個々の文字をつないで、文字列または分離符とする。分離符には他の分離符または文字列をつなぐことができる。 文字列には分離符だけをつなぐことができる。文字列と分離符をつないでいくことにより、 翻訳集団の本文ができる。

分離符

分離符(separator)は、1つ以上の句読文字をつないだものである。分離符の構成に関する規則を、以下に記す。

  1. 句読文字の空白は、分離符となる。空白を分離符または分離符の一部として使用する場合、1つ以上の空白を続けてもよい。分離符のコンマ、セミコロン、終止符の直後に続く空白はすべて、その分離符の一部であるとみなされ、独立の分離符とはみなされない。

  2. 句読文字のコンマまたはセミコロンの直後に空白を続けたものは分離符となる。この分離符は、分離符の空白を使用できる箇所であれば、どこでも使用できる。ただし、PICTURE文字列の中に使用されているコンマは分離符ではない。

  3. 句読文字の終止符の直後に空白を続けたものは、分離符となる。この分離符は、完結文の末尾を示すため、または形式に示された場合にだけ使用する。

  4. 句読文字の左かっこおよび右かっこは、分離符とする。左かっこと右かっこは一対として、添字、

    関数の引数リスト、部分参照、算術式、条件を囲むときだけ使用する。ただし、仮原文の中で使用するときは、例外である。

  5. 句読文字の左右の引用符は、分離符となる。

    左右の引用符において、アポストロフィまたは引用符を引用記号文字として使用できる。

    句読文字の左側の引用符とは、以下のいずれかである。

    • 引用符記号

    • 次の引用符付き文字のいずれか:G"、G'、H"、H'、N"、N'、X"、X'

    句読文字の右側の引用符とは、以下のいずれかである。

    • 引用符記号 (左側の原文区切り記号が引用符記号 の場合)

    • アポストロフィ(左側の原文区切り記号がアポストロフィの場合)

    左側の引用符の直前は、空白、左かっこ、仮原文区切り記号のいずれかとする。右側の引用符の直後は、分離符の空白、コンマ、セミコロン、終止符、右かっこ、右側の仮原文区切り記号のどれかとする。左側の引用符の直前、および右側の引用符の直後のこれらの分離符は、分離符としての引用符の一部を構成するものではない。

  6. 仮原文区切り記号は分離符となる。左側の仮原文区切り記号の直前は空白とする。右側の仮原文区切り記号の直後は、分離符の空白、コンマ、セミコロン、 終止符のいずれかとする。

    左側の仮原文区切り記号の直前の空白は、省略可能。

    仮原文区切り記号は一対として、仮原文

    および動詞記号

    を囲むときだけ使用する。 (翻訳指示文原始文操作および Micro Focus COBOL OO言語拡張メソッドインターフェイス定義の章を参照。)

  7. COBOL キャラクタのコロンは分離符となり、一般形式で表示される場合は必要となる。ただし、起動演算子の一部となる場合を除く。

  8. 分離符の空白は、すべての分離符の直前に置くことができる。ただし、以下の場合を除く。

    1. 正書法に指定されている場合。(COBOL 翻訳集団の概念の章の正書法の節を参照。)

    2. 分離符としての右側の引用符。この場合、引用符の直前の空白は文字列定数の一部と解釈され、分離符とはみなされない。

    3. 左側の仮原文区切り記号の直前。この場合、分離符の空白を必ず置かなければならない。

  9. 分離符の直後には、分離符の空白を置いても置かなくてもよい。ただし、左側の引用符の直後は例外とする。この場合、引用符の直後の空白は文字列定数の一部と解釈され、分離符とはみなされない。

PICTURE文字列(データ部 - データ記述PICTURE(形式)句の章を参照。) または数字定数中の句読文字は、PICTURE句の文字列または数字定数を指定するための記号であり、句読文字とはみなされない。PICTURE句の文字列は、分離符の空白、コンマ、セミコロン、終止符によってのみ区切られる。

分離符の構成に関する規則は、文字定数、注記項、注記行の中の文字には適用しない。

文字列

文字列(character-string)はひとつながりの文字であって、COBOLの語、定数、PICTURE文字列、注記項を形成する。文字列は分離符で区切る。

COBOLの語

COBOLの語(word)は30字以内の文字列であって、翻訳指示語、コンテキストセンシティブ語、利用者語、システム名、予約語、関数名に使用する。特殊文字を含まないCOBOLの語は文字と数字とハイフン

と下線から構成される。

非特殊文字語においては、ハイフン

または下線

を先頭または末尾に置いてはならない。小文字は対応する大文字と等しいものとみなされる。. .

文字列は31文字含むことができる。

原始要素内では、下記の規則が適用される。

  1. LENGTH, RANDOM, SUMを除くすべてのCOBOLの語に関して、

    1. 予約語の集合は利用者語、システム名、関数名の集合と重なり合ってはならない。

    2. 利用者語、システム名、関数名のそれぞれの集合は重なり合ってもよい。つまり、同じ語を利用者語とシステム名と関数名に使用してもよい。その場合、使用された語がどれに属するかは、文脈によって判定される。

  2. COBOLの語LENGTH, RANDOM, SUMに関して、

    1. LENGTH, RANDOM, SUMは予約語にも関数名にも含まれる。同じCOBOLの語であるLENGTH, RANDOM, SUMを予約語としても関数名としても使用してよい。その場合、使用された語がどちらに属するかは、文脈によって判定される。

    2. COBOLの語であるLENGTH, RANDOM, SUMは利用者語およびシステム名とは別の集合に属する。したがって、どのような文脈においても、COBOLの語のLENGTH, RANDOM, SUMは利用者語としてもシステム名としても使用してはならない。

利用者語:利用者語(user-defined word)はCOBOLの語であって、句や文の書き方を満足するように利用者が指定するものである。利用者語の各文字は下記の一連の文字の中から選択する。

実際の利用者語には以下の種類がある。

1つの原始要素の中では、利用者語が次に示すように互いに重ならない種類に分かれる

区分番号およびレベル番号を除く利用者語はすべて、上記の互いに重ならない種類のうちのただ1つに属する。更に、同じ種類の利用者語は、一意参照の節で指定されたものを除き、すべて一意でなければならない。

段落名、節名、レベル番号、区分番号以外の利用者語はすべて、最低限1文字の英字、

またはハイフンを1つ含まなければならない。

区分番号およびレベル番号は一意である必要はない。区分番号およびレベル番号は他の区分番号やレベル番号と同じであってもよいし、段落名や節名とも同じであってもよい。

下記の利用者語は操作環境に対して外部化される。

  1. 他のプログラムに含まれないプログラムのプログラム名、

    クラス名、

    関数プロトタイプ名、

    インターフェイス名、

    メソッド名、

    プログラムプロトタイプ名、

    利用者関数名

  2. EXTERNAL属性を 付して記述された項目のデータ名、ファイル名、およびレコード名

これらの名前のいずれかの代わりに、またはそれに加えて、定数を指定した場合、その定数の内容が操作環境に対する外部名となる。そのさい、大文字と小文字は区別される。定数を指定しなかった場合は、小文字を大文字に変換して外部名が作成される。コンパイラ指令のFOLD-CALL-NAMEを使用すると、外部名化したクラス名、インターフェイス名、プログラム名を大文字にするか小文字にするかを制御できる。コンパイラ指令のOOCTRLを使用すると、外部名化したメソッド名を大文字にするか小文字にするかを制御できる。+Fと-Uを指定すると、メソッド名は小文字にされるこれが省略時の解釈である。

条件名: 条件名(condition-name)とは、データ項目がとるすべての値の組の中の、特定の値または値の組または値の範囲に付けた名前である。条件名を付けたデータ項目を条件変数(conditional variable)という。条件名は、データ部または環境部の特殊名段落の中で定義できる。特殊名段落では、実行時スイッチのオンの状態、オフの状態、または両方の状態に命名する。

条件名を使用するのは、次の場合だけである。

  1. RERUN(再開)句。

  2. ここで条件名を使用することによって、比較条件を簡略に書き表わすことができる。比較条件の中で条件名を使用して、条件名が割り当てられている値の組の1つに対応する条件変数が等しいかどうかを表わす。

  3. 対応する値が条件変数に移されることを示すSET文。

定数名: 定数名(constant-name)とは固定的な値に付けた名前である。
呼び名: 呼び名(mnemonic-name)は、作成者語(implementor-name)に利用者語を割り当てるものである。この指定は環境部の特殊名段落の中で行う。(環境部の章の特殊名段落の節を参照。)
段落名: 段落名(paragraph-name)とは、手続き部の段落に付けた名前である。段落名が等しいと判断されるのは、同じ数の数字または文字が同じ順序で並んでいる場合だけである。
節名: 節名(section-name)とは、手続き部の節に付けた名前である。節名が等しいと判断されるのは、同じ数の数字または文字が同じ順序で並んでいる場合だけである。
その他の利用者語 その他の利用者語の定義については、用語集を参照。

システム名: システム名(system-name)とは、操作環境との連絡に使用するCOBOLの語である。

システム名には、最低1つの英字を入れるか、

または1つのハイフンを入れる。

システム名には、以下の3種類がある。

  1. 計算機名(computer-name)

  2. 作成者語(implementor-name)

  3. 言語名(language-name)

1つの処理系の中では、システム名のそれぞれの種類は互いに重なり合わない。1つのシステム名はただ1つの種類に属する。

上記のシステム名は、それぞれ用語集に定義を記載してある。

関数名: 関数名(function-name)は、COBOL原始 要素の中で使用できる語のリストの1つである。 関数名と同じ語を利用者語またはシステム名として、原始要素中の別々の文脈において使用できる。ただし、LENGTHとRANDOMとSUMは例外で、利用者語またはシステム名としては使用できない。 (手続き部 - 組み込み関数の章の関数の定義の節を参照。)

予約語: 予約語(reserved word)とは、COBOL翻訳集団の中で用いる語のうちの、予め予約されていて、利用者語またはシステム名としては翻訳集団中で使用できないものである。予約後は、一般形式での指定に従ってのみ使用される (付録の予約語を参照。)

予約語には、下記の種類がある。

  1. 必要語(key word)

  2. 補助語(optional word)

  3. 特殊レジスタ(special register)

  4. 表意定数(figurative constant)

  5. 特殊文字語(special-character word)

  6. 定義済みオブジェクト一意名
必要語: 必要語(key word)とは、 翻訳集団の中である書き方をするときに、必ず書かなければならない語である。それぞれの一般形式の中で、必要語は大文字で記し下線を引いてある。

必要語には、下記の3種類がある。

  1. ADD(加算)、READ(読み込み)、ENTER(導入)などの動詞

  2. 文や記述項の書き方に現れる必要な語

  3. NEGATIVE(負)、SECTION(節)などの機能的な意味をもつ語
補助語: 補助語(optional word)とは、それぞれの一般形式の中で、大文字で記してあるが下線を引いてない語である。補助語は書いても書かなくてもよい。補助語を書いたか書かなかったかによって、COBOL 原始要素の意味が変わることはない。
特殊レジスタ: 特殊レジスタ(special register)とは、COBOLの特殊な機能に関連する情報を記憶しておくために、COBOLコンパイラによって作成される記憶領域である。特殊レジスタには名前を付け、その名前によって参照する。これらについては、この節の特殊レジスタの項で後述する。
表意定数: 表意定数(figurative constant)とは、特殊な定数値に予め付けた名前である。この名前によって、値を参照する。具体的な表意定数については、この節の表意定数の値の項で後述する。
特殊文字語: 特殊文字語(special-character word)とは、特殊な文字の予約語である。
定義済みオブジェクト一意名: あらかじめ定義されたオブジェクト一意名などの予約語である。以下のものがある。
  1. SELF

  2. SUPER

  3. SELFCLASS

文脈依存語: 文脈依存語は、一般形式に指定されているようにだけ予約されるCOBOLの語である。同じ語を、関数名、利用者語、システム名として使用できる。文脈依存語および予約された文脈については、付録の文脈依存語を参照。

名前の適用範囲

ある原始要素の中に別の原始要素が、直接的または間接的に、含まれることがある。各原始要素は、他の原始要素によってまったく同じに名前を付けられた利用者語を使用することができる。 (COBOLの語の節の利用者語の解説を参照。) このような場合、ある原始要素で参照した名前は、違う種類の利用者語であってもその原始要素に記述されているものを指すのであって、他の原始要素中に記述されている同じ名前のものを指すのではない。

利用者語のうちの下記の種類に属するものは、利用者語を宣言した原始要素中の文または記述項においてだけ、参照できる。

利用者語のうちの下記の種類に属するものは、どのCOBOL原始要素からも参照できる。

利用者語のうちの下記の種類に属するものは、それらが構成節の中に宣言されている場合、その構成節を含む原始要素またはその原始要素に含まれる原始要素中の文または記述項からだけ、参照できる。

上記の条件に該当しない場合、利用者語のうちの下記の種類に属するものには、宣言および参照に関して、特別の表記法が適用される。

プログラム名に関する表記法

プログラムのプログラム名は、プログラムの見出し部のプログラム名段落で宣言される。プログラム名を参照できるのは、CALL(呼ぶ)文、

CHAIN文、

CANCEL 文、

SET文、および

プログラム終了見出しから1つの実行単位を構成するいくつかのプログラムに付けられたプログラム名は、必ずしも一意であるとは限らない。しかし、1つの実行単位中の2つのプログラム名が同じである場合、少なくとも一方のプログラムは、もう一方のプログラムを含まない別のプログラムの中に直接的または間接的に含まれていなければならない。

プログラム名の適用範囲を規定する規則は、下記のとおり。

  1. 共通属性がなく、他のプログラムに直接的に含まれるプログラムのプログラム名は、親プログラム中の文からだけ参照できる。

    または、プログラムに再帰的な属性がある場合は、そのプログラム自体の内部から参照できる。

  2. 共通属性をもち、他のプログラムに直接的に含まれるプログラムのプログラム名は、親プログラム中の文、および親プログラムに直接的または間接的に含まれるプログラム中の文からだけ参照できる。

    ただし、共通属性をもつプログラムおよびそのプログラムに含まれるプログラムからは、そのプログラムが再帰的な属性を持つ場合を除き、そのプログラム名を参照できない。

  3. 他のプログラムに含まれないプログラムのプログラム名は、実行単位中の他のどのプログラム中の文からも参照できる。ただし、このプログラムに直接的または間接的に含まれるプログラムからは例外とする。

条件名、データ名、ファイル名、レコード名、報告書名、
型定義名に関する表記法

原始要素の中に条件名、データ名、ファイル名、レコード名、報告書名、

および型定義名

が宣言されている場合、これらの名前はその原始要素の中でだけ参照できる。ただし、これらの名前のうちのいくつかが大域的に使用され、その原始要素中に他の原始要素が含まれる場合は、含まれる他の原始要素からも参照できる。

単一の原始要素の条件名、データ名、ファイル名、レコード名、報告書名、

および型定義名

に付けた名前の一意性に関する必要条件については、前述COBOLの語の節の利用者語の解説を参照。

ある原始要素の中で、その中に含まれる原始要素中に宣言されている条件名、データ名、ファイル名、レコード名、報告書名、

および型定義名

は参照できない。

大域名は、それが宣言されている原始要素の中、あるいはその原始要素に直接的または間接的に含まれている原始要素の中から参照できる。

原始要素Aに原始要素Bが直接的に含まれている場合、両方の原始要素で条件名、データ名、ファイル名、レコード名、報告書名、

および型定義名

をそれぞれ同じ利用者語を使用して設定できる。両方の原始要素中に存在する名前を原始要素B中で参照した場合、下記の規則に従って、どちらのものを指すかが判定される。

  1. 原始要素A中に定義されているすべての大域名、および原始要素A及び原始要素B中に定義されているすべての名前が、参照された名前がどちらの原始要素に属するものかを判定するために使用される。そして、通常の修飾規則および参照の一意性に関するその他の規則が適用されて、該当するものがいくつか見つけ出される。

  2. 該当するものが1つしか見つけ出されなかった場合、それが参照されたものである。

  3. 該当するものが2つ以上見つけ出された場合、原始要素B用の名前は2つ以上はあり得ない。原始要素B用の名前をもつものがないかまたは1つある場合、下記の規則を適用する。

    1. 参照された名前が原始要素Bの中で宣言されているならば、原始要素B中のものが参照されたとする。

    2. これ以外の場合、原始要素Aが他の原始要素に含まれているならば、下記のように判定する。

      1. 参照された名前が原始要素Aの中で宣言されているならば、原始要素A中のものが参照されたとする。

      2. 参照された名前が原始要素Aの中ではなく、原始要素Aを含む原始要素中で宣言されているならば、原始要素Aを含む原始要素中のものが参照されたとする。更に上位の原始要素があるならば、単一の有効な名前が見つかるまで、この規則を順次上に適用する。

指標名に関する適用規則

大域的属性をもつデータ項目が指標名を記述した表を含む場合、その指標名も大域的属性をもつことになる。したがって、指標名の範囲は、その指標名によって名付けられる指標を持つ表に名前を付けるデータ名のものと同じであり、データ名用の名前の範囲規則が適用される。

指標名を修飾することはできない。

指標名は修飾することができる。

クラス名(オブジェクト指向の場合) およびインターフェイス名の適用規則

ソース要素内で参照されるクラスのクラス名は、それを含むクラス定義の名前であるか、またはそのソース要素またはそれを含むソース要素の

またはクラス管理段落

内に宣言されていなければならない。

該当のクラス名に関して翻訳集団内で定義できるクラス定義は1つだけである。その翻訳集団内に定義がなくともかまわない。

ソース要素内で参照されるインターフェイスのインターフェイス名は、それを含むインターフェイス定義の名前であるか、またはそのソース要素またはそれを含むソース要素のリポジトリ段落内に宣言されていなければならない。

該当のインターフェイス名に関して翻訳集団内で定義できるインターフェイス定義は1つだけである。その翻訳集団内に定義がなくともかまわない。

ソース要素のクラス管理段落またはリポジトリ段落内で宣言されたクラス名またはインターフェイス名は、そのソース要素およびそれにネストされるソース要素の中で使用できる。

ソース要素のクラス管理段落で宣言されたクラス名またはインターフェイス名は、そのソース要素および内包されるソース要素の中で使用できる。

メソッド名の適用規則

メソッドのメソッド名はメソッド名段落中に宣言する。メソッド名を参照できるのは、INVOKE文、メソッド終了見出し、および行中のメソッド呼出しだけである。

クラス定義中に宣言されるメソッドのメソッド名は、そのクラス定義内で一意であるものとする。子クラス内で宣言されるメソッドの名前が親クラスのものと同じであってもかまわない。 ただし、メソッド名段落の条件に従うものとする。

インターフェイス定義中に宣言されるメソッドのメソッド名は、そのインターフェイス定義内で一意であるものとする。継承を受けるインターフェイス内で宣言されるメソッドの名前が継承元のインターフェイスのものと同じであってもかまわない。ただし、メソッド名段落に記述されている条件に従うものとする。

関数プロトタイプ名の適用規則

ソース要素中で参照される関数プロトタイプ名は、それを含む関数定義であるか、または、レポジトリ段落とソース要素のいずれかで宣言されていなければならない。

関数プロトタイプ名がレポジトリ段落で指定され、かつ、その関数プロトタイプ名を宣言する関数プロトタイプが同じ翻訳集団中で指定されている場合は、指定された関数プロトタイプ名が使用され、外部レポジトリ中のこのプロトタイプの情報は無視される。

プログラムプロトタイプ名の適用規則

ソース要素中で参照されるプログラムプロトタイプ名は、それを含むプログラム定義のプログラム名、またはレポジトリ段落で宣言されたプログラムプロトタイプ名でなければならない。

プログラムプロトタイプがレポジトリ段落で指定され、かつ、同じプログラムプロトタイプ名を宣言するプログラムプロトタイプが同じ翻訳集団中で指定されている場合は、指定されたプログラムプロトタイプが使用され、このプロトタイプの外部レポジトリ中のこのプロトタイプの情報は無視される。

定数

定数(literal)とは、以下のいずれかである。

各定数は、文字定数、数字定数、および各国語型定数のいずれかに属する。

文字定数

文字定数(nonnumeric literal)とは、計算機の文字集合中で利用できる任意の文字を並べて、両端を引用符

またはアポストロフィ

で区切ったものである。文字定数の長さは1文字以上160文字以内である。引用符

またはアポストロフィ

を区切り文字として使用した場合、文字定数内にその区切り文字を含めるには、その文字を2つ並べて書く。 区切り文字ではない文字を文字定数内に含めるには、その文字を1つだけ書く。ランタイム要素中での文字定数の値は文字の列そのものである。ただし、次の条件がある。

その他の句読文字はすべて、分離符ではなく、文字定数の一部を構成する。すべての文字定数の項類(category)は英数字(alphanumeric)である。(データ部 - データ記述の章のPICTURE(形式)句の節を参照。)

さらに、16進数を文字定数として扱うことができる。このためには、X"nn" という形式で文字定数を書き表わす。ここで、n は0-9とA-Fの16進文字を表わす。nn は160回まで繰り返すことができる。ただし、nの個数は偶数とする。

16進桁の個数は奇数でもよい。

数字定数

数字定数(numeric literal)は、固定小数点数でも浮動小数点数でもよい。

固定小数点数の数字定数

数字定数は、"0"から"9"までの数字と正号、負号、小数点からなる文字列である。この処理系では、数字定数の長さは1文字以上18文字以内である。数字定数を作る際には、下記の規則が適用される。

上記の規則に適合するが、引用符で囲まれている定数は、文字定数として扱われる。

標準データ形式の文字で表した数字定数の大きさは、利用者が指定した数字の桁数に等しいものとする。

さらに、16進数を数字定数として扱うことができる。このためには、 H"nn" という形式で文字定数を書き表わす。ここで、nは0-9とA-Fの16進文字を表わす。nn は8回まで繰り返すことができる。ただし、nの個数は偶数とする。

浮動小数点数の数字定数

浮動小数点数定数の書き方は下記のとおり。

仮数部と指数部の符号は、付けても付けなくてもよい。符号を省略すると、正の数として扱われる。

仮数部の長さは、1文字以上16文字以内である。仮数部には小数点を含めなければならない。

指数部は、Eに続けて符号を記した後に、1文字または2文字で指定する。ただし、符号は付けても付けなくてもよい。

浮動小数点定数の値の範囲は、0.54E-78から0.72E+76までである。この範囲から外れる値に対しては診断メッセージが出され、値はそれぞれ0または0.72E+76で置き換えられる。整数の数値定数が必要なときに、浮動小数点数の数値定数を使用しないように、注意すること。

各国語型定数

各国語型定数は、計算機内の保存場所で同一サイズの文字で表示される、一連の各国語文字である。詳しくは、使用しているCOBOLシステムの各国語データ(Unicode)に関する文書を参照。

一般形式

形式 1

形式 2

構文規則

全形式共通

  1. 各国語型定数の長さは、分離符を除き、0より大きく 160 以上の文字数でなければならない。

  2. 文字、1 は、各国語文字の間に対応関係のあるいずれかの文字コードである。

形式 1

  1. 左側の区切り記号で使用される引用記号に符合する、2個の連続した引用符号は、定数では、1個の引用符号と見なされる。この引用符号は、左側の引用符号と同じ文字コードセットに属するものでなければならない。

形式 2

  1. 各16進文字列-1 は、上位のバイトから順に符号化された4桁の16進数(2バイト)である。

一般規則

全形式共通

  1. 各国語型定数を区切る分離符は、各国語型定数の値には含まれない。

  2. 各国語型定数は、クラスおよび種別としての国を表す。

形式 1

  1. 翻訳時の定数の値は、計算機の翻訳時にコーディングされた文字セットに含まれる文字-1の個数である。

    実行時の定数の値は、定数の翻訳時の値の、対応する実行時の値への変換の結果である各国語文字である。

形式 2

  1. 実行時の定数の値は、各国語文字である。各文字は、1個だけ含まれる16進文字列-1により指定されたビット構成を含む。

表意定数の値

表意定数の値は、COBOLシステムによって作り出される。その値を、下記の予約語を使用して参照する。表意定数として使用するときは、この予約語を引用符で囲んではならない。表意定数の単数形と複数形の値は同じであるので、どちらを使用してもよい。 

表意定数の値、およびそれらを参照するために使用する予約語を表 2-1に示す。

表  2-1: 表意定数の値と対応する予約語
定数 内容
ZERO
ZEROS
ZEROES
値"0" を表わす。文脈によっては1つ以上の文字"0" を表わす
SPACE
SPACES
計算機の文字集合から1つ以上の空白文字を表わす
HIGH-VALUE
HIGH-VALUES
文字の照合順序の最も高い文字を1つ以上表わす(拡張ASCII文字集合ではx"FF")
LOW-VALUE
LOW-VALUES
文字の照合順序の最も低い文字を1つ以上表わす(拡張ASCII文字集合ではx"00")
QUOTE
QUOTES
1つ以上の文字「" 」を表わす。数値定数をくくるために、原始プログラム中で引用符の代りにQUOTEまたはQOUTESを使用することはできない。したがって、"ABD" を表わすために、QUOTE ABD QUOTEと記すのは誤りである。
ALL literal

指定された文字が何文字か含まれる文字列を表わす。定数は、文字定数または

各国語型定数、または

表意定数でなければならない。ただし、定数としてALLを指定することはできない。

この文字定数または各国語型定数は、連結式の場合もある。

定数として表意定数を指定した場合、ALLは読みやすくするためだけに用いられる。
NULL
NULLS
1つ以上の未設定ポインタ値

または手続きポインタ値

を表わす。USAGE POINTER

またはPROCEDURE-POINTER

を持つデータ項目、および値がNULLであるポインタ変数はどのデータ項目

または手続き

も指さないことが保証される。

NULL値は環境間で変化し、通常、各環境用のCOBOL以外の言語で使用される等しい値と一致する。

表意定数が何文字かの文字列を表わす場合、その長さは文脈に応じて、COBOLシステムによって決定される。その際、以下の規則が順に適用される。

  1. 表意定数が連結式として指定されているときは、文字列の長さは1文字となる。

  2. 表意定数をVALUE(値)句内で指定した場合、または表意定数を他のデータ項目と関係付けた(たとえば、表意定数を他のデータ項目に転記したり、他のデータ項目と比較したりした)場合、表意定数に指定した文字が1文字ずつ右方向に継ぎ足され、その長さが対応するデータ項目と等しいかそれより大きくなったところで止められる。次いで、得られた文字列が右側から順次切り詰められ、残っている文字数が1または対応するデータ項目の長さのどちらか大きい方と等しくなったところで止められる。JUSTIFY(けたよせ)句が指定されている場合、この処理はそれよりも先に独立して行われる。

  3. 「ALL 定数」以外の表意定数のときは、文字列の長さは1文字となる。

  4. 文字列の長さは定数の長さとなる。

    DISPLAY文の形式 3 における表意定数の使用は、その一般規則で説明する通り、特別な効果を持つ。

形式に定数が示されているところでは、どこでも表意定数を使用できる。ただし、数字定数に限定されている箇所では、表意定数はZERO(ZEROS, ZEROES)だけを使用できる。

表意定数のHIGH-VALUE(S)またはLOW-VALUE(S)を使用した場合、 , 実際に表意定数が表わす文字は、指定されている文字の照合順序によって決まる。(環境部の章の実行用計算機段落および特殊名段落の節を参照。)

表意定数を表わす予約語は、それぞれが独立した文字列である。ただし、「ALL 定数」は例外で、2つの別々の文字列から構成される。

表意定数のQUOTE/QUOTESの値は、指令のAPOSTおよびQUOTEの影響を受ける。

定数の長さが2桁以上ある表意定数の「ALL 定数」を数字項目または数字編集項目に関係付けることは、ANSI '85標準では廃要素に分類される。これはANSI標準の次の全面改訂時に削除される予定である。

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

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

定数名

定数名(constant-name)とは、データ部の78レベルのデータ記述項(data description entry)に指定した利用者語である。形式に定数が示されているところでは、どこにでも定数名を使用できる。定数名の働きは、そのデータ記述項に値として指定した定数を書いたのと同じ結果が得られることにある。形式に整数の定数が示されているところでは、整数の値をもつ定数名を使用することができる。例としては、レベル番号、区分番号、PICTURE文字列が挙げられる。

定数名は、定義した後でだけ使用できる。定数名は前方参照の対象とはならない。

連結式

連結式は、連結演算子で分離された2個の作用対象から成る。

一般形式

構文規則

  1. 両方の作用対象は同じ字類とする。ただし、表意定数は1つまたは両方の作用対象を構成してもよい。作用対象は数字にはできない。定数-1も定数-2も、語ALLで始まる表意定数にはできない

  2. 連結の結果である値のサイズは、160文字以下でなければならない。

一般規則

  1. 連結演算の結果としての連結式の字類は、以下のいずれかとなる。

    1. 作用対象の1つが表意定数の場合、他の作用対象を構成する連結式または定数の字類

    2. 作用対象の両方が表意定数の場合、字類は英数字である

    3. 作用対象と同じ字類

  2. 連結式の値は、それを構成する定数、表意定数、連結式の値を連結したものである。

  3. 連結式は、同じ字類および値をもつ定数とまったく等しい。その字類の定数を使えるところには、どこにでも連結式を使用できる。

特殊レジスタ

特殊レジスタ(special register)は、COBOLシステムによって作成されるデータ項目または一時的な値である。特殊レジスタを参照するには、対応する名前または式を使用する(表 2-2参照)。 その際、以下に示す特別な規則が適用される。また、特殊レジスタには暗黙のデータ記述(PICTURE)が想定される。

表 2-2: 特殊レジスタ
特殊レジスタ名または式 暗黙のデータ記述PICTURE 使用法
ADDRESS OF データ名1 USAGE IS POINTER データ名-1の番地を示すポインタ値を生成する。この式は、使用する文で一般形式として明示的に指定する。データ名-1は、連絡節で01レベルおよび77レベルのデータ項目として 宣言される。

または、データ部の各所で各レベル番号で宣言する。

CURRENT-DATE1 X(8) 現在の日付が記録される。(この日付けは、COBOL 実行環境から提供される。) 次の形式をしている。
MM/DD/YY
MM は月を、 DDは日を、YY は年(1900年からの下2桁)を表わす数字である。CURRENT-DATEはMOVE文の送出し側としてだけ使用できる。
DEBUG-ITEM 可変長のグループ項目 デバッギング節が実行された原因となった理由に関する情報を表す。詳しくは、言語リファレンス - 追加トピックデバッグモジュールの章を参照。
LENGTH OF データ名-22 9(9) データ名-2によって使用される、記憶領域の現在の
バイト数を示す値を生成する。この式は、数字データ項目を使用できるところであればどこでも使用できる。ただし、添字付けまたは部分参照は例外とする。

レベル78項目の値を設定して使用することもできる。

LINAGE-COUNTER   レコード順ファイル記述の中にLINAGE句が存在する場合に生成される。整数1または、LINAGE句のデータ名1が参照するデータ項目と同じサイズの、符号のつかない整数を説明しているとされる。
RETURN-CODE3 S9(4) COMP



S9(9) COMP

以下が可能となる。
  • プログラムによって値を設定する。STOP RUN文、EXIT PROGRAM文、またはGOBACK文を実行する前に値を設定することで、呼出し元のランタイム要素 (または実行環境) に値を渡すことができる。

  • 他のCOBOLプログラムをCALLした後で読み出して、呼ばれたプログラムによって設定されたRETURN-CODEの値を入手する。

プログラムの実行を最初に開始するときには、そのプログラムのRETURN-CODEはゼロに設定される。手続き部の文の中で基本データ項目を参照できるところならば、どこでもRETURN-CODEをデータ名として使用できる。

SHIFT-IN X(1) 文字の表現形式を2バイト文字から1バイト文字に戻すために使用する。該当する環境において用いる。
SHIFT-OUT X(1) 文字の表現形式を1バイト文字から2バイト文字に切り替えるために使用する。該当する環境において用いる。
SORT-CONTROL

SORT-CORE-SIZE
SORT-FILE-SIZE
SORT-MESSAGE
SORT-MODE-SIZE


X(8)

S9(8) COMP
S9(8) COMP
X(8)
S9(5) COMP

これらの特殊レジスタを手続き部の中で参照できる。ただし、その値はゼロ(数字レジスタの場合)または空白(英数字レジスタの場合)である。
SORT-RETURN S9(4) COMP SORT手続きを異常終了させるために使用できる。このレジスタに値16を入れると、次のRELEASEまたはRETURNの後でSORT処理は停止される。
TALLY 9(5) COMP EXAMINE...TALLYING文によって作成される情報が記録される。手続き部の文の中で基本データ項目を参照できるところならば、どこでもTALLYをデータ名として使用できる。
TIME-OF-DAY 9(6) DISPLAY 現在の時刻(24時間制)が記録される。 (この時刻はCOBOL 実行環境から提供される)次の形式をしている。
hhmmss
hh は時間を、 mmは分を、 ssは秒を表わす数字である。TIME-OF-DAY は、MOVE文の送出し側としてだけ使用できる。
WHEN-COMPILED X(20)

COBOL 翻訳集団がCOBOLシステムに投入された時刻と日付が記録される。次の形式をしている。
hh.mm.ssMMM DD, YYYY
hhは時間(24時間制)を、 mmは分を、 ssは秒を、MMMは月の名前(頭の3文字)、DDは日を、YYYYは年を表わす。

WHEN-COMPILEDはMOVE文の送出し側としてだけ使用できる。

WHEN-COMPILED X(20)

COBOL 翻訳集団がCOBOLシステムに投入された時刻と日付が記録される。次の形式をしている。
MM/DD/YYhh.mm.ss
DD、hh、mmssは上記の通り。 YYは年の下2桁、MMは月を表わす。

WHEN-COMPILEDはMOVE文の送出し側としてだけ使用できる。

XML-CODE S9(9) COMP

XMLパーサと、XML PARSE文に記述された処理手順との間で状況を伝達するために使用される。XMLパーサは、各イベントのXML-CODEを解析の終了時に設定する。利用者は、通常のイベントの後に、処理手順のXML-CODEを-1にリセットすることができ、これにより、XMLパーサが利用者の操作による例外として終了したことが示される。これは、返されたXML-CODEの値、-1で示されるEXCEPTION XMLイベントとは区別される。

XML-EVENT4 X(30)

XMLパーサからのイベント情報を、XML PARSE文に記述された処理手順に伝達するために使用される。XMLパーサは、制御を処理手順に渡す前に、XML-EVENT特殊レジスタをXMLイベントの名前に設定する。XML-EVENTはデータを受領する項目として使用することはできない。

XML-NTEXT4  

XML解析中に定義され、USAGE NATIONALである文書片を含む。XML-NTEXTは、含まれているXML文書片のサイズの、初歩的な各国語データ項目である。XML-NTEXTのサイズは、実行時に動的に変化する。

XML PARSE文の演算数が各国語データ項目である場合、ATTRIBUTE-NATIONAL-CHARACTERおよびCONTENT-NATIONAL-CHARACTERイベントに関しては、XMLパーサは、XML-NTEXTをイベントに関連づけられた文書片に設定した後で、制御を処理手順に渡す。

XML-NTEXTが設定されている場合、XML-TEXT特殊レジスタのサイズは0となる。どの時点でも、サイズが0でないのは、XML-NTEXTとXML-TEXT特殊レジスタのいずれかのみである。

XML-NTEXTに含まれる各国語文字の数を決定するには、LENGTH関数を使用すること。

XML-NTEXTは、受領する項目としては使用できない。

XML-TEXT4  

クラス文字である文書片を内包するためのXML解析中に定義される。XML-TEXTは、内包されるXML文書片のサイズの、初歩的な文字データ項目である。XML-TEXTのサイズは、実行時に動的に変化する。

XML PARSE文の演算数が文字データ項目である場合、ATTRIBUTE-NATIONAL-CHARACTERおよびCONTENT-NATIONAL-CHARACTERイベントを除き、XMLパーサは、XML-TEXTをイベントに関連づけられた文書片に設定した後で、制御を処理手順に渡す。

XML-TEXTが設定されている場合、XML-NTEXT特殊レジスタのサイズは0となる。どの時点でも、サイズが0でないのは、XML-NTEXTとXML-TEXT特殊レジスタのいずれかのみである。

XML-TEXTに含まれるバイト数を決定するには、LENGTH関数または、XML-TEXT用LENGTH OF特殊レジスタを使用すること。

XML-TEXT は、受領する項目としては使用できない。

1 CURRENT-DATE特殊レジスタの内容の形式は、CURRENT-DATE指令の影響を受ける。
2 LENGTH OF特殊レジスタは、Micro Focus 方言では英数字定数で続けても構わない。
3 RETURN-CODE特殊レジスタのサイズは、XOPEN指令およびRTNCODE-SIZE指令の影響を受ける。
4 XML-TEXT および XML-NTEXT の内容は、XML-EVENTの内容により変化する。詳しくは、表 2-3 を参照。

表 2-3:XML-EVENTおよびXML-NTEXTまたは XML-TEXT特殊レジスタの内容
XML-EVENTの内容 XML-TEXTまたはXML-NTEXTの内容
ATTRIBUTE-CHARACTER 属性値の中の、定義済みの参照に対応する単一の文字。
ATTRIBUTE-CHARACTERS 引用符またはアポストロフィに囲まれた値。値に参照が含まれる場合は、属性値に含まれる文字列の一部でもあり得る。
ATTRIBUTE-NAME 属性名で、=の左にある文字列。
ATTRIBUTE-NATIONAL-CHARACTER XML PARSE文中の一意名-1で指定されたXML文書の種類にかかわらず、XML-TEXTは空(から)で、XML-NTEXTは、数字参照に対応する単一の各国語文字を含む。
COMMENT 左側の文字列、"<!--"と右側の文字列、"-->"の間の注釈テキスト。
CONTENT-CHARACTER 要素内容の中の、定義済みの参照に対応する単一の文字。
CONTENT-CHARACTERS 開始タグと終了タグの間の要素内容。ここに他の要素への参照が含まれる場合は、要素内容中の文字列の一部でもあり得る。
CONTENT-NATIONAL-CHARACTER XML PARSE文中の一意名-1で指定されたXML文書の種類にかかわらず、XML-TEXTは空(から)で、XML-NTEXTは、数字参照に対応する単一の各国語文字を含む(1)。
DOCUMENT-TYPE-DECLARATION 左右の文字列、 "<!DOCTYPE"および">"を含む、文書種別宣言全体。
ENCODING-DECLARATION 引用符またはアポストロフィに囲まれたXML宣言中の符号化宣言の値。
END-OF-CDATA-SECTION つねに文字列、"]]>"を含む。
END-OF-DOCUMENT 空で、サイズは0。
END-OF-ELEMENT 終了要素タグまたは空要素タグの名。
EXCEPTION 走査が完了した文書の一部で、例外が検出された場所までの部分(2)。特殊レジスタ、XML-CODEは、例外を示す一意のエラー符号を含む(3)。
PROCESSING-INSTRUCTION-DATA 右側の文字列、"?>"を除く、処理指示の残りの部分。ただし、直後の空白文字は含まれるが、直前の空白文字は含まれない。
PROCESSING-INSTRUCTION-TARGET 処理指示の対象の名で、処理指示の左側の文字列、"<?"の直後に置かれる。.
STANDALONE-DECLARATION 引用符またはアポストロフィに囲まれた、XML宣言中の独立した宣言の値。
START-OF-CDATA-SECTION つねに、文字列、"<![CDATA["を含む。
START-OF-DOCUMENT 文書全体。
START-OF-ELEMENT 開始要素タグまたは終了要素タグの名。要素種別としても知られる。
UNKNOWN-REFERENCE-IN-CONTENT 参照名。ただし、区切り記号、"&"および ";"を除く。
UNKNOWN-REFERENCE-IN-ATTRIBUTE 参照名。ただし、区切り記号、"&"および ";"を除く。
VERSION-INFORMATION 引用符またはアポストロフィに囲まれた、XML宣言中の版宣言の値。これはつねに"1.0"。

(1) 65,535 (NX"FFFF")より大きいスカラ値を持つ各国語文字は、2つの符号化単位(代理組)を使用して表記される。この符号化単位が、XML-NTEXTの内容についての操作により分離されないよう注意する必要がある。2つの符号化単位で1つの図形文字を形成するため、分離すると無効なデータとなる。
(2) 符号化の競合の例外は、解析が開始される前に報告される。これらの例外がある場合は、XML-TEXTは、サイズが0であるか、文書からの符号化宣言の値のみを含む。
(3) XML例外符号について詳しくは、IBM Enterprise COBOL Programming Guideを参照。このマニュアルに記載されていない例外には必ず、201という値が返される。

定義済みオブジェクト一意名

定義済みオブジェクト一意名は、以下の通り。

定義済みオブジェクト一意名 使用方法
SELF 現在のメソッドの実行対象となっているオブジェクトを参照する。メソッドの手続き部で使用できる。SELFが使用されているメソッドを呼び出すために使用されたオブジェクトを参照する。メソッド呼出しにSELFを指定すると、該当のオブジェクトに関して宣言されているすべてのメソッドが検索の対象となる。
SELFCLASS 現在のオブジェクト(SELF)のクラス・オブジェクトであるオブジェクトを参照する。SELF自体がクラス・オブジェクトである場合は、SELFCLASSはシステム・クラスのBEHAVIORとなる。クラス・オブジェクトのBEHAVIORは自己参照を終了させる働きをする。(つまり、SELFがクラスのBEHAVIORであるならば、SELFCLASSもそうである。)
SUPER 現在のメソッドの実行対象となっているオブジェクトを参照する。メソッドの手続き部で使用できる。INVOKE文でメソッドを呼び出すのに使用されたオブジェクトでありうる。SELFが使用されているメソッドを呼び出すために使用されたオブジェクトを参照する。メソッド呼出しにSUPERを指定すると、実行中のメソッドと同じクラス内に定義されているすべてのメソッドが検索の対象外とされる。
NULL 空のオブジェクト参照値を参照する。それはオブジェクトを絶対に参照しないことが保証された固有の値である。NULLは暗黙的にクラス・オブジェクトおよび項類オブジェクト参照として記述されており、一般的オブジェクト参照ではない。受取り側の作用対象にNULLを指定してはならない。

PICTURE文字列

PICTURE文字列は、記号として使用されるCOBOLの文字集合の中の、ある種の文字を組み合わせたものである。PICTURE文字列の構成および使用上の規則の詳細については、データ部 - データ記述の章のPICTURE(形式)節を参照。

PICTURE文字列の指定の中に現れる句読文字は、句読文字としては解釈されない。それらはそのPICTURE文字列の指定の中で使われている記号として解釈される。

注記項

注記項(comment-entry)は見出し部の記述項であり、計算機の文字集合中の任意の文字の組合せからなる。注記項は注記を書く目的でのみ使用する。1行以上書くことができ、行のA領域で、予約語である部名、節名、段落名のいずれかが出たところ、

または任意の文字が出たところ

で終了される。標識領域にハイフンを書いて注記項を続けることは許されない。

形式と規則

一般形式

一般形式(general format)とは句や文の要素の並べ方を指す。このマニュアルでは、句または文を定義する記述のすぐ後ろに一般形式を示す。 2通り以上の並べ方がある場合には、一般形式をいくつかに分けて番号を付けて示す。句は一般形式に示された順番どおりに書かなければならない。任意に指定する句でも、指定する場合には所定の位置に書かなければならない。場合によっては、示された以外の順序で句を記してもよいことがある。その場合は、関連する規則にその旨を明記する。適用範囲、必要条件、制限事項は規則の項に説明する。

構文規則

構文規則(syntax rule)とは、語や要素を並べて句や文などの大きな要素にまとめる際の規則を指す。構文規則によって、個々の語や要素に制限が課される場合もある。

構文規則は文の形式を定義したり、明確に規定するものである。つまり、文の要素を並べる順序や各要素が表現するものに関する制限を規定する。

一般規則

一般規則(general rule)とは、単一の要素または一連の要素の意味または意味の関連を定義したり明確に規定したりする規則を指す。この一般規則によって、文の意味や、実行または中間コードの生成に文が与える影響が明確にされる

要素

句や文を構成する要素(element)には、大文字で記した語、小文字で記した語、レベル番号、角かっこ、中かっこ、連結語および特殊文字がある。

機種に依存しないデータ記述の概念

データを、できるかぎり機種に依存しないものとするために、データの性質や特性は装置向けの形式ではなく、標準データ形式で記述する。この標準データ形式は一般のデータ処理応用に向いている。10進数は、計算機の基数系にかかわらず、数値を表現するために使用する。COBOL文字集合中のその他の文字は、文字データ項目を表現するために使用する。

レベルの概念

レコードは、レベル構造の概念に従って構成される。この概念は、データを参照するためにレコードを細分化する必要があることから生ずる。いったん細分化したものをさらに細分して、もっと細かいデータとして参照できる。

レコードを最も基本的な単位に細分したもの、つまりそれ以上細分できないものを、基本項目(elementary item)という。したがって、レコードは一連の基本項目から構成されるといえる。または、レコード自体が1つの基本項目である場合もある。

一組の基本項目を参照するために、それらをまとめて集団にする。各集団はいくつかの基本項目を並べて名前を付けたものである。さらに、集団をいくつかまとめて集団とすることもできる。したがって、ある基本項目は何階層もの集団に属することがある。

レベル番号

レベル番号(level-number)は、基本項目と集団項目(group item)の構成を表わす。レコードはデータ項目のうちの最も包括的なものであるので、レコードのレベル番号は 01から始まる。レコードに含まれるデータ項目には、01より大きいレベル番号を付ける。ただし、レベル番号は連続している必要はなく、49を超えないものとする。1レコードに含められるレベル数の最大は49である。この規則の例外である特殊なレベル番号として、66, 77,

78

および88がある(下記を参照)。各レベル番号を用いるごとに、それぞれ記述項を書く。

ある集団は、それに続く集団項目か基本項目のレベル番号に、その集団のレベル番号に等しいか、小さいものが出てくるまでのすべてを含む。ある集団項目に直接属する項目はすべてその集団項目のレベル番号よりも大きな同一のレベル番号を使用しなければならない。

この規則は強制されない。

例:

正しい
正しくないが、許される
01 A.
  05 C-1.
    10 D PICTURE X.
    10 E PICTURE X.
  05 C-2.
01  A.
  05 C-1.
    10 D PICTURE X.
    10 E PICTURE X.
 04 C-2.

レベルの概念が当てはまらない記述項が、以下の4種類存在する。

  1. RENAMES(再命名)句で作った基本項目または集団項目の記述項

  2. 作業場所節および連絡節で独立の項目を指定する記述項

  3. 条件名を指定する記述項

  4. 定数名を指定する記述項

RENAMES句を用いてデータ項目を再編成するための記述項には、特別のレベル番号66を使用する。

他の項目を細分したのではなく、それ自体も細分されない、独立のデータ項目用の記述項には、特別のレベル番号77を使用する。

条件変数の特定の値に関連付ける条件名を指定するための記述項には、特別のレベル番号88を使用する。

特定の定数の値に関連付ける定数名を指定するための記述項には、特別のレベル番号78を使用する。



図 2-1: 階層構造をとるレベル番号の例

COBOL原始コードを段落付けで書くのは読みやすくするためであって、文法的に必要なわけではない。

基本項目は、定義上、下位レベルの(レベル番号の大きい)記述項が後ろに続かない項目である。基本項目には、記憶域を定義しなければならない。(データ部 - データ記述の章のPICTURE(形式)句およびUSAGE(用途)句の各節を参照。)

基本項目(上記で"*"を付けたもの)およびFILLER(無名)項目(上記で"#"を付けたもの) だけに記憶域が明示的に取られることに注意すること(これはPICTURE句の働きによる)。集団項目の記憶域は、それに属する下位項目の大きさと桁詰めに必要なバイト数に基づいて、暗黙的に取られる。(データ部 - データ記述の章のSYNCHRONIZED(桁詰め)句節を参照。)

では、分かりやすくするために、レベル番号を連続的に付けた。しかし実際には、レベル番号を連続的に付ける必要はない。したがって、01の次の下位レベルのレベル番号が05、さらにその下位レベルのレベル番号が10といった具合いにしてもよい。

図のデータ・レコード用に取られる記憶域は以下のように構成される。



図 2-2: データ・レコード記憶域の割り当て

ここで、

R-E-I はレコード・エントリ項目(Record-Entry-Item)
M-G-I は主集団項目(Major-Group-Item)
R-G-I は一般集団項目(Regular-Group-Item)
S-G は従集団(Sub-Group)
EI は基本項目(Elementary-Item)
NEI は独立基本項目(Noncontiguous Elementary-Item)

データの字類と項類

基本データ項目、定数、関数は、それぞれ字類と項類を持つ。データ項目の字類と項類は、そのPICTURE文字列か、BLANK WHEN ZERO句か、用途によって定義する。定数の字類と項類については、前述の定数節を参照。

また、組み込み関数の字類と項類は、組み込み関数の定義によって記述する。(手続き部 - 組み込み関数の章を参照。

集団項目の項類は英数字である。

基本項目の字類と項類の関係を、表にして下に示す。

図 2-3: 基本項目の字類と項類の関係
字類 項類
英字 英字
英数字
英数字
2バイト文字
指標 指標
各国語 各国語」
数字 数字
内部浮動小数点数
外部浮動小数点数
オブジェクト オブジェクト参照
ポインタ ポインタ
プログラムポインタ

算術符号

算術符号は、次の2つの項類に分類される。

  1. 演算符号(operational sign)は、符号付き数字データ項目または符号付き数字定数に付けて、その代数的特性を示すものである。

  2. 編集用符号(editing sign)は、編集された報告書上で、項目の符号を表示するために使用する。

SIGN(符号)句を使用して、演算符号の位置を明示的に指定できる。この句は指定してもしなくてもよい。演算符号については、後述の文字の表現と基数の選定節を参照。

編集用符号は、PICTURE句の符号編集用文字を用いて、データ項目に挿入する。

標準桁寄せ規則

基本項目内にデータを収めるときの標準規則は、受取り側データ項目の項類によって決まる。その規則は以下のとおり。

  1. 受取り側データ項目が数字である場合

    1. データは小数点の位置を合わせて、受取り側に収められる。このとき、必要に応じて、端にゼロが補われたり、端が切り捨てられたりする。

    2. 想定小数点(assumed decimal point)を明示的に指定していない場合、データ項目の右端に想定小数点があるものとみなされ、後は上記a.と同様に扱われる。

  2. 受取り側データ項目が数字編集データ項目である場合、データは小数点の位置を合わせて、受取り側に収められる。このとき、必要に応じて、端にゼロが補われたり、端が切り捨てられたりする。ただし、編集操作によって先行ゼロ列(leading zeros)が置き換えられた場合は、ゼロは補われない。

  3. 受取り側データ項目が英数字(英数字編集を除く)、英数字編集、英字のデータ項目である場合、送出し側データは左側を揃えて受取り側データに転記される。このとき、必要に応じて、右端に空白が補われる場合や、右端が切り捨てられる場合がある。
  4. 受取り側データ項目が外部浮動小数点数である場合、データは左端の文字位置をそろえられる。それに応じて、指数部が調整される。

受取り側にJUSTIFIED(桁寄せ)句を指定した場合、データ部 - テータ記述の章のJUSTIFIED(桁寄せ)節の記述に従って、桁寄せ規則が修正される。

実行用プログラムの効率を高めるための項目の桁詰め

ある種の計算機の記憶装置は、番地付けのための境界(語の境界、半語の境界、バイトの境界)をもつように構成されている。データの格納では、 これらの境界を意識する必要はない。

しかし、データのある種の使い方(算術演算や添字など)では、データが番地付けのための境界に合わせて記憶されている方が効率のよい場合がある。特に、複数個のデータ項目の部分が隣り合う2つの境界の間に含まれていたり、1つのデータ項目が境界によって分断されていたりすると、これらのデータを呼び出したり記憶したりするための、余分な機械命令がランタイム要素の中で必要になる。

余分な機械命令を必要としないように、データ項目を境界に合わせて配置することを、桁詰め(synchronization)という。桁詰めされた項目はその形式に合わせて処理される。桁詰めされた形式への変換は、項目へデータを収める手続き(READとWRITEを除く)を実行するときにだけ行われる。

桁詰めを行う方法には、下記の2通りがある。

  1. SYNCHRONIZED(桁詰め)句を使用する。

  2. SYNCHRONIZED句を使わずに、適切な境界に合わせてデータを構成する。

SYNCHRONIZED句を使用して集団内で特別な桁詰めを行うと、作用対象にその集団を指定している文の実行結果に影響を及ぼすことがある。 暗黙のFILLERの効果、それらの集団を参照する文の意味については、この章で後に詳しく説明する。

文字の表現と基数の選定

数字項目 (PICTUREによって数字と定義されたもの。データ部 - データ記述の章のPICTURE(形式)句節を参照) の値は、記憶装置内では、2進法や10進法などの形式で表現される。どの方式を取るかはUSAGE(用途)句を用いて宣言する(データ部 - データ記述の章のUSAGE(用途)句節を参照。) 指定できる数字の形式は以下の通り。

英数字関数は常に標準データ形式で表示される。標準データ形式の英数字関数の大きさは、その関数の定義によって定まる。

整数関数および数字関数の表現形式は、作成者が下記のように指定する。

整数関数および数字関数は、算術式の中でだけ使用できる。整数関数および数字関数は関数を評価した結果の値を表わすが、その関数の作用対象の構成あるいは受取り側データ項目に制約はない。

ある計算機にデータ表現形式がいくつも備わっているときは、データ記述に指定しないと標準データ形式が使用される。

ただし、整数関数および数字関数は例外とする。

DISPLAY形式

数値を表わす0から9のCOBOLの数字は、計算機の記憶域1バイトあたり1文字で、基数10を持つ。 これがCOBOL言語の標準データ形式である。符号付きのデータ項目に符号をSEPARATEと指定しないと、符号は数字の上に付けられる。(データ部 - データ記述の章のSIGN(符号)句節を参照。NUMERIC SIGN句については、環境部の章の特殊名段落節を参照。) SIGN句にLEADINGと指定すれば、符号は左端の数字位置に付けられ、TRAILINGと指定すれば符号は右端の数字位置に付けられる。符号付きデータにどのように符号が組み込まれるかを表 2-4に示す。(数値が負である場合、6番目のビット(値 "40")が0から1に設定される。) 符号付きのデータ項目に符号をSEPARATEと指定すると、数値を表わす数字の他に1文字が符号として付加される。この符号文字は、正か負かに応じて、"+"または "-"となる。符号付きのデータ項目にSIGN句を指定しないと、符号文字は特殊名段落にNUMERIC SIGN句が指定されないかぎり、 右端の数字位置に付けられる。データ記述項にSIGN句を指定すると、NUMERIC SIGN句が指定されていれば、その項目用には無視される。

次の表では、かっこ内の数字はCOBOL文字を示す16進数である。これはシステムによっては、CHARSETコンパイラ指令またはSIGNコンパイラ指令の指定により変わる。

表 2-4: DISPLAY 形式のSEPARATEでない符号付き数字
符号を付ける前の左端
または右端の値
符号付きの値を表わす文字
正の値 負の値
文字集合(ASCII) 文字集合(EBCDIC) 文字集合(ASCII) 文字集合(EBCDIC)
符号(ASCII) 符号(EBCDIC) 符号(EBCDIC) 符号(ASCII) 符号(EBCDIC) 符号(EBCDIC)
0
1
2
3
4
5
6
7
8
9
0(30)
1(31)
2(32)
3(33)
4(34)
5(35)
6(36)
7(37)
8(38)
9(39)
{(7B)
A(41)
B(42)
C(43)
D(44)
E(45)
F(46)
G(47)
H(48)
I(49)
{(C0)
A(C1)
B(C2)
C(C3)
D(C4)
E(C5)
F(C6)
G(C7)
H(C8)
I(C9)
p(70)
q(71)
r(72)
s(73)
t(74)
u(75)
v(76)
w(77)
x(78)
y(79)
}(7D)
J(4A)
K(4B)
L(4C)
M(4D)
N(4E)
O(4F)
P(50)
Q(51)
R(52)
}(D0)
J(D1)
K(D2)
L(D3)
M(D4)
N(D5)
O(D6)
P(D7)
Q(D8)
R(D9)

SIGN句にSEPARATEと指定したときに、DISPLAYデータ項目を記憶するのに必要な文字数は、PICTURE句の中の "9"の数に1を加えた数となる。DISPLAY用と宣言したデータ項目に対しては、SYNCHRONIZED句は効果をもたない。

COMPUTATIONAL,
diala.gifBINARY,または
dialovm.gifCOMPUTATIONAL-4形式

これらの数字データ項目は、計算機の記憶域では、純粋な2進数の形で保持される。この形式では、数値は2を基数として表わされ、計算機に保持されている各ビットは右端を最下位の桁として位取りされ、各位の2のべき乗値の有無を表わす。 負の数は絶対値の等しい正の数の補数を取り(すべてのビットの値を逆転する)、その結果に1を加えることによって表される。データ項目を記憶するのに必要な文字数は、PICTURE句の中の"9" の数と符号が付けられているかいないか によって決まる。(データ部 - データ記述の章のPICTURE(形式)句SIGN(符号)句USAGE(用途)句を参照。) COBOLシステムはCOMPUTATIONALデータ項目に記憶域を割り当てる方法を、バイト記憶方式と語記憶方式の2通り用意している。このCOBOL処理系では特に指定しないと、バイト記憶方式が採られる。

計算機の記憶域の境界:現在の計算機の記憶域の基本的な境界は、通常、8ビットからなる文字を基礎としている。これをバイトという。この基本的な枠組みの中で、計算機はさらに2種類に分類される。1つはバイト以外の境界をもたないものであり、もう1つは複数バイトを単位とする境界をもつものである。ここでは、前者をバイト単位計算機、後者を語単位計算機と呼ぶ。

バイト単位計算機では、COBOLコンパイラは数字データ項目に対して占有するバイト数が最小になるように記憶域を割り当てる。(前述の文字の表現と基数の選定節を参照。) この場合、SYNCHRONIZED句は意味をもたず、効果もない。

語単位計算機の語長には、2バイト、4バイト、8バイトがある。COBOL言語はCOMPUTATIONAL句またはSYNCHRONIZED句が指定されたときに、それに応じてデータ項目に記憶域を割り当て桁詰めできるようになっている。COMPUTATIONAL形式のデータに対する語の割り当て方は、COBOLシステム指令のIBMCOMPを用いて制御する。

表 2-5:COMP(UTATIONAL) 形式のデータ項目に対する記憶域の割り当て
PICTURE句の中の数字(9)の数 割り当てられる記憶域のバイト数
符号付き 符号なし バイト単位方式 語単位方式
1-2
3-4
5-6
7-9
10-11
12-14
15-16
17-18
19-21
22-23
24-26
27-28
29-31
32-33
34-35
36-38
1-2
3-4
5-7
8-9
10-12
13-14
15-16
17-19
20-21
22-24
25-26
27-28
29-31
23-33
34-36
37-38
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
2
2
4
4
8
8
8
8
16
16
16
16
16
16
16
16

桁詰め: データ項目の記述にSYNCHRONIZED句を指定すると、語単位の記憶機能が働いて、そのデータ項目の右端(最下位)が計算機の記憶域の境界に合わせられる。語長に満たない左側の部分は詰めものまたは暗黙のFILLERとして残される。この部分を直接呼び出すことはできないが、集団項目の一部として呼び出すことはできる。

SYNCHRONIZED句を指定された基本データ項目は、必要なバイト数の語(表 2-5を参照)の境界に合わせて配置される。たとえば、語単位の記憶方式では、PICTUREにS9(5)と記述されている数字データ項目は4バイト(データ分3バイトと1バイトの詰めもの)の記憶域を割り当てられる。そして、SYNCHRONIZED句が指定されていれば、次に最も近い4バイトの境界に合わせて(レコードの先頭からこのデータ項目の直前のデータ項目の末尾までの長さが4の倍数であったかのように)配置される。直前の項目の末尾が4バイトの境界に達しない場合は、暗黙のFILLERが補われる。

集団項目中のOCCURS(反復)句(データ部 - データ記述の章のOCCURS(反復)句節を参照)を含むデータ記述にSYNCHRONIZED句を指定した場合には、暗黙のFILLERが補われることがある。これは、最初の要素が計算機の記憶域の境界に合わせて配置されるのと同様に、反復される2番目以降の要素についても境界に位置を合わせるために、余分のバイトが必要になることがあるためである。

暗黙の桁詰め:語単位の記憶方式を採った場合、レコード・レベルのデータ記述はすべて、8バイトの語長の境界に合わせて自動的に桁詰めされる。

自動的な桁詰め機能はALIGN指令の影響を受ける。

例(暗黙のFILLER): 下に示すCOBOLデータ記述によって割り当てられる計算機記憶域を図 2-3に示す。記号の意味は図の下に示してある。

01 UNSYNCHRONIZED-RECORD.
    02 UNSYNCHRONIZED-DATA-1        PIC 9(3) DISPLAY.
    02 UNSYNCHRONIZED-DATA-2        PIC X(2).
01 COMPOUND-REPEATED-RECORD.
    02 ELEMENTARY-ITEM-1            PIC X(2).
    02 GROUP-ITEM OCCURS 3 TIMES.
	03 ELEMENTARY-ITEM-2        PIC X.
	03 ELEMENTARY-ITEM-3        PIC S9(2) COMP SYNC.
	03 ELEMENTARY-ITEM-4        PIC S9(4)V9(2) COMP SYNC.
	03 ELEMENTARY-ITEM-5        PIC X(5).



図 2-3: 計算機の記憶域の割当ての例

ここで、

@ レコード(01レベル)が自動的に桁詰めされたために割り当てられた、暗黙のFILLERバイトを表わす。
# 後続のデータ項目が明示的に桁詰めされたために割り当てられた、暗黙のFILLERバイトを表わす。
$ 集団項目にOCCURS句が指定されたために割り当てられた、暗黙のFILLERバイトを表わす。
9 数字DISPLAY文字用に割り当てられたバイトを表わす。
A 英数字DISPLAY文字用に割り当てられたバイトを表わす。
C COMPUTATIONALデータ記憶域用に割り当てられたバイトを表わす。

切捨て:前に述べたように、データ項目にUSAGE COMP句を指定すると、データは2進数の形式で保持される。データ項目に割り当てられる記憶域は、PICTURE句に指定した数値に必要な分よりも大きくなることがある。たとえば、PIC 99 COMPと指定したデータ項目には通常、1バイトが割り当てられるが、1バイトは255までの数を保持できる。

ANSI COBOLの規則に準拠するために、数字はその形式にかかわらず、10進数として処理される。算術文が実行された結果、得られた数値が受取り側のデータ項目のPICTUREで可能なよりも大きくなると、桁あふれが発生する。このとき、ON SIZE ERROR(桁あふれ)句が指定してあると、結果は受取り側の項目に入れられない。算術文以外の文では、受取り側の項目の方が大きさが小さい場合、切捨てが発生する。その場合、該当する数値は、受取り側のPICTURE句の指定よりも大きい左側の部分が切捨てられる。

しかし、USAGE COMP句を指定したデータを2進数として処理されるようにできる。この場合、割り当てられた記憶域にデータを収めるために必要があるときにだけ、切捨てが発生する。USAGE COMP句を指定したデータ項目の処理の仕方は、COBOLシステム指令のTRUNCを用いて制御する。この指令を通じて、PICTURE句の指定に合わせて10進値を切り捨てるか、利用可能な記憶域に合わせて2進値を切り捨てるかを選択できる。その切捨て処理が行われる際、算術文の結果とそれ以外の文による転記とは区別される。

指令にどのような設定がされているかにかかわらず、算術文が実行された結果、得られた数値の10進の桁数が受取り側のデータ項目のPICTUREに指定されているよりも大きくなると、桁あふれが発生する。

例(切捨て): 操作の中には、TRUNC指令によって結果が変わるものがある。その様子を次に示す。この例では、項目AのPICは99 COMPと記述されている。

操作 結果
TRUNC NOTRUNC TRUNC"ANSI"
MOVE 163 TO A 63 163 63
MOVE 263 TO A 63 7 63
MOVE 13 TO A,
ADD 150 TO A
63 163 結果は保証されない
MOVE 13 TO A,
ADD 250 TO A
63 7 結果は保証されない


注:

  1. この指令は、非整数データの下位の数字の切捨てには効力をもたない。この操作は常にANSI COBOLの規定に準拠して行われる。

  2. IBMCOMP指令を設定すると、COMP項目の上位に余分のバイトが割り当てられることがある。これらのバイトは割り当てられた記憶域に含められる。IBMCOMPがオンであると、SYNC句を伴うCOMP項目の前に充てん文字が埋められることがある。この充てん文字はその項目の一部ではなく、その項目に記録されるデータに影響されることはない。

  3. 符号付き項目に収められる値の桁数がPICTURE句によって制限されているとき、符号ビットまで上書きする桁数を取ることはできない。ただし、NOTRUNC指令が設定されている場合は例外で、値が大きければ、符号ビットを上書きする。


COMPUTATIONAL-1, COMPUTATIONAL-2,
FLOAT-SHORTおよびFLOAT-LONG
形式

この形式は、内部浮動小数点データ項目用に使用する。内部浮動小数点データ項目を使用できる場所は、文法的に数字データ項目が使用でき、かつCOBOL言語定義のANSI'74, ANSI'85, ISO2002, OSVS, VSC2 のどれかに構文的に含まれる場所である。内部浮動小数点データ項目は、整数データ項目が必要なところでは使用できない。ただし、特定のCOBOL動詞用の規則に明示的に許されている場合は例外とする。それ以外の構文では、内部浮動小数点データ項目は使用できない。ただし、特別の規則によって許されている場合は例外である。

内部記憶形式はオペレーティングシステムによって異なっていることがある。どのような記憶形式が採られていても、浮動小数点数には4つの要素がある。

  1. 指数部    - 仮数部の値に乗除する10のべき乗値。

  2. 指数部の符号 - 仮数部の値に、1, 10, 100などの値を掛けるのか、その値で割るのかを示す。

  3. 仮数部    - 具体的な値。これに指数部の値を掛けるか、指数部の値で割ったものが、該当データ項目の数値となる。

  4. 仮数部の符号 - 結果として得られたデータ項目の値が正か負かを示す。

USAGE FLOAT-SHORT は USAGE COMPUTATIONAL-1と同義である。USAGE FLOAT-LONG は USAGE COMPUTATIONAL-2と同義である。

一般に、USAGE COMPUTATIONAL-1(COMP-1)のデータ項目を単精度浮動小数点数といい、USAGE COMPUTATIONAL-2(COMP-2)のデータ項目を倍精度浮動小数点数という。オペレーティングシステムやCOBOLで利用できる数学登録集によっては、単精度浮動小数点数と倍精度浮動小数点数で制約条件が異なっている場合がある。たとえば、指数部の最大の大きさや仮数部の最大の大きさに制限がある。(詳細については、使用しているオペレーティングシステムまたは数学登録集の浮動小数点数に関する資料を参照。)

ANSI/IEEE 標準 754-1985、倍精度浮動小数点数用IEEE 標準に従うオペレーティングシステムでは、COMPUTATIONAL-1 および COMPUTATIONAL-2 はそれぞれSingle Format および Double Formatと同義である。

内部浮動小数点数表現は、連続した数値を表わすものではないことを理解することが重要である。内部浮動小数点数表現はいろいろなオペレーティングシステムを通じた標準とはなっていない。たとえば、ある内部浮動小数点数表現では、10進数との対応関係は下記のようになっている。

内部(16進)表現
10進値
x"AD17E148" -0.12345673E-23
x"AD17E149" -0.12345810E-23

したがって、10進値-.12345678E-23と正確に等しい内部浮動小数点数を求めても、その値は決して得られない。-方、別の内部浮動小数点数表現では、この値は得られるが、上に記した値は得られないということもある。このため、内部浮動小数点数項目と他の数値(外部浮動小数点数項目および浮動小数点数定数を含む)が正確に一致することを求める応用は移植性がなく、同じ入力データを使用しても処理手順の流れを変えなければならないことがある。

内部浮動小数点数項目の記憶域の大きさは、USAGE句によって決まる。USAGE COMPUTATIONAL-1 は項目用に4バイトを予約し、USAGE COMPUTATIONAL-2 は記憶域用に8バイトを予約する。

IBMCOMP指令がオンであると、SYNC句を伴う内部浮動小数点数項目の前に充填文字が埋められることがある。この充填文字はその項目の一部ではなく、その項目に記録されるデータに影響されることはない。

COBOLシステムでは、COMP-1項目は小数点以下7桁、COMP-2項目は小数点以下16桁になっている。しかし、メインフレームとの互換性により、DISPLAY文は、COMP-1には8桁、COMP-2には18桁の小数を表示する。浮動小数点項目を使用するどの操作もこの制限を考慮する必要がある。この制限を超える小数部については無視するようにすること。

COMPUTATIONAL-3
diala.gifまたはPACKED-DECIMAL
形式

この形式は一般に2進化10進形式という。この形式では、数字データ項目は10を基数として表現される。数値を表わす各数字は1バイトの半分に収められる。その様子を表 2-6に示す。符号は独立の半バイトとして末尾、つまり右端または最下位の位置に付けられる。

使用されない半バイトがあれば、その値はゼロに設定される。

表 2-6:COMPUTATIONAL-3の数字の表現
数字の値 16進法による数字の表現
左の半バイト(偶数桁の数字) 右の半バイト(奇数桁の数字)
0 x"00" x"00"
1 x"10" x"01"
2 x"20" x"02"
3 x"30" x"03"
4 x"40" x"04"
5 x"50" x"05"
6 x"60" x"06"
7 x"70" x"07"
8 x"80" x"08"
9 x"90" x"09"


注:偶数桁か奇数桁かは、右側から数える。


COMPUTATIONAL-3用に使用する符号用の桁を表 2-7に示す。この形式に必要な記憶域は、該当データ項目のPICTURE句の中の"9s" の数だけによって決まる。その様子を表 2-8に示す。

表 2-7: COMPUTATIONAL-3の符号の表現
PICTURE句内の符号の表現 データ項目の値の符号 16進法による符号用半バイト
符号なし n/a x"0F"
符号付き + x"0C"
符号付き - x"0D"

表 2-8:COMP(UTATIONAL)-3
またはPACKED-DECIMAL
PICTURE句の数字データの桁数と必要記憶域量
必要バイト数 桁数(符号の有無を問わず)
1 1
2 2-3
3 4-5
4 6-7
5 8-9
6 10-11
7 12-13
8 14-15
9 16-17
10 18-19
11 20-21
12 22-23
13 24-25
14 26-27
15 28-29
16 30-31
17 32-33
18 34-35
19 36-37
20 38

例:

  1. COMPUTATIONAL-3でPICTURE 9999のデータ項目に値+1234を収めると、次のようになる。

    Fは正号を表わす(印刷不能文字)。

  2. COMPUTATIONAL-3でPICTURE S9999のデータ項目に値+1234を収めると、次のようになる。

    C は正号を表わす。

  3. COMPUTATIONAL-3でPICTURE S9999のデータ項目に値-1234を収めると、次のようになる。

    D は負号を表わす。

SYNCHRONIZED句は(LEFTまたはRIGHT句があってもなくても)COMPUTATIONAL-3と宣言されたデータには影響を及ぼさない。

COMPUTATIONAL-Xおよび
dialmx9.gifCOMPUTATIONAL-5形式

この形式はCOMPUTATIONAL形式と基本的には同じである。詳細については、前述のCOMPUTATIONAL、BINARY、またはCOMPUTATIONAL-4形式節を参照。

ただし、この形式は下記の点がCOMPUTATIONAL形式と異なる。

ポインタ形式

ポインタ形式は利用可能なデータ項目のメモリー番地を表す値を保持する。データ項目が利用できなくなった(たとえば、データ項目が含まれているプログラムがキャンセルされた)場合には、ポインタ形式には形式が合致しない値が保持されているとみなされる。

ポインタ形式に割り当てられる省略時の記憶領域の量は操作環境によって異なりうる。しかし、少なくとも4バイトはある。メモリー番地を表現する方法は環境によって異なるが、一般的にはCOBOL以外の言語で使用されている表現と一貫性がある。

システム指令のIBMCOPMを設定した場合、SYNC指定を伴うポインタ・データの前に充てん文字が生成されることがある。それらの文字はデータ項目の一部ではなく、その項目に収められるデータに影響されることはけっしてない。

手続きポインタ形式

手続きポインタ形式は利用可能な手続きのメモリー番地を表す値を保持する。手続きが利用できなくなった(たとえば、手続きが含まれているプログラムがキャンセルされた)場合には、手続きポインタ形式には形式が合致しない値が保持されているとみなされる。

手続きポインタ形式に割り当てられる省略時の記憶領域の量は操作環境によって異なりうる。しかし、少なくとも4バイトはある。COBOL370指令を指定すると、8バイトが割り当てられる。メモリー番地を表現する方法は環境によって異なるが、一般的にはCOBOL以外の言語で使用されている表現と一貫性がある。

システム指令のIBMCOPMを設定した場合、SYNC指定を伴う手続きポインタ・データの前に充てん文字が生成されることがある。それらの文字はデータ項目の一部ではなく、その項目に収められるデータに影響されることはけっしてない。

一意参照

修飾

COBOL原始要素中の要素を定義する、利用者が指定したそれぞれの名前、

およびその原始要素中で参照する名前は、

すべて一意とする。 名前は、すべて一意とする。そのためには、同じつづりの名前が他にないか、または名前の階層系列の上位にあるいくつかの名前を付け加えて一意にすることができなければならない。このとき、上位の名前を修飾語(qualifier)といい、一意にする手順を修飾(qualification)という。 名前を一意にするには、必要な修飾語を付け加えればよく、上位の名前をすべて書く必要はない。

データ部では、修飾に用いるデータ名はすべて、レベル指示語(level indicator)またはレベル番号(level-number)の後ろに書いた名前とする。したがって、修飾によって一意にできる場合、

またはそれらがまったく参照されない場合

を除いて、2つの同じデータ名が同じ集団項目に属する記述項として現れてはならない。 手続き部では、2つの同じ段落名が同じ節にあってはならない。

修飾の階層系列では、レベル指示語の後ろに書いた名前を最高位とし、次にレベル番号01に書いた名前、それに続いてレベル番号02以降49の後ろに書いた名前の順とする。段落名については、節名だけを最高位の修飾語として用いることができる。したがって、階層系列の最高位の名前は、一意でなければならず、修飾することはできない。添字または指標の付いたデータ名や条件変数も、修飾によって一意にすることができる。条件変数の名前は、その条件名の修飾に使用できる。修飾の有無にかかわらず、同じつづりの名前をデータ名と手続き名の両方に使用してはならない。

修飾を行うには、データ名または条件名、段落名、原文名の後ろにINまたはOFに続けて修飾語を書く。修飾語をさらに修飾することもできる。INとOFは、論理的には同義語である。

関数を指定する場合関数定義に従って、その関数を参照する記述の中に、いくつかのパラメータに対する値または値の組を指定する必要がある。そのパラメータの値を用いて、参照した関数の値が算出される。パラメータに実際の値を指定することを引数を与えるという。詳細については、この節の関数一意名節で解説する。

修飾の一般書式は、以下の通り。

形式 1

形式 2

形式 3

形式 4

修飾の規則は、以下の通り。

  1. 各修飾語は、それが修飾する名前と同じ階層系列に属さなければならない。

  2. 複数段階にわたって修飾する場合、低いレベルの修飾語から順に書く。

    原始単位の中で明示的に参照される場合、同じ階層系列中の2つのレベルに同じ名前があってはならない。

  3. 原始要素中の複数のデータ項目に同じデータ名または条件名を付けた場合、そのデータ名や条件名を手続き部、環境部、データ部で参照するときは、必ず修飾する。ただし、REDEFINES(再定義)句では修飾できない。

  4. 1つの節の中に同じ段落名を重複して書いてはならない。段落名を節名で修飾するときは、SECTIONという語を書かない。同じ節内で参照するときは、段落名を修飾する必要はない。

    段落名も節名も明示的に参照されないかぎり、一意であるかまたは一意にする必要はない。

  5. データ名を修飾語として使用するときは、添字を付けることはできない。

  6. 修飾する必要のない語を修飾しても構わない。一意にする修飾語の組合わせがいくつもある場合、どの組合わせを使用してもよい。あるデータに対する完全な修飾語の系列が、他のデータ名に対する修飾語の系列の一部と同じであってはならない。

    データ名に付けることのできる修飾語の数は、5つまでである。

    50個までの修飾語を付けることができる。

  7. 翻訳時に2つ以上の登録集を使えるときには、原文名を参照するたびに修飾しなければならない。

    この規則は強制しない。

添字付け

添字(subscript)は、個別にデータ名を付けていない同種の要素のリストまたは表の中の、個々の要素を参照するために使用する。(データ部 - データ記述の章のOCCURS(反復)句節を参照。)

添字として使用できるものは、整数である数字定数、データ名、データ名の後ろに"+" または "-" の演算子を付け、さらに符号なしの整数数字定数を続けたものがある。データ名を使用する場合、このデータは数字基本項目で整数とする。添字全体は、左かっこと右かっこが対になった分離符で区切る。

添字に使用するデータ名には、符号が付いていてもよい。この場合、正でなければならない。添字の最小値は1である。この値は表の最初の要素を指す。表の要素の2番目以降を指す添字の値は、2、3、...という具合になる。添字が取る最大値は、OCCURS句で指定した項目の反復回数の最大値である。

表の要素を一意に識別する添字または添字の組は、対象とする表要素のデータ名の後ろに、一対の左かっこと右かっこで囲んで付ける。表要素のデータ名に添字を付けたものを、添字付きデータ名または一意名という。複数個の添字を指定するときは、データ構造の階層の上位のものから書く。添字は3つまで指定できる。

添字は7つまで指定できる。

添字は16個まで指定できる。

一般形式

構文規則

  1. データ名-1または条件名-1に関連するデータ名を含むデータ記述項には、OCCURS句が含まれていなければならない。または、それらのデータ記述項は、OCCURS句を含むデータ記述項の下位に属さなければならない。

  2. 表要素を参照する場合、指定する添字の数は、参照対象の表要素の記述中のOCCURS句の数と等しくする。ただし、構文規則7に規定された場合は例外とする。複数個の添字を指定する必要があるときは、表の次元の上位のものから書く。

  3. 添字、ALLを使えるのは、関数の引数として添字付きの一意名を使用する場合だけである。条件名-1を指定したときは、添字ALLは使用できない。(手続き部 - 組み込み関数の章の引数節を参照。)

  4. 整数-1は符号を付けてもよい。符号を付けた場合は正でなければならない。

  5. データ名-2は修飾してもよい。データ名-2は、整数を表わす数字基本項目とする。

  6. 指標名-1は、参照対象の表の階層系列中にあって、その指標名を定義するINDEXED BY(指標付き)句を含むデータ記述項と対応させる。

    代わりに、他の表を記述する指標を使用してもよい。ただし、2つの表に含まれる要素の数が同じであることが条件である。

  7. 表要素を参照する場合は、以下の場合を除き、添字を指定しなければならない。

    1. USE FOR DEBUGGING(デバッグ用使用)文の中

    2. SEARCH(表引き)文またはSORT(整列)文の対象として

    3. REDEFINES(再定義)句の中

    4. OCCURS(反復)句のKEY IS(キーは)句の中

  8. 同じ一意名の中で、添字と指標を混在させることはできない。

    同じ一意名の中で、添字と指標を混在させることができる。

一般規則

NOBOUND指令を指定した場合は、この一般規則は実行時に適用されない。

  1. 添字の値は、正の整数とする。添字に指定できる最小の値は1である。表のどの次元でも、最初の要素は、添字の値1によって参照される。その表のその次元の2番目以降の要素を指す添字の値は、2、3、...という具合になる。表のどの次元でも、添字が取る最大値は、対応するOCCURS句で指定した項目の反復回数の最大値である。

    添字が浮動小数点項目の場合、その値は最も近い整数に丸められるか、または、端数が切り捨てられる。

  2. 指標名-1を用いて参照する指標の値は、対応する表中の要素の出現番号を表わす。

  3. 指標名-1を用いて参照する指標の値は、添字として使用する前に初期化しておく。 指標に初期値を与える方法は3通りある。具体的には、PERFORM(実行)文にVARYING(変更)句を指定するか、SEARCH(表引き)文にALL(全部)句を指定するかSET(設定)文を指定するかである。指標の値を変更できる文はPERFORMとSEARCHとSETだけである。

  4. 整数-2または

    整数-3を指定した場合、添字の値は次のようにして決定される。演算子に"+" を指定した場合は、

    整数-2または

    整数-3の値が追加される。演算子に"-" を指定した場合は、

    整数-2または

    整数-3の値が差し引かれる。

    これらは、指標名-1を用いて指定した値を用いて指定した値に対して行われる。

    または、データ名-2を用いて指定した値に対して行われる場合もあり得る。

指標付け

指標付け(indexing)を指定して、同種の要素からなる表の中の個々の要素を参照できる。指標(index)を付けるには、表を定義する際に、該当するレベルにINDEXED BY(指標付き)句を指定する。INDEXED BY句を用いて付けた名前を指標名(index-name)といい、付けた指標を参照するために使用できる。指標の値は、対応する表または別の表の中の要素の出現番号を表わす。指標名は、表の参照に使用する前に初期化しておく。指標名に初期値を与えるには、SET(設定)文を指定する。

添字は単なる数字データ項目または定数である。これに対し指標は、表中要素の出現番号を表わす特別な型の項目である。その表現形式は何通りかある。指標の内容は数値とはみなされない。

直接指標付け(direct indexing)は、添字と同じ形式で指標名を使用する方法である。相対指標付け(relative indexing)は、指標名の後ろに演算子"+" または "-" と符号の付かない整数を書き、その全体を一対の左かっこと右かっこで囲んで、表要素のデータ名の後ろに続けた形式で指標名を使用する方法である。相対指標付けによる出現番号は次のようにして決定される。演算子に"+" を指定した場合は、指標の値によって表される出現番号に定数の値が追加される。演算子に"-" を指定した場合は、指標の値によって表される出現番号から定数の値が差し引かれる。複数個の指標を用いるときは、データ構造の階層の上位のものから順に書く。

INDEXED BY句を指定することによってだけ、表に指標を付けることができる。

Aある表用に指定した指標を、他の表に適用できる。ただし、どちらの表も要素の数が同じであることが条件である。

指標付きの表の要素を参照する文を実行するとき、その表要素の指標名で参照される指標の値は、1から表要素の反復回数の最大値の範囲を外れてはならない。この制限は、相対指標付けの結果として得られる値にも当てはまる。

NOBOUND指令を指定した場合は、この一般規則は実行時に適用されない。

データ名には、指標名を3つまで指定できる。

データ名には指標名を7つまで指定できる。

データ名には指標名を16個まで指定できる。

指標付けの一般形式は、添字付け節に記した一般形式に含まれている。

関数一意名

関数一意名とは、関数を評価した結果として得られるデータ項目を一意に参照する名前である。この名前は、文字列と分離符を構文的に正しく組み合わせて付ける。

一般形式

構文規則

  1. 関数一意名は、受取り側作用対象として指定される。

  2. FUNCTIONという単語が含まれる。

    ただし、以下の場合を除く。

    1. 組み込み関数名-1がリポジトリ段落で指定されている。

    2. 関数プロトタイプ名-1が指定されている。

  3. 関数プロトタイプ名-1は、リポジトリ段落で指定された関数プロトタイプである。

  4. 組み込み関数名-1が指定されている場合は、OMITTEDという単語は指定されない。

  5. 引数-1は、一意名、定数、または算術式とする。組み込み関数に対する引数-1の数、字類、および項類についての詳しい規則は、手続き部 - 組み込み関数の章の関数の定義節にある、組み込み関数の定義で解説する。

    また、利用者定義関数に対する同規則は、手続き部の章のパラメータおよび返却する項目への準拠性で解説する。

  6. 単語、OMITTEDが指定されている場合は、対応する仮パラメータ用にOPTIONAL句が指定されるものとする。

  7. 関数プロトタイプ名-1が指定され、 かつ引数-1に対応する仮パラメータがBY VALUE句とともに指定されている場合は、引数-1は、字類が数字、オブジェクト、またはポインタである。

  8. 整数の作用対象が必要な箇所に数時間数を指定することはできない。ただし、特定の数字関数の参照が整数値を生成する場合もある。

  9. 符号のつかない整数が必要な箇所に、ABS関数の整数型以外の整数関数を指定することはできない。

  10. 整数または数時間数を参照する関数一意名は、算術式でのみ使用される。

  11. 関数プロトタイプ名-1が指定されている場合は、手続き部の章のパラメータおよび返された項目への準拠性節で解説されている準拠規則が適用される。

  12. 部分参照付け(reference-modifier)は、英数字項類の関数に対してのみ指定される。

    各国語の関数に対しても指定できる。

  13. 関数の定義により、関数プロトタイプ名-1または組み込み関数名-1の直後に引数と左かっこが続くことが許される場合は、この左かっこはつねに、この関数の引数の左かっこと見なされる。

注:引数の有無にかかわらず、参照される関数(RANDOM関数など)については、正しく解釈されるよう、符号化に注意が必要である。以下に関数の例を示す。

	FUNCTION MAX (FUNCTION RANDOM (A) B)

Aは、、RANDOM関数の引数と見なされる。このような関数で、AをMAX関数の2番めの引数とする場合は、以下のいずれかのように書かれなければならない。

	FUNCTION MAX (FUNCTION RANDOM () A B)

			または
	FUNCTION MAX ( (FUNCTION RANDOM) (A) B)

			または
	FUNCTION MAX (FUNCTION RANDOM A B)

一般規則

  1. 関数一意名は、実行時に関数が参照されたときにその値が決定される、一時データ項目を参照する。

    組み込み関数名-1が指定されている場合は、一時データ項目は、基本データ項目であり、その記述項と項類は組み込み関数の定義により指定される。この定義については、手続き部 - 組み込み関数の章の関数の定義で解説する。

    関数プロトタイプ名-1が指定されている場合は、一時データ項目の記述、字類、および項類は、関数プロトタイプ名-1で指定された関数プロトタイプの手続き部見出しのRETURNING句で指定された項目の連絡節の記述により指定されたものである。

  2. 関数が参照されたとき、その引数は、左から右へ置かれている順番に個別に読み込まれる。読み込まれる引数は、それ自体が関数一意名、または関数一意名を含む式である場合もある。引数の読み込により参照される関数が、その引数が指定された関数自体であってはならないという規則はない。つまり、再帰的な引数の指定が可能である。組み込み関数については、詳しい解説が手続き部 - 組み込み関数の章にある。

    利用者定義関数については、手続き部の章の手続き部見出しおよびパラメータおよび返却する項目の準拠性にある。

    整数の引数をとる関数では、浮動点引数が与えられた場合は、もっとも近い整数に値が丸められる。または、小数点以下は切り捨てられる。

  3. 関数プロトタイプ名-1が指定されている場合は、環境部の章のリポジトリ段落節にある規則に従って、起動される関数が指定され、その特徴の決定に関数プロトタイプ名-1が使用される。

  4. 関数プロトタイプ名-1が指定されている場合に各引数が渡される方法は以下の通り。

    1. 対応する仮パラメータに対してBY REFERENCE句が指定または暗黙的に指定されているときは、BY REFERENCE。このとき、引数-1は、オブジェクトプロパティ、オブジェクトデータ項目、またはファクトリオブジェクトデータ項目以外の、受取り側の作用対象となる。

    2. 対応する仮パラメータに対してBY CONTENTが指定または暗黙的に指定されているときは、BY REFERENCE。このとき、引数-1は、定数、算術式、オブジェクトプロパティ、オブジェクトデータ項目、ファクトリオブジェクトデータ項目、または、その他の、受取り側の作用対象として許可されない一意名となる。

    3. 対応する仮パラメータに対してBY VALUE句が指定されているときは、BY VALUE

  5. 関数一意名は、以下の手順で評価される。

    1. 各引数-1が最初に確認される。起動された関数に処理が渡されたときに、その関数が引数-1の値を使用できるようになる。

    2. 実行システムが、起動される関数を検索する。

      関数プロトタイプ名-1が指定されている場合は、関数プロトタイプ名の適用規則で解説されている規則が指定される。その他に、環境部の章のリポジトリ段落節で解説する規則も指定される。

    3. 関数が見つかったが、その実行に必要な資源が使用できない場合は、その関数は起動されない。関数の実行に必要な実行資源が何であるかは、作成者により定義される。

    4. 関数一意名により指定された関数が実行可能になり、その関数により指定された呼出し規則に従って、起動された関数に処理が渡される。

      関数プロトタイプ名-1が指定されており、起動される関数はCOBOL関数である場合は、手続き部の章の手続き部見出し節の解説に従って実行される。

      組み込み関数名-1が指定されている場合は、手続き部 - 組み込み関数の章の解説に従って実行される。

      関数プロトタイプ名-1が指定されており、起動される関数はCOBOL関数である場合は、使用しているCOBOLシステムのマニュアルのインターフェイスに関する記述における定義に従って実行される。

  6. OMITTEDという語が指定されているか、または後に続く引数が省略されている場合は、そのパラメータの省略引数条件が、起動された関数の中で、TRUEであると見なされる(手続き部の章の省略引数条件節を参照)。

  7. 省略引数条件が真であるパラメータが、起動された関数により参照されている場合は、実行時エラー 203 が返される。ただし、引数として参照される場合、および省略引数条件内で参照される場合を除く。

部分参照

部分参照(reference modification)とは、データ項目の一部を切り出してデータ項目を定義することである。切り出す範囲はデータ項目中の起点となる文字位置(切り出す文字の左端文字位置)と長さによって指定する。

一般形式

一意名-1 ( 左端文字位置 : [長さ] )

構文規則

  1. 一意名-1は、以下のいずれかであるデータ項目を参照しなければならない。

    • 各国語、または字類が英数字である基本項目

    • 用途がDISPLAYである数字項目

    • 集団項目

  2. 左端文字位置と長さは算術式とする。

  3. 別途指定がないかぎり、各国語、または字類が英数字のデータ項目を参照する一意名が使えるところならば、どこでも部分参照ができる。

  4. 一意名-1は修飾してもよいし、添字付けしてもよい。

  5. 一意名-1が関数一意名である場合は、英数字または各国語関数を参照するものとする。

一般規則

  1. 左端文字位置とは、一意名-1が英数字(または各国語)データ項目を参照するときの英数字の位置(または各国語の位置)を示す。

  2. 一意名-1によって参照されるデータ項目の各文字には、左端を1として、右方向に1ずつ繰り上げた順番を付けられる。一意名-1のデータ記述項にSIGN IS SEPARATE(独立符号)句が指定してあると、その符号にも順番が付けられる。

  3. 一意名-1によって参照されるデータ項目の項類が、数字、

    外部浮動小数点数、

    数字編集、英字、英数字編集のどれかであるとき、部分参照の目的上、そのデータ項目は同じ大きさの英数字データ項目として再定義されたものとして操作される。

  4. 作用対象に対する部分参照は、下記のように評価される。

    1. 作用対象に添字を指定してある場合、添字が評価された直後に部分参照が評価される。作用対象に添字、ALLが指定してある場合、暗黙的に指定されたすべての表要素に部分参照が適用される。

    2. 作用対象に添字を指定していない場合、添字が指定してあったならば添字が評価される時点で部分参照が評価される。

    3. 関数参照の中に部分参照が指定してある場合、関数が評価された直後に部分参照が評価される。

    4. オブジェクトプロパティ参照の中に部分参照が指定してある場合、オブジェクトプロパティが評価された直後に部分参照が評価される。

  5. 部分参照は、一意名-1によって参照されるデータ項目の部分集合である、一意のデータ項目を作り出す。この一意のデータ項目は下記のようにして、参照対象データ項目から取り出される。

    1. 左端文字位置を評価した結果、数値が得られる。この値は、一意名-1によって参照されるデータ項目の、左端から振られた文字位置を表わす順番を指す。したがって、左端文字位置の値は、参照対象となるデータ項目の、文字数以下の正の整数とする。

      浮動小数点数形式の式では、結果は丸められる。固定小数点数形式の式では、結果は切捨てられる。

    2. 長さを評価した結果、作用対象として使用するデータ項目のバイト数が得られる。この長さは正の数とする。また、左端文字位置と長さの和から1を引いたものは、一意名-1によって参照されるデータ項目の文字数以下とする。長さを指定しないと、部分参照として取り出されるデータ項目は、参照対象データ項目の中の再左端文字位置から末尾までとなる。

      浮動小数点数形式の式では、結果は丸められる。固定小数点数形式の式では、結果は切捨てられる。


注: 左端文字位置と長さの評価により生成された値が正しいかどうかの確認は行われない。値が、この規則で述べられた制限に適合しない場合は、未定義の結果が生じ、他のデータ項目が破壊される可能性がある。


  1. 部分参照として取り出されたデータ項目は、JUSTIFIED(桁寄せ)句のない基本データ項目とみなされる。関数を参照した場合は、部分参照として取り出されたデータ項目の字類と項類は英数字となる。一意名-1を指定した場合は、部分参照として取り出されたデータ項目の字類と項類は一意名-1と同じになる。ただし、

    • 項類が数字、数字編集、英数字編集、

      外部浮動小数点数

      のものは、字類も項類も英数字とみなされる。

    • 項類が各国語編集のものは、字類および項類が各国語とみなされる。

  2. OSVSコンパイラ指令を設定した場合は、条件式の中では部分参照は指定できない(詳細については、手続き部の章の条件式節を参照)。

一意名

一意名(identifier)とは、データを一意に参照するために、文字列と分離符をいくつか 並べたものである。

一般形式

形式 1

形式 2

形式 3
   プロパティ名-1 OF 一意名-1
形式 4
   行内呼出し-1

形式 5
   一意名-2 オブジェクトビュー-1

形式 6

形式 2の規則

添字-1は添字付け(添字付け節を参照)または指標付け(指標付け節を参照)を表す。

  1. 語INとOFとは同義語である。

  2. 添字付けまたは指標付けの対象とするデータ名は、それ自体が添字付けあるいは指標付けされていてはならない。

  3. 添字付けが許されていない箇所では、指標付けも許されない。

  4. 指標は、SET(設定)文、SEARCH(表引き)文、PERFORM(実行)文によってだけ変更できる。USAGE IS INDEX(用途は指標)句を指定したデータ項目には、指標名に対応する値をデータとして収めることができる。このような項目を指標データ項目(index data item)という。

  5. 添字として使用する定数は、正の整数とする。相対添字付けおよび相対指標付けに使用する定数は、符号なしの整数とする。
形式 3の規則

オブジェクト属性はオブジェクトからの情報の読出しおよびオブジェクトへの情報の書戻しを行うための特別な構文を形成する働きをする。オブジェクト属性にアクセスする仕組みとして、オブジェクト読出しメソッドとオブジェクト設定メソッドがある。オブジェクト読出しメソッドには、GET PROPERTY句を用いて明示的に定義したメソッドと、PROPERTY句を用いて記述されたデータ項目のために暗黙的に生成されるメソッドとがある。オブジェクト設定メソッドには、SET PROPERTY句を用いて明示的に定義したメソッドと、PROPERTY句を用いて記述されたデータ項目のために暗黙的に生成されるメソッドとがある。

  1. 属性名-1はリポジトリ段落中に指定されたオブジェクト属性でなければならない。

  2. 一意名-1はオブジェクト参照でなければならない。一般的オブジェクト参照も定義済オブジェクト参照のNULLも指定してはならない。

  3. オブジェクト属性を送出し側項目として使用した場合、一意名-1によって参照されるオブジェクト内に属性名-1の属性読出しメソッドが存在しなければならない。

  4. オブジェクト属性を受取り側項目として使用した場合、一意名-1によって参照されるオブジェクト内に属性名-1の属性設定メソッドが存在しなければならない。

  5. 送出し側項目として使用されるオブジェクト属性の記述は属性読出しメソッドの返却する項目の記述と同じである。そのように記述されたデータ項目が送出し側項目として有効なときはいつでも、このオブジェクト属性を指定できる。

  6. 受取り側項目として使用されるオブジェクト属性の記述は属性設定メソッドのUSINGパラメータの記述と同じである。そのように記述されたデータ項目が受取り側項目として有効なときはいつでも、このオブジェクト属性を指定できる。

  7. 属性読出しメソッドのRETURNING句内に指定されているデータ項目の記述は、属性設定メソッドのUSINGパラメータとして指定されているデータ項目の記述と同じでなければならない。

  8. オブジェクト属性が送出し側項目としてのみ使用される場合、概念的な一時データ項目の一時データ-1が代りに使用される。その属性の値は、INVOKE文の規則に従って関連する属性読出しメソッドが呼び出され、返された値が一時データ-1に入れられたかのようにして決定される。一時データ-1のデータ記述は、属性読出しメソッドのRETURNING句に指定されているデータ項目の記述と同じである。

  9. オブジェクト属性が受取り側項目としてのみ使用される場合、概念的な一時データ項目の一時データ-2が代りに使用される。その属性の値は、INVOKE文の規則に従って関連する属性設定メソッドが呼び出され、一時データ-2の内容がパラメータとして渡されたかのようにして決定される。一時データ-2のデータ記述は、属性設定メソッドのUSINGパラメータとして指定されているデータ項目の記述と同じである。

  10. オブジェクト属性が送出し側項目と受取り側項目の両方として使用される場合、概念的な一時データ項目の一時データ-1と一時データ-2が代りに使用される。一時データ-1と一時データ-2は同じ一時データ項目であり、一時データ-2は一時データ-1を再定義したものである。送出し処理に関しては、その属性の値は一般規則1の中の送出し側項目と同様に決定される。受取り処理に関しては、その属性の値は一般規則2の中の受取り側項目と同様に決定される。一時データ-1および一時データ-2のデータ記述は、属性読出しメソッドのRETURNING句に指定されているデータ項目の記述と同じである。

形式 4の規則

行内呼出し-1は行内メソッド呼出し節で定義される。

形式 5の規則

オブジェクトビュー-1はオブジェクトビュー節で定義される。

形式 6の規則

番地指定子はデータ番地一意名節およびプログラム番地一意名節で定義される。

.

条件名

各条件名は一意であるか、または修飾、指標付け、添字付けによって一意にしなければならない。条件名を一意にするために修飾する場合は、関連する条件変数を最初の修飾語として使用できる。修飾する場合、条件変数に関連する名前の階層系列または条件変数自体を使用して、条件名を一意にする。

条件変数を参照するのに指標付けまたは添字付けが必要な場合は、その条件名を参照するときにも、同じ組合わせの指標付けまたは添字付けを使用する。

条件名の修飾、指標付け、添字付けの組合わせの形式と制限は、一意名の場合のデータ名-1を条件名-1と置き換えたものと同じである。

一般形式において条件名というときは、必要に応じて修飾、指標付け、添字付けしたものを含む。

行内メソッド呼出し

行内メソッド呼出しは、メソッドの呼出しにより返された一時データ項目を参照する。

一般形式

構文規則

  1. 行内メソッド呼出しは、受取り側の作用対象として指定される。

  2. 一意名-1は字類がオブジェクトでなければならない。定義済みオブジェクト参照 NULL と一般的オブジェクト参照のいずれも、指定してはならない。

  3. 一般規則 1 で指定されたINVOKE文のいずれかは、INVOKE文の構文規則に従って、有効でなければならない。

  4. 呼び出されたメソッドの手続き部見出しの中のRETURNING指定で参照されたデータ項目は、ANY LENGTH句で記述されなければならない。

一般規則

  1. 行内メソッド呼出しは、適切な形式で実行されたINVOKE文により返された一時一意名と同じ字類、項類、および内容の一時データ項目を参照するものとする。INVOKE文の例を以下に示す。

    INVOKE 一意名-1 定数-1 USING 引数 RETURNING 一時一意名 
    INVOKE 一意名-1 定数-1 RETURNING 一時一意名
    INVOKE 字類名-1 定数-1 USING 引数 RETURNING 一時一意名
    INVOKE 字類名-1 定数-1 RETURNING 一時一意名
    ここで、

    1. 引数(存在する場合)は、行内メソッド呼出しのかっこ内に指定された作用対象である。

    2. 一時一意名の記述項、字類、および項類は、定数-1および、一意名-1(または字類名-1)により識別されたメソッドの指定に含まれるRETURNINGパラメータのものと同じである。

    3. 一時一意名は、ここで解説する行内呼出しの機能のためにのみ存在する一時項目で、その他の目的にはいっさい使用されない。

オブジェクトビュー

オブジェクトビューにより、オブジェクト参照が指定された記述を持っているように取り扱われるようになる。実行時に、この記述が有効かどうか、オブジェクトが検査される。

一般形式

構文規則

  1. 一意名-1 は字類がオブジェクトとする。定義済みオブジェクト参照、SUPERおよびNULLは指定してはならない。

  2. オブジェクトビューは、受取り側作用対象として指定してはならない

一般規則

  1. この一意名-1の参照は、翻訳時に、AS指定により指定された記述項を持っていると見なされる。

  2. 字類名-1が、 指定可能な句のどちらも使用せずに指定されている場合は、一意名-1が、USAGE IS OBJECT REFERENCE 字類名-1で記述されているとして処理される。一意名-1により参照されるオブジェクトが、字類名-1のオブジェクトでも字類名-1に含まれる字類のオブジェクトでもない場合は、EC-OO-CONFORMANCE 例外条件が設定される。

  3. FACTORY指定が存在し、かつONLY指定が存在しない場合は、一意名-1が、 USAGE OBJECT REFERENCE FACTORY OF 字類-1として記述されているとして処理される。一意名-1により参照されるオブジェクトが、字類名-1のファクトリオブジェクトでも字類名-1に含まれる字類のファクトリオブジェクトでもない場合は、EC-OO-CONFORMANCE 例外条件が設定される。

  4. ONLY 指定が存在し、かつ FACTORY 指定が存在しない場合は、一意名-1 が、USAGE OBJECT REFERENCE 字類名-1 ONLYとして記述されているとして処理される。一意名-1により参照されるオブジェクトが、字類名-1のファクトリオブジェクトでない場合は、EC-OO-CONFORMANCE 例外条件が設定される。

  5. FACTORY および ONLY 指定の両方が存在する場合は、一意名-1 が、USAGE OBJECT REFERENCE FACTORY OF 字類名-1 ONLYとして記述されているとして処理される。一意名-1 が字類名-1のファクトリオブジェクトでない場合は、EC-OO-CONFORMANCE 例外条件が設定される。

  6. インターフェイス名-1が指定されている場合は、一意名-1 が、USAGE OBJECT REFERENCE インターフェイス名-1として記述されているとして処理される。一意名-1により参照されるオブジェクトが、インターフェイス名-1を使用しない場合は、EC-OO-CONFORMANCE 例外条件が設定される。

  7. UNIVERSAL が指定されている場合は、一意名-1 が、一意名-1 が参照するオブジェクト用の字類またはインターフェイスを表す指定可能な句をまったく使用していないUSAGE OBJECT REFERENCEとして記述されているとして処理される。この場合は、EC-OO-CONFORMANCE例外条件が設定される。

データ番地一意名

データ番地一意名は、データ項目の番地を含む一意のデータ項目を参照する。

一般形式

ADDRESS of 一意名-1

構文規則

  1. 一意名-1 は、ファイル節、作業記憶節、局所記憶節、または連絡節で定義されたデータ項目を参照するものとする。 一意名-1 は、インスタンスオブジェクトまたはファクトリオブジェクトの作業記憶節またはファイル節では定義されない。

  2. 一意名-1 は、オブジェクト参照を参照してはならない。

  3. この一意名形式を、受取り側作用対象として指定してはならない。

一般規則

  1. データ番地一意名は、一意名-1の番地を含む、字類ポインタおよび項類データポインタの、一意のデータ項目を作成する。

プログラム番地一意名

一般形式

構文規則

  1. 一意名-1は、項類が英数字または各国語とする。

  2. 定数-1は、英数字または各国語型定数とする。

  3. プログラムプロトタイプ名-1 は、リポジトリ段落で指定されたプログラムプロトタイプとする。

  4. この一意名形式を、受取り側作用対象として指定してはならない。

一般規則

  1. プログラム番地一意名は、以下のいずれかにより識別されるプログラムの番地を含む、字類ポインタおよび項類データポインタの、一意のデータ項目を作成する。
    1. 一意名-1により参照されるデータ項目の内容
    2. 定数-1の値
    3. プログラムプロトタイプ名-1.

    一意名-1または定数-1が指定される場合は、COBOL言語の概念の章のCOBOLの語節の解説に従って、この値を使用して参照先プログラムが識別される。

  2. プログラムは COBOL で書かれていても、他の言語で書かれていてもよい。COBOL プログラムでは、番地は、もっとも外部にあるプログラムの番地である。このプログラムは、そのプログラム名段落にある外部化されたプログラム名により識別される。

  3. プログラムプロトタイプ名-1 が指定されている場合は、プログラム番地一意名は、プログラムプロトタイプ名-1に制限されたプログラムポインタの性質を持つ。

  4. 実行時システムがプログラムを見つけられない場合は、番地一意名の値は定義済みの番地、NULLとなる。

明示指定と暗黙指定

COBOLの原始要素には、下記の4種類の明示指定と暗黙指定がある。

  1. 手続き部の明示指定と暗黙指定

  2. 制御の明示移行と暗黙移行

  3. 明示属性と暗黙属性

  4. 明示範囲符と暗黙範囲符

手続き部の明示参照と暗黙参照

COBOL原始要素プログラム中では、手続き部の文で、データ項目を明示的にも暗黙的にも参照できる。 明示参照(explicit reference)とは、手続き部の文に参照対象項目の名前を書いた場合、またはCOPY(複写)文、

REPLACE文、

INC文、または++INCLUDE文

を実行して参照対象項目の名前を手続き部に複写してきた場合の参照をいう。 暗黙参照(implicit reference)とは、手続き部の文に参照対象項目の名前を書かないでデータ項目を参照することをいう。

PERFORM(実行)文を実行する際にも、暗黙参照が発生する。これは、PERFORM文に関連する制御機構がVARYING句、AFTER句、UNTIL句に指定された指標名または一意名によって参照される、指標またはデータ項目を初期化したり変更したり評価したりした場合である。このような暗黙参照は、データ項目が命令の実行に係わるときだけ行われる。

制御の明示移行と暗黙移行

制御の流れでは、書かれている順に文から文へと制御が移行する。ただし、この順序より優先される制御の明示移行が存在する場合、または制御を渡すことのできる次の実行可能な文が存在しない場合を除く。文から文への制御の移行は、手続き部文がとくに書かれていなくても行われる。したがって、制御の暗黙移行と呼ばれる。

COBOLには、暗黙的な制御移行の機構を明示的にも暗黙的にも変更する手段が備わっている。

制御の暗黙移行は、連続する完結文および連続する文の間で起こるほか、手続き分岐文を実行することなく通常の制御の流れを変えるときにも起こる。文から文への制御の流れを暗黙のうちに変更する方法には、以下のものがある。

  1. 他のCOBOL文(PERFORM(実行)、USE(使用)、SORT(整列)、MERGE(併合)など)の制御のもとで、その文の制御範囲の最後の段落が実行されたとき、その最後の文から元の文の制御機構に、暗黙的に制御が移される。さらに、繰り返し実行を起すPERFORM文では、実行の繰り返しが起こるたびに、その制御機構と制御範囲の最初の段落の最初の文との間で、制御の暗黙移行が起こる。

  2. SORT文またはMERGE文が実行されるとき、関連する入出力手続きに暗黙のうちに制御が移る。

  3. あるCOBOL文を実行することが 宣言(declarative)の節(section)の実行につながると、その宣言部分の節に暗黙に制御が移る。

注:その宣言部分の節に暗黙に制御が移る。この宣言部分の節が実行された後で、暗黙のうちに制御が戻る(上記1.を参照)。


  1. 何らかのファイル操作(OPENおよびCLOSEを含む)を行った際に、そのファイルにFILE STATUSデータ項目が宣言されてなく、USE文も明示的に指定されていない場合、暗黙のUSE文によって例外処理が行われる。この暗黙のUSE手続きの内容を下記に示す。
    USE AFTER ERROR PROCEDURE ON ファイル名. 
    IF 状態キー-1 >= 3
      DISPLAY エラーメッセージ UPON CONSOLE 
      STOP RUN.

    エラーメッセージの定義については、エラーメッセージを参照。

制御の明示移行とは、手続き分岐文または条件文を実行することによって、制御の暗黙移行の機構を変えることをいう。文の間の制御の明示移行は、手続き分岐文または条件文を実行することによってだけ引き起こされる。完結文の間の制御の明示移行は、IF(判断)文のNEXT SENTENCE(次の完結文)句またはSEARCH(表引き)文を実行することによってだけ引き起こされる。

手続き分岐文のALTER(変更)文を実行することは、直接的に制御の明示移行を引き起こす訳ではなく、関連するGO TO(飛び越し)文を実行するときの制御の明示移行に影響する。手続き分岐文のEXIT PROGRAM(プログラムの出口)文は、呼ばれたプログラムの中で実行されると、制御の明示移行を引き起こす。

「次の実行完結文」(next executable sentence)という用語は、上記の規則に従って制御が暗黙のうちに移されるか、またはNEXT SENTENCE句によって明示的に制御を移される、次のCOBOL完結文を指すために用いる。次の実行完結文は、現在の完結文を終了させる分離符の終止符の直後の完結文である。

「次の実行文」(next executable statement)という用語は、上記の規則および手続き部の各言語要素に関連する規則に従って制御が移される、次のCOBOL文を指すために用いる。

以下の場合には、次の実行文は存在しない。

明示属性と暗黙属性

属性は、暗黙的にも明示的にも指定できる。明示的に指定した属性を、明示属性(explicit attribute)という。属性を明示的に指定しないと、省略時の解釈が取られる。このような属性を、暗黙属性(implicit attribute)という。

たとえば、データ項目の用途(usage)は指定しなくてよい。指定のないデータ項目の用途はDISPLAY(表示用)と解釈される。

PICTURE文字列が"G"または"N"を持たないを除く。この場合、データ項目の用途はDISPLAY-1である。

明示範囲符と暗示範囲符

範囲符は、手続き部のある種の文(範囲明示文)の範囲を区切る。これには、明示範囲符と暗黙範囲符の2種類がある。

有効な明示範囲符には以下のものがある。

END-ADD
END-PERFORM

END-ACCEPT

END-CALL

END-CHAIN

END-COMPUTE
END-DELETE

END-DISPLAY

END-DIVIDE
END-EVALUATE
END-IF
END-MULTIPLY
END-READ
END-RETURN
END-REWRITE
END-SEARCH
END-START
END-STRING
END-SUBTRACT
END-UNSTRING
END-WRITE


注:COBOL言語の方言が異なると、範囲符と対になる範囲明示文が異なることがあるので注意。


暗黙範囲符は下記の場合に発生する。