佐藤さんからのコメント


-----ここから-----
佐藤ともうします。
ホームページ楽しく拝見させて頂きました。
特に、”こんなコンパイラーが欲しい”はなかなか興味深いものです。
既に、いろいろな方からの回答があり重複しそうですか、NECでCOBOL を開発している人間としてコメントさせて頂きます。

ご希望の完全にそうCOBOLコンパイラは現状存在していませんが、近いものは 製品化されています。

まず、動詞を含めて日本語対応したCOBOLは10年以上前に富士通から 国語COBOLとして出荷されています。文字通り


もし A = B
かつ C = D
または C = E
の時
   MOVE A TO F
といった、構文をサポートしたCOBOLでした。


また、以下の文章
------本文を引用します。------
一番の問題は「顧客が妊娠経験有り」「顧客の性別が女でなく」「顧客の年齢が1 6歳未満」 をどうコンパイラーに解釈させるかです。

顧客(KOKYAKU)の属性に
妊娠経験(NINSHIN-KEIKEN) 0:有り            1:無し 性別(SEIBETSU) 1:男    2:女 年齢(AGE) NUMERIC
の様な用語定義のデータベースを持ち、ここから組み立てられないでしょうか。
-------------------------
で指摘されている機能については、日本電気のCOBOLでやはり10年以上まえから サポートしております。文字通りに用語辞書システムというものです。
国産他社のCOBOLでも同様な機能がサポートされているはずです。

上記の例に関しては用語辞書にあらかじめ以下の用語(データ名 データの型、データの値、データの値の名前)を登録しておきます。


用語:顧客.
 02 妊娠経験  PIC 9(1).
 02 性別    PIC 9(1).
 02 年齢    PIC 9(2).

妊娠経験の値  妊娠経験有り:VALUE 1.
        妊娠経験無し:VALUE 0.

性別の値    男:VALUE 1.
        女:VALUE 2.

年齢の値    未成年: 年齢<20

この用語辞書を利用して以下のCOBOL構文を解釈します。


01 入院患者  USAGE IS 顧客.

IF 妊娠経験 OF 入院患者 = 妊娠経験有り
 AND 性別 OF 入院患者 = 男
 OR  年齢 OF 入院患者 = 未成年
THEN XXXXXX

上記構文を以下のように展開します。

01 入院患者 .
 02 妊娠経験  PIC 9(1).
 02 性別    PIC 9(1).
 02 年齢    PIC 9(2). 

IF 妊娠経験 OF 入院患者 = 1
 AND 性別 OF 入院患者 = 1
 OR  年齢 OF 入院患者 < 20
THEN XXXXXX

上記の”顧客”は抽象データ型のようなもので、用語名と呼びます。
”妊娠経験有り””男”等は、値の名前として 用語値名と呼びます。
用語名と用語値名のデータベースを作成してプログラムの誤りを減らそう という主旨で提供されている機能です。
用語名の定義、用語値名の定義は、あらかじめ登録された用語名や用語値名 を利用して定義することができますので、相当複雑なデータも誤り無く 定義参照することが可能です。

もともとは、100名単位のプロジェクトチームでのプログラム開発での データ定義の共通化やデータの参照方法の共通化を目指して開発しました。

以上参考まで。
-----ここまで。-----
+----------------------------------------------------+
日本電気株式会社 コンピュータソフトウエア事業本部
第三コンピュータソフトウエア事業部 生産技術開発部
     tel:XXXX-XX-XXXX , 内線:8-23-26142
佐藤 孝夫 fax:XXXX-XX-XXXX , 内線:8-23-26159
e-mail: satoh@lang2.bs1.fc.nec.co.jp 〒:23-26140