本章では、COBOLの言語の概念と全般規定を説明する。
COBOLプログラムは、計算機で使うことができる文字集合のうちの、特定の文字集合を使って書く。COBOLプログラムを書くための文字集合を「COBOL文字集合」という。COBOL文字集合には、以下の4種類がある。
英字を以下に示す。1文字の英字の記憶領域は1バイトである。
英小文字は、文字定数の中を除いて、対応する英大文字と等価とみなされる。
数字を以下に示す。1文字の数字の記憶領域は1バイトである。
特殊文字を下表に示す。1文字の特殊文字の記憶領域は1バイトである。
+ | 正号 |
- | 負号またはハイフン |
* | 星印 |
/ | 斜線 |
= | 等号 |
¥ | 通貨記号 |
, | コンマ |
; | セミコロン |
. | 終止符または小数点 |
" | 引用符 |
( | 左括弧 |
) | 右括弧 |
> | より大きい記号 |
< | より小さい記号 |
: | コロン |
& | アンパサンド |
_ | アンダースコア |
日本語文字は、UTF-8コード系において、2バイト以上で表される文字である。(*1)
(*1) したがって、SIT COBOLでは、日本語文字だけではなく、UNICODEで定義されている任意の文字を扱うことができる。
計算機で使うことができる文字集合を、「計算機文字集合」という。COBOL文字集合は、計算機文字集合の部分集合である。
以下の場所では、COBOL文字集合中の文字だけでなく、計算機文字集合中の文字を使うことができる。
COBOLプログラムは、分離符、COBOLの語、定数、PICTURE句の文字列、注記項、注記行および行内注記で構成する。これらの要素のうち定数の値、注記項、注記行および行内注記を除くものは、COBOL文字集合の文字を使って書く。定数の値、注記項、注記行および行内注記は、計算機文字集合中の任意の文字を使って書くことができる。
COBOLプログラムの中には、上記以外に、空白だけからなる行(空白行)を書くことができる。
分離符は、文字列を区切るための文字である。分離符として使える文字は、以下のものである。
分離符の空白は、COBOLの語、定数またはPICTURE句の文字列を区切るために使う。
分離符のコンマおよび分離符のセミコロンは、プログラムを読みやすくするために使う。これらの分離符が書ける場所は、分離符の空白が書ける場所と同じである。
これらの分離符の前後には、分離符の空白を書くこともできる。
分離符の終止符は、部、節および段落の見出しの終わり、または部、節、段落、記述項、完結文などの終わりを示すために使う。分離符の終止符は、「書き方」で“.”と示しているところにだけ書くことができる。
分離符の終止符の前後には、分離符の空白を書くこともできる。
左括弧と右括弧は、添字、部分参照子、算術式、ブール式、条件式および引数の並びを囲むために使う。左括弧と右括弧は、これらを対にして使う。
左括弧の前後および右括弧の前後には、分離符の空白を書くこともできる。
引用符は、文字定数、16進文字定数、日本語文字定数および日本語16進文字定数の値を示す文字列を囲むために使う。引用符は、定数値の開始を示す引用符と定数値の終了を示す引用符を対にして使う。引用符の記述規則を、以下に示す。
上記のいずれの場合も、定数値の開始を示す引用符の直前は、分離符の空白または左括弧でなければならない。また、定数値の終了を示す引用符の直後は、分離符の空白、分離符のコンマ、分離符のセミコロン、分離符の終止符、または右括弧でなければならない。
仮原文区切り記号は、仮原文を囲むために使う。仮原文区切り記号は、2つを対にして使う。左側の仮原文区切り記号の直前は、分離符の空白でなければならない。右側の仮原文区切り記号の直後は、分離符の空白、分離符のコンマ、分離符のセミコロン、または分離符の終止符でなければならない。
コロンは、部分参照子を書くために使う。
コロンの前後には、分離符の空白を書くこともできる。
連結演算子は、定数を連結するために使う。
連結演算子の前後には、分離符の空白を書かなければならない。
以下の場所に書いた文字列には、分離符の規則は適用されない。すなわち、以下の場所に書いた文字列は、分離符と同じ形式であっても分離符とはみなされない。
COBOLの語は、COBOL文字集合中の文字からなる、ひとつながりの文字列である。COBOLの語には、以下の4種類がある。
COBOLの語は、以下の規則を満足する文字列である。以下の規則のほかに、COBOLの語ごとに制限がある。
(*1) SIT COBOLでは30文字以内でなくてよい。
(*2) SIT
COBOLでは、最初の文字と最後の文字がアンダースコアであってもよい。
利用者語は、利用者が任意に命名する語である。利用者語は、以下の14個である。
レベル番号以外の利用者語には、すべて異なる名前を付けなければならない。ただし、条件名、データ名、レコード名および指標名は、修飾によって一意参照できるならば、同じ名前を付けることもできる。レベル番号については、1つのプログラムに、同じレベル番号を2つ以上書くことができる。
利用者語は、英字、数字、ハイフンおよびアンダースコアの組合せ、または日本語文字で構成する。レベル番号、登録集名、プログラム名および原文名以外の利用者語は、日本語文字で構成することもできる。日本語文字からなる利用者語を、特に「日本語利用者語」という。
利用者語を英字、数字、ハイフンおよびアンダースコアの組合せで構成する場合、以下の規則に従わなければならない。
利用者語を日本語文字で構成する場合、以下の規則に従わなければならない。
(*1) SIT COBOLは、30文字以内でなくともよい。
(*2) SIT
COBOLは、空白の日本語文字を含むことができる。
(*3) SIT
COBOLは、登録集名、プログラム名および現文名を日本語文字で構成することができる。
利用者語の用途および利用者語を書くことができる場所は、以下のとおりである。
原文名は、登録集原文に付ける名前である。COBOL登録集の中の原文を参照するために使う。原文名は、「書き方」で“原文名-n”と示しているところに書くことができる。
指標名は、表の指標に付ける名前である。指標名は、データ部のデータ記述項で定義する。指標名は、「書き方」で“指標名-n”と示しているところに書くことができる。
字類名は、利用者が定めた文字集合に付ける名前である。データ項目の内容の字類を検査するために使う。字類名は、環境部の特殊名段落で定義する。字類名は、「書き方」で“字類名-n”と示しているところに書くことができる。
条件名には、以下の2つがある。
1.の条件名は、データ部の条件名記述項で定義する。条件名を関係付けたデータ項目を、「条件変数」という。1.の条件名は、条件名条件およびSET文で使うことができる。条件名条件は、比較条件の省略した書き方として使う。条件名条件は、条件変数の値が条件名の値と等しいかどうかという条件を表す。1.の条件名は、条件変数に値を設定するために、SET文でも使うことができる。
2.の条件名は、環境部の特殊名段落で定義する。2.の条件名は、スイッチ状態条件で使うことができる。スイッチ状態条件は、外部スイッチの状態が、特殊名段落で指定した状態に設定されているかという条件を表す。外部スイッチの状態を設定するためには、SET文を使う。
SET文では、条件名に対応付けた呼び名を指定する。
条件名は、「書き方」で“条件名-n”と示しているところに書くことができる。
(*1) SIT COBOLは、外部スイッチは未サポートである。(サポート予定あり)
節名は、手続き部の節に付ける名前である。節名は、「書き方」で“節名-n”または“手続き名-n”と示しているところに書くことができる。
段落名は、手続き部の段落に付ける名前である。段落名は、「書き方」で“段落名-n”または“手続き名-n”と示しているところに書くことができる。
データ名は、データ項目に付ける名前である。データ名は、データ部のデータ記述項で定義する。データ名は、「書き方」で“データ名-n”または“一意名-n”と示しているところに書くことができる。“データ名-n”と示している場合、特に許されない限り、部分参照、添字付け、修飾または明のポインタ付けをしてはならない。“一意名-n”と示している場合、データ名を一意に参照するために、必要ならば、部分参照、添字付け、修飾または明のポインタ付けをしなければならない。
登録集名は、COBOL登録集に付ける名前である。COBOL登録集を参照するために使う。
ファイル名は、ファイル結合子に付ける名前である。ファイル名は、環境部のファイル管理記述項で定義する。ファイル名は、「書き方」で“ファイル名-n”と示しているところに書くことができる。
符号系名は、特定の文字の組および文字の大小順序に付ける名前である。符号系名は、環境部の特殊名段落で定義する。符号系名は、「書き方」で“符号系名-n”と示しているところに書くことができる。
プログラム名は、COBOL原始プログラムに付ける名前である。プログラム名は、見出し部のプログラム名段落で定義する。プログラム名は、「書き方」で“プログラム名-n”と示しているところに書くことができる。
呼び名は、プログラムの外部で定義した機能を使うために、機能名(機能を識別するための名前)に関係付ける名前である。呼び名は、環境部の特殊名段落で定義する。呼び名は、「書き方」で“呼び名-n”と示しているところに書くことができる。
レコード名は、レコードに付ける名前である。レコード名は、データ部のレコード記述項で定義する。レコード名は、「書き方」で“レコード名-n”と示しているところに書くことができる。
レベル番号は、データ項目、報告集団項目および画面項目の階層を表すために付ける番号である。レベル番号01~49は、レコードの階層構造における項目の位置付けを表すために使う。レベル番号66、77および88は、特別な性質を持つデータ記述項を書くために使う。レベル番号01~09の上位のゼロは、省略することができる。レベル番号は、データ部の「書き方」で“レベル番号”と示しているところに書くことができる。
システム名は、オペレーティングシステムとの連絡に使うための語である。システム名には、利用者が任意に命名する語と特定の語がある。システム名は、以下の3つである。
機能名は、システムの論理的装置、外部スイッチなど、プログラムの外部で定義した機能を識別するための名前である。外部で定義した機能を使う場合、環境部の特殊名段落で、機能名を呼び名に対応付けなければならない。機能名は、使用する機能ごとに定められている。機能名の記述規則は、特殊名段落(SPECIAL-NAMES)”で説明する。
計算機名は、プログラムを翻訳または実行する計算機を識別するための名前である。計算機名は、利用者が命名する。計算機名は、COBOLの語の規則に従う任意の文字列で書くことができる。
ファイル識別名は、記憶媒体上のファイルを識別するための名前である。ファイルを使う場合、環境部のファイル管理記述項で、ファイル識別名をファイル名に関係付けなければならない。ファイル識別名は、利用者が命名する。ファイル識別名の記述規則は、ASSIGN句(順ファイル・索引ファイル)”で説明する。
予約語は、プログラムの処理を書くための特定の語でる。予約語には、以下の種類がある。
予約語と同じ文字列を、利用者語またはシステム名として使うことはでない。
必須語は、必ず書かなければならない語である。必須語には、必要語と特殊文字語がある。
「必要語」は、「書き方」で、英大文字に下線を付けている語である。
「特殊文字語」は、以下の12個である。「書き方」では、他の記号との混同を避けるため、下線を付けてならない。
+、-、*、/、**、>、<、=、>=、<=、&
補助語は、書いても書かなくてもよい語である。「書き方」で、下線のない英大文字が補助語である。
特殊用途語は、次の2種類とする。
特殊レジスタは、コンパイラが自動的に作成する記憶領域である。特殊レジスタには、特定の機能を使ったときに発生する情報が格納される。また、特定の機能を実行するプログラム(システム)に対して情報を通知するために使うこともできる。
特殊レジスタには、以下のものがある。
特殊レジスタは、特定の項類を持つデータ項目として扱われる。特殊レジスタは、「書き方」で“データ名-n”または“一意名-n”で示しているところで、特殊レジスタが持つ項類が許されるところに書くことができる。
表意定数は、予約語を使って表現する。例えば、表意定数ALL SPACEの、ALLおよびSPACEは予約語である。
関数名は、関数の名前を示す語である。関数名は、関数一意名の中に書くことができる。関数一意名が書ける場所は、関数の型によって決められている。関数一意名が書ける場所は、“関数の全般規則”で説明する。
定数は、プログラムに書いた値を持つデータである。定数には、以下の種類がある。
(※) SIT COBOLは日本語16進定数は未サポートである。
数字定数は、数値を値として持つ定数である。
[ + | - ] [ 数字列-1 ] [ . 数字列-2 ]
文字定数は、計算機文字集合の文字を値として持つ定数である。
“{文字-1}…”
““{文字-1}…””
(*1) SIT COBOLは、特に制限はない。
16進文字定数は、計算機文字集合の文字を値として持つ定数である。16進文字定数は、定数の値を16進文字で表現する。
X” { 16進文字-1 } … ”
16進文字: | 内部ビット構成 |
0 | 0000 |
1 | 0001 |
2 | 0010 |
3 | 0011 |
4 | 0100 |
5 | 0101 |
6 | 0110 |
7 | 0111 |
8 | 1000 |
9 | 1001 |
A | 1010 |
B | 1011 |
C | 1100 |
D | 1101 |
E | 1110 |
F | 1111 |
(*1) SIT COBOLは、特に制限がない。
日本語定数は、日本語文字を値として持つ定数である。日本語定数には、日本語文字定数と日本語16進文字定数がある。
NC”{日本語文字-1}…”
N”{日本語文字-1}…”
(*1) SIT COBOLは、特に制限はない。
NX”{16進文字-1}…”
(※) SIT COBOLは、16進日本語定数は未サポートである。(サポート予定あり)
表意定数は、特定の値を持つ定数または定数の繰返しを書くときに使う。表意定数には、以下の7種類がある。
表意定数の書き方と値を、下表に示す。
名称 | 書き方 | 値 |
ZERO |
[ALL] ZERO [ALL] ZEROS [ALL] ZEROES |
文脈によって以下のいずれかの値を持つ - 数値ゼロ - 計算機文字集合の文字”0”の繰り返し |
SPACE |
[ALL] SPACE [ALL] SPACES |
文脈によって、以下のいずれかの値を持つ - 計算機文字集合中の英字の空白の繰返 - 計算機文字集合中の日本語文字の空白の繰返し |
HIGH-VALUE |
[ALL] HIGH-VALUE [ALL] HIGH-VALUES |
プログラムの文字の大小順序における最大の文字コードの繰返し |
LOW-VALUE |
[ALL] LOW-VALUE [ALL] LOW-VALUES |
プログラムの文字の大小順序における最小の文字コードの繰返し |
QUOTE |
[ALL] QUOTE [ALL] QUOTES |
引用符(“)の繰り返し |
ALL 定数 | ALL 定数 | ALL の後に書いた定数の繰返し |
連結式は、2つ以上の定数を連結演算子でつないで、1つの定数の値を表現する方法である。
[ ALL ] { 定数-1 } { & 定数-2} …
PICTURE句の文字列は、PICTURE句の中に書く文字列である。PICTURE句の文字列は、COBOL文字集合中の英字、数字および特殊文字で構成する。PICTURE句の文字列の記述規則は、“PICTURE句”で説明する。
注記項は、見出し部の記述項である。注記項は、計算機文字集合中の任意の文字で構成する。注記項は、廃要素である。新しく作成するプログラムでは、この要素を使わないことをすすめる。
ここでは、データ記述の概念を説明する。
1つ以上のデータで構成する、最も包括的な集まりを、「レコード」という。レコードは、レベルの概念に従って構成する。この概念は、データを参照するためにレコードを細分する必要性からきている。一度細分したものをさらに細分して、データを参照することができる。
レコードで最も基本的な細分、つまりそれ以上分割できない部分を「基本項目」という。いくつかの基本項目は、それらをまとめて参照するために、集団にすることができる。さらに、いくつかの集団をまとめて、集団にすることもできる。したがって、基本項目は、いくつかの集団の下位に従属することができる。基本項目を従属する集団を、「集団項目」という。
指標データ項目以外の基本項目は、いずれかの項類および字類に属する。集団項目の字類は、それに従属する基本項目が何であっても、実行時には英数字として扱われる。データ項目の字類と項類の関係を、下表に示す。
項目のレベル | 種類 | 項類 | 字類 |
基本項目 | 英字項目 | 英字 | 英字 |
数字項目 | 数字 | 数字 | |
数字編集項目 | 数字編集 | 英数字 | |
英数字項目 | 英数字 | ||
英数字編集項目 | 英数字編集 | ||
日本語項目 | 日本語 | 日本語 | |
日本語編集項目 | 日本語編集 | ||
集団項目 | — | 英字 | 英数字 |
数字 | |||
数字編集 | |||
英数字 | |||
英数字編集 | |||
日本語 | |||
日本語編集 |
データを基本項目に格納するときの桁よせの規則は、受取り側の項類によって決まる。送出し側のデータは、以下の規則に従って、桁よせされる。
データ記述項にSYNCHRONIZED句を書いた場合、データ項目を固有の境界に割り付けるために、使用されない文字位置またはブール位置がコンパイラによって挿入されることがある。固有の境界に合わせるために、SIT COBOLが挿入する文字位置を、それぞれ「遊びバイト」という。
2進項目または内部浮動小数点項目にSYNCHRONIZED句を指定した場合、そのデータ項目は、SYNCHRONIZED句の規則に従って、固有の境界に割り付けられる。このとき、レコードの中に、遊びバイトが挿入されることがある。
コンパイラは、レコードの中の各データ項目に相対番地を割り当てる。レコードの先頭を0番地とし、データ項目の相対番地にデータ項目自身の大きさを加えた値を、次のデータ項目の相対番地とする。
2進項目または内部浮動小数点項目にSYNCHRONIZED句を指定した場合、桁づめが必要になる。レコードの中に桁づめを必要とするデータ項目があり、その相対番地がそのデータ項目の固有の境界のバイト数の倍数でない場合、遊びバイトが挿入される。遊びバイトは、桁づめに必要な最小の長さを持つ、暗黙のFILLER項目である。
遊びバイトが挿入される位置は、以下のとおりである。
遊びバイトが挿入された場合、集団項目の大きさは、集団項目の中に挿入された暗黙のFILLER項目の大きさだけ拡張される。
省略
プログラムで使うすべての利用者語は、一意になるように書かなければならない。利用者語を一意にする方法を「一意参照」という。
同一の綴りを持つ利用者語が同じ名前の範囲の中に2つ以上存在する場合、利用者語を修飾しなければならない。修飾は、名前の階層系列の上位にある1つ以上の名前を付加することによって行う。名前の範囲は、“名前の範囲”で説明する。
{ データ名-1 | 条件名-1 | 指標名-1 } {
{{ IN | OF } データ名-2 } … [ { IN | OF } ファイル名-1 ] |
{ IN | OF } ファイル名-1 }
段落名-1 { IN | OF } 節名-1
原文名-1 { IN | OF } 登録集名-1
(※) SIT COBOLは、登録集名-1の指定は未サポートである。
2つ以上のCOBOL登録集を使う場合、原文名を参照するときには、原文名を登録集名で修飾しなければならない。
添字付けは、表要素を一意に参照するために使う。表要素を参照する場合、データ名または条件名に添字を付ける。
{ データ名-1 | 条件名-1 }
( { 整数-1 | データ名-2 [ { + | - } 整数-2 ] | 指標名-1 [ {+ | - } 整数-3 ] | ALL } )
備考
“データ名-1”および“条件名-1”は、書き方を明確にするために示しているだけで、添字の一部ではない。
部分参照は、データ項目または関数値の一部を参照するために使う。部分参照する場合、データ名または関数一意名に部分参照子を付ける。
データ名-1 ( 最左端文字位置 : [ 長さ ] )
FUNCTION 関数名-1 [ ( { 引数-1 } … ) ] ( 最左端文字位置 : [ 長さ ] )
備考
“データ名-1”および“FUNCTION 関数名-1[ ({引数-1}…)
]”は、書き方を明確にするために示してあるだけで、部分参照子の一部ではない。
1 ≦ 最左端位置 ≦ 部分参照元のデータ項目の文字位置の個数
1 ≦ 長さ ≦ 部分参照元のデータ項目の文字位置の個数 - 最左端の門司市の値 + 1
データ名に、修飾、添字付け、部分参照付けをして一意にできるようにしたものを、「一意名」という。データ名を一意参照する場合、データ名を一意名の形式で書かなければならない。
データ名-1 [ { IN | OF } データ名-2 ] … [ { IN | OF } ファイル名-1 ]
[ ( {添字} … ) ] [ 部分参照子 ]
条件名は、名前の範囲の規則によって一意参照が保証される場合を除いて、修飾、添字付けして一意にしなければならない。
条件名-1 [ { IN | OF } データ名-1 ] … [ { IN | OF } ファイル名-1 ]
[ ( {添字}…) ]
「関数一意名」は、関数を使うときの書き方である。関数一意名は、関数値を持つ一時的なデータ項目として扱われる。
FUNCTION 関数名-1 [ ( {引数-1} … ) ] [ 部分参照子 ]
COBOL原始プログラムを書くときの形式を、「正書法」という。COBOL原始プログラムは、正書法に従って書かなければならない。原始文操作機能を使う場合、COBOL登録集も、正書法に従って書かなければならない。
正書法は、1行のどの位置にどの要素を書くかを定めた規則である。正書法には、固定形式、自由形式の2種類がある。
固定形式の1行の構成を、以下に示す。
一連番号領域は、境界Lと境界Cの間の6文字分である。原始プログラムの行を識別するために使う。一連番号領域には、計算機文字集合中の任意の文字を書くことができる。一連番号領域の内容は、特定の順序で並んでいる必要も、一意である必要もない。
(*1) SIT COBOLは、デバッグ行は未サポートである。
A領域は、境界Aと境界Bの間の4文字分である。
B領域は、境界Bと境界Rの間である。
プログラム識別番号領域は、固定形式の場合にだけ存在する。プログラム識別番号領域は、境界Rのすぐ右(73番目の文字位置)から80番目の文字位置までの8文字分である。(*1)
(*1) SIT COBOLは、80番目を超える文字があってもよい。
COBOLの語には、A領域から書き始めるものとB領域から書き始めるものがある。
以下のものは、A領域から書き始めなければならない。
以下のものは、B領域から書き始めなければならない。
前述の規則のほかに、各部ごとに以下の規則がある。
標識領域、A領域およびB領域がすべて空白の行を、「空白行」という。空白行は、原始プログラムおよび登録集原文のどこでも書くことができる。
標識領域に星印“*”または斜線“/”を書いた行を、「注記行」という。注記行は、見出し部の見出しの後の任意の位置、および登録集原文の任意の位置に書くことができる。
注記行のA領域とB領域には、計算機文字集合中の任意の文字を書くことができる。注記行は注釈とみなされるが、翻訳リストには印字される。(1)
標識領域に星印を書いた注記行は、前の行に続いて印字される。標識領域に斜線を書いた注記行は、改ページした後に印字される。(1)
(*1) SIT COBOLは、翻訳リストは未サポートであるため、特に意味を持たない
文、記述項および句を構成する文字列は、次の行のB領域に続けて書くことができる。継続する行を、「後の行」といい、継続される行を「前の行」という。
以下の文字列は、後の行に継続して書くことができる。
上記の文字列を後の行に継続する場合、後の行の標識領域はハイフン“-”でなければならない。また、後の行のA領域は、空白でなければならない。標識領域のハイフンは、その行のB領域の空白でない最初の文字が、前の行(注記行および空白行を除く)の空白でない最後の文字の後に続くことを示す。
文字定数、16進文字定数、日本語定数を継続する場合は、さらに、以下の規則に従わなければならない。
なお、文字列の途中でなく文字列が終了した後に行を継続する場合は、標識領域にハイフンを書くことはできない。標識領域にハイフンがないと、その行の空白でない文字の前に空白があるものとみなされる。
分離符、すなわち以下の文字列は、1つの行に書かなければならない。
以下に、行を継続する例を示す。
----*----1----*----2----*----3----*----4----*----5----*----6----*----7--========
000000 77 XX PIC X(60) VALUE "ABCDE12345ABCDE12345ABCDE12345ABCDE12345
000000- "ABCDE12345ABCDE12345". ... [1]
000000 :
000000 MOVE X
000000- X TO YY. ... [2]
000000 MOVE XX TO
000000 YY. ... [3]
[図の説明]
[1]
文字定数を継続している。(前の行の最後の”5”の文字位置は72であるとする)
[2]
利用者語XXを継続している。
[3]
語と語の間で行を継続している。標識領域にハイフンを書くことはできない。
(*1) SIT COBOLは、COBOLの語およびPICTURE句の文字列の継続は、未サポートである。
標識領域に“D”を書いた行を、「デバッグ行」という。デバッグ行は、デバッグのための情報を原始プログラムに残すために使う。デバッグ行は、見出し部の実行用計算機段落以降に書くことができる。
デバッグ行のA領域とB領域は、COBOLの文法に従って書かなければならない。デバッグ行のA領域とB領域が共に空白の場合、デバッグ行は空白行とみなされる。
デバッグ行を翻訳するかどうかは、環境部の翻訳用計算機段落のWITH
DEBUGGING MODE句で指定する。デバッグ行は、WITH DEBUGGING
MODE句を書いた場合にだけ翻訳され、この句を省略した場合は注記行とみなされる。
翻訳時、WITH
DEBUGGING
MODE句の有無は、COPY文およびREPLACE文を処理した後に決定される。
(※) SIT COBOLは、デバッグ行は未サポートである。
文や記述項などを書いた行と同じ行の中に注釈を書きたい場合、行内注記を使って、行の右側に注釈を書くことができる。連続した2文字”*>“で始まり、同じ行の境界Rのすぐ左の文字位置で終わる部分を、「行内注記」という。行内注記は、見出し部の見出しの行とそれ以降の任意の行、および登録集原文中の任意の行に書くことができる。
行内注記の開始を示す記号”*>“の直前には、分離符の空白を書かなければならない。”*>“の後には、計算機文字集合中の任意の文字を書くことができる。行内注記は注釈とみなされる。
以下に、自由形式の正書法について説明する。
なお、自由形式の正書法では、廃要素は使用できない。
(※) SIT COBOLは自由形式の正書法は未サポートである。(サポート予定あり)
自由形式の正書法では、注記、デバッグ行および継続のための特別な規則があることを除いて、原始プログラムは行のどの文字位置からでも書くことができる。1行の文字位置の数は、行ごとに最小0から最大n(*1)の範囲で変更することができる。(ただし、日本語文字は、1文字で2つ以上の文字位置を占める)
(*1) nは未定
空白文字以外の文字を含まない行を、「空白行」という。空白行は、原始プログラムおよび登録集原文のどこにでも書くことができる。
2つの隣合うCOBOL文字”*>“は注記を示す。
注記が記述されていて、0または1つ以上の空白だけが注記に先立つ行を「注記行」という。1つ以上のCOBOLの語と、そのすぐ後ろに1つ以上の空白だけが注記に先立つ行の注記は、「行内注記」という。行内注記は、見出し部の見出しの行とそれ以降の任意の行、および登録集原文中の任意の行に書くことができる。
行内注記の開始を示す記号”*>“の直前には、分離符の空白を書かなければならない。”*>“の後には、計算機文字集合中の任意の文字を書くことができる。行内注記は注釈とみなされます。
文、記述項および句は、複数の行に渡って書くことができる。この継続する行を「後の行」といい、継続される行を「前の行」という。
文字定数、および日本語定数については、その一部を後の行に分けて書くことができる。これらの定数が行の終りで閉じていない場合、定数の閉じていない部分は、引用符とそのすぐ後に続くハイフンで終わらなければならない。
ハイフンは0または1つ以上の分離符の空白が続いていなければならない。
後の行の空白でない最初の文字は、引用符でなければならない。また、引用符のすぐ右の文字位置から、定数の続きを書き始めなければならない。このとき、定数の内容のうち少なくとも1文字は、前の行と後の行に書かれなければならない。
2文字以上で構成される分離符は、同一行になければならない。定数中の1つの引用符を示す一対の引用符は、同一行に記述しなければならない。注記行と空白行は、定数の一部を含む行の間に書くことができる。
3つの隣合うCOBOL文字“>>D”のすぐ後に1つの空白が続いているとき、デバッグ指示子を示す。デバッグ指示子に0または1つ以上の空白だけが先立つ行を「デバッグ行」という。
デバッグ行は、デバッグのための情報を原始プログラムに残すために使います。デバッグ行は、見出し部の実行用計算機段落以降に書くことができる。デバッグ行は行の終わりで終了する。デバッグ行は、COBOLの文法に従って書かなければならない。デバッグ行が0または1つ以上の空白だけの場合、デバッグ行は空白行とみなされる。
デバッグ行を翻訳するかどうかは、環境部の翻訳用計算機段落のWITH
DEBUGGING MODE句で指定する。デバッグ行は、WITH DEBUGGING
MODE句を書いた場合にだけ翻訳され、この句を省略した場合は注記行とみなされる。
翻訳時、WITH
DEBUGGING
MODE句の有無は、COPY文およびREPLACE文を処理した後に決定される。
プログラムは、以下の4つの部とプログラム終わり見出しで構成する。
プログラムは、見出し部で開始し、プログラム終わり見出しまたはプログラムの最後の行で終了する。
プログラムの開始から終了までの間には、別のプログラムを書くことができる。別のプログラムに含まれるプログラムを、「内部プログラム」という。内部プログラムは、プログラム間連絡機能を使う場合に書くことができる。(*1)
一番外側のプログラムの開始から終了までの範囲を、「翻訳単位」という。1つの翻訳単位の中には1つ以上の内部プログラムを書くことができる。プログラムが別のプログラムを含むことを「プログラムの入れ子」という。
内部プログラムはさらに内部プログラムを含むことができる。あるプログラム(プログラムA)のすぐ内側に別のプログラム(プログラムB)を書き、プログラムBのすぐ内側に別のプログラム(プログラムC)を書いた場合、プログラムBはプログラムAに「直接に含まれる」といい、プログラムCはプログラムAに「間接に含まれる」という。
以下に、翻訳単位のプログラムの書き方を示す。
見出し部
[ 環境部 ]
[ データ部 ]
[ 手続き部 ]
[ 内部プログラム ] …
[ プログラムの終わり見出し ]
見出し部
[ 環境部 ]
[ データ部 ]
[ 手続き部 ]
[ 内部プログラム ] …
プログラムの終わり見出し
(*1) SIT COBOLは、別のプログラムおよび内部プログラムを書くことはできない。
プログラム定義の手続き部の見出しにRETURNING指定が書かれた場合、プログラムから呼出し元に制御を戻す際に、RETURNING指定のデータ項目の内容がプログラムの結果となる。この結果は、呼出し元のCALL文のRETURNING指定に書かれた一意名に入る。
(※) SIT COBOLは、RETURNING指定は未サポートである。(サポート予定あり)