ニコニコ大百科モバイル

7/2(月)よりスマホまたはPCでアクセスした場合、各デバイス向けのサイトへ自動で転送致します


COBOL


ヨミ: コボル
掲示板をミル!
20カキコ!

COBOLとは、事務処理用のプログラミング言語である。Common Business Oriented Language(汎商業的言)の略。高級言


概要


アメリカ防総によって統一事務処理言の開発が提案され、1959年アメリカデータシステムズ言協議会(CODASYL)が開発された。もともとは、世界最初に“バグ”を発見した、最初期のプログラマでもありコンピュータ開発者でもあった“アメイジング・グレース”こと、グレース・ホッパー女史が開発したコンパイラである「FLOW-MATIC」がベース。このため、グレース・ホッパーは「COBOLの」とも呼ばれている(ちなみに女性にして初の軍将官(提督)でもある)。日本のごく一部のおっさんからは「COBOLのおばちゃま」とか呼ばれることもある。

アメリカ政府導で開発を行ったこともあり、COBOL誕生以降、アメリカ政府事務システムは全てCOBOLによって製作された。現在でも事務処理用ホストコンピュータではCOBOLプログラム流として活躍している。

現在のCOBOLの仕様2014。


特徴


他のプログラミング言語と異なり、英語に近い構文になっているのが最大の特徴である。これは開発者であるグレース・ホッパーの理念によるもの、らしい。当時は機械語体だったので、プログラミングする言は標準化された英語ベースに作りやすい、可読性の高い(高準)言であるべきだという考えのもと作られている。論、その反面、プログラム言語としては冗長になり過ぎるきらいもあり、その点についての批判もある。


文法



4つのDIVISION


COBOLは、「IDENTIFICATION DIVISION.」(見出し部)、「ENVIRONMENT DIVISION.」(環境部)、「DATA DIVISION.」(データ部)、「PROCEDURE DIVISION.」(手続き部)の4つのDIVISIONから成り立ち、これらを順番に記述しなければならない。

IDENTIFICATION DIVISION.

プログラムの見出しとなる部。

PROGRAM-ID.」(プログラム番号)、「AUTHOR.」(プログラム作成者名)、「DATE-WRITTEN.」(作成日)などのプログラムの実行に関係しない文を記述する。更新履歴などを記述することもある。なお、「AUTHOR.」「DATE-WRITTEN.」は要素のため、最新規格のCOBOLでは使わないようにしよう。

ENVIRONMENT DIVISION.

プログラムの実行環境を記述する部。

「CONFIGURATION SECTION.」(環境節)と「INPUT-OUTPUT SECTION.」(I/O節)があり、環境節ではホストコンピューター名など、I/O節では入出ファイル情報を記述する。なお、環境節の「SOURCE-COMPUTER.」「OBJECT-COMPUTER.」等の記載は、コンパイル時に影を与えることはく、実質覚書のようなものである。そのため、省略されることも多い。

DATA DIVISION.

変数定数を定義する部。

FILE SECTION.」(ファイル節)と「WORKING-STORAGE SECTION.」(作業領域節)、「LINKAGE SECTION.」(引数節)がある。変数定数の宣言は、PICTURE(PIC)句によって行う。

PROCEDURE DIVISION.

処理コードを記述する部。ここで定義された処理が実行される。


書式


COBOLでは、1行に80桁(カラム)まで記述できるが、実際にソースコードを記述できる領域が定されている。一部例外もあるが、行の終端には必ずピリオド(.)を付けなければならない。

また、英字は大文字・小文字のどちらで記述しても良い(区別されない)が、かつて小文字に対応していないパンチカード文字コードが存在していた頃の名残もあってか、大文字で記述することが一般的になっている。

1~6カラム

一連番号領域。

プログラムの行を識別するための領域。コンパイル時にこの領域は視されるため、必ずしもコーディング上記述する必要はない。

7カラム

識別領域。

「*」を付けることで、その行をコメント行として認識される。通常は空白

8~11カラム

A領域。

DIVISIONSECTION等の見出しや作業領域節の「01」などを記述する。

12~72カラム

B領域。

文や各DIVISIONSECTIONを構成する文を記述する。ピリオドも含めて、全てこの領域に記述する必要がある。

73~80カラム

プログラム識別領域。

コメントとして扱われる領域。コンパイル時にこの領域は視されるため、必ずしもコーディング上記述する必要はない。


ソースコードの例


は予約コメント行を表す。

プログラムを終了させる際には「STOP RUN」と記述しなければならない。

例1:Hello World

000100 IDENTIFICATION DIVISION.
000200 PROGRAM-ID. HELLOWORLD.
000300 PROCEDURE DIVISION.
000400     DISPLAY 'HELLO, WORLD!'.
000500     STOP RUN.

