下記の文章に近いものなら製品化されていますよとコメント頂きました。
佐藤さんからのコメント
佐藤さん勉強になりましたありがとうございます。
-------------------------------------------------------------
例えばアンケート結果の入力をするプログラムを作成することになったとしましょう。
アンケートの入力は性別、年齢、妊娠経験の有無の3項目だとします。
ここで妊娠経験が有りの場合は性別は女性で16歳以上でなければエラーにすることにします。
通常の場合言語にかかわらず大体こんなコーディングをすると思います
IF (NINSHIN-KEIKEN OF KOKYAKU = "1" AND (SEIBETSU OF KOKYAKU NOT= "2" OR AGE OF KOKYAKU < 16)) THEN MOVE "E00101" TO ERR-MSG.
良いプログラマーなら後のメンテナンスの事を考えてデータの定義部分またはプロセス部分に
妊娠経験無し:"0"、有り;"1"、性別:男"1"、女:"2"などとコメントを入れるだろうと思います。
これを次の様に表現したものから上のプログラムを作成したいものです。
もし 「顧客が妊娠経験有り かつ 「顧客の性別が女でなく または 顧客の年齢が16歳未満」」 の時 エラーコードに「妊娠経験有りエラー」をセットする
こんなプリコンパイラーが欲しいというのがこの文章の趣旨です。
もし、かつ、または、の時については予約語として半角もしくは全角のスペースで囲まれている場合に単純にIF,AND,OR,THENに変換すれば良さそうです。
()はひらがな入力をしている人にとってはいちいち英語入力に切り替えなければならないので()は「」と表現しても良いようにしたいですね。
ネストしているIF文に関してはEND-IFに相当する良い日本語が見あたらないのでインデントに意味を持たしたらどうでしょう。
IF NINSHIN-KEIKEN OF KOKYAKU = "1" THEN IF (SEIBETSU OF KOKYAKU NOT= "2" OR AGE OF KOKYAKU < 16) THEN MOVE "E00101" TO ERR-MSG. END-IF END-IF
は
もし 顧客が妊娠経験有り の時 もし 「顧客の性別が女でなく または 顧客の年齢が16歳未満」」 の時 エラーコードに「妊娠経験有りエラー」をセットする
の様に表現すれば出来そうです。
ここでの「の時」はなくてもTHENを生成することも出来るかも知れません。
一番の問題は「顧客が妊娠経験有り」「顧客の性別が女でなく」「顧客の年齢が16歳未満」をどうコンパイラーに解釈させるかです。
顧客(KOKYAKU)の属性に 妊娠経験(NINSHIN-KEIKEN) 0:有り 1:無し 性別(SEIBETSU) 1:男 2:女 年齢(AGE) NUMERIC の様な用語定義のデータベースを持ち、ここから組み立てられないでしょうか。顧客という属性に「は、が」がついた場合は次の用語を用語定義の中から検索し
また、サブルーチンの呼び出しは
日付ルーチン「現在の日付、和暦」を呼び出す
と言う表現はいかがでしょう、ここで「現在の日付、和暦」はバラメーターです。
ここで考えているのは言語に共通なプリコンパイラーでそれぞれの言語特有な関数などの使用を可能にするため
*NATIVE SYSTEM(DIR);の形で例えばC言語のSTSTEM関数を表現しましょう、つまり*NATIVEが行頭にある場合は*NATIVEを除いてブリコンパイラーを素通りさせると言うことです。
最初のマーケットとしては新規のブログラムをこれを使用して作成するというよりも現在多くで使われているCOBOL等のリバースエンジニアリングのツールとしてCOBOLソースからここで述べてきた日本語のソースが作成されれば、完全に対応出来ていなくても(つまり生成されたものに多少手を加えなければ使えないレベルのものでも)ニーズはかなりあると想像します。
後々はソースからCOBOLでもC言語やJavaでも好きな言語が展開されるようにしたいものです。
単純に考えているので実際にプリコンパイラーを作成しようとするといろいろな制約も出て来るでしょうが、ソースに強力なドキュメンテーション能力が備わるため開発工数が増えたにしてもメンテナンスも含めて考えれば余りあるメリットがあるのではと思います。
なお、ここでは難しい日本語解析をしようとまでは思ってません、構文にはかなりの制約を持たし誰でもプログラムを作れるというよりはファジーな表現をしないようにある程度訓練を受けた専任のプログラマーがプログラムを作成することを考えています。
どこかのメーカーの方、一緒に作りませんか?
もうこんなのあるよという方は教えて下さい。