前ページへ COBOL言語の概要 翻訳集団の概念 次ページへ

第2章: COBOL言語の概念

2.1 文字集合

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

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

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

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

2.2 言語の構造

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

2.2.1 分離符

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

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

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

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

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

    関数の引数リスト、部分参照、

    算術式、条件を囲むときだけ使用する。ただし、仮原文の中で使用するときは、例外である。

  5. 句読文字の引用符、'G"'、'H"'、'N"'、'X"'は、

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

  6. 句読文字のアポストロフィは分離符となる。この分離符は、 翻訳集団全体を通して引用符の代りに使用できる。

    同一の原始要素内で引用符とアポストロフィの両方を使用できる。ただし、それぞれ対で使用しなければならない。

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

    左側の仮原文区切り記号の直前の空白は、省いても差し支えない。

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

    および動詞記号

    を囲むときだけ使用する。 (翻訳指示文および COBOL言語拡張の章を参照。)

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

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

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

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

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

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

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

2.2.2 文字列

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

2.2.2.1 COBOLの語

COBOLの語(word)は30字以内の文字列であって、翻訳指示語、コンテキストセンシティブ語、利用者語、システム名、予約語、関数名に使用する。特殊文字を含まないCOBOLの語は文字と数字とハイフン と下線から構成される。非特殊文字語においては、ハイフン または下線を先頭または末尾に置いてはならない。小文字は対応する大文字と等しいものとみなされる。 文字列は31文字含むことができる。

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

  1. LENGTH, RANDOM, SUMを除くすべてのCOBOLの語に関して、
    1. 予約語の集合は利用者語、システム名、関数名の集合と重なり合ってはならない。

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

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

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

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

All 区分番号およびレベル番号を除く利用者語はすべて、上記の互いに重ならない種類のうちのただ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コンパイラによって作成される記憶領域である。特殊レジスタには名前を付け、その名前によって参照する。特殊レジスタには、LINAGE-COUNTER (データ部 - データ記述の章を参照)、DEBUG-ITEM (言語リファレンス - 追加トピックデバッグを参照)などがある。これらについては、この節の特殊レジスタの項で後述する。
表意定数: 表意定数(figurative constant)とは、 特殊な定数値に予め付けた名前である。この名前によって、値を参照する。具体的な表意定数については、この節の表意定数の値の項で後述する。
特殊文字語: 特殊文字語(special-character word)とは、特殊な文字の予約語である。
定義済みオブジェクト一意名: あらかじめ定義されたオブジェクト一意名などの予約語である。以下のものがある。
  1. SELF
  2. SUPER
  3. SELFCLASS

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

2.2.3 名前の適用範囲

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

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

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

利用者語のうちの下記の種類に属するものは、それらが通信節中に宣言されている場合、その通信節を含むプログラム中の文または記述項においてだけ、参照できる。<

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

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

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

プログラム名は、見出し部のプログラム名段落に宣言する。プログラム名を参照できるのは、CALL(呼ぶ)文、 CHAIN(連鎖)文、CANCEL(取消し)文、 SET(設定)文、プログラム終了見出しからだけである。1つの実行単位を構成するいくつかのプログラムに付けられたプログラム名は、必ずしも一意であるとは限らない。しかし、1つの実行単位中の2つのプログラム名が同じである場合、少なくとも一方のプログラムは、もう一方のプログラムを含まない別のプログラムの中に直接的または間接的に含まれていなければならない。

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

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

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

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

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

原始要素の中に条件名、データ名、ファイル名、レコード名、報告書名、 型定義名が宣言されている場合、これらの名前はその原始要素の中でだけ参照できる。ただし、これらの名前のうちのいくつかが大域的に使用され、その原始要素中に他の原始要素が含まれる場合は、含まれる他の原始要素からも参照できる。

単一の原始要素の条件名、データ名、ファイル名、レコード名、報告書名、 型定義名に付けた名前の一意性に関する必要条件については、前述の利用者語の節を参照。

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

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

