コンテンツにスキップ

英文维基 | 中文维基 | 日文维基 | 草榴社区

「COBOL」の版間の差分

出典: フリー百科事典『ウィキペディア(Wikipedia)』
削除された内容 追加された内容
Robbot (会話 | 投稿記録)
m robot Adding:hr Modifying:cs
Blue Eyes (会話 | 投稿記録)
「COBOLの文法の概要」等加筆
2行目: 2行目:


==誕生経緯==
==誕生経緯==
[[1950年代]]、事務処理言語は開発メーカごとに異なっていた。その統一の必要性を認識していた[[アメリカ国防省]]によって、事務処理用の共通言語の開発が提案され、[[CODASYL]](Conference on Data Systems Languages、データシステムズ言語協議会)が設立された。
[[1950年代]]、事務処理言語は開発メーカごとに異なっていた。その統一の必要性を認識していた[[アメリカ国防省]]によって、事務処理用の共通言語の開発が提案され、[[CODASYL]](Conference on Data Systems Languages、データシステムズ言語協議会)が設立された。
そういった背景の下、[[1959年]]にCODASYLによって開発された共通事務処理用言語がCOBOLである。
そういった背景の下、[[1959年]]にCODASYLによって開発された共通事務処理用言語がCOBOLである。


COBOLの開発により、アメリカ政府の事務処理システムは全てCOBOLのみで納品されることとなった。これに伴い、COBOLは事務処理用言語として世界中に普及することになる。
COBOLの開発により、アメリカ政府の事務処理システムは全てCOBOLのみで納品されることとなった。これに伴い、COBOLは事務処理用言語として世界中に普及することになる。


COBOLより先に誕生した[[FORTRAN]]が主に科学技術計算用であるのに対して、その後ほぼ同時期に誕生した[[COBOL]]は大量のデータを処理するための事務処理用及び管理分野用と位置付けられる。[[COBOL]]と[[FORTRAN]]は、プログラミング言語の歴史において[[高水準記述言語]]としての古典的あるいは原点ともいえる存在を示すものである。
==表記法==

==COBOLの文法の概要(主に[[ANSI]] COBOL 1985)==

===表記法===
COBOLの文法は英語の表現に近い。たとえば、ある変数 NO に対し数値 1 を代入する場合は、以下のような表記をする。
COBOLの文法は英語の表現に近い。たとえば、ある変数 NO に対し数値 1 を代入する場合は、以下のような表記をする。

MOVE '1' TO NO.
MOVE '1' TO NO.

このように、[[COBOL]]の文法は[[自然言語]](英語)に類似した文章的なものであることから、その可読性(ドキュメント性)の面において優れていると言われている。

===プログラムの書式===

典型的な[[COBOL]]の原始(ソース)プログラムは、[[FORTRAN]]と同様にカラム固定形式で記述することとされており、以下の形式で記述する。

*1~6カラム目「一連番号」
:各行を識別するために、6桁のシーケンシャル番号を記述することができる。
*7カラム目「標識領域」
:その行の標識を記述する。例えば、[[アスタリスク]]を記述すると、その行は注記行となる。
*8~11カラム目「A領域」
*12~72カラム目「B領域」
:A領域及びB領域において、コードを記述する。[[ピリオド]](厳密には[[ピリオド]]及びその後に続く[[スペース]]。)を記述してコードの行端を示す

===COBOLプログラムの基本構造(4つのDIVISION)===

COBOLのプログラムは、次の4つのDIVISIONがその基本構造となっており、次の順番の通りにこれらのDIVISIONを記述することが必要である。(カッコ及びカッコ内の日本語は説明のために付与したものである。)

* IDENTIFICATION DIVISION.(見出し部)
* ENVIRONMENT DIVISION.(環境部)
* DATA DIVISION.(データ部)
* PROCEDURE DIVISION.(手続き部)

=== IDENTIFICATION DIVISION.===

