COBOL言語の紹介

この章では、COBOL言語の概要を解説する。

COBOL言語

COBOL(Common Business Oriented Language)は、事務処理および管理分野のデータ処理に 最も広く使用されているプログラミング言語である。

このCOBOL言語は、ANSI X3.23-1974 (ISO 1989-1978)で規定されたANSI および ISO COBOL標準、さらにANSI X3.23-1985 (IS 1989:1985)ANSI X3.23a-1989 (IS 1989:1985/AM1)、およびANSI X3.23b-1993 (IS 1989:1985/AM2)で規定された現行のANSI および ISO COBOL標準の上位セットである。拡張された言語は、以下のとおり。

上記の拡張機能を組み合わせて、原始プログラム中で使用できる。

全機能を備えたANSI COBOL 1974および1985は下記の機能単位から構成される。

このCOBOLシステムは、上記の機能単位に関する米国商務省の全米標準・技術研究所 (National Institute of Standards and Technology)のCOBOLコンパイラ検査システム(CCVS)の 合格基準を満たしている。

この他にも、いろいろな面からCOBOL言語の機能拡張がなされている。

正書法

原始(ソース)文は

自由形式か

固定形式で記述する。

固定形式

固定形式では、 COBOL正書法(source format)により、COBOL原始(ソース)レコードを72カラム毎に分ける。これらのカラムは以下のように使われる。

カラム1-6 一連番号
カラム7 標識領域
カラム8-11 A領域
カラム12-72 B領域

COBOL原始(ソース)レコードは80カラムまで使用できる。COBOLのシステムは、73カラムから80カラムまでを無視する。

一連番号

原始プログラムの各行を識別するために、6桁の一連番号(sequence number)を使用する。

一連番号の1桁目に星印(*)または印字されない制御文字(ASCII文字の照合順序で空白文字よりも小さい文字)を書くと、その行は注記行として扱われ、リスト用のファイルまたは装置には出力されない。この機能を利用して出力したリスト・ファイルを入力用として使用して、コンパイルを行うことができる。

この機能はMFCOMMENTコンパイラ指令に影響される。

一連番号には計算機の文字集合の中の任意の文字を記述できる。

標識領域

標識領域(indicator area)に星印(*)を書くと、その行は注記行となる。注記行は、見出し部の見出しより後ろならば、どこにでも置ける。注記行のA領域およびB領域には、ASCII文字集合の中の 任意の文字を記すことができる。

注記行は、見出し部の見出しより前に置くことができる。

標識領域に斜線(/)を書くと、その行が注記行となり、改ページされてから印刷が行われる。

標識領域に"D"または"d"を書くと、その行はデバッグ行となる。デバッグ行のA領域およびB領域には有効な任意のCOBOL文を記述できる。

標識領域にハイフン"-"を書くと、その行は前の行からの継続を表す。その場合、前の行の後続の空白は、文字定数の場合はその一部とみなされ、文字定数でない場合はないものとみなされる(詳細については、COBOLの概念行の継続を参照)。

標識領域に"$"を書くと、その行は特殊行となり、指令やコンパイル対象行の選択条件文を記述できる。

A領域とB領域

節名および段落名は A領域から書き始め、終止符(.)と続く空白で止める。 レベル指示語FD、SD、CD及びRDは、A領域から書き始め、 B領域

またはA領域

から対応する記述を書き始める。レベル番号01及び77は、A領域から書き始め、B領域

またはA領域

から対応するデータ記述を書き始める。レベル番号02から49、66及び88は、B領域から書き始める。

レベル番号78は、A領域またはB領域から書き始めてよい。

見出し部中の注記項以外には、A領域とB領域に関して規則をいっさい設けない。

自由形式の原始コードが使う場合は、A領域とB領域の区別はない。自由形式の原始コードに関する詳細は、この章の次のセクションを参照。

1行のコーディング中に複数の文を記しても構わない。

サンプルプログラム

典型的なプログラムの正書法を図1-1に示す。

000010 identification division. 
000020 program-id. stock-file-set-up. 
000030 author. MicroFocus. 
000040 environment division. 
000050 configuration section. 
000060 source-computer. mds-800. 
000070 object-computer. mds-800. 
000075 special-names. console is crt. 
000080 input-output section. 
000090 file-control. 
000100  select stock-file assign "stock.it" 
000110  organization indexed 
000120  access dynamic 
000130  record key stock-code. 
000140 data division. 
000150 file section. 
000160 fd   stock-file record 32. 
000170 01   stock-item. 
000180  02  stock-code       pic x(4). 
000190  02  product-desc     pic x(24). 
000200  02  unit-size        pic 9(4). 
000210 working-storage section. 
000220 01   screen-headings. 
000230  02  ask-code pic x(21) value "stock code    <    >".
000240  02  filler   pic x(59). 
000250  02  ask-desc pic x(16) value "description   <".
000260  02  si-desc  pic x(25) value "                 >".
000270  02  filler   pic x(39). 
000280  02  ask-size pic x(21) value "unit size <    >".
000290 01   enter-it redefines screen-headings. 
000300  02      filler       pic x(12). 
000310  02  crt-stock-code   pic x(4).
000320  02      filler       pic x(80). 
000330  02  crt-prod-desc    pic x(24). 
000340  02      filler       pic x(51). 
000350  02  crt-unit-size    pic 9(4). 
000360  02  filler           pic x. 
000370 procedure division. 
000380 sr1. 
000390  display space. 
000400  open i-o stock-file. 
000410  display screen-headings. 
000420 normal-input. 
000430  move space to enter-it. 
000440  display enter-it. 
000450 correct-error.
000460  accept enter-it. 
000470  if crt-stock-code = space go to end-it. 
000480  if crt-unit-size not numeric go to correct-error. 
000490  move crt-prod-desc to product-desc. 
000500  move crt-unit-size to unit-size. 
000510  move crt-stock-code to stock-code. 
000520  write stock-item invalid key go to correct-error. 
000530  go to normal-input. 000540 end-it. 
000550  close stock-file. 
000560  display space. 
000570  display "end of program". 
000580  stop run.
<---->|<--><--------------------------------------------------------->
  |   | |     |
  |   | |     +-- カラム 12-72 - B領域
  |   | +-- カラム 8-11 - A領域
  |   +-- カラム 7 - 標識領域
  +-- カラム 1-6 - 一連番号

図1-1 正書法を示すプログラム・コーディング例

自由形式

自由形式は、SOURCEFORMAT"FREE"指令によって選択される。

始めの6文字は一般行の一部で、COBOL原始文に含まれるものとして扱われる。1カラム目は、 以下のような標識の役目をする。

* 注記行
/ リストファイルで改ページしてから始まる注記行
Dまたはd 空白が後続する。デバッグ行
$ 特殊行(指令、条件付きコンパイル等)
その他の文字 一般の行

継続行はない。英数字定数の継続は、"A" & "B"のように連結して行う。

A領域とB領域の区別はない。

固定の右マージンはないが、実際上は、行の長さは1バイト文字では、最大250文字、また 2バイト文字では、最大125文字までの制限がある。

注記は段落見出しとして同じ行内におさめ、次の行に続けられない。