原始要素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を含む原始要素中のものが参照されたとする。更に上位の原始要素があるならば、単一の有効な名前が見つかるまで、この規則を順次上に適用する。

2.2.3.3 指標名に関する適用規則

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

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

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

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

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

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

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

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

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

2.2.3.5 メソッド名の適用規則

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

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

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

2.2.4 定数

定数(literal)には下記のものがある。

定数には文字定数と数字定数がある。

2.2.4.1 文字定数

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

またはアポストロフィ

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

またはアポストロフィ

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

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

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

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

2.2.4.2 数字定数

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

2.2.4.2.1 固定小数点数の数字定数

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

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

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

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

2.2.4.2.2 浮動小数点数の数字定数

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

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

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

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

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

2.2.4.3 表意定数の値

表意定数の値は、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 定数 指定された文字が何文字か含まれる文字列を表わす。定数は文字定数か表意定数のどちらかでなければならない。ただし、定数としてALLを指定することはできない。定数として表意定数を指定した場合、ALLは読みやすくするためだけに用いられる。
NULL
NULLS
1つ以上の未設定ポインタ値

または手続きポインタ値

を表わす。USAGE POINTER

または PROCEDURE-POINTER

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

または手続きも指さないことが保証される。

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

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

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

  2. 「ALL 定数」以外の表意定数を他のデータ項目と関係付けなかった(たとえば、DISPLAY(表示)、STRING(連結)、STOP(停止)、UNSTRING(分解)文の中で表意定数を使用しなかった)場合、文字列の長さは1文字となる。

  3. 表意定数「ALL 定数」を他のデータ項目と関係付けなかった場合、文字列の長さは定数の長さとなる。

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

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

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

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

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

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

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

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

2.2.4.4 定数名

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

定数名は、定義した後でだけ使用できる。定数名には前方参照が効かない。

2.2.4.5 連結式

連結式(concaternation expression)は、連結演算子で区切られた2つの作用対象をつないだものである。

一般形式

構文規則

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

構文規則

  1. 連結演算の結果としての連結式の字類は、以下のようになるる。

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

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

    3. 作用対象と同じ字類

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

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

2.2.4.6 特殊レジスタ

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

表 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文の送出し側としてだけ使用できる。
LENGTH OF データ名-22 9(9) データ名-2によって使用される、記憶領域の現在の
バイト数を示す値を生成する。この式は、数字データ項目を使用できるところであればどこでも使用できる。ただし、添字付けまたは部分参照は例外とする。

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

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文の送出し側としてだけ使用できる。


注: 特殊レジスタによっては、コンパイラ指令および方言の影響を受けるものがある。

  1. CURRENT-DATE特殊レジスタの内容の形式は、CURRENT-DATE指令の影響を受ける。
  2. LENGTH OF特殊レジスタは、Micro Focus 方言では英数字定数で続けても構わない。
  3. RETURN-CODE特殊レジスタのサイズは、XOPEN指令およびRTNCODE-SIZE指令の影響を受ける。

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

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

2.2.4.8 PICTURE 文字列

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

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

2.2.4.9 注記項

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

または行のA領域にある任意の文字が出たところ

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

2.3 形式と規則

2.3.1 一般形式

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

2.3.2 構文規則

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

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

2.3.3 一般規則

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

2.3.4 要素

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

2.4 機種に左右されないデータ記述の概念

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

2.5 レベルの概念

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

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

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

2.5.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)

2.6 データの字類と項類

基本データ項目、定数、関数は、それぞれ字類と項類を持つ。データ項目の字類と項類は、そのPICTURE文字列か、BLANK WHEN ZERO句か、用途によって定義する。 組込み関数の字類と項類は、組込み関数の定義によって記述する。(手続き部 - 組込み関数の章の組込み関数の節を参照。) 定数の字類と項類については、前述の定数の節を参照。

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

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