*「PROGRAM-ID.」(プログラム識別名)、「AUTHOR.」(作成者名)、「DATE-WRITTEN.」(作成日)等のプログラムの実行には直接影響しない文を記述する。これらの内容は、他の言語では注釈文(コメント文)として任意に記述することなっているが、[[COBOL]]においては正式な文法の一つとして組み込まれている。

=== ENVIRONMENT DIVISION.===

*プログラムが実行されるコンピュータの環境を記述する。「ENVIRONMENT DIVISION.」は、「CONFIGURATION SECTION.」(環境節)と「INPUT-OUTPUT SECTION.」(I-O節)に大別される。

=== DATA DIVISION.===

*プログラムで使用する変数及びデータ並びにその型について記述する。プログラムで使用する変数及びデータのすべては、DATA DIVISION.で定義しなければならない。

*「DATA DIVISION.」は、「FILE SECTION.」と「WORKING-STORAGE SECTION.」に大別される。データの型の宣言は、PICTURE(PIC)句によって行う。

====[[COBOL]]におけるデータの分類====

*[[COBOL]]のプログラムにおけるデータは、次の3つに分類される。
**変数(Variables)
**定数(Literals)
**表意定数(FigurativeConstants)
:予め名称が定められている特定の意味を持つ定数(表意定数)を利用できる。この定数の実体は、実行されるシステムよってその意味が有効になるように実現される。例としては、HIGH-VALUES、LOW-VALUES等が挙げられる。

====[[COBOL]]における変数====

*[[COBOL]]における変数の型は、次の3つが基本となっている。
**数値型(Numeric)
**英数字型(AlphaNumeric)
**英字型(Alphabetic)

*[[COBOL]]では[[スカラー型]]変数及びレベル番号による多次元の配列を使用することができるとともに、これらを複数組み合わせて階層構造を持つ固定長「[[レコード型]]」([[構造体]])を構成して定義することもできる。なお、この「レコード型」は[[COBOL]]によって初めて導入された概念である。

*[[COBOL]]のプログラミングにおける特徴的な記述方法として、レベル番号によって表現される階層構造を持つレコードのデータ構造の定義を挙げることができる。なお、レベル番号は"01"から"49"までとされるが、特殊なレベル番号として"66"、"77"等がある。

*事務処理用及び管理分野用とされる[[COBOL]]においては会計・経理処理などのように通貨を対象とした正確な数値計算が特に要求されるため、数値に対する10進数から2進数への基数変換時に計算誤差の発生しない[[2進化10進数]]による数値型([[仮想小数点方式]])を用いることができる。これは[[FORTRAN]]などのプログラミング言語において[[浮動小数点数|浮動小数点]]方式などによって実数を近似値で表現しようとする発想とは対峙するものである。

*無名の変数等として"FILLER"という名称を記述することができる。無名項目の"FILLER"は、[[COBOL]]における変数等の領域の定義は固定長となるため、そのような固定長領域内における予備的な領域の確保という意味合いも有している。

=== PROCEDURE DIVISION.===

*実行されるプログラムの実際のコードを記述する。

*上記3つのDIVISIONを記述したあとの4番目のDIVISIONである「PROCEDURE DIVISION.」においてプログラムコードを記述する文法となっているため、[[COBOL]]は「前置きが長い」言語と評されることもある。その一方で、このような4つのDIVISIONの明確な記述などによる厳格で形式的な文法に基づくプログラムの記述方法によって[[COBOL]]は、その可読性、ドキュメント性、保守性が高い言語であるとも言われる。なお、これと関連してCOBOLの[[予約語]]の数は膨大で、文字数の長いものが多いことはCOBOLの特徴の一つである。


==標準化==
==標準化==
45行目: 116行目:


この例では DISPLAY命令を使い、コンソール(または標準出力)に結果を出力しているが、基本的にCOBOLはファイルの処理が主体である。従ってFILE SECTIONにファイル定義を書くのが基本的な処理方法である。
この例では DISPLAY命令を使い、コンソール(または標準出力)に結果を出力しているが、基本的にCOBOLはファイルの処理が主体である。従ってFILE SECTIONにファイル定義を書くのが基本的な処理方法である。


==関連事項==

