章の一覧全12章
このページの目次33
- 1.1 文字と文字集合
- 1.2 言語の基本要素
- 1.2.1 分離符
- 1.2.2 COBOLの語
- 1.2.3 定数
- 1.2.4 表意定数
- 1.2.5 名前付き定数
- 1.2.6 連結式
- 1.2.7 PICTURE句の文字列
- 1.2.8 注記項
- 1.3 データ記述の概念
- 1.3.1 レベルの概念
- 1.3.2 字類の概念
- 1.3.3 標準桁よせ規則
- 1.3.4 データの境界調整
- 1.4 一意参照
- 1.4.1 修飾
- 1.4.2 添字付け
- 1.4.3 部分参照
- 1.4.4 一意名
- 1.4.5 条件名の一意参照
- 1.4.6 関数一意名
- 1.5 正書法
- 1.5.1 行の構成
- 1.5.2 A領域とB領域の正書法
- 1.5.3 空白行
- 1.5.4 注記行
- 1.5.5 行のつなぎ
- 1.5.6 デバッグ行
- 1.5.7 行内注記
- 1.5.8 自由形式の正書法
- 1.6 プログラムの構成
- 1.6.1 プログラムの結果
第1章 全般規定
本章では、COBOLの言語の概念と全般規定を説明する。
1.1 文字と文字集合
COBOLプログラムは、計算機で使うことができる文字集合のうちの、特定の文字集合を使って書く。COBOLプログラムを書くための文字集合を「COBOL文字集合」という。COBOL文字集合には、以下の4種類がある。
- 英字
- 数字
- 特殊文字
- 日本語文字
英字
英字を以下に示す。1文字の英字の記憶領域は1バイトである。
- 英大文字(A、B、C、…、Zの26文字)
- 英小文字(a、b、c、…、zの26文字)
- 空白
英小文字は、文字定数の中を除いて、対応する英大文字と等価とみなされる。
数字
数字を以下に示す。1文字の数字の記憶領域は1バイトである。
- 0、1、2、3、4、5、6、7、8、9の10文字
特殊文字
特殊文字を下表に示す。1文字の特殊文字の記憶領域は1バイトである。
| + | 正号 |
| - | 負号またはハイフン |
| * | 星印 |
| / | 斜線 |
| = | 等号 |
| ¥ | 通貨記号 |
| , | コンマ |
| ; | セミコロン |
| . | 終止符または小数点 |
| " | 引用符 |
| ( | 左括弧 |
| ) | 右括弧 |
| > | より大きい記号 |
| < | より小さい記号 |
| : | コロン |
| & | アンパサンド |
| _ | アンダースコア |
日本語文字
日本語文字は、UTF-8コード系において、2バイト以上で表される文字である。(*1)
(*1)したがって、SIT COBOLでは、日本語文字だけではなく、UNICODEで定義されている任意の文字を扱うことができる。
計算機文字集合
計算機で使うことができる文字集合を、「計算機文字集合」という。COBOL文字集合は、計算機文字集合の部分集合である。
以下の場所では、COBOL文字集合中の文字だけでなく、計算機文字集合中の文字を使うことができる。
- 文字定数
- 日本語文字定数
- 注記項
- 注記行
- 行内注記
1.2 言語の基本要素
COBOLプログラムは、分離符、COBOLの語、定数、PICTURE句の文字列、注記項、注記行および行内注記で構成する。これらの要素のうち定数の値、注記項、注記行および行内注記を除くものは、COBOL文字集合の文字を使って書く。定数の値、注記項、注記行および行内注記は、計算機文字集合中の任意の文字を使って書くことができる。
COBOLプログラムの中には、上記以外に、空白だけからなる行(空白行)を書くことができる。
1.2.1 分離符
分離符は、文字列を区切るための文字である。分離符として使える文字は、以下のものである。
- 1つ以上の空白の並び。これを「分離符の空白」という。
- 1つのコンマ“,”の後に1つ以上の空白の並びをつないだもの。これを「分離符のコンマ」という。
- 1つのセミコロン“;”の後に1つ以上の空白の並びをつないだもの。これを「分離符のセミコロン」という。
- 1つの終止符“.”の後に1つ以上の空白の並びをつないだもの。これを「分離符の終止符」という。
- 1つの左括弧“(”。
- 1つの右括弧“)”。
- 定数値の開始を示す引用符 (’”’、‘X”’、‘NC”’)。
- 定数値の終了を示す引用符’”’。
- 1つの仮原文区切り記号”==”, ”//”。
- 1つのコロン“:”。
- 1つの連結演算子“&”。
分離符の空白
分離符の空白は、COBOLの語、定数またはPICTURE句の文字列を区切るために使う。
分離符のコンマおよび分離符のセミコロン
分離符のコンマおよび分離符のセミコロンは、プログラムを読みやすくするために使う。これらの分離符が書ける場所は、分離符の空白が書ける場所と同じである。
これらの分離符の前後には、分離符の空白を書くこともできる。
分離符の終止符
分離符の終止符は、部、節および段落の見出しの終わり、または部、節、段落、記述項、完結文などの終わりを示すために使う。分離符の終止符は、「書き方」で“.”と示しているところにだけ書くことができる。
分離符の終止符の前後には、分離符の空白を書くこともできる。
左括弧と右括弧
左括弧と右括弧は、添字、部分参照子、算術式、ブール式、条件式および引数の並びを囲むために使う。左括弧と右括弧は、これらを対にして使う。
左括弧の前後および右括弧の前後には、分離符の空白を書くこともできる。
引用符
引用符は、文字定数、16進文字定数、日本語文字定数および日本語16進文字定数の値を示す文字列を囲むために使う。引用符は、定数値の開始を示す引用符と定数値の終了を示す引用符を対にして使う。引用符の記述規則を、以下に示す。
- 文字定数を書く場合、’“‘と’“‘を対にして使う。
- 16進文字定数を書く場合、‘X“‘と’“‘を対にして使う
- 日本語文字定数を書く場合、‘NC“‘と’“‘を対にするか、または’N“‘と’“‘を対にして使う。
- 日本語16進文字定数を書く場合、‘NX“‘と’“‘を対にして使う。
上記のいずれの場合も、定数値の開始を示す引用符の直前は、分離符の空白または左括弧でなければならない。また、定数値の終了を示す引用符の直後は、分離符の空白、分離符のコンマ、分離符のセミコロン、分離符の終止符、または右括弧でなければならない。
仮原文区切り記号
仮原文区切り記号は、仮原文を囲むために使う。仮原文区切り記号は、2つを対にして使う。左側の仮原文区切り記号の直前は、分離符の空白でなければならない。右側の仮原文区切り記号の直後は、分離符の空白、分離符のコンマ、分離符のセミコロン、または分離符の終止符でなければならない。
コロン
コロンは、部分参照子を書くために使う。
コロンの前後には、分離符の空白を書くこともできる。
連結演算子
連結演算子は、定数を連結するために使う。
連結演算子の前後には、分離符の空白を書かなければならない。
分離符とみなされない文字列
以下の場所に書いた文字列には、分離符の規則は適用されない。すなわち、以下の場所に書いた文字列は、分離符と同じ形式であっても分離符とはみなされない。
- 数字定数
- 文字定数、16進文字定数、日本語定数の中の、定数値の開始を示す分離符と定数値の終了を示す分離符で囲まれた部分
- PICTURE句の文字列
- 注記項
- 注記行
- 行内注記
1.2.2 COBOLの語
COBOLの語は、COBOL文字集合中の文字からなる、ひとつながりの文字列である。COBOLの語には、以下の4種類がある。
- 利用者語
- システム名
- 予約語
- 関数名
COBOLの語は、以下の規則を満足する文字列である。以下の規則のほかに、COBOLの語ごとに制限がある。
- 長さは30文字以内である。(*1)
- 空白を除く英字(A~Zおよびa~z)、数字(0~9)、ハイフン(-)およびアンダースコア(_)で構成する。英小文字は、対応する英大文字と等価であるとみなされる。利用者語の場合は、日本語文字で構成することができる。
- 最初の文字と最後の文字は、ハイフンおよびアンダースコアであってはならない。(*2)
(*1)SIT COBOLでは30文字以内でなくてよい。
(*2)SIT COBOLでは、最初の文字と最後の文字がアンダースコアであってもよい。
(a) 利用者語
利用者語は、利用者が任意に命名する語である。利用者語は、以下の15個である。
- 原文名
- 指標名
- 字類名
- 条件名
- 節名
- 段落名
- データ名
- 登録集名
- ファイル名
- 符号系名
- プログラム名
- 呼び名
- レコード名
- レベル番号
- 名前付き定数
レベル番号以外の利用者語には、すべて異なる名前を付けなければならない。ただし、条件名、データ名、レコード名および指標名は、修飾によって一意参照できるならば、同じ名前を付けることもできる。レベル番号については、1つのプログラムに、同じレベル番号を2つ以上書くことができる。
利用者語の記述規則
利用者語は、英字、数字、ハイフンおよびアンダースコアの組合せ、または日本語文字で構成する。レベル番号、登録集名、プログラム名および原文名以外の利用者語は、日本語文字で構成することもできる。日本語文字からなる利用者語を、特に「日本語利用者語」という。
利用者語を英字、数字、ハイフンおよびアンダースコアの組合せで構成する場合、以下の規則に従わなければならない。
- 30文字以内でなければならない。(*1)
- 空白を除く英字(A~Zおよびa~z)、数字(0~9)、ハイフン(-)およびアンダースコア(_)で構成しなければならない。英小文字は、対応する英大文字と等価であるとみなされる。
- 最初の文字と最後の文字は、ハイフンおよびアンダースコアであってはならない。
- 利用者語を構成する文字列は、予約語と同じ文字列であってはならない。しかし、関数名またはシステム名と同じ文字列を、利用者語として使うことができる。
- 段落名、節名およびレベル番号以外のすべての利用者語は、少なくとも1文字の英字を含まなければならない。
利用者語を日本語文字で構成する場合、以下の規則に従わなければならない。
- 30文字以内でなければならない。(*1)
- 空白を除く日本語文字で構成しなければならない。(*2)
- レベル番号、登録集名、プログラム名および原文名を、日本語文字で構成することはできない。(3)
(*1)SIT COBOLは、30文字以内でなくともよい。
(*2)SIT COBOLは、空白の日本語文字を含むことができる。
(*3)SIT COBOLは、登録集名、プログラム名および現文名を日本語文字で構成することができる。
利用者語の用途
利用者語の用途および利用者語を書くことができる場所は、以下のとおりである。
(1) 原文名
原文名は、登録集原文に付ける名前である。COBOL登録集の中の原文を参照するために使う。原文名は、「書き方」で“原文名-n”と示しているところに書くことができる。
(2) 指標名
指標名は、表の指標に付ける名前である。指標名は、データ部のデータ記述項で定義する。指標名は、「書き方」で“指標名-n”と示しているところに書くことができる。
(3) 字類名
字類名は、利用者が定めた文字集合に付ける名前である。データ項目の内容の字類を検査するために使う。字類名は、環境部の特殊名段落で定義する。字類名は、「書き方」で“字類名-n”と示しているところに書くことができる。
(4) 条件名
条件名には、以下の2つがある。
- データ項目の取ることができる値に付ける名前
- 外部スイッチのオン状態またはオフ状態に付ける名前 (*1)
1.の条件名は、データ部の条件名記述項で定義する。条件名を関係付けたデータ項目を、「条件変数」という。1.の条件名は、条件名条件およびSET文で使うことができる。条件名条件は、比較条件の省略した書き方として使う。条件名条件は、条件変数の値が条件名の値と等しいかどうかという条件を表す。1.の条件名は、条件変数に値を設定するために、SET文でも使うことができる。
2.の条件名は、環境部の特殊名段落で定義する。2.の条件名は、スイッチ状態条件で使うことができる。スイッチ状態条件は、外部スイッチの状態が、特殊名段落で指定した状態に設定されているかという条件を表す。外部スイッチの状態を設定するためには、SET文を使う。
SET文では、条件名に対応付けた呼び名を指定する。
条件名は、「書き方」で“条件名-n”と示しているところに書くことができる。
(*1)SIT COBOLは、外部スイッチは未サポートである。(サポート予定あり)
(5) 節名
節名は、手続き部の節に付ける名前である。節名は、「書き方」で“節名-n”または“手続き名-n”と示しているところに書くことができる。
(6) 段落名
段落名は、手続き部の段落に付ける名前である。段落名は、「書き方」で“段落名-n”または“手続き名-n”と示しているところに書くことができる。
(7) データ名
データ名は、データ項目に付ける名前である。データ名は、データ部のデータ記述項で定義する。データ名は、「書き方」で“データ名-n”または“一意名-n”と示しているところに書くことができる。“データ名-n”と示している場合、特に許されない限り、部分参照、添字付け、修飾または明のポインタ付けをしてはならない。“一意名-n”と示している場合、データ名を一意に参照するために、必要ならば、部分参照、添字付け、修飾または明のポインタ付けをしなければならない。
(8) 登録集名
登録集名は、COBOL登録集に付ける名前である。COBOL登録集を参照するために使う。
(9) ファイル名
ファイル名は、ファイル結合子に付ける名前である。ファイル名は、環境部のファイル管理記述項で定義する。ファイル名は、「書き方」で“ファイル名-n”と示しているところに書くことができる。
(10) 符号系名
符号系名は、特定の文字の組および文字の大小順序に付ける名前である。符号系名は、環境部の特殊名段落で定義する。符号系名は、「書き方」で“符号系名-n”と示しているところに書くことができる。
(11) プログラム名
プログラム名は、COBOL原始プログラムに付ける名前である。プログラム名は、見出し部のプログラム名段落で定義する。プログラム名は、「書き方」で“プログラム名-n”と示しているところに書くことができる。
(12) 呼び名
呼び名は、プログラムの外部で定義した機能を使うために、機能名(機能を識別するための名前)に関係付ける名前である。呼び名は、環境部の特殊名段落で定義する。呼び名は、「書き方」で“呼び名-n”と示しているところに書くことができる。
(13) レコード名
レコード名は、レコードに付ける名前である。レコード名は、データ部のレコード記述項で定義する。レコード名は、「書き方」で“レコード名-n”と示しているところに書くことができる。
(14) レベル番号
レベル番号は、データ項目、報告集団項目および画面項目の階層を表すために付ける番号である。レベル番号01~49は、レコードの階層構造における項目の位置付けを表すために使う。レベル番号66、77および88は、特別な性質を持つデータ記述項を書くために使う。レベル番号01~09の上位のゼロは、省略することができる。レベル番号は、データ部の「書き方」で“レベル番号”と示しているところに書くことができる。
(15) 名前付き定数
名前付き定数は、定数に付ける名前である。定数を名前で参照するために使う。名前付き定数は、データ部にレベル番号78で定義する。名前付き定数は、PICTURE句の反復回数を表す整数および以下を除く【書き方】で“定数-n”、“整数-n”と示しているところに書くことができる。
- 連結式
- COPY文
名前付き定数は、定義したプログラムのデータ部の利用者語が定義された位置よりも物理的にうしろの記述項、そのプログラムの手続き部中の文、そのプログラムに含まれるプログラム中の記述項および文で参照することができる。
ただし、同じ翻訳単位中の他の利用者語と同じ名前であってはならない。
(b) システム名
システム名は、オペレーティングシステムとの連絡に使うための語である。システム名には、利用者が任意に命名する語と特定の語がある。システム名は、以下の3つである。
- 機能名
- 計算機名
- ファイル識別名
(1) 機能名
機能名は、システムの論理的装置、外部スイッチなど、プログラムの外部で定義した機能を識別するための名前である。外部で定義した機能を使う場合、環境部の特殊名段落で、機能名を呼び名に対応付けなければならない。機能名は、使用する機能ごとに定められている。機能名の記述規則は、特殊名段落(SPECIAL-NAMES)”で説明する。
(2) 計算機名
計算機名は、プログラムを翻訳または実行する計算機を識別するための名前である。計算機名は、利用者が命名する。計算機名は、COBOLの語の規則に従う任意の文字列で書くことができる。
(3) ファイル識別名
ファイル識別名は、記憶媒体上のファイルを識別するための名前である。ファイルを使う場合、環境部のファイル管理記述項で、ファイル識別名をファイル名に関係付けなければならない。ファイル識別名は、利用者が命名する。ファイル識別名の記述規則は、ASSIGN句(順ファイル・索引ファイル)”で説明する。
(c) 予約語
予約語は、プログラムの処理を書くための特定の語でる。予約語には、以下の種類がある。
- 必須語
- 必要語
- 特殊文字語
- 補助語
- 特殊用途語
- 特殊レジスタ
- 表意定数を識別する語
予約語と同じ文字列を、利用者語またはシステム名として使うことはでない。
(1) 必須語
必須語は、必ず書かなければならない語である。必須語には、必要語と特殊文字語がある。
「必要語」は、「書き方」で、英大文字に下線を付けている語である。
「特殊文字語」は、以下の12個である。「書き方」では、他の記号との混同を避けるため、下線を付けてならない。
+、-、*、/、**、>、<、=、>=、<=、&
(2) 補助語
補助語は、書いても書かなくてもよい語である。「書き方」で、下線のない英大文字が補助語である。
(3) 特殊用途語
特殊用途語は、次の2種類とする。
- 特殊レジスタ
- 表意定数
(4) 特殊レジスタ
特殊レジスタは、コンパイラが自動的に作成する記憶領域である。特殊レジスタには、特定の機能を使ったときに発生する情報が格納される。また、特定の機能を実行するプログラム(システム)に対して情報を通知するために使うこともできる。
特殊レジスタには、以下のものがある。
- プログラム間連絡機能で使うことができる特殊レジスタ
- RETURN-CODE
- 環境変数の値取得時に使うことができる特殊レジスタ
- ENVIRONMENT-NAME
- 埋込みSQL機能で使うことができる特殊レジスタ
- SQLCODE
- SQLMSG
- SQLIMAGE
- 画面入出力機能で使うことができる特殊レジスタ
- CRT-STATUS
特殊レジスタは、特定の項類を持つデータ項目として扱われる。特殊レジスタは、「書き方」で“データ名-n”または“一意名-n”で示しているところで、特殊レジスタが持つ項類が許されるところに書くことができる。
(5) 表意定数を識別する語
表意定数は、予約語を使って表現する。例えば、表意定数ALL SPACEの、ALLおよびSPACEは予約語である。
(d) 関数名
関数名は、関数の名前を示す語である。関数名は、関数一意名の中に書くことができる。関数一意名が書ける場所は、関数の型によって決められている。関数一意名が書ける場所は、“関数の全般規則”で説明する。
1.2.3 定数
定数は、プログラムに書いた値を持つデータである。定数には、以下の種類がある。
- 数字定数
- 固定小数点定数
- 文字定数
- 16進文字定数
- 日本語定数
- 日本語文字定数
- 日本語16進定数
(※)SIT COBOLは日本語16進定数は未サポートである。
(a) 数字定数
数字定数は、数値を値として持つ定数である。
書き方
[ + | - ] [ 数字列-1 ] [ . 数字列-2 ]
- 固定小数点定数は、符号、整数部、小数点および小数部で構成する。
数字列-1は整数部を、数字列-2は小数部を表している。 - “+”は正号、“-”は負号、“.”は小数点を表す。
- 数字列-1および数字列-2は、0~9の数字でなければならない。
- 整数部と小数部の桁数の合計は、1~18桁でなければならない。
- 固定小数点定数の値は、代数的な値である。
- 固定小数点定数の項類は、数字である。
- 固定小数点定数は、以下のところに書くことができる。
- 小数点を持つ固定小数点定数は、「書き方」で“定数-n”で示しているところで、数字定数が許されるところに書くことができる。
- 小数点を持たない固定小数点定数は、「書き方」で“定数-n”で示しているところで数字定数が許されるところ、および“整数-n”で示しているところに書くことができる。“整数-n”で示しているところには、構文規則で許されない限り、符号のない1以上の整数だけを書くことができる。
(b) 文字定数
文字定数は、計算機文字集合の文字を値として持つ定数である。
書き方
“{文字-1}…”
- 文字-1の並びは、左端と右端を分離符の引用符で区切らなければならない。
- 文字-1には、計算機文字集合中の任意の文字を書くことができる。
- 文字-1に引用符を書く場合、1つの引用符を、連続する2つの引用符で表現しなければならない。
- 文字-1の個数は1~256個でなければならない。文字-1の並びの長さは、1~256バイトでなければならない。(*1)
- 文字定数の値は、文字-1の並びに書いた文字である。文字定数を囲む分離符の引用符は、文字定数の値の一部ではない。
- 文字定数の項類は、英数字である。
- 文字定数は、「書き方」で“定数-n”と示しているところで、文字定数が許されるところに書くことができる
(*1)SIT COBOLは、特に制限はない。
(c) 16進文字定数
16進文字定数は、計算機文字集合の文字を値として持つ定数である。16進文字定数は、定数の値を16進文字で表現する。
書き方1
X” { 16進文字-1 } … ”
書き方2
""{ 16進文字-1 } … ""
- 書き方1と書き方2は等価である。
- 書き方1の16進文字-1の並びは、左端を分離符の’X“‘で区切り、右端を分離符の引用符で区切らなければならない。
- 書き方2の16進文字列-1の並びは、左端と右端を分離付の’""‘で区切らなければならない。
- 16進文字-1は、“0”~“9”または“A”~“F”でなければならない。16進文字-1の連続する2文字で、計算機文字集合中の1つの文字コードまたは文字コードの一部を表す。
- 16進文字-1の個数は2~128個でなければならない。(*1)
- 16進文字定数の値は、16進文字-1の並びで表される値(計算機文字集合の文字)である。16進文字定数は、文字定数と等価とみなされる。
- 16進文字定数の項類は、英数字である。
- 16進文字定数は、「書き方」で“定数-n”と示しているところで、文字定数が許されるところに書くことができる。本書で“文字定数”と示しているところは、16進文字定数も含む。
- 16進文字の内部ビット構成を、下表に示す。
| 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は、特に制限がない。
(d) 日本語定数
日本語定数は、日本語文字を値として持つ定数である。日本語定数には、日本語文字定数と日本語16進文字定数がある。
(1) 日本語文字定数
書き方1
NC”{日本語文字-1}…”
書き方2
N”{日本語文字-1}…”
- 書き方1と書き方2は等価である。
- 日本語文字-1の並びは、左端を分離符の’NC“‘または分離符の’N“‘で区切り、右端を分離符の引用符で区切らなければならない。
- 日本語文字-1には、計算機文字集合中の任意の日本語文字を書くことができる。
- 日本語文字-1の個数は128個でなければならない。(*1)
- 日本語文字定数の値は、日本語文字-1の並びに書いた日本語文字である。
- 日本語文字定数の項類は、日本語である。
- 日本語文字定数は、「書き方」で“定数-n”と示しているところで、日本語定数が許されるところに書くことができる。
(*1)SIT COBOLは、特に制限はない。
(2) 16進日本語文字定数
書き方
NX”{16進文字-1}…”
(※)SIT COBOLは、16進日本語定数は未サポートである。(サポート予定あり)
1.2.4 表意定数
表意定数は、特定の値を持つ定数または定数の繰返しを書くときに使う。表意定数には、以下の7種類がある。
- ZERO
- SPACE
- HIGH-VALUE
- LOW-VALUE
- QUOTE
- ALL定数
表意定数の書き方と値を、下表に示す。
| 名称 | 書き方 | 値 |
| 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 の後に書いた定数の繰返し |
- ALLを書く場合、ALLの後に分離符の空白を書かなければならない。
- SPACEとSPACESなど、単数形と複数形は同義語である。
- 文字定数、16進文字定数、日本語定数の値を囲むための引用符を、表意定数QUOTEで書くことはできない。例えば、”ABD”をQUOTE ABD QUOTEと書くことはできない。
- ALL定数に書く定数は、文字定数、16進文字定数、日本語定数、またはこれらに対応付けた記号定数でなければならない。ALL定数の中に表意定数を書くことはできない。
- 表意定数は、特に制限がなければ、「書き方」で“定数-n”と示しているところに書くことができる。
- ALLの後に2文字以上の定数を書いたALL定数と、数字項目または数字編集項目との間で転記または比較を行うことは、廃要素である。新しく作成するプログラムでは、この要素を使わないことをおすすめする。
- 何桁かの文字列を表す表意定数をVALUE句に書いた場合、またはそのような表意定数とデータ項目との間で転記または比較を行う場合、表意定数はデータ項目と同じ長さを持つとみなされる。すなわち、表意定数で指定した文字列が、データ項目の長さより大きいか等しくなるまで繰り返され、データ項目の長さを超えた部分が、データ項目の長さに合わせて右から切り捨てられる。表意定数の値は、データ項目のJUSTIFIED句を処理する前に決まる。
1.2.5 名前付き定数
名前付き定数は、定数に付ける名前である。名前付き定数の記述規則は、“定数記述項”で説明する。
1.2.6 連結式
連結式は、2つ以上の定数を連結演算子でつないで、1つの定数の値を表現する方法である。
書き方
[ ALL ] { 定数-1 } { & 定数-2} …
- “&”を「連結演算子」という。連結演算子の前後には、分離符の空白を書かなければならない。
- 定数-1および定数-2は、以下のいずれかの組合せでなければならない。
- 文字定数、16進文字定数、表意定数SPACE、表意定数HIGH-VALUE、表意定数LOW-VALUE、表意定数QUOTE、および表意定数ZEROの中の1つ以上の組合せ。この場合、連結式で表される定数の項類は、英数字である。
- 日本語定数の組合せ、または日本語定数と表意定数SPACEの組合せ。この場合、連結式で表される定数の項類は、日本語である。
- 定数-1または定数-2に表意定数を書く場合、表意定数にALLを付けてはならない。
- 定数-1または定数-2に表意定数を書いた場合、表意定数の値として以下の値が使われる。
- 連結式の中の定数に、少なくとも1つの文字定数または16進文字定数を書いた場合、または連結式の中の定数に表意定数だけを書いた場合、表意定数の値として、表意定数で指定した1文字の英数字が使われる。
- 連結式の中の定数に、少なくとも1つの日本語定数を書いた場合、表意定数の値として、表意定数で指定した1文字の日本語文字が使われる。
- 連結式の値は、連結式の中の各定数の値を、左から順に連結した値である。
- ALLは、連結式で表した定数を表意定数として使うときに書く。ALLを書いた連結式は、ALL定数と同じように扱われる。
- 連結式は、「書き方」で“定数-n”と示しているところで、連結式の項類を持つ定数が書けるところに書くことができる。
- 連結式の中の連結演算子と定数の間に、注記行または空白行を書くこともできる。
1.2.7 PICTURE句の文字列
PICTURE句の文字列は、PICTURE句の中に書く文字列である。PICTURE句の文字列は、COBOL文字集合中の英字、数字および特殊文字で構成する。PICTURE句の文字列の記述規則は、“PICTURE句”で説明する。
1.2.8 注記項
注記項は、見出し部の記述項である。注記項は、計算機文字集合中の任意の文字で構成する。注記項は、廃要素である。新しく作成するプログラムでは、この要素を使わないことをすすめる。
1.3 データ記述の概念
ここでは、データ記述の概念を説明する。
1.3.1 レベルの概念
1つ以上のデータで構成する、最も包括的な集まりを、「レコード」という。レコードは、レベルの概念に従って構成する。この概念は、データを参照するためにレコードを細分する必要性からきている。一度細分したものをさらに細分して、データを参照することができる。
レコードで最も基本的な細分、つまりそれ以上分割できない部分を「基本項目」という。いくつかの基本項目は、それらをまとめて参照するために、集団にすることができる。さらに、いくつかの集団をまとめて、集団にすることもできる。したがって、基本項目は、いくつかの集団の下位に従属することができる。基本項目を従属する集団を、「集団項目」という。
1.3.2 字類の概念
指標データ項目以外の基本項目は、いずれかの項類および字類に属する。集団項目の字類は、それに従属する基本項目が何であっても、実行時には英数字として扱われる。データ項目の字類と項類の関係を、下表に示す。
| 項目のレベル | 種類 | 項類 | 字類 |
| 基本項目 | 英字項目 | 英字 | 英字 |
| 数字項目 | 数字 | 数字 | |
| 数字編集項目 | 数字編集 | 英数字 | |
| 英数字項目 | 英数字 | ||
| 英数字編集項目 | 英数字編集 | ||
| 日本語項目 | 日本語 | 日本語 | |
| 日本語編集項目 | 日本語編集 | ||
| 集団項目 | --- | 英字 | 英数字 |
| 数字 | |||
| 数字編集 | |||
| 英数字 | |||
| 英数字編集 | |||
| 日本語 | |||
| 日本語編集 |
1.3.3 標準桁よせ規則
データを基本項目に格納するときの桁よせの規則は、受取り側の項類によって決まる。送出し側のデータは、以下の規則に従って、桁よせされる。
- 受取り側が数字項目の場合、以下の規則に従って、桁よせされる。
- 受取り側に想定小数点を明示している場合、送出し側は、受取り側の小数点の位置に合わせて格納される。このとき、必要に応じて、端にゼロが補われたり、端が切り捨てられたりする。
- 受取り側に想定小数点を明示していない場合、受取り側の右端に想定小数点があるものとみなされ、a.の規則に従って、桁よせされる。
ただし、受取り側が単精度/倍精度2進整数データ項目(COMP-1/COMP-2)であり、かつ送出し側の整数部の値が、単精度/倍精度2進整数データ項目の大きさと値の範囲に収まらない場合、転記の結果は規定されない。
- 受取り側が数字編集項目の場合、送出し側は、受取り側の小数点の位置に合わせて編集転記される。このとき、必要に応じて、端にゼロが補われたり、端が切り捨てられたりする。ただし、数字位置の先行ゼロ列を空白などで置き換える場合、その桁位置にはゼロは補われない。
- 受取り側が英数字項目、英数字編集項目、英字項目、日本語項目または日本語編集項目の場合、送出し側は、受取り側の左端に合わせて転記される。このとき、必要に応じて、右端に空白が補われたり、右端が切り捨てられたりする。ただし、受取り側にJUSTIFIED句を指定した場合は、JUSTIFIED句の規則に従って、桁よせされる。
1.3.4 データの境界調整
データ記述項にSYNCHRONIZED句を書いた場合、データ項目を固有の境界に割り付けるために、使用されない文字位置またはブール位置がコンパイラによって挿入されることがある。固有の境界に合わせるために、SIT COBOLが挿入する文字位置を、それぞれ「遊びバイト」という。
(a) 遊びバイト
2進項目または内部浮動小数点項目にSYNCHRONIZED句を指定した場合、そのデータ項目は、SYNCHRONIZED句の規則に従って、固有の境界に割り付けられる。このとき、レコードの中に、遊びバイトが挿入されることがある。
遊びバイトを挿入する規則
コンパイラは、レコードの中の各データ項目に相対番地を割り当てる。レコードの先頭を0番地とし、データ項目の相対番地にデータ項目自身の大きさを加えた値を、次のデータ項目の相対番地とする。
2進項目または内部浮動小数点項目にSYNCHRONIZED句を指定した場合、桁づめが必要になる。レコードの中に桁づめを必要とするデータ項目があり、その相対番地がそのデータ項目の固有の境界のバイト数の倍数でない場合、遊びバイトが挿入される。遊びバイトは、桁づめに必要な最小の長さを持つ、暗黙のFILLER項目である。
遊びバイトが挿入される位置は、以下のとおりである。
- 桁づめを必要とするデータ項目の直前のデータ項目が基本項目の場合、桁づめを必要とするデータ項目のレベル番号と同じレベル番号を持つFILLER項目が、桁づめを必要とするデータ項目の直前に挿入される。
- 桁づめを必要とするデータ項目の直前のデータ項目が集団項目の場合、桁づめを必要とするデータ項目を従属する一連の集団項目のうちで、直前に基本項目がありかつレベル番号が最も大きいものを求める。そして、その集団項目のレベル番号と同じレベル番号を持つFILLER項目が、その集団項目の直前に挿入される。
- OCCURS句を指定した集団項目が桁づめを必要とするデータ項目を従属する場合、その集団項目の1つの反復の大きさが、その集団項目に従属するデータ項目の固有の境界のバイト数の最大値の倍数でないとき、遊びバイトが挿入される。遊びバイトは、その集団項目の各反復の最後に挿入される。
遊びバイトが挿入された場合、集団項目の大きさは、集団項目の中に挿入された暗黙のFILLER項目の大きさだけ拡張される。
遊びバイトの例
省略
1.4 一意参照
プログラムで使うすべての利用者語は、一意になるように書かなければならない。利用者語を一意にする方法を「一意参照」という。
1.4.1 修飾
同一の綴りを持つ利用者語が同じ名前の範囲の中に2つ以上存在する場合、利用者語を修飾しなければならない。修飾は、名前の階層系列の上位にある1つ以上の名前を付加することによって行う。名前の範囲は、“名前の範囲”で説明する。
書き方1:データ名、条件名または指標名を一意にする
{ データ名-1 | 条件名-1 | 指標名-1 } {
{{ IN | OF } データ名-2 } … [ { IN | OF } ファイル名-1 ] |
{ IN | OF } ファイル名-1 }
書き方2:段落名を一意にする
段落名-1 { IN | OF } 節名-1
書き方3:原文名を一意にする
原文名-1 { IN | OF } 登録集名-1
(※)SIT COBOLは、登録集名-1の指定は未サポートである。
すべての書き方に共通する規則
- INまたはOFとそれに続く語を合わせて、「修飾語」という。一意でない利用者語を参照する場合、一連の修飾語を書くことによって一意にしなければならない。
- 利用者語が一意になるまで修飾語を付加しなければならないが、一意になるまでのすべての修飾語を付加する必要はない。
- 修飾する必要のない利用者語を修飾することもできる。
- INとOFは、同義語である。
書き方1の規則
- 修飾語は、以下のいずれかでなければならない。
- データ名-1をデータ名-2で修飾する場合、データ名-2は、データ名-1を従属する集団項目のデータ名でなければならない。
- 条件名-1をデータ名-2で修飾する場合、データ名-2は、条件名-1に関係付けた条件変数のデータ名でなければならない。
- 指標名-1をデータ名-2で修飾する場合、データ名-2は、INDEXED BY指定に指標名-1を書いたデータ記述項のデータ名でなければならない。
- データ名-1、条件名-1または指標名-1をファイル名-1で修飾する場合、ファイル名-1は、修飾される項目(データ名-1、条件名-1または指標名-1)に関係付けたファイル記述項または整列併合用ファイル記述項のファイル名でなければならない。
- 修飾語は、左から右に向かって、階層系列の下位から上位のレベルの順に指定する。
- データ名-1およびデータ名-2に、レコード名を指定することもできる。
- 条件名を修飾する場合、修飾語として、条件名に関係付けた条件変数の階層系列を使う。
書き方2の規則
- 段落名を明に参照する場合、1つの節の中に同じ段落名を定義してはならない。
- 段落名を定義した節と同じ節の中で段落名を参照する場合、段落名を修飾する必要はありません。
- 節名-1に、SECTIONを付けてはならない。
- 段落名および節名を別のプログラムから参照することはできない。
書き方3の規則
2つ以上のCOBOL登録集を使う場合、原文名を参照するときには、原文名を登録集名で修飾しなければならない。
1.4.2 添字付け
添字付けは、表要素を一意に参照するために使う。表要素を参照する場合、データ名または条件名に添字を付ける。
書き方
{ データ名-1 | 条件名-1 }
( { 整数-1 | データ名-2 [ { + | - } 整数-2 ] | 指標名-1 [ {+ | - } 整数-3 ] | ALL } )
備考
“データ名-1”および“条件名-1”は、書き方を明確にするために示しているだけで、添字の一部ではない。
構文規則
- データ名-1は、OCCURS句を指定したデータ項目、またはそのようなデータ項目に従属するデータ項目でなければならない。
- 条件名-1に関係付けたデータ項目(条件変数)は、OCCURS句を指定したデータ項目、またはそのようなデータ項目に従属するデータ項目でなければならない。条件変数を参照するために添字が必要な場合、条件変数と同じ組合せの添字を条件名に付けなければならない。
- 以下の場合を除いて、表要素は添字付けして参照しなければならない。
- SEARCH文の主体
- REDEFINES句
- OCCURS句のKEY IS指定
- 添字の個数は、表要素を含むデータ記述項に書いたOCCURS句の個数と同じでなければならない。2つ以上の添字が必要な場合、その表の上位の次元から下位の次元の順に、左から順に添字を書く。
- 指標名-1は、表要素を含むデータ記述項のOCCURS句のINDEXED BY指定に書いた指標名でなければならない。
- データ名-2は、整数項目でなければならない。
- データ名-2は、修飾することができる。
- 整数-1に符号を付けることもできる。符号を付ける場合、正号でなければならない。
- 添字のALLは、関数の引数を書く場合にだけ使うことができる。条件名-1の添字としてALLを書くことはできない。
- データ名-1および条件名-1は、修飾することができる。
一般規則
- 1つの次元は、1つのOCCURS句に対応する。1つの次元の表要素のうちどの要素を参照するかは、出現番号で表す。OCCURS句に指定した反復回数の最大値をnとすると、その次元の最初の表要素は出現番号1で表し、2番目の表要素は出現番号2で表し、その次元の最後の表要素は出現番号nで表す。
- 添字の個数の最大値、すなわち次元の個数の最大値は7である。(*1)
- 添字に整数-1またはデータ名-2を書いた場合、添字の値は表要素の出現番号を表す。
- 添字に指標名-1を書いた場合、添字の値は表要素の出現番号に対応する値を表す。
- 指標名-1の値は、その値を添字として使う前に初期設定しなければならない。指標名-1の初期値は、VARYING指定付きのPERFORM文、ALL指定付きのSEARCH文およびSET文によって設定することができる。指標名の値は、PERFORM文、SEARCH文およびSET文によってだけ変更することができる。
- 整数-2を書いた場合、データ名-2の値(出現番号)に整数-2の値を加えた値(演算子が+のとき)、またはデータ名-2の値から整数-2の値を引いた値(演算子が-のとき)が添字の値になる。
- 整数-3を書いた場合、指標名-1の値(出現番号に対応する値)に整数-3の値を加えた値(演算子が+のとき)、または指標名-1の値から整数-3の値を引いた値(演算子が-のとき)が添字の値になる。
- 添字にALLを書いた場合、添字に対応する次元にあるすべての表要素が参照される。
(*1)SIT COBOLでは、次元の個数の最大値は3である。
1.4.3 部分参照
部分参照は、データ項目または関数値の一部を参照するために使う。部分参照する場合、データ名または関数一意名に部分参照子を付ける。
書き方1:データ項目を部分参照する
データ名-1 ( 最左端文字位置 : [ 長さ ] )
書き方2:関数値を部分参照する
FUNCTION 関数名-1 [ ( { 引数-1 } … ) ] ( 最左端文字位置 : [ 長さ ] )
備考
“データ名-1”および“FUNCTION 関数名-1[ ({引数-1}…) ]”は、書き方を明確にするために示してあるだけで、部分参照子の一部ではない。
構文規則
- データ名-1は、用途が表示用の基本項目または集団項目でなければならない。
- 最左端文字位置および長さは、算術式でなければならない。
- データ名-1は、修飾または添字付けすることができる。
- 関数名-1は、英数字関数または、日本語関数でなければならない。
一般規則
- 部分参照は、データ名-1のデータ項目または関数値を持つ一時的なデータ項目の一部(部分参照元のデータ項目)を、一意なデータ項目(部分参照の結果のデータ項目)として新たに定義する。
- 最左端文字位置には、部分参照元のデータ項目の最左端文字位置を1として、部分参照を開始する文字位置を設定する。最左端文字位置の値は、以下の範囲にある整数でなければならない。
1 ≦ 最左端位置 ≦ 部分参照元のデータ項目の文字位置の個数
- 長さには、部分参照する範囲を設定する。長さの値は、以下の範囲にある整数でなければならない。
1 ≦ 長さ ≦ 部分参照元のデータ項目の文字位置の個数 - 最左端の門司市の値 + 1
- 長さを省略した場合、部分参照元のデータ項目の最左端文字位置から始まり最右端文字位置までの部分が、部分参照の結果のデータ項目になる。
- データ名-1に添字を付けた場合、部分参照子は添字の評価の直後に評価される。データ名-1の添字にALLを指定した場合は、添字に対応する次元にあるすべての表要素に対して、部分参照子が適用される。
- 部分参照の結果のデータ項目は、JUSTIFIED句なしの基本項目とみなされる。
- 書き方2の部分参照子は、関数値を求めた後、関数値を持つ一時的なデータ項目に対して適用される。
- 書き方1の場合、部分参照の結果のデータ項目は、以下の項類と字類を持つものとみなされる。
- データ名-1の項類が英字、数字、数字編集、英数字または英数字編集の場合、部分参照の結果のデータ項目の項類と字類は英数字であるとみなされる。
- データ名-1の項類が日本語または日本語編集の場合、部分参照の結果のデータ項目の項類と字類は日本語であるとみなされる。
- データ名-1の項類がブールの場合、部分参照の結果のデータ項目の項類と字類は英数字であるとみなされる。
- データ名-1が集団項目の場合、部分参照の結果のデータ項目の項類と字類は英数字であるとみなされる。
- 書き方2の場合、部分参照の結果のデータ項目の項類と字類は英数字または日本語であるとみなされる。
1.4.4 一意名
データ名に、修飾、添字付け、部分参照付けをして一意にできるようにしたものを、「一意名」という。データ名を一意参照する場合、データ名を一意名の形式で書かなければならない。
書き方
データ名-1 [ { IN | OF } データ名-2 ] … [ { IN | OF } ファイル名-1 ]
[ ( {添字} … ) ] [ 部分参照子 ]
- INとOFは、同義語である。
- 一意名は、「書き方」で“一意名-n”と示しているところに書くことができる。「書き方」で“一意名-n”と示しているところには、一意参照に必要な修飾、添字付け、部分参照付けをしたデータ名を書かなければならない。
1.4.5 条件名の一意参照
条件名は、名前の範囲の規則によって一意参照が保証される場合を除いて、修飾、添字付けして一意にしなければならない。
書き方
条件名-1 [ { IN | OF } データ名-1 ] … [ { IN | OF } ファイル名-1 ]
[ ( {添字}…) ]
- INとOFは、同義語である。
- 条件名は、「書き方」で“条件名-n”と示しているところに書くことができる。「書き方」で“条件名-n”と示しているところには、一意参照に必要な修飾、添字付けまたはポインタ付けをした条件名を書かなければならない。
1.4.6 関数一意名
「関数一意名」は、関数を使うときの書き方である。関数一意名は、関数値を持つ一時的なデータ項目として扱われる。
書き方
FUNCTION 関数名-1 [ ( {引数-1} … ) ] [ 部分参照子 ]
- 引数-1は、一意名、定数または算術式でなければならない。
- 部分参照子は、英数字関数または日本語関数の場合にだけ書くことができる。部分参照子は、関数値を部分参照するときに書く。
- 関数一意名を書くことができる場所は、“関数の全般規則”で説明する。
- 関数の引数は、引数-1を書いた順に評価される。
- 引数-1に、関数一意名または関数一意名を含む式を書くこともできる。引数-1に、関数名-1を書くこともできる。
1.5 正書法
COBOL原始プログラムを書くときの形式を、「正書法」という。COBOL原始プログラムは、正書法に従って書かなければならない。原始文操作機能を使う場合、COBOL登録集も、正書法に従って書かなければならない。
1.5.1 行の構成
正書法は、1行のどの位置にどの要素を書くかを定めた規則である。正書法には、固定形式、自由形式の2種類がある。
固定形式の1行の構成を、以下に示す。
- 境界Lは、1行の最左端の文字位置のすぐ左である。
- 境界Cは、1行の6番目と7番目の文字位置の間である。
- 境界Aは、1行の7番目と8番目の文字位置の間である。
- 境界Bは、1行の11番目と12番目の文字位置の間である。
- 境界Rは、1行の72番目の文字位置のすぐ右である。
一連番号領域
一連番号領域は、境界Lと境界Cの間の6文字分である。原始プログラムの行を識別するために使う。一連番号領域には、計算機文字集合中の任意の文字を書くことができる。一連番号領域の内容は、特定の順序で並んでいる必要も、一意である必要もない。
標識領域
- 標識領域は、境界Cと境界Aの間の1文字分である。標識領域には、星印“*”、斜線“/”、ハイフン“-”または“D”を書くことができる。
- 標識領域に星印“*”または斜線“/”を書いた行を、「注記行」という。注記行のA領域とB領域の内容は、注釈とみなされる。
- 標識領域のハイフン“-”は、その行の最初の文字が前の行の最後の文字とつながっていることを示す。
- 標識領域に“D”を書いた行を、「デバッグ行」という。デバッグ行は、デバッグのための情報を原始プログラムに残すために使う。(*1)
(*1)SIT COBOLは、デバッグ行は未サポートである。
A領域
A領域は、境界Aと境界Bの間の4文字分である。
B領域
B領域は、境界Bと境界Rの間である。
プログラム識別番号領域
プログラム識別番号領域は、固定形式の場合にだけ存在する。プログラム識別番号領域は、境界Rのすぐ右(73番目の文字位置)から80番目の文字位置までの8文字分である。(*1)
(*1)SIT COBOLは、80番目を超える文字があってもよい。
1.5.2 A領域とB領域の正書法
COBOLの語には、A領域から書き始めるものとB領域から書き始めるものがある。
A領域から書き始める語
以下のものは、A領域から書き始めなければならない。
- 部の見出し
- 節の見出し
- 段落の見出し
- 段落名
- レベル指示語 (FD、SDおよびRD)
- レベル番号の01および77
- 宣言部分の開始(“DECLARATIVES.”)と終了(“END DECLARATIVES.”)
- プログラム終わり見出し
B領域から書き始める語
以下のものは、B領域から書き始めなければならない。
- 文。ただし、COPY文およびREPLACE文は、A領域から書くことができる。
- 記述項。ただし、レベル指示語で始まる記述項、およびレベル番号が01または77のデータ記述項は、A領域から書き始めなければならない。レベル番号が01および77以外のデータ記述項は、A領域から書くこともできる。
- 注記項
各部の規則
前述の規則のほかに、各部ごとに以下の規則がある。
- 見出し部では、1つの行に、段落の見出しと記述項または注記項を書くこともできる。1つの行に、2つ以上の注記項を書くこともできる。1つの注記項を、2行以上にまたがって書くこともできる。
- 環境部では、1つの行に、段落の見出しと記述項を書くこともできる。1つの行に、2つ以上の記述項を書くこともできる。1つの記述項を、2行以上にまたがって書くこともできる。
- データ部では、1つの行に、2つ以上の記述項を書くこともできる。1つの記述項は、2行以上にまたがって書くこともできる。レベル番号が1桁の場合、レベル番号を1桁の数字で書くこともできる。見やすさのために、レベルが深くなるごとに、レベル番号の開始位置をずらすこともできる。
- 手続き部では、1つの行に、段落名と完結文を書くこともできる。1つの行に、2つ以上の完結文を書くこともできる。1つの完結文は、2行以上にまたがって書くこともできる。
1.5.3 空白行
標識領域、A領域およびB領域がすべて空白の行を、「空白行」という。空白行は、原始プログラムおよび登録集原文のどこでも書くことができる。
1.5.4 注記行
標識領域に星印“*”または斜線“/”を書いた行を、「注記行」という。注記行は、見出し部の見出しの後の任意の位置、および登録集原文の任意の位置に書くことができる。
注記行のA領域とB領域には、計算機文字集合中の任意の文字を書くことができる。注記行は注釈とみなされるが、翻訳リストには印字される。(*1)
標識領域に星印を書いた注記行は、前の行に続いて印字される。標識領域に斜線を書いた注記行は、改ページした後に印字される。(*1)
(*1)SIT COBOLは、翻訳リストは未サポートであるため、特に意味を持たない
1.5.5 行のつなぎ
文、記述項および句を構成する文字列は、次の行のB領域に続けて書くことができる。継続する行を、「後の行」といい、継続される行を「前の行」という。
以下の文字列は、後の行に継続して書くことができる。
- 日本語利用者語を除くCOBOLの語(*1)
- 定数
- PICTURE句の文字列(*1)
上記の文字列を後の行に継続する場合、後の行の標識領域はハイフン“-”でなければならない。また、後の行のA領域は、空白でなければならない。標識領域のハイフンは、その行のB領域の空白でない最初の文字が、前の行(注記行および空白行を除く)の空白でない最後の文字の後に続くことを示す。
文字定数、16進文字定数、日本語定数を継続する場合は、さらに、以下の規則に従わなければならない。
- 後の行のB領域の空白でない最初の文字は、引用符でなければならない。そして、その引用符のすぐ右の文字位置から、定数の続きを書き始めなければならない。
- 前の行のB領域の最後までの空白は、定数の一部であるとみなされる。前の行のB領域の最後の文字が、後の行の最初の引用符の直後の文字に継続するように、書かなければならない。
定数は、標識領域のハイフンによる継続のほかに、連結演算子“&”を使って、複数の行に分けて書くこともできる。この場合、後の行の標識領域にハイフンを書く必要はない。連結演算子は、前の行の最後に書いても、後の行の最初に書いてもよい。連結演算子の前後には、分離符の空白を書かなければならない。連結演算子の記述規則は、“連結式”で説明する。
なお、文字列の途中でなく文字列が終了した後に行を継続する場合は、標識領域にハイフンを書くことはできない。標識領域にハイフンがないと、その行の空白でない文字の前に空白があるものとみなされる。
分離符、すなわち以下の文字列は、1つの行に書かなければならない。
- 仮原文区切り記号”==”, ”//”
- 定数値の開始を示す分離符(‘X”’、‘N”’、‘NC”’、‘NX”’)
以下に、行を継続する例を示す。
----*----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]
000000 MOVE "ABCDE12345" &
000000 "ABCDE12345" TO XX. ... [4]
000000 MOVE "ABCDE12345"
000000 & "ABCDE12345" TO XX. ... [5]
[図の説明]
[1] 文字定数を継続している。(前の行の最後の”5”の文字位置は72であるとする)
[2] 利用者語XXを継続している。
[3] 語と語の間で行を継続している。標識領域にハイフンを書くことはできない。
[4] 連結演算子“&”を前の行の最後に書いて、文字定数を継続している。標識領域にハイフンを書くことはできない。
[5] 連結演算子“&”を後の行の最初に書いて、文字定数を継続している。標識領域にハイフンを書くことはできない。
(*1)SIT COBOLは、COBOLの語およびPICTURE句の文字列の継続は、未サポートである。
1.5.6 デバッグ行
標識領域に“D”を書いた行を、「デバッグ行」という。デバッグ行は、デバッグのための情報を原始プログラムに残すために使う。デバッグ行は、見出し部の実行用計算機段落以降に書くことができる。
デバッグ行のA領域とB領域は、COBOLの文法に従って書かなければならない。デバッグ行のA領域とB領域が共に空白の場合、デバッグ行は空白行とみなされる。
デバッグ行を翻訳するかどうかは、環境部の翻訳用計算機段落のWITH DEBUGGING MODE句で指定する。デバッグ行は、WITH DEBUGGING MODE句を書いた場合にだけ翻訳され、この句を省略した場合は注記行とみなされる。
翻訳時、WITH DEBUGGING MODE句の有無は、COPY文およびREPLACE文を処理した後に決定される。
(※)SIT COBOLは、デバッグ行は未サポートである。
1.5.7 行内注記
文や記述項などを書いた行と同じ行の中に注釈を書きたい場合、行内注記を使って、行の右側に注釈を書くことができる。連続した2文字”*>“で始まり、同じ行の境界Rのすぐ左の文字位置で終わる部分を、「行内注記」という。行内注記は、見出し部の見出しの行とそれ以降の任意の行、および登録集原文中の任意の行に書くことができる。
行内注記の開始を示す記号”*>“の直前には、分離符の空白を書かなければならない。”*>“の後には、計算機文字集合中の任意の文字を書くことができる。行内注記は注釈とみなされる。
1.5.8 自由形式の正書法
以下に、自由形式の正書法について説明する。
なお、自由形式の正書法では、廃要素は使用できない。
(※)SIT COBOLは自由形式の正書法は未サポートである。(サポート予定あり)
(a) 1行の構成
自由形式の正書法では、注記、デバッグ行および継続のための特別な規則があることを除いて、原始プログラムは行のどの文字位置からでも書くことができる。1行の文字位置の数は、行ごとに最小0から最大n(*1)の範囲で変更することができる。(ただし、日本語文字は、1文字で2つ以上の文字位置を占める)
(*1)nは未定
(b) 空白行
空白文字以外の文字を含まない行を、「空白行」という。空白行は、原始プログラムおよび登録集原文のどこにでも書くことができる。
(c) 注記
2つの隣合うCOBOL文字”*>“は注記を示す。
注記が記述されていて、0または1つ以上の空白だけが注記に先立つ行を「注記行」という。1つ以上のCOBOLの語と、そのすぐ後ろに1つ以上の空白だけが注記に先立つ行の注記は、「行内注記」という。行内注記は、見出し部の見出しの行とそれ以降の任意の行、および登録集原文中の任意の行に書くことができる。
行内注記の開始を示す記号”*>“の直前には、分離符の空白を書かなければならない。”*>“の後には、計算機文字集合中の任意の文字を書くことができる。行内注記は注釈とみなされます。
(d) 行のつなぎ
文、記述項および句は、複数の行に渡って書くことができる。この継続する行を「後の行」といい、継続される行を「前の行」という。
文字定数、および日本語定数については、その一部を後の行に分けて書くことができる。これらの定数が行の終りで閉じていない場合、定数の閉じていない部分は、引用符とそのすぐ後に続くハイフンで終わらなければならない。
ハイフンは0または1つ以上の分離符の空白が続いていなければならない。
後の行の空白でない最初の文字は、引用符でなければならない。また、引用符のすぐ右の文字位置から、定数の続きを書き始めなければならない。このとき、定数の内容のうち少なくとも1文字は、前の行と後の行に書かれなければならない。
2文字以上で構成される分離符は、同一行になければならない。定数中の1つの引用符を示す一対の引用符は、同一行に記述しなければならない。注記行と空白行は、定数の一部を含む行の間に書くことができる。
(e) デバッグ行
3つの隣合うCOBOL文字“>>D”のすぐ後に1つの空白が続いているとき、デバッグ指示子を示す。デバッグ指示子に0または1つ以上の空白だけが先立つ行を「デバッグ行」という。
デバッグ行は、デバッグのための情報を原始プログラムに残すために使います。デバッグ行は、見出し部の実行用計算機段落以降に書くことができる。デバッグ行は行の終わりで終了する。デバッグ行は、COBOLの文法に従って書かなければならない。デバッグ行が0または1つ以上の空白だけの場合、デバッグ行は空白行とみなされる。
デバッグ行を翻訳するかどうかは、環境部の翻訳用計算機段落のWITH DEBUGGING MODE句で指定する。デバッグ行は、WITH DEBUGGING MODE句を書いた場合にだけ翻訳され、この句を省略した場合は注記行とみなされる。
翻訳時、WITH DEBUGGING MODE句の有無は、COPY文およびREPLACE文を処理した後に決定される。
1.6 プログラムの構成
プログラムは、以下の4つの部とプログラム終わり見出しで構成する。
- 見出し部
- 環境部
- データ部
- 手続き部
プログラムは、見出し部で開始し、プログラム終わり見出しまたはプログラムの最後の行で終了する。
プログラムの開始から終了までの間には、別のプログラムを書くことができる。別のプログラムに含まれるプログラムを、「内部プログラム」という。内部プログラムは、プログラム間連絡機能を使う場合に書くことができる。(*1)
一番外側のプログラムの開始から終了までの範囲を、「翻訳単位」という。1つの翻訳単位の中には1つ以上の内部プログラムを書くことができる。プログラムが別のプログラムを含むことを「プログラムの入れ子」という。
内部プログラムはさらに内部プログラムを含むことができる。あるプログラム(プログラムA)のすぐ内側に別のプログラム(プログラムB)を書き、プログラムBのすぐ内側に別のプログラム(プログラムC)を書いた場合、プログラムBはプログラムAに「直接に含まれる」といい、プログラムCはプログラムAに「間接に含まれる」という。
以下に、翻訳単位のプログラムの書き方を示す。
書き方1:翻訳単位
見出し部
[ 環境部 ]
[ データ部 ]
[ 手続き部 ]
[ 内部プログラム ] …
[ プログラムの終わり見出し ]
書き方2:内部プログラム
見出し部
[ 環境部 ]
[ データ部 ]
[ 手続き部 ]
[ 内部プログラム ] …
プログラムの終わり見出し
- 翻訳単位の中に内部プログラムを書く場合、それぞれのプログラムに対してプログラム終わり見出しを書かなければならない。例えば、プログラムAがプログラムBを含み、プログラムBがプログラムCを含む場合、A、BおよびCの各プログラムに対してプログラム終わり見出しを書かなければならない。
- 翻訳単位のプログラムは、プログラム終わり見出しによって終わらなければならない。ただし、一連の翻訳単位のプログラムのうち、最後のプログラムでは、プログラム終わり見出しを省略することができる。
- それぞれの部の開始は、部の見出しで表します。部の終了は、以下のいずれかで表す。
- 同じプログラム中の次に続く部の見出し
- 内部プログラムの始まりを表す見出し部の見出し
- プログラム終わり見出し
- その後に行が存在しない物理的な位置
(*1)SIT COBOLは、別のプログラムおよび内部プログラムを書くことはできない。
1.6.1 プログラムの結果
プログラム定義の手続き部の見出しにRETURNING指定が書かれた場合、プログラムから呼出し元に制御を戻す際に、RETURNING指定のデータ項目の内容がプログラムの結果となる。この結果は、呼出し元のCALL文のRETURNING指定に書かれた一意名に入る。
(※)SIT COBOLは、RETURNING指定は未サポートである。(サポート予定あり)