図 2-3: 基本項目の字類と項類の関係

字類 項類
英字 英字
英数字 数字編集
英数字編集
英数字
2バイト文字
指標 指標
数字 数字
内部浮動小数点数
外部浮動小数点数
オブジェクト オブジェクト参照
ポインタ データ・ポインタ
プログラム・ポインタ

2.6.1 算術符号

 算術符号(algebraic sign)は、演算符号(operational sign)と編集用符号(editing sign)に分類される。

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

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

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

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

2.6.2 標準桁寄せ規則

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

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

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

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

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

  3. 受取り側データ項目が英数字(英数字編集を除く)、英数字編集、英字のデータ項目である場合、送出し側データは左側を揃えて受取り側データに転記される。このとき、必要に応じて、右端に空白が補われたり、右端が切り捨てられたりする。

  4. 受取り側データ項目が外部浮動小数点数である場合、データは左端の文字位置をそろえられる。それに応じて、指数部が調整される。

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

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

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

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

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

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

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

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

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

2.6.4 文字の表現と基数の選定

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

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

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

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

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

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

2.6.4.1 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句は効果をもたない。

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

これらの数字データ項目は、計算機の記憶域では、純粋な2進数の形で保持される。この形式では、数値は2を基数として表わされ、計算機に保持されている各ビットは右端を最下位の桁として位取りされ、各位の2のべき乗値の有無を表わす。 負の数は絶対値の等しい正の数の補数を取り(すべてのビットの値を逆転する)、その結果に1を加えることによって表される。データ項目を記憶するのに必要な文字数は、PICTURE句の中の"9" の数と符号が付けられているかいないか によって決まる。(データ部 - データ記述の章のPICTURE句、COMPUTATIONAL句SIGN句を参照。) 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指令が設定されている場合は例外で、値が大きければ、符号ビットを上書きする。


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

この形式は、内部浮動小数点データ項目用に使用する。内部浮動小数点データ項目を使用できる場所は、文法的に数字データ項目が使用でき、かつCOBOL言語定義のANSI'74, ANSI'85, ISO2000, 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桁の小数を表示する。浮動小数点項目を使用するどの操作もこの制限を考慮する必要がある。この制限を超える小数部については無視するようにすること。

2.6.4.4 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進法による符号用半バイト
符号なし 該当せず 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と宣言されたデータには影響を及ぼさない。

2.6.4.5 COMPUTATIONAL-X
dialx.gifおよび COMPUTATIONAL-5
形式

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

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

2.6.4.6 ポインタ形式

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

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

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

2.6.4.7 手続きポインタ形式

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

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

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

2.6.5 一意参照

2.6.5.1 修飾

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つ以上の登録集を使えるときには、原文名を参照するたびに修飾しなければならない。

    この規則は強制しない。

2.6.5.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. If

    整数-2または

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

    整数-2または

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

    整数-2または

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

    これらは

    指標名-1を用いて指定した値、

    またはデータ名-2を用いて指定した値に対して行われる。

2.6.5.3 指標付け

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

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

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

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

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

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

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

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

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

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

指標付けの一般形式は、「添字付け」の節に記した一般形式に含めてある。

2.6.5.4 関数一意名

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

一般形式

   FUNCTION 関数名-1 [({引数-1}...)][部分参照]

構文規則

  1. 引数-1は、一意名か定数か算術式とする。各関数の定義の中で、引数-1が満たすべき数字、字類、項類に関する具体的な規則が与えられている。(手続き部の章の組込み関数の節を参照。)

  2. 部分参照は、項類が英数字、

    または各国語型の関数に対して指定できる。

  3. 英数字

    または各国語型

    の関数を参照する関数一意名は、一般形式の中で一意名が使えるところならば、どこにでも指定できる。ただし、一般形式に関する規則によって禁止されている場合は例外である。具体的な禁止条件は下記のとおり。

    1. 文の受取り側作用対象としての場合。

    2. 参照対象のデータ項目が特定の特性(字類と項類、用途、大きさ、符号、許容値など)を取ることが一般形式に関する規則によって求められているが、関数の定義と具体的に指定された 引数に従って関数を評価した結果が、その特性を満たさない場合。

  4. 整数または 数字の関数を参照する関数一意名は、算術式

    またはMOVE(転記)文の送出し側としてだけ、使用できる。