例2:FizzBuzz

000100 IDENTIFICATION DIVISION.
000200 PROGRAM-ID. FIZZBUZZ.
000300 DATA DIVISION.
000400 WORKING-STORAGE SECTION.
000500 01 I  PIC 9(3).
000600 PROCEDURE DIVISION.
000700     PERFORM VARYING I FROM 1 BY 1 UNTIL I > 100
000800       EVALUATE FUNCTION MOD(I 3) = ZERO
000900           ALSO FUNCTION MOD(I 5) = ZERO
001000       WHEN TRUE  ALSO TRUE
001100         DISPLAY 'FIZZBUZZ'
001200       WHEN TRUE  ALSO FALSE
001300         DISPLAY 'FIZZ'
001400       WHEN FALSE ALSO TRUE
001500         DISPLAY 'BUZZ'
001600       WHEN OTHER
001700         DISPLAY I(3 - FUNCTION INTEGER(FUNCTION LOG10(I)):)
001800       END-EVALUATE
001900     END-PERFORM.
002000     STOP RUN.

COBOLの数字項は定義された桁数よりも少ない桁数の値が格納された場合、ゼロディングした状態で扱うため、このまま表示させると001、002、…、098と先頭に0が補われて表示されてしまう。N 桁で定義された数字項に、正の整数 n が格納された場合、その最上位桁の位置は左から N - [log10n] カラムである[ ] はガウス記号であり、[x] は x 以下の最大の整数を表す。いわゆる「小数点以下切り捨て」である。から、上記のように「DISPLAY I(3 - FUNCTION INTEGER(FUNCTION LOG10(I)):)」と記述することで、パディングされた0を除いた部分だけを表示させることが出来る。

例3:ユークリッドの互除法

000100 IDENTIFICATION DIVISION.
000200 PROGRAM-ID. EUCLID.
000300 ENVIRONMENT DIVISION.
000400 INPUT-OUTPUT SECTION.
000500 FILE-CONTROL.
000600     SELECT INDATA ASSIGN TO 'INDATA.TXT'
000700       ORGANIZATION IS LINE SEQUENTIAL FILE STATUS IS INDATA-STS.
000800     SELECT OTDATA ASSIGN TO 'OTDATA.TXT'
000900       ORGANIZATION IS LINE SEQUENTIAL.
001000 DATA DIVISION.
001100 FILE SECTION.
001200 FD INDATA.
001300 01 INDATA-REC.
001400     03 M        PIC 9(18).
001500     03 FILLER   PIC X(01).
001600     03 N        PIC 9(18).
001700 FD OTDATA.
001800 01 OTDATA-REC.
001900     03 FILLER   PIC X(38).
002000     03 GCD      PIC 9(18).
002100     03 FILLER   PIC X(01).
002200     03 ERR-FLG  PIC X(01).
002300 WORKING-STORAGE SECTION.
002400 01 INDATA-STS   PIC X(02).
002500 01 R            PIC 9(18).
002600 PROCEDURE DIVISION.
002700     OPEN INPUT INDATA OUTPUT OTDATA.
002800     PERFORM UNTIL INDATA-STS NOT = ZERO
002900       READ INDATA
003000       NOT AT END
003100         MOVE INDATA-REC TO OTDATA-REC
003200         EVALUATE TRUE
003300         WHEN M IS NOT NUMERIC
003400         WHEN N IS NOT NUMERIC
003500         WHEN M = N AND ZERO
003600           MOVE '1'  TO ERR-FLG
003700         WHEN OTHER
003800           MOVE ZERO TO ERR-FLG
003900           PERFORM UNTIL N = ZERO
004000             COMPUTE R = FUNCTION MOD(M N)
004100             COMPUTE M = N
004200             COMPUTE N = R
004300           END-PERFORM
004400           COMPUTE GCD = M
004500         END-EVALUATE
004600         WRITE OTDATA-REC
004700       END-READ
004800     END-PERFORM.
004900     CLOSE INDATA OTDATA.
005000     STOP RUN.

テキストファイルを入出データとしている関係上、入データとして不適切なものが渡された場合(具体的には、入値M、Nの少なくとも一方に数字以外の文字が含まれている場合や、M、Nが両方とも0である場合数値を格納する変数を「PIC 9(n)」で定義しているため、負の数の場合を考慮する必要はい。もし「PIC S9(n)」で定義した場合は、負の数の場合も考慮する必要がある。)も考慮している。

例4-1:17歳ジェネレーター(実在日判定を副プログラムで実施)


次へ»
最終更新日: 19/04/29 13:13
タグ検索 パソコン版を見る


[0]TOP
ニコニコ動画モバイル
運営元:ドワンゴ