*[[FORTRAN]]


[[Category:プログラミング言語]]
[[Category:プログラミング言語]]

2004年11月30日 (火) 15:19時点における版

COBOLコボル,COmmon Business Oriented Languageの略)は事務処理用に開発されたプログラミング言語である。英語圏の技術者に理解しやすい文法であり、大型計算機における主流言語のひとつである。

誕生経緯

1950年代、事務処理言語は開発メーカーごとに異なっていた。その統一の必要性を認識していたアメリカ国防省によって、事務処理用の共通言語の開発が提案され、CODASYL(Conference on Data Systems Languages、データシステムズ言語協議会)が設立された。 そういった背景の下、1959年にCODASYLによって開発された共通事務処理用言語がCOBOLである。

COBOLの開発により、アメリカ政府の事務処理システムは全てCOBOLのみで納品されることとなった。これに伴い、COBOLは事務処理用言語として世界中に普及することになる。

COBOLより先に誕生したFORTRANが主に科学技術計算用であるのに対して、その後ほぼ同時期に誕生したCOBOLは大量のデータを処理するための事務処理用及び管理分野用と位置付けられる。COBOLFORTRANは、プログラミング言語の歴史において高水準記述言語としての古典的あるいは原点ともいえる存在を示すものである。

COBOLの文法の概要(主にANSI COBOL 1985)

表記法

COBOLの文法は英語の表現に近い。たとえば、ある変数 NO に対し数値 1 を代入する場合は、以下のような表記をする。

MOVE  '1'       TO  NO.

このように、COBOLの文法は自然言語(英語)に類似した文章的なものであることから、その可読性(ドキュメント性)の面において優れていると言われている。

プログラムの書式

典型的なCOBOLの原始(ソース)プログラムは、FORTRANと同様にカラム固定形式で記述することとされており、以下の形式で記述する。

  • 1~6カラム目「一連番号」
各行を識別するために、6桁のシーケンシャル番号を記述することができる。
  • 7カラム目「標識領域」
その行の標識を記述する。例えば、アスタリスクを記述すると、その行は注記行となる。
  • 8~11カラム目「A領域」
  • 12~72カラム目「B領域」
A領域及びB領域において、コードを記述する。ピリオド(厳密にはピリオド及びその後に続くスペース。)を記述してコードの行端を示す

COBOLプログラムの基本構造(4つのDIVISION)

COBOLのプログラムは、次の4つのDIVISIONがその基本構造となっており、次の順番の通りにこれらのDIVISIONを記述することが必要である。(カッコ及びカッコ内の日本語は説明のために付与したものである。)

  • IDENTIFICATION DIVISION.(見出し部)
  • ENVIRONMENT DIVISION.(環境部)
  • DATA DIVISION.(データ部)
  • PROCEDURE DIVISION.(手続き部)

IDENTIFICATION DIVISION.

  • 「PROGRAM-ID.」(プログラム識別名)、「AUTHOR.」(作成者名)、「DATE-WRITTEN.」(作成日)等のプログラムの実行には直接影響しない文を記述する。これらの内容は、他の言語では注釈文(コメント文)として任意に記述することなっているが、COBOLにおいては正式な文法の一つとして組み込まれている。

ENVIRONMENT DIVISION.

  • プログラムが実行されるコンピュータの環境を記述する。「ENVIRONMENT DIVISION.」は、「CONFIGURATION SECTION.」(環境節)と「INPUT-OUTPUT SECTION.」(I-O節)に大別される。

DATA DIVISION.

  • プログラムで使用する変数及びデータ並びにその型について記述する。プログラムで使用する変数及びデータのすべては、DATA DIVISION.で定義しなければならない。
  • 「DATA DIVISION.」は、「FILE SECTION.」と「WORKING-STORAGE SECTION.」に大別される。データの型の宣言は、PICTURE(PIC)句によって行う。

COBOLにおけるデータの分類

  • COBOLのプログラムにおけるデータは、次の3つに分類される。
    • 変数(Variables)
    • 定数(Literals)
    • 表意定数(FigurativeConstants)
予め名称が定められている特定の意味を持つ定数(表意定数)を利用できる。この定数の実体は、実行されるシステムよってその意味が有効になるように実現される。例としては、HIGH-VALUES、LOW-VALUES等が挙げられる。

COBOLにおける変数

  • COBOLにおける変数の型は、次の3つが基本となっている。
    • 数値型(Numeric)
    • 英数字型(AlphaNumeric)
    • 英字型(Alphabetic)
  • COBOLではスカラー型変数及びレベル番号による多次元の配列を使用することができるとともに、これらを複数組み合わせて階層構造を持つ固定長「レコード型」(構造体)を構成して定義することもできる。なお、この「レコード型」はCOBOLによって初めて導入された概念である。
  • COBOLのプログラミングにおける特徴的な記述方法として、レベル番号によって表現される階層構造を持つレコードのデータ構造の定義を挙げることができる。なお、レベル番号は"01"から"49"までとされるが、特殊なレベル番号として"66"、"77"等がある。
  • 事務処理用及び管理分野用とされるCOBOLにおいては会計・経理処理などのように通貨を対象とした正確な数値計算が特に要求されるため、数値に対する10進数から2進数への基数変換時に計算誤差の発生しない2進化10進数による数値型(仮想小数点方式)を用いることができる。これはFORTRANなどのプログラミング言語において浮動小数点方式などによって実数を近似値で表現しようとする発想とは対峙するものである。
  • 無名の変数等として"FILLER"という名称を記述することができる。無名項目の"FILLER"は、COBOLにおける変数等の領域の定義は固定長となるため、そのような固定長領域内における予備的な領域の確保という意味合いも有している。

PROCEDURE DIVISION.

  • 実行されるプログラムの実際のコードを記述する。
  • 上記3つのDIVISIONを記述したあとの4番目のDIVISIONである「PROCEDURE DIVISION.」においてプログラムコードを記述する文法となっているため、COBOLは「前置きが長い」言語と評されることもある。その一方で、このような4つのDIVISIONの明確な記述などによる厳格で形式的な文法に基づくプログラムの記述方法によってCOBOLは、その可読性、ドキュメント性、保守性が高い言語であるとも言われる。なお、これと関連してCOBOLの予約語の数は膨大で、文字数の長いものが多いことはCOBOLの特徴の一つである。

標準化

CODASYLによって標準化が行われてきたが、ANSIISO/IEC JTC 1 SC22/WG4などによっても標準化されている。

問題点と未来

COBOLは事務用として広く使われたため、各処理系(=各機種)ごとに多くの固有部分が発生してしまった。特に、画面処理を行なうプログラム向けの、画面処理機能は各社固有の機能となっている。

また、言語仕様が古くからあり、論理制御機能が弱い問題点もあった。それらはCOBOLの言語仕様の改訂ごとに徐々に改善されて来ている。

コードの実例 (Hello World)

000100 IDENTIFICATION DIVISION.
000200 PROGRAM-ID.     HELLOWORLD.
000300 DATE-WRITTEN.   02/05/96        21:04.
000400*       AUTHOR    BRIAN COLLINS
000500 ENVIRONMENT DIVISION.
000600 CONFIGURATION SECTION.
000700 SOURCE-COMPUTER. RM-COBOL.
000800 OBJECT-COMPUTER. RM-COBOL.
000900
001000 DATA DIVISION.
001100 FILE SECTION.
001200
100000 PROCEDURE DIVISION.
100100
100200 MAIN-LOGIC SECTION.
100300 BEGIN.
100400     DISPLAY " " LINE 1 POSITION 1 ERASE EOS.
100500     DISPLAY "HELLO, WORLD." LINE 15 POSITION 10.
100600     STOP RUN.
100700 MAIN-LOGIC-EXIT.
100800     EXIT.

この例では DISPLAY命令を使い、コンソール(または標準出力)に結果を出力しているが、基本的にCOBOLはファイルの処理が主体である。従ってFILE SECTIONにファイル定義を書くのが基本的な処理方法である。


関連事項