一般規則

  1. 参照対象の関数の字類をはじめとする特性は、関数の定義によって定まる。

  2. 関数が参照される時点で、指定した引数リスト中の引数は左から右へ1つづつ順に評価される。引数は、それ自体が関数一意名であってもよいし、関数一意名を含む式であってもよい。 評価の対象の引数によって参照される関数は、その引数が指定されている関数と同じであってもよい。言い換えると、関数は再帰型をとることができる。

    この場合、浮動小数点数が評価の対象になると、作用対象は最も近い整数に丸められるか、または、端数が切り捨てられる。

2.6.5.5 部分参照

部分参照(reference modification)とは、データ項目の一部を切り出してデータ項目を定義することである。切り出す範囲はデータ項目中の起点となる文字位置(切り出す文字の再左端文字位置)と長さによって指定する。別途指定がないかぎり、英数字データ項目を参照する 一意名が使えるところでは、どこでも部分参照ができる。

一般形式


注: 上記の一般形式において、データ名-1およびFUNCTION関数名-1(引数-1)は文脈を示すために記したものであり、 部分参照の一部を構成する訳ではない。


構文規則

  1. データ名-1は、用途がDISPLAYであるデータ項目を参照しなければならない。

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

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

  4. データ名-1は修飾してもよいし、添字付けしてもよい。

  5. 関数名-1およびその引数(指定されている場合)によって参照される関数は、英数字の関数とする。

一般規則

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

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

    外部浮動小数点数、

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

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

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

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

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

  4. 部分参照は、データ名-1または関数名-1およびその引数(ある場合)によって参照されるデータ項目の部分集合である、一意のデータ項目を作り出す。この一意のデータ項目は下記のようにして、参照対象データ項目から取り出される。

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

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

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

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

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

    外部浮動小数点数

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

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

2.6.5.6 一意名

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

関数以外、または オブジェクト・プロパティのデータ項目を参照するときに、

原始要素の中でデータ名が一意でない場合、そのデータ名の後ろに修飾語か添字、

または 部分参照を指定して、

一意に参照できるようにする。

一般形式

書き方 1

書き方 2

書き方 3
   プロパティ名-1 OF 一意名-1
書き方2の規則

添字-1は添字付け(2.6.5.2「添字付け」を参照)または指標付け(2.6.5.3「指標付け」を参照)を表す。

  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句に指定されているデータ項目の記述と同じである。

2.6.5.7 条件名

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

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

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

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

2.6.6 明示指定と暗黙指定

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

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

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

  3. 明示属性と暗黙属性

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

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

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

REPLACE文か、

-INC文か、++INCLUDE文

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

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

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

/P>

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

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

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

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

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

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


  4. 何らかのファイル操作(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文を指すために用いる。

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

2.6.6.3 明示属性と暗黙属性

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

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

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

2.6.6.4 明示範囲符と暗黙範囲符

範囲符は、手続き部のある種の文(範囲明示文)の範囲を区切る。これには、明示範囲符と暗黙範囲符の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-RECEIVE
END-RETURN
END-REWRITE
END-SEARCH
END-START
END-STRING
END-SUBTRACT
END-UNSTRING
END-WRITE


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


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


Copyright © 2002 Micro Focus International Limited. All rights reserved.
本書、ならびに使用されている固有の商標と商品名 は国際法によって保護されています。
前ページへ COBOL言語の概要 翻訳集団の概念 次ページへ