(57)【特許請求の範囲】
【請求項１】
所定のプログラミング言語により記述されるコンピュータプログラムを生成するコンピュータプログラム生成装置であって、
ユーザによって定義された用語と、前記用語に対応する識別子とを記憶する用語データベースと、
前記プログラミング言語の文法に従って形成される木構造であって、前記プログラミング言語に用いられる各命令文を構成する複数の構成要素をそれぞれ格納する複数のノードを含む木構造を有する文法データベースと、
前記用語を含む前記コンピュータプログラムのアルゴリズムの入力を受け付ける入力部と、
前記用語データベースを検索して前記入力部で入力された用語に対応する識別子を読み出し、前記文法データベースを検索して前記ノードから構成要素を読み出し、前記読み出された識別子及び構成要素を配列することにより複数の命令文を１つずつ生成し、前記生成された複数の命令文を前記入力されたアルゴリズムに従って順番に並べる生成部とを備える、コンピュータプログラム生成装置。
【請求項２】
請求項１に記載のコンピュータプログラム生成装置であって、
前記入力部は、前記プログラミング言語に用いられる複数の命令のうち前記アルゴリズムで用いられる命令の選択と、前記選択された命令に用いられる用語の入力とを受け付けるためのインタフェースを表示する、コンピュータプログラム生成装置。
【請求項３】
請求項１又は２に記載のコンピュータプログラム生成装置であって、
前記命令文は、演算式と、変数と、前記演算式の結果を前記変数に代入することを定義する代入文定義子とを含む代入文を含み、
前記文法データベースは、
前記代入文定義子を定義する部分木であって、前記代入文定義子を格納するノードを含む代入文定義部分木と、
前記変数を定義する部分木であって、前記変数を格納するノードを含む変数部分木と、
前記演算式を定義する部分木であって、前記演算式の構成要素を格納するノードを含む演算式部分木とを含み、
前記生成部は、前記代入文定義部分木と、前記変数部分木と、前記演算式部分木とを所定の順序で巡航する、コンピュータプログラム生成装置。
【請求項４】
請求項１〜３のいずれか１項に記載のコンピュータプログラム生成装置であって、
前記命令文は、分岐判定式と、前記分岐判定式が満たされる場合に実行される命令を示す命令句と、前記命令文が分岐命令であることを示す分岐文定義子と含む分岐文を含み、
前記文法データベースは、
前記分岐判定式を定義する部分木であって、前記分岐判定式の構成要素を格納するノードを含む判定式部分木と、
前記命令句を定義する部分木であって、前記命令句の構成要素を格納するノードを含む命令句部分木と、
前記分岐文定義子を定義する部分木であって、前記分岐文定義子を格納するノードを含む分岐文定義部分木とを含み、
前記生成部は、前記判定式部分木と、前記命令句部分木と、前記分岐文定義部分木とを所定の順序で巡航する、コンピュータプログラム生成装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、コンピュータプログラム生成装置に関し、さらに詳しくは、所定のプログラミング言語により記述されるコンピュータプログラムを生成するコンピュータプログラム生成装置に関する。
【背景技術】
【０００２】
一般的なコンピュータプログラムの開発では、最初に、コンピュータプログラムの仕様書が作成される。プログラマが、作成された仕様書を解釈しその意味内容を把握して、Ｃ言語などのプログラミング言語により記述されたコンピュータプログラムを作成する。そして、作成されたコンピュータプログラムを検査して、作成されたコンピュータプログラムに含まれる瑕疵（バグ）などを取り除く作業が行なわれる。
【０００３】
しかし、プログラマがコンピュータプログラムを作成する場合、作成されたコンピュータプログラムは、プログラマの思い違いや不注意に由来する多くの瑕疵を含む。これらの瑕疵を取り除くために、非常に多くの時間を必要とするため、開発効率が一向に向上せず品質も向上しないという問題がある。
【０００４】
このため、コンピュータプログラムを作成する工程の一部を自動化することが提案されている。例えば、コンピュータプログラムの仕様書から、コンピュータプログラムを自動的に作成する技術が、特許文献１に開示されている。
【０００５】
特許文献１の方法では、予めプログラムの設計知識を入力して設計知識ベースを構築しておき、後にプログラム仕様を入力して構文木に変換する。変換された構文木から部分木を取り出して設計知識ベースを適用し、プログラムを生成する。この方法では、すべての場合にプログラム生成が成功するとは限らない。
【０００６】
特許文献１の方法が全ての場合に成功するとは限らないのは、プログラム生成の単位が、部分木と呼ばれる複数のプログラム文を含んだプログラム仕様であり、このプログラム仕様に対して設計知識と呼ばれる既知の小プログラム群のいずれかを適用し、プログラムを生成しているからである。登録されている設計知識の量が不足すれば、適用の対象外となるプログラム仕様が現われるのは必然である。
【０００７】
特許文献１の方法が不成功部分を残していることの根本原因は、コンピュータが最も不得手とする意味解釈を、設計知識と呼ばれる辞書に委ねたことである。膨大な量の設計知識を設計知識ベースに登録すれば、理論的には完全性が期待できると思われるが、設計知識を検索して適用する時間が膨大になるなどの時間的制約や、設計知識を具体的に収集する方法などの実際的な限界を考えれば、この方法は現実的ではない。また、プログラマがコンピュータプログラムを作成する上述の方法でプログラム作成が可能であったのは、人間が文書化された仕様書の内容や目的を理解し、かつ適切に判断する能力を持っているからである。このような能力を持たないコンピュータプログラムにプログラム仕様を解読させるのは、本来的に無理である。プログラム仕様を意味解釈する行為は、複数の文からなる文脈依存の文章の意味を解釈することに相当して、人間以外の機械には不可能な行為である。特許文献１のみならず多くの先行技術がプログラム仕様を入力してその意味を解釈し、解釈した結果に基づいてプログラム生成を試みているが、いずれも生成不可能な場面に遭遇するというプログラム生成の限界性に直面している。従って、特許文献１のように、コンピュータに意味解釈を実行させてコンピュータプログラムを生成する方法では、コンピュータプログラムの開発効率の向上に限界がある。
【先行技術文献】
【特許文献】
【０００８】
【特許文献１】特開平０５−１８１６５１号公報
【発明の概要】
【発明が解決しようとする課題】
【０００９】
本発明の目的は、コンピュータプログラムの開発効率を向上することができるコンピュータプログラム生成装置を提供することである。
【課題を解決するための手段】
【００１０】
本発明によるコンピュータプログラム生成装置は、所定のプログラミング言語により記述されるコンピュータプログラムを生成するコンピュータプログラム生成装置である。このコンピュータプログラム生成装置は、用語データベースと、文法データベースと、入力部と、生成部とを備える。用語データベースは、ユーザによって定義された用語と、用語に対応する識別子とを記憶する。文法データベースは、プログラミング言語の文法に従って形成される木構造であって、プログラミング言語に用いられる命令文の構成要素を格納するノードを含む木構造を有する。入力部は、用語を含むコンピュータプログラムのアルゴリズムの入力を受け付ける。生成部は、用語データベースを検索して入力部で入力された用語に対応する識別子を読み出し、文法データベースを検索してノードから構成要素を読み出し、読み出された識別子及び構成要素を配列することにより命令文を生成する。
【００１１】
この発明によれば、入力されたコンピュータプログラムのアルゴリズムに従って、所定のプログラミング言語に用いられる命令文が生成される。生成された命令文を含むコンピュータプログラムのアルゴリズムは入力されたアルゴリズムと同じであるため、このコンピュータプログラムは、ユーザの意図と異なる動作を行うことがない。従って、コンピュータプログラムの開発効率を向上させることができる。
【００１２】
好ましくは、入力部は、プログラミング言語に用いられる複数の命令のうちアルゴリズムで用いられる命令の選択と、選択された命令に用いられる用語の入力とを受け付けるためのインタフェースを表示する。
【００１３】
ユーザは、命令の選択する操作と、選択した命令に用いられる用語を入力することにより、アルゴリズムを入力することができる。ユーザは、アルゴリズムの記述に用いる所定の言語や、所定のプログラミング言語を覚えることなく、コンピュータプログラムを生成することができる。
【００１４】
好ましくは、命令文は、演算式と、変数と、代入文定義子とを含む代入文を含む。代入文定義子は、演算式の結果を変数に代入することを定義する。文法データベースは、代入文定義部分木と、変数部分木と、演算式部分木とを含む。代入文定義部分木は、代入文定義子を定義する部分木であって、代入文定義子を格納するノードを含む。変数部分木は、変数を定義する部分木であって、変数を格納するノードを含む。演算式部分木は、演算式を定義する部分木であって、演算式の構成要素を格納するノードを含む。生成部は、代入文定義部分木と、変数部分木と、演算式部分木とを所定の順序で巡航する。
【００１５】
生成部が、代入文定義部分木と、変数部分木と、演算式部分木とを所定の順序で巡航することにより、代入文の構成要素が読み出される。これにより、生成された所定のプログラミング言語の代入文は、文法エラーを含まないため、開発効率を向上させることができる。
【００１６】
好ましくは、命令文は、分岐判定式と、命令句と、分岐文定義子とを含む分岐文を含む。命令句は、分岐判定式が満たされる場合に実行される命令を指示する。分岐文定義子は、命令文が分岐命令であることを示す。文法データベースは、判定式部分木と、命令句部分木と、分岐文定義部分木とを含む。判定式部分木は、分岐判定式を定義する部分木であって、分岐判定式の構成要素を格納するノードを含む。命令句部分木は、命令句を定義する部分木であって、命令句の構成要素を格納するノードを含む。分岐文定義部分木は、分岐文定義子を定義する部分木であって、分岐文定義子を格納するノードを含む。生成部は、判定式部分木と、命令句部分木と、分岐文定義部分木とを所定の順序で巡航する。
【００１７】
生成部が、判定式部分木と、命令句部分木と、分岐文定義部分木とを所定の順序で巡航することにより、分岐文の構成要素が読み出される。これにより、生成された所定のプログラミング言語の分岐文は、文法エラーを含まないため、開発効率を向上させることができる。
【図面の簡単な説明】
【００１８】
【図１】本発明の実施の形態に係るコンピュータプログラム生成装置のハードウェア構成を示す機能ブロック図である。
【図２】図１に示すコンピュータプログラム生成装置のソフトウェア構成を示すブロック図である。
【図３】図１に示すコンピュータプログラム生成プログラムのフローチャートである。
【図４】図１に示す用語データベースの一例を示す図である。
【図５】図１に示すモニタに表示されるアルゴリズム入力画面の初期画面を示す図である。
【図６】ユーザによる命令の選択と、選択された命令に用いられる用語の入力を受け付けた後の図５に示すアルゴリズム入力画面を示す図である。
【図７】図１に示す代入文木の構造を示す図である。
【図８】図１に示す分岐文木の構造を示す図である。
【図９】図６に示すインタフェースに入力される自己のラベルと、自己のラベルから変換された自ラベルとの対応を示すテーブルである。
【図１０】図２に示すコンピュータプログラム生成処理のフローチャートである。
【図１１】図１０に示す命令文生成処理のフローチャートである。
【図１２】図７に示す演算式部分木の構造の変形例を示す図である。
【発明を実施するための形態】
【００１９】
以下、図面を参照し、本発明の実施の形態を詳しく説明する。図中同一又は相当部分には同一符号を付してその説明は繰り返さない。
【００２０】
［１．プログラム生成装置の構成］
図１は、本実施の形態に係るコンピュータプログラム生成装置（以下、「生成装置」と略して記載する。）１のハードウェア構成を示す機能ブロック図である。なお、図１において、ハードウェアの他に、生成装置１が使用するデータ、プログラム等を示している。
【００２１】
図１を参照して、生成装置１は、所定のプログラミング言語により記述されるコンピュータプログラム２４を生成する。本実施の形態において、「コンピュータプログラム」とは、生成装置１により生成されたプログラムを意味する。本実施の形態では、所定のプログラミング言語は、Ｃ言語である。つまり、生成装置１は、ユーザにより入力されたアルゴリズムに従ってＣ言語の命令文を生成することにより、コンピュータプログラム２４を生成する。
【００２２】
生成装置１は、例えば、ＰＣ（パーソナルコンピュータ）である。ＰＣは、後述するコンピュータプログラム生成プログラム２１（以下、「生成プログラム２１」と略して記載する。）がインストールされることにより、生成装置１として機能する。なお、ＰＣは、生成装置１として動作する際に、ＨＤＤ１４に予め保存された文法データベース２２及び用語データベース２３を使用する。文法データベース２２及び用語データベース２３の詳細については、後述する。
【００２３】
生成装置１は、ＣＰＵ（Central Processing Unit）１１と、ＲＡＭ（Random Access Memory）１２と、操作部１３と、モニタ１４と、ＨＤＤ（Hard Disk Drive）１５とを備える。
【００２４】
ＣＰＵ１１は、ＨＤＤ１５に格納されたプログラムをＲＡＭ１２にロードし、ロードされたプログラムを実行して生成装置１を制御する。ＲＡＭ１２は、生成装置１のメインメモリである。
【００２５】
操作部１３は、マウス及びキーボードであり、ユーザによる操作を受け付ける。
【００２６】
モニタ１４は、例えば、液晶ディスプレイであり、ＣＰＵ１１によるプログラムの実行結果を表示する。
【００２７】
ＨＤＤ１５は、生成プログラム２１と、文法データベース２２と、用語データベース２３と、コンピュータプログラム２４とを記憶する。
【００２８】
文法データベース２２は、Ｃ言語の文法に従って形成される木構造であって、Ｃ言語に用いられる命令文の構成要素を格納する葉ノードを含む木構造を有する。文法データベース２２は、Ｃ言語における各々の命令文に対応する複数の木構造を有する。本実施の形態では、文法データベース２２は、代入文木３と、分岐文木４とを含む。代入文木３は、Ｃ言語に用いられる代入文の文法に従って形成される木構造のデータである。分岐文木４は、Ｃ言語に用いられる二値論理に基づく分岐文（以下、単に「分岐文」と呼ぶ。）の文法に従って形成される木構造のデータである。代入文及び分岐文の定義、代入文木３及び分岐文木４の詳細は、後述する。
【００２９】
用語データベース２３は、ユーザによって定義された用語と、用語に対応する識別子とを対応付けて記憶する。識別子は、用語に１対１に対応する情報であり、Ｃ言語用の命令文において変数、定数、関数として用いられる記号列である。用語及び識別子の定義については、後述する。
【００３０】
生成プログラム２１は、ユーザが生成したいコンピュータプログラムのアルゴリズムの入力を受け付けるためのインタフェースをモニタ１４に表示し、インタフェースを介して入力されたアルゴリズムに従ってＣ言語用の命令文を生成する。生成プログラム２１の動作の詳細については、後述する。
【００３１】
図２は、生成装置１におけるソフトウェア構成を示す機能ブロック図である。図２を参照して、生成装置１は、入力部６１と、知識ベース６２と、生成部６３とを含む。入力部６１及び生成部６３は、生成プログラム２１により実現される機能部である。知識ベース６２は、文法データベース２２及び用語データベース２３を含む。
【００３２】
入力部６１は、用語データベース２３に記憶された用語を含むコンピュータプログラムのアルゴリズムの入力を受け付ける。生成部６３は、用語データベース２３を検索して入力部６１で入力された用語に対応する識別子を読み出し、文法データベース２２を検索して葉ノードから構成要素を読み出す。生成部６３は、読み出された識別子及び構成要素を配列することによりＣ言語の命令文を生成する。
【００３３】
［２．生成装置１の基本思想］
コンピュータプログラムを生成するにあたり、最初に、ユーザは、要求仕様及びアルゴリズムを決定する。
【００３４】
要求仕様とは、問題解決のための人間の要求事項もしくは意思表明の内容である。要求仕様の作成は、人間に限られる。アルゴリズムは、問題解決の具体的方法すなわち機械的に実行できる手続のことである。生成装置１を用いたコンピュータプログラムの生成にあたり、アルゴリズムの決定は人間に限るものとする。要求仕様は、人間要求の発露であるため、コンピュータが代行することが不可能な、人間の専決事項である。また、アルゴリズムが人間要求を実現するための具体的な方法であることから、アルゴリズムの決定も人間の専決事項である。
【００３５】
生成装置１は、人間の専決事項であるアルゴリズムの決定に関与しない。生成装置１を用いたコンピュータプログラムの作成では、内容を扱う系（内容系）を人間が分担し、形式を扱う系（形式系）を生成装置１が分担する。形式系は、内容を一切取り除いて、機械的な操作が可能な体系を指す。つまり、生成装置１は、人間の専決事項である要求仕様及びアルゴリズムの意味解釈を実行しない。
【００３６】
次に、要求仕様及びアルゴリズムの記述方法について説明する。本実施の形態では、要求仕様及びアルゴリズムを記述するための最小の記述対象は、問題解決のための「場合分け」と「演算式」の二種類とする。数理論理学の教えによれば、現在の数学上のほとんどの命題は一階述語論理で記述できることが経験的に知られており、要求仕様の表現手段として場合分けと演算式の二つに要素還元することは自然な帰結である。一方、プログラムに関する構造化定理によれば、コンピュータプログラムは順処理、分岐処理、反復処理の三種類の制御文で記述でき、さらに反復処理は順処理と分岐処理の組み合わせで記述できるとされている。なお、実用的なコンピュータプログラム作成の範囲内なら、一階述語論理で十分である。
【００３７】
上記の理論的背景に裏付けられて、場合分けと演算式の二種類に構造化定理の結果を組み合わせれば、要求仕様及びアルゴリズムの記述手段は、プログラミング言語の用語を援用して表現するなら、代入文と分岐文に要素還元できると結論づけられる。代入文とは、演算式の結果をある名称を持った変数に記憶させておくことに相当し、分岐文とは、最も素朴で単純な二値論理に基づく場合分けに相当する。
【００３８】
さらに、要求仕様及びアルゴリズムを記述する際に、関数呼出を用いてもよい。関数呼出は、ひとまとまりの要求仕様であり、また、ひとまとまりのアルゴリズムに相当する。以下、関数呼出を要求仕様及びアルゴリズムの記述に利用できる理由を説明する。
【００３９】
コンピュータプログラムは、計算可能関数にその理論的基礎を置く。本実施の形態では、計算可能関数の中の原始帰納的（再帰的）関数を基礎理論とする。原始帰納的関数は、ゼロ関数、後者関数、射影関数の３つの初期関数を出発点として、関数合成と原始帰納法を組み合わせながら、計算可能な関数を構成するものと教えている。本実施の形態では、この考え方も最大限に尊重するものとする。初期関数に相当するコンピュータプログラムを「初期プログラム」と呼ぶなら、初期プログラムはＯＳ（オペレーティングプログラム）やプログラミング言語が用意する「システム関数」と、生成装置１が独自に用意する「基本関数」である。基本関数とは、最も基礎的な働きをするプログラムであるとする。上記の教えに従えば、一つのプログラム関数を形成するとき、すでに定義された関数が新しい関数の関数要素となることが示されているものと理解される。この教えは、プログラムの中に「関数呼出」を必要機能とするものである。
【００４０】
以上のことを総合すれば、要求仕様及びアルゴリズムの記述手段は、プログラミング言語の用語を援用して表現すると、代入文、分岐文、及び関数呼出の、３種類の記述文であることが結論づけられる。要求仕様及びアルゴリズムの記述において、上記の三種類の文を基本的な記述文とする。以上の結論は、要求仕様及びアルゴリズムが、最も少ない言葉で記述できることを保証するものである。最も少ない言葉とは、ここでは最も少ない指令（命令）と解釈されるものである。
【００４１】
なお、本実施の形態では、代入文及び分岐文を用いたコンピュータプログラム２４の生成について詳しく説明する、上述のように、関数呼出は、ひとまとまりのアルゴリズムであるため、関数呼出によって用いられる関数のアルゴリズムも、代入文及び分岐文により記述可能であるためである。
【００４２】
次に、アルゴリズムの入力の際に用いられる用語と、用語データベース２３において用語に対応付けられる識別子について説明する。
【００４３】
要求仕様を記述する場合にも、アルゴリズムを記述する場合にも、いずれの場合も言葉を使用して記述する。問題解決の対象となる世界を対象世界と呼ぶならば、対象世界を記述する言葉は、その世界固有の用語である。今後は、この意味を込めて「用語」と言う言葉を使用する。どの用語を使用するかは、人間が決定する。用語を決定する人間は、対象世界に所属する者であり、生成装置１を使用する人間である。用語の意味内容を十分に理解した人間が、用語を収集し命名するものとする。上記の方法で収集された用語は、人間が判断できる情報を含んでいると言う意味で、内容系に属するものと解釈できる。一方で、用語は形式系である生成装置１の記号に変換されなければならない。形式系は、意味内容を取り払った記号を取り扱う体系であるからである。本実施の形態では、内容系の用語を一定の規則に従って記号化するものとし、記号化された用語を「識別子」と呼ぶ。このとき本実施の形態においては、用語を挟んで内容系と形式系が併存する構図が描かれる。内容系の用語と形式系の識別子が、同一記述対象の上で併存する構図である。人間は用語によって対象世界における記述対象の意味内容を把握し、プログラム生成装置は識別子によって形式系における記述対象を把握する。内容系と形式系の接点が、用語および識別子の上に出現する。内容系と形式系の二面性の設定である。
【００４４】
［３．生成プログラム２１の処理］
図３は、図１に示す生成プログラム２１のフローチャートである。図３を参照して、生成プログラム２１を実行する生成装置１の動作を説明する。なお、生成プログラム２１が図３に示す処理を開始する前に、文法データベース２２及び用語データベース２３が、ＨＤＤ１５に保存される。
【００４５】
最初に、生成装置１は、アルゴリズム入力用のインタフェースをモニタ１４に表示して、用語データベース２３に記憶された用語を含むコンピュータプログラムのアルゴリズムの入力を受け付ける（ステップＳ１）。ステップＳ１の処理は、図２に示す入力部６１により実行される処理に対応する。
【００４６】
ユーザは、代入文と分岐文とで記述されたコンピュータプログラムのアルゴリズムを前もって準備する。このアルゴリズムで用いられる代入文及び分岐文は、アルゴリズム記述用の所定の言語に基づいて作成しなくてもよく、ユーザが理解できるものであればよい。従って、ユーザは、自然言語で記述される用語を含むアルゴリズムを準備すればよく、アルゴリズムそのものを自然言語で記述してもよい。
【００４７】
インタフェースに入力されるアルゴリズムにおいて、演算式や分岐判定式の演算子は、ユーザが日常の算術計算等で用いられるものである。従って、アルゴリズムを入力したユーザ以外のユーザでも、インタフェースに入力されるアルゴリズムの内容を直感的に理解することができる。
【００４８】
生成装置１は、プログラムの生成指示を受け付けた場合（ステップＳ２においてＹｅｓ）、インタフェースに入力されたアルゴリズムに従って、コンピュータプログラム２４を生成する（ステップＳ３）。ステップＳ３の処理は、図２に示す生成部６３により実行される処理に対応する。
【００４９】
具体的には、生成装置１は、用語データベース２３を検索して、インタフェースに入力された用語に対応する識別子を読み出し、文法データベース２２を検索して葉ノードから構成要素を読み出す。そして、生成装置１は、読み出された識別子及び構成要素を配列することにより、Ｃ言語の命令文を生成する。
【００５０】
以下、生成プログラム２１の処理をさらに詳しく説明する。ステップＳ１を説明する前に、用語データベース２３について説明する。
【００５１】
［３．１．用語データベース２３］
図４は、用語データベース２３の一例を示す図である。図４を参照して、用語データベース２３は、リレーショナル型であり、１つのテーブルを有する。
【００５２】
用語データベース２３において、各行が１つのレコードに対応する。各レコードは、位置、用語、識別子、型、配列次元数のフィールドを有する。
【００５３】
位置は、用語データベース２３において用語が登録されている場所を示し、各レコードに固有の情報である。用語は、ユーザによって定義され、上述のように、ユーザがその意味を理解できるように自然言語で記述される。識別子は、用語に１対１で対応する記号列であり、Ｃ言語の命令文の作成に用いられる。図４に示す用語データベース２３に登録された識別子は、Ｃ言語の命令文において、変数として用いられる。型は、コンピュータプログラム２４における識別子のデータ型を示し、整数型、実数型、文字列型などが記録される。配列次元数は、識別子が配列を示す変数として用いられるか否かを示す。配列次元数が０であれば、対応する識別子は、単一変数として用いられる。配列次元数が１以上であれば、対応する識別子は、配列次元数に対応する次元の配列（添字付変数）として用いられる。
【００５４】
例えば、識別子「Ｖ００１」は、ユーザによって定義された用語「温度測定値」に対応する。識別子「Ｖ００１」のデータ型は、実数型であり、配列次元数が０であるため単一変数として使用されることがわかる。
【００５５】
なお、用語データベース２３において、型及び配列次元数が記録されていなくてもよい。型及び配列次元数は、識別子がコンピュータプログラムにおいて変数として用いられる際の属性を示す情報であるため、用語の定義に直接影響しないためである。この場合、識別子の属性を定義するデータベースを別途準備し、ＨＤＤ１５に格納するようにすればよい。
【００５６】
［３．２．アルゴリズム入力］
図５は、モニタ１４に表示されるアルゴリズム入力用のインタフェース５（アルゴリズム入力画面）の初期画面を示す図である。
【００５７】
インタフェース５は、メニューバー５１と、行番号欄５２と、ラベル入力欄５３と、文記述欄５４と、文名称欄５５とを有する。インタフェース５がモニタ１４に最初に表示されたとき、行番号欄５２と、ラベル入力欄５３と、文記述欄５４と、文名称欄５５とは、全て空欄である。
【００５８】
メニューバー５１は、Ｃ言語に用いられる複数の命令のうち、アルゴリズムに用いられる命令（代入文、分岐文）を表示する。開始文、終了文は、アルゴリズムの開始、終了を宣言する文である。関数呼出文は、知識ベース６２に登録された関数の呼び出しに用いられる。なお、図２では、関数が登録されたデータベースの表示を省略している。ユーザは、メニューバー５１を操作することにより、アルゴリズムで用いられる命令を選択する。
【００５９】
文記述欄５４は、メニューバー５１により選択された命令に用いられる用語や、選択された命令に用いられる演算式等を記述するための領域である。行番号欄５２は、文記述欄５４に入力されたアルゴリズムの命令の位置を示す行番号を記述するための領域である。ラベル入力欄５３は、文記述欄５４に入力されたアルゴリズムの命令を特定するラベル（自己のラベル）を入力するための領域である。文名称欄５５は、文記述欄５４に入力されたアルゴリズムの命令の種類を示す情報の表示に用いられる。
【００６０】
以下、アルゴリズムの入力方法について詳しく説明する。図６は、ユーザにより命令の選択が行われ、選択された命令に用いられる用語及び演算式の入力が行われた後のインタフェース５を示す図である。
【００６１】
ユーザは、メニューバー５１に登録されている開始文、終了文、代入文、分岐文、及び関数呼出文のいずれかから１つを選択する操作を行う。
【００６２】
ユーザは、アルゴリズムの入力を開始する場合、メニューバー５１から開始文を選択する操作を行う。生成装置１は、この操作に応じて、行番号欄５２に行番号「００１」を追加し、行番号「００１」に対応する文記述欄５４の位置に、「開始」と記述する。これにより、アルゴリズムが行番号「００１」から開始されたことを、ユーザは容易に認識できる。
【００６３】
次に、ユーザは、メニューバー５１から代入文を選択する操作を行う。生成装置１は、この操作により、Ｃ言語に用いられる複数の命令のうち、アルゴリズムで用いられる命令（代入文）の選択を受け付ける。
【００６４】
生成装置１は、行番号欄５２に行番号「００２」を追加し、アルゴリズムの代入文の入力に用いられるテンプレート５４１を、文記述欄５４に表示する。テンプレート５４１は、行番号「００２」に対応する位置に配置され、左辺（単一変数）に対応するテキストボックス５４１ａと右辺（演算式）に対応するテキストボックス５４１ｂとを含む。テキストボックス５４１ａと５４１ｂとの間には、等号（＝）が表示される。また、生成装置１は、文名称欄５５において行番号「００２」に対応する位置に、代入文に対応するテンプレート５４１が表示されていることを示す「式と代入」を表示する。
【００６５】
ユーザは、用語を含む演算式をテキストボックス５４１ｂに入力し、入力された演算式の結果が代入される用語をテキストボックス５４１ａに入力する。テキストボックス５４１ａには、用語「温度測定値」が入力される。テキストボックス５４１ｂには、「センサ出力値×補正係数＋オフセット（添字Ａ）」が演算式として入力される。入力された演算式は、用語として、「センサ出力値」、「補正係数」、「オフセット」及び「添字Ａ」を含んでいる。ここで、「オフセット（添字Ａ）」は、配列を示す。「オフセット」は、配列名を示し、「添字Ａ」は、配列の要素番号として用いられる。
【００６６】
また、生成装置１は、ラベルが入力されるテキストボックス５３１をラベル入力欄５３に表示する。テキストボックス５３１は、行番号「００２」に対応する位置に配置される。
【００６７】
ユーザは、行番号「００２」で記述される代入文のラベル「温度取得」を、テキストボックス５３１に入力する。テキストボックス５３１に入力されるラベルは、行番号「００２」で記述される代入文の内容をユーザが理解できるものであればよい。なお、ラベルの入力は任意であり、ユーザは、テキストボックス５３１を空欄のままにしてもよい。以下、ユーザによりラベル入力欄５３に入力されるラベルを「自己のラベル」と呼ぶ。
【００６８】
これにより、行番号「００２」に対応する代入文で用いられる用語及び演算式の入力が完了する。
【００６９】
次に、ユーザは、メニューバー５１から分岐文を選択する操作を行う。生成装置１は、この操作に応じて、行番号欄５２に行番号「００３」を追加する。生成装置１は、ラベルが入力されるテキストボックス５３２をラベル入力欄５３に表示する。テキストボックス５３２は、行番号「００３」に対応する位置に配置される。ユーザは、行番号「００３」に対応する自己のラベルとして、「温度判定」をテキストボックス５３２に入力する。
【００７０】
また、生成装置１は、分岐文で用いられる分岐判定式及び自己のラベルの入力に用いられるテンプレート５４２を文記述欄５４に表示する。テンプレート５４２は、行番号「００３」に対応する位置に配置され、テキストボックス５４２ａ及び５４２ｂを含む。テキストボックス５４２ａは、分岐判定式の入力に用いられる。テキストボックス５４２ｂは、分岐判定式が満たされる場合に実行される命令句を示す自己のラベル（分岐先ラベル）の入力に用いられる。
【００７１】
ユーザは、テキストボックス５４２ａに、「温度測定値≦内部温度」を分岐判定式として入力し、テキストボックス５４２ｂに、「温度記録」を分岐先ラベルとして入力する。入力される分岐判定式は、用語と算術演算等で一般的に用いられる演算子とにより記述される。入力された分岐先ラベル「温度記録」に対応するアルゴリズムは、行番号「００３」に対応する分岐文に関する情報の入力が終了した後に、ユーザにより入力される。
【００７２】
図６に示していないが、ユーザが、メニューバーから関数呼出文を選択した場合、生成装置１は、この操作に応じて、行番号欄５２に新たな行番号を追加する。生成装置１は、代入文及び分岐文が選択された時と同様に、自己のラベルが入力されるテキストボックスをラベル入力欄５３に配置し、呼出対象の関数名を入力するためのテキストボックスを含むテンプレートを文記述欄５４に配置する。ユーザは、テンプレート中のテキストボックスに、入力中のアルゴリズムで使用する関数名（用語）を入力する。なお、アルゴリズムで使用する関数名（用語）と、生成装置１が使用する識別子とは、知識ベース６２において予め対応付けられている。
【００７３】
このように、ユーザは、予め作成したアルゴリズムに従って、アルゴリズムに用いられる代入文、分岐文、及び関数呼出文の入力を繰り返す。
【００７４】
最後に、ユーザは、メニューバー５１から終了文を選択する操作を行うことにより、アルゴリズムの終了を宣言する。生成装置１は、この操作に応じて、行番号欄５２に新たな行番号を追加し、追加された行番号に対応する文記述欄５４に、「終了」と記述する。これにより、アルゴリズムの入力が終了する。
【００７５】
このように、生成装置１は、コンピュータプログラムのアルゴリズムの入力を受け付ける際に、Ｃ言語に用いられる複数の命令のうちアルゴリズムで用いられる命令の選択と、選択された命令に用いられる用語の入力とを受け付ける。これにより、ユーザは、Ｃ言語などのプログラミング言語や、アルゴリズムを記述するための言語を覚えなくても、アルゴリズムを入力することができる。
【００７６】
また、アルゴリズムの入力の際に、演算式や分岐判定式に用いられる演算子は、特定のプログラミング言語により定義された演算子でなく、人間が一般的な演算を行う際に用いられる演算子である。従って、ユーザは、インタフェース５に入力されたアルゴリズムを、直感的に理解できる。
【００７７】
［４．文法データベース２２］
生成装置１は、インタフェースに入力されたアルゴリズムに従って、コンピュータプログラム２４を生成する（ステップＳ３）。このとき、生成装置１は、文法データベース２２が有する代入文木３及び分岐文木４を参照して、Ｃ言語に用いられる命令文を生成する。以下、代入文木３及び分岐文木４の構造について詳しく説明する。
【００７８】
［４．１．代入文木３の構造］
図７は、代入文木３の構造を示す図である。図７を参照して、代入文木３は、Ｃ言語に用いられる代入文の文法に従って形成される木構造であり、ノード３００〜３２２を有する。ノード３００は、図７に示す木構造が代入文木３であることを示す根ノードである。
【００７９】
ノード３０３、３０５、３０９、３１１、３１３、３１５、３１６、３１８、３２０、及び３２２は、葉ノードである。Ｃ言語に用いられる代入文の構成要素は、代入文木３内の葉ノードに格納される。
【００８０】
葉ノードにおいて、ダブルクォーテーションで囲まれた記号（“：”、“＝”、“；”）は、Ｃ言語における命令文において、一定の表現である部分（固定部分）を示す。ダブルクォーテーションで囲まれた記号が記載された葉ノードは、この記号を初期値として格納しており、固定部分は変更されない。
【００８１】
先頭にアンパサンド（＆）が付されている葉ノードは、ユーザにより定義された用語から変換された識別子や、ユーザにより入力された自己のラベルから変換された自ラベルが格納されることを示す。つまり、先頭にアンパサンド（＆）が付されている葉ノードに格納される構成要素は、ユーザにより入力される入力情報により変化する部分（変化部分）である。先頭にアンパサンド（＆）が付されている葉ノードには、ユーザにより入力された用語に対応する識別子が後で格納されるが、この点については、後述する。分岐文木４の構造を示す図（図８参照）における葉ノードの表記も、上記と同様である。
【００８２】
代入文木３において、子孫を有するノード（ノード３０１、３０２など）は、子孫ノードがＣ言語に用いられる代入文のどの構成要素に関連したノードであるかを定義するノードである。従って、子孫ノードを有するノードには、Ｃ言語で用いられる代入文の構成要素は格納されない。分岐文木４でも同様である。
【００８３】
Ｃ言語で用いられる代入文は、以下のように記述される。
【００８４】
自ラベル：単一変数＝演算式；
【００８５】
Ｃ言語で用いられる代入文は、ラベル句（「自ラベル：」の部分）と、代入節（「単一変数＝演算式」の部分）と、セミコロン記号「；」とにより構成される。代入節は、演算式と、単一変数と、演算式の結果を変数に代入することを定義する代入文定義子「＝」とを含む。
【００８６】
代入文木３は、ラベル句を定義する部分木（ラベル句部分木３１）と、代入節を定義する部分木（代入節部分木３２）と、セミコロン記号を定義する部分木（セミコロン部分木３３）とを有する。
【００８７】
ラベル句部分木３１は、ノード３０１〜ノード３０５により構成される。ノード３０１は、ラベル句部分木３１の根であり、ラベル句部分木３１を定義する。
【００８８】
ノード３０２は、Ｃ言語に用いられる自ラベルを定義するノードであり、自ラベルを格納するノード３０３を子ノードとして有する。自ラベルは、ユーザがインタフェース５に入力した自己のラベルから生成される。アルゴリズムの代入文に付された自己のラベルは、対象世界を記述する用語であるため、形式系の記号列に変換される。このため、自己のラベルは、生成装置１により自ラベルに変換された上で、ノード３０３に格納される。
【００８９】
ノード３０４は、ラベル句に含まれるコロン記号を定義するノードである。コロン記号を格納するノード３０５（葉ノード）は、ノード３０４の子である。
【００９０】
代入節部分木３２は、ノード３０６〜３２０により構成される。ノード３０６は、代入節部分木３２の根であり、代入節部分木３２を定義する。代入節部分木３２は、代入節の構成に応じて、変数部分木３ａと、代入文定義部分木３ｂと、演算式部分木３ｃとを有する。
【００９１】
変数部分木３ａは、演算式の結果が入力される単一変数を定義する部分木であり、単一変数を格納する葉ノードを含む。
【００９２】
ノード３０８及び３０９は、単一変数が単純変数である場合に用いられる。ノード３０８は、単純変数を定義するノードである。ノード３０９は、ユーザにより単一変数として定義された用語に対応する識別子を格納する葉ノードである。
【００９３】
ノード３１０〜３１６は、単一変数が添字付変数として記述される場合に用いられる。ノード３１０は、添字付変数を定義するノードである。ノード３１１は、配列名に対応する識別子を格納する葉ノードである。ノード３１２は、配列要素を定義するノードである。ノード３１３は、Ｃ言語において、配列要素の始まりを示す左大括弧記号を格納する葉ノードである。ノード３１６は、Ｃ言語において、配列要素の終わりを示す右大括弧記号を格納する葉ノードである。ノード３１４は、添字変数（配列の要素番号）を定義するノードである。ノード３１５は、インタフェース５において、ユーザが添字変数として指定した用語に対応する識別子を格納する葉ノードである。
【００９４】
代入文定義部分木３ｂは、代入文定義子「＝」を定義する部分木である。ノード３１７は、代入文定義部分木３ｂの根である。ノード３１８は、代入文定義子「＝」を格納する葉ノードである。
【００９５】
演算式部分木３ｃは、Ｃ言語に用いられる代入文における演算式を定義する部分木である。ノード３１９が、演算式部分木３ｃの根である。ノード３２０は、葉ノードであり、アルゴリズムの代入文の右辺（テキストボックス５４１ｂ）に入力された演算式がＣ言語の文法に従って変換された演算式を格納する。演算式の変換の詳細については、後述する。
【００９６】
セミコロン部分木３３は、ノード３２１及び３２２により構成される。ノード３２１は、セミコロン部分木３３の根であり、セミコロン部分木３３を定義する。ノード３２２は、セミコロン記号を格納する。
【００９７】
［４．２．分岐文木４の構造］
図８は、分岐文木４の構造を示す図である。図８を参照して、分岐文木４は、Ｃ言語に用いられる分岐文の文法に従って形成される木構造であり、ノード４００〜４２５を有する。ノード４００は、図８に示す木構造が分岐文であることを示す根ノードである。
【００９８】
ノード４０３、４０５、４０８、４１０、４１２、４１４、４１７、４１９、４２１、４２３、及び４２５は、葉ノードである。Ｃ言語に用いられる分岐文の構成要素は、分岐文木４内の葉ノードに格納される。
【００９９】
Ｃ言語に用いられる分岐文は、以下のように記述される。
【０１００】
自ラベル：ｉｆ（分岐判定式）  ｇｏｔｏ  真ラベル；
【０１０１】
Ｃ言語で用いられる分岐文は、ラベル句（「自ラベル：」の部分）と、ｉｆ句（「ｉｆ（分岐判定式）  ｇｏｔｏ  真ラベル」の部分）と、セミコロン記号「；」とにより構成される。分岐文木４は、この構成に基づいて、ラベル句部分木４１と、ｉｆ句を定義する部分木（ｉｆ句部分木４２）と、セミコロン部分木４３とを有する。
【０１０２】
分岐文木４において、ラベル句部分木４１は、ノード４０１〜４０５を有し、セミコロン部分木４３は、ノード４２４及び４２５を有する。分岐文木４におけるラベル句部分木４１及びセミコロン部分木４３は、代入文木３と同様であるため、その説明を省略する。
【０１０３】
ｉｆ句部分木４２について説明する。ノード４０６は、ｉｆ句部分木４２の根であり、ｉｆ句部分木４２を定義する。ｉｆ句部分木４２は、ｉｆ句の構成に応じて、分岐文定義部分木４ａと、判定式部分木４ｂと、命令句部分木４ｃとを有する。
【０１０４】
分岐文定義部分木４ａは、Ｃ言語に用いられる命令文が分岐文であることを示す分岐文定義子「ｉｆ」を定義する部分木であり、ノード４０７及び４０８を含む。ノード４０７は、分岐文定義部分木４ａの根である。ノード４０８は、分岐文定義子「ｉｆ」を格納する葉ノードである。
【０１０５】
判定式部分木４ｂは、Ｃ言語に用いられる分岐文において分岐条件を示す分岐判定式を定義する部分木であり、ノード４１１及び４１２を含む。ノード４１１は、判定式部分木４ｂの根である。ノード４１２は、葉ノードであり、アルゴリズムの分岐文で入力された分岐判定式をＣ言語の文法に従って変換した分岐判定式を格納する。分岐判定式の変換の詳細については、後述する。
【０１０６】
命令句部分木４ｃは、Ｃ言語に用いられる分岐文において分岐条件が満たされる場合に実行される命令を示す命令句を定義する部分木である。命令句部分木４ｃは、ノード４１５〜４２３を有する。ノード４１５は、命令句部分木４ｃの根である。
【０１０７】
ノード４１６は、Ｃ言語において命令句の開始を示すＧＯＴＯ文定義子を定義する。ノード４１７は、ＧＯＴＯ文定義子「ｇｏｔｏ」を格納する葉ノードである。
【０１０８】
ノード４１８は、ＧＯＴＯ文定義子の後に付加される空白記号を定義する。ノード４１９は、空白記号を格納する葉ノードである。
【０１０９】
ノード４２０は、分岐条件が満たされる場合に実行される命令のラベル（真ラベル）を定義する。ノード４２１は、真ラベルを格納する。真ラベルは、例えば、図６に示すインタフェース５において、テキストボックス５４２ｂに入力される分岐先ラベルから変換された自ラベルである。
【０１１０】
ノード４２２は、真ラベルの後に付加される空白記号を定義する。ノード４２３は、空白記号を格納する葉ノードである。
【０１１１】
このように、代入文木３及び分岐文木４は、Ｃ言語の文法に従った木構造を有する。後述するように、代入文木３を、Ｃ言語に用いられる代入文の記述順序に従って巡航することにより、Ｃ言語に用いられる代入文が生成される。Ｃ言語に用いられる分岐文も同様に生成される。
【０１１２】
［５．プログラム生成処理（ステップＳ３）］
ユーザは、アルゴリズムの入力が終了した後に、コンピュータプログラム２４の作成を指示する操作を行う。生成装置１は、この操作に応じて、インタフェース５に入力されたアルゴリズムに従って、Ｃ言語により記述されるコンピュータプログラム２４を生成する（ステップＳ３）。
【０１１３】
最初に、生成装置１は、ラベル入力欄５３に入力された自己のラベルを、Ｃ言語で利用可能な文字列に変換して、ラベル用のテーブルを生成する。
【０１１４】
ラベル入力欄５３に設けられたテキストボックス５３１、５３２の各々には、自己のラベルとして「温度取得」、「温度判定」が入力される。日本語をＣ言語のラベルとしてそのまま使用することができないため、生成装置１は、ラベル入力欄５３に入力された自己のラベルを、Ｃ言語で利用可能な文字列に変換して自ラベルを生成する。
【０１１５】
自己のラベル「温度取得」は、自ラベル「Ｌ００１」に変換され、自己のラベル「温度判定」は、自ラベル「Ｌ００２」に変換される。自己のラベル及び自ラベルは、図９に示すラベル用のテーブルにおいて対応付けられる。ラベル用のテーブルは、知識ベース６２に登録されている。また、図６のインタフェース５に示されていない自己のラベル「温度記録」は、自ラベル「Ｌ０１５」に対応付けられる。
【０１１６】
図１０は、図３に示すコンピュータプログラム生成処理（ステップＳ３）のフローチャートである。図３に示すコンピュータプログラム生成処理（ステップＳ３）は、インタフェース５に入力されたアルゴリズムの行番号ごとに実行される。例えば、行番号「００２」の代入文に対応して、Ｃ言語に用いられる代入文が生成される。その次に、行番号「００３」の分岐文に対応して、Ｃ言語に用いられる分岐文が生成される。
【０１１７】
以下、行番号「００２」におけるアルゴリズムの代入文に対応するＣ言語用の代入文を生成する場合を例にして、コンピュータプログラム生成処理（ステップＳ３）を説明する。
【０１１８】
図１０を参照して、行番号「００２」に対応する文名称欄５５の表示が「式と代入」であるため、生成装置１は、Ｃ言語の命令文の生成に用いる木として、代入文木３を文法データベース２２から選択する（ステップＳ３１）。
【０１１９】
生成装置１は、ステップＳ３２〜Ｓ３６の処理により、行番号「００２」で記述されたアルゴリズムの代入文の構成要素を、Ｃ言語の文法に適合するように変換する。具体的には、テキストボックス５４１ａに入力された用語（単一変数）と、テキストボックス５４１ｂに入力された演算式が、変換される。以下、詳しく説明する。
【０１２０】
生成装置１は、行番号「００２」に対応するアルゴリズムの代入文の構成要素を取得する（ステップＳ３２）。具体的には、生成装置１は、テキストボックス５４１ａ及び５４１ｂに入力された用語及び演算式を構成要素として取得する。
【０１２１】
生成装置１は、取得した構成要素の中から、テキストボックス５４１ａに入力された用語「温度測定値」を選択する（ステップＳ３３）。生成装置１は、用語データベース２３を検索して、取得された用語「温度測定値」に対応する識別子「Ｖ００１」を特定する。生成装置１は、取得された用語「温度測定値」を、特定された識別子「Ｖ００１」に変換する（ステップＳ３４）。
【０１２２】
ステップＳ３３において選択された用語「温度測定値」は、演算子及び配列記号を含まない。このため、生成装置１は、ステップＳ３５及びＳ３６を実行せず、ステップＳ３７に進む。ステップＳ３５及びＳ３６については、後述する。
【０１２３】
生成装置１は、ステップＳ３４において変換された識別子「Ｖ００１」を、ステップＳ３１において選択された代入文木３の葉ノードに格納する（ステップＳ３７）。識別子「Ｖ００１」は、テンプレート５４１において単一変数として入力された用語「温度測定値」に対応する。図４を参照して、識別子Ｖ００１は、配列次元数が０であるため、単純変数である。このため、生成装置１は、識別子「Ｖ００１」を、変数部分木３ａ内のノード３０９に格納する。これにより、識別子「Ｖ００１」は、Ｃ言語に用いられる代入文の構成要素として使用可能となる。
【０１２４】
生成装置１は、行番号「００２」に対応するアルゴリズムの代入文の構成要素を全て選択していないため（ステップＳ３８においてＮｏ）、ステップＳ３３に戻る。
【０１２５】
生成装置１は、行番号「００２」に対応するアルゴリズムの代入文の構成要素として、テキストボックス５４１ｂに入力された演算式「センサ出力値×補正係数＋オフセット(添字Ａ)」を選択する（ステップＳ３３）。
【０１２６】
生成装置１は、取得した演算式に含まれる用語を、用語データベース２３を参照して識別子に変換する（ステップＳ３４）。具体的には、生成装置１は、取得した演算式を、乗算記号（×）、加算記号（＋）などの演算子や、配列の要素番号の定義に用いられる小括弧を用いて区分する。これにより、取得した演算式から、用語「センサ出力値」、「補正係数」、「オフセット」、「添字Ａ」が抽出される。生成装置１は、用語データベース２３を参照して、用語「センサ出力値」を識別子「Ｖ００２」に変換する。同様に、用語「補正係数」は、識別子「Ｖ００３」に変換される。用語「オフセット」は、識別子「Ｖ００４」に変換される。用語「添字Ａ」は、識別子「Ｖ００５」に変換される。
【０１２７】
次に、生成装置１は、取得した演算式に含まれる演算子を、Ｃ言語の文法に適合する演算子に変換する（ステップＳ３５）。生成装置１は、アルゴリズムの入力に用いられる演算子と、Ｃ言語に用いられる演算子とを対応付けた演算子用のテーブルを有しており、このテーブルを用いて演算子を変換する。演算子用のテーブルは、知識ベース６２に登録される。テキストボックス５４１ｂに入力された演算式で用いられる乗算記号「×」は、Ｃ言語で用いられる乗算記号「＊」に変換される。テキストボックス５４１ｂに入力された演算式で用いられる乗算記号「＋」は、Ｃ言語で用いられる乗算記号「＋」に変換される。
【０１２８】
生成装置１は、演算式に含まれる配列記号を、Ｃ言語に用いられる配列記号に変換する（ステップＳ３６）。テキストボックス５４１ｂに入力された演算式において、「オフセット（添字Ａ）」は、配列を示す。この配列において、小括弧は、要素番号を定義するために用いられる。生成装置１は、小括弧を、Ｃ言語において配列の要素番号を定義するために用いられる大括弧に変換する。生成装置１は、演算子用のテーブルにおいて、アルゴリズムで配列の要素番号の定義に用いられる記号（小括弧）を、Ｃ言語で配列の要素番号の定義に用いられる記号（大括弧）に対応付けておけばよい。
【０１２９】
テキストボックス５４１ｂに入力された演算式「センサ出力値×補正係数＋オフセット(添字Ａ)」は、ステップＳ３４〜Ｓ３６が実行された結果、Ｃ言語で利用可能な下記の演算式（１）に変換される。
【０１３０】
Ｖ００２＊Ｖ００３＋Ｖ００４［Ｖ００５］  ・・・（１）
【０１３１】
演算式（１）は、自然言語（日本語）に基づく用語を含んでいないため、Ｃ言語に用いられる代入文の演算式として利用可能である。
【０１３２】
生成装置１は、ステップＳ３４〜Ｓ３６により変換された演算式（１）を、代入文木３の葉ノードに格納する（ステップＳ３７）。演算式（１）は、テキストボックス５４１ｂに入力された演算式から生成されたものである。このため、演算式（１）は、代入文木３における演算式部分木３ｃのノード３２０（葉ノード）に格納される。
【０１３３】
生成装置１は、行番号「００２」に対応するアルゴリズムの代入文の構成要素を全て選択したため、（ステップＳ３８においてＹｅｓ）、ステップＳ３９に進む。
【０１３４】
ステップＳ３９において、生成装置１は、ラベル用のテーブル（図９参照）に基づいて、テキストボックス５３１に入力された自己のラベル「温度取得」に対応する自ラベル「Ｌ００１」を取得する。生成装置１は、取得した自ラベル「Ｌ００１」を、代入文木３におけるラベル句部分木のノード３０３（葉ノード）に格納する（ステップＳ３９）。
【０１３５】
以上の処理により、代入文木３には、Ｃ言語に用いられる代入文の全ての構成要素が格納される。生成装置１は、代入文木３を所定の順序で巡航することにより、Ｃ言語に用いられる代入文を生成する（ステップＳ４０）。
【０１３６】
以下、上記の処理によって構成要素が格納された代入文木３を用いて、Ｃ言語に用いられる代入文を生成する場合を例にして、命令文生成処理（ステップＳ４０）を説明する。
【０１３７】
命令文生成処理（ステップＳ４０）において、生成装置１は、代入文木３の各ノードを行きがけ順で巡航して葉ノードに格納された構成要素を取得する。そして、生成装置１は、取得した構成要素を、取得した順に配列することにより、Ｃ言語に用いられる代入文を生成する。
【０１３８】
図１１は、命令文生成処理（ステップＳ４０）のフローチャートである。以下、図７及び図１１を参照して、Ｃ言語に用いられる代入文の生成について説明する。図７に示す代入文木３のノード３０３、３０９、３２０は、それぞれ例として示す文字列が格納されている。
【０１３９】
生成装置１は、初期設定として、代入文木３の根であるノード３００を現在位置に設定する（ステップＳ４０１）。巡航の順序が行きがけ順であるため、代入文木３において、ラベル句部分木３１、代入節部分木３２、セミコロン部分木３３の順に巡航が行われる。
【０１４０】
生成装置１は、現在位置を、ノード３００の子ノードへ移動する（ステップＳ４０２）。ステップＳ４０２において、現在位置は、現在位置に設定されたことがない子ノードのうち、最も左側に位置する子ノードに移動する。この時点では、ノード３００の全子ノード（ノード３０１、３０６、及び３２１）が現在位置に設定されたことはないため、現在位置は、一番左側に位置するノード３０１へ移動する。これにより、ラベル句部分木３１の巡航が開始される。
【０１４１】
生成装置１は、現在位置（ノード３０１）が葉ノードであるか否かを判断する（ステップＳ４０３）。ノード３０１が葉ノードではないため（ステップＳ４０３においてＮｏ）、生成装置１は、ステップＳ４０２を再び実行して、現在位置をノード３０２へ移動する。ノード３０２が葉ノードではないため（ステップＳ４０３においてＮｏ）、生成装置１は、ノード３０２の子であるノード３０３へ移動する（ステップＳ４０２）。
【０１４２】
ノード３０３が葉ノードであるため（ステップＳ４０３においてＹｅｓ）、生成装置１は、ノード３０３に格納された構成要素（自ラベル「Ｌ００１」）を取得する（ステップＳ４０４）。
【０１４３】
生成装置１は、ノード３０３の親であるノード３０２に戻り（ステップＳ４０５）、ノード３０３の弟ノードが存在するか否かを判断する（ステップＳ４０６）。弟ノードが存在しないため（ステップＳ４０６においてＮｏ）、生成装置１は、現在位置が代入文木３の根（ノード３００）であるか否かを判断する（ステップＳ４０８）。現在位置がノード３０２であるため（ステップＳ４０８においてＮｏ）、生成装置１は、ステップＳ４０５に戻り、現在位置を、ノード３０２からノード３０２の親であるノード３０１に移動する（ステップＳ４０５）。
【０１４４】
生成装置１は、巡航済みのノード３０２の弟ノード（ノード３０４）が存在するため（ステップＳ４０６においてＹｅｓ）、現在位置をノード３０４に移動する（ステップＳ４０７）。生成装置１は、さらに、現在位置をノード３０４の子ノード（ノード３０５）に移動する（ステップＳ４０２）。現在位置のノード３０５が葉ノードであるため（ステップＳ４０３においてＹｅｓ）、生成装置１は、ノード３０５に格納された構成要素（コロン記号「：」）を取得する（ステップＳ４０４）。その後、生成装置１は、ステップＳ４０５、Ｓ４０６、及びＳ４０８を繰り返して、現在位置をノード３００に移動する（ステップＳ４０５）。これにより、ラベル句部分木３１の巡航が終了する。
【０１４５】
次に、生成装置１は、代入節部分木３２を巡航する。ノード３０１の弟ノード（ノード３０６）が存在するため（ステップＳ４０６においてＹｅｓ）、生成装置１は、現在位置をノード３００からノード３０６に移動する（ステップＳ４０７）。これにより、代入節部分木３２の巡航が開始される。生成装置１は、変数部分木３ａ、代入文定義部分木３ｂ、演算式部分木３ｃの順に巡航する。
【０１４６】
変数部分木３ａの巡航について説明する。生成装置１は、ラベル句部分木３１の巡航と同様に、ステップＳ４０２及びＳ４０３を繰り返して、現在位置をノード３０９まで移動する。ノード３０９が葉ノードであるため（ステップＳ４０３においてＹｅｓ）、生成装置１は、ノード３０９に格納された構成要素（識別子「Ｖ００１」）を取得する（ステップＳ４０４）。
【０１４７】
その後、生成装置１は、ステップＳ４０５、Ｓ４０６、及びＳ４０８を実行して、現在位置をノード３０７に移動する。しかし、生成装置１は、ノード３１０及びノード３１０の子孫ノードの巡航を行わない。上述のように、生成装置１は、代入文の単一変数として、既に識別子「Ｖ００１」を取得しているため、添字付変数を使用しないためである。生成装置１は、ノード３０９に構成要素が格納されていなかった場合に、ノード３１０及びノード３１０の子孫ノードを巡航して、添字付変数の構成要素を取得する。この場合、生成装置１は、ノード３１１、３１３、３１５、３１６の順で、構成要素を取得する。
【０１４８】
生成装置１は、現在位置を、ノード３０７の親ノード（ノード３０６）に移動する（ステップＳ４０５）。これにより、変数部分木３ａの巡航が終了する。
【０１４９】
次に、生成装置１は、代入文定義部分木３ｂを上記と同様に巡航して、ノード３１８（葉ノード）から、代入文定義子「＝」を取得する（ステップＳ４０４）。生成装置１は、演算式部分木３ｃを上記と同様に巡航して、ノード３２０（葉ノード）から、演算式（１）を取得する（ステップＳ４０４）。その後、生成装置１は、ノード３００に戻る。これにより、代入節部分木３２の巡航が終了する。
【０１５０】
次に、生成装置１は、セミコロン部分木３３を巡航する。ノード３０６の弟ノード（ノード３２１）が存在するため（ステップＳ４０６においてＹｅｓ）、生成装置１は、現在位置をノード３２１に移動する（ステップＳ４０７）。これにより、生成装置１は、セミコロン部分木を巡航して、ノード３２２（葉ノード）からセミコロン記号「；」を取得する（ステップＳ４０４）。その後、生成装置１は、ステップＳ４０５、Ｓ４０６、及びＳ４０８を実行して、現在位置をノード３００に移動する（ステップＳ４０５）。
【０１５１】
ノード３２１の弟ノードが存在しないため（ステップＳ４０６においてＮｏ）、生成装置１は、現在位置が代入文木３の根（ノード３００）であるか否かを判断する。現在位置がノード３００であるため（ステップＳ４０８においてＹｅｓ）、生成装置１は、取得した構成要素を取得した順に配列する（ステップＳ４０９）。これにより、Ｃ言語で用いられる代入文が生成される。
【０１５２】
代入文木３の巡航により取得された構成要素は、取得した順に、「Ｌ００１」、「：」、「Ｖ００１」、「＝」、「Ｖ００２＊Ｖ００３＋Ｖ００４［Ｖ００５］」、「；」である。これの構成要素を取得した順に配列することにより生成されるＣ言語用の代入文（２）を、以下に示す。
【０１５３】
Ｌ００１：Ｖ００１＝Ｖ００２＊Ｖ００３＋Ｖ００４［Ｖ００５］； 
・・・（２）
【０１５４】
上記のＣ言語に用いられる代入文（２）は、行番号「００２」に対応するアルゴリズムの代入文と同じ処理を示している。このように、生成装置１は、アルゴリズムの代入文と１対１に対応するＣ言語の代入文を生成することができる。
【０１５５】
［６．Ｃ言語に用いられる分岐文の生成］
生成装置１は、行番号「００２」に対応するアルゴリズムの代入文に従って、Ｃ言語に用いられる代入文を生成した後に、行番号「００３」に対応するアルゴリズムの分岐文に従って、Ｃ言語に用いられる分岐文を生成する。
【０１５６】
以下、Ｃ言語に用いられる分岐文の生成について説明する。なお、Ｃ言語に用いられる代入文の生成と重複する点については、その説明を省略する。
【０１５７】
［６．１．分岐文木４の葉ノードへの格納］
図６及び図１０を参照して、生成装置１は、行番号「００３」に対応するアルゴリズムの命令が、文名称欄５５に記述されているように「分岐」であるため、分岐文木４を選択する（ステップＳ３１）。
【０１５８】
生成装置１は、行番号「００３」に対応するアルゴリズムの分岐文の構成要素として、テキストボックス５４２ａに入力された分岐判定式「温度測定値≦内部温度」と、テキストボックス５４２ｂに入力された分岐先ラベル「温度記録」を取得する（ステップＳ３２）。
【０１５９】
生成装置１は、ステップＳ３２で取得した構成要素の中から、分岐判定式「温度測定値≦内部温度」を選択する（ステップＳ３３）。ステップＳ３４において、生成装置１は、用語データベース２３を検索して、取得された分岐判定式に含まれる用語「温度測定値」を識別子「Ｖ００１」に変換する。同様に、生成装置１は、取得された分岐判定式に含まれる用語「内部温度」を識別子「Ｖ００７」に変換する。生成装置１は、演算子用のテーブルを参照して、分岐判定式に含まれる演算子「≦」を、Ｃ言語に用いられる演算子「＜＝」に変換する（ステップＳ３５）。取得された分岐判定式が配列を含まないため、ステップＳ３６は、実行されない。ステップＳ３４及びＳ３５が実行されることにより、ステップＳ３３で選択された分岐判定式「温度測定値≦内部温度」は、下記の分岐判定式（３）に変換される。
【０１６０】
Ｖ００１＜＝Ｖ００７      ・・・（３）
【０１６１】
分岐判定式（３）は、Ｃ言語に用いられる分岐文の構成要素として、分岐文木４のノード４１２（図８参照）に格納される（ステップＳ３７）。
【０１６２】
次に、生成装置１は、番号「００３」に対応するアルゴリズムの分岐文の構成要素として、テキストボックス５４２ａに入力された分岐先ラベル「温度記録」を選択する（ステップＳ３３）。分岐先ラベル「温度記録」は、用語データベース２３に登録されていない。この場合、生成装置１は、図９に示すラベル用のテーブルを参照して、ラベル「温度記録」に対応する自ラベル「Ｌ０１５」を特定し、特定した自ラベルを、分岐文木４のノード４２１（図８参照）に格納する（ステップＳ３７）。
【０１６３】
そして、生成装置１は、行番号「００３」における自己のラベル「温度判定」に対応する自ラベル「Ｌ００２」を、ラベル用のテーブルから取得して、分岐文木４にノード４０３（葉ノード）に格納する（ステップＳ３９）。生成装置１は、構成要素の格納が終了した分岐文木４を巡航して、Ｃ言語に用いられる分岐文を生成する（ステップＳ４０）。
【０１６４】
［６．２．分岐文木４の巡航（ステップＳ４０）］
生成装置１は、代入文木３の巡航と同様に、分岐文木４を行きがけ順で巡航する（図１１参照）。これにより、生成装置１は、Ｃ言語に用いられる分岐文の構成要素を、分岐文木４の葉ノードから取得する。生成装置１が分岐文木４の葉ノードを巡航する順序は、ノード４０３、４０５、４０８、４１０、４１２、４１４、４１７、４１９、４２１、４２３、４２５の順である。生成装置１は、巡航した順序に従って、取得した構成要素を配列することにより、下記に示すＣ言語用の分岐文（４）を生成する。
【０１６５】
Ｌ００２：ｉｆ（Ｖ００１＜＝Ｖ００７）  ｇｏｔｏ  Ｌ０１５  ；
・・・（４）
【０１６６】
上記のＣ言語に用いられる分岐文（４）は、行番号「００３」に対応するアルゴリズムの分岐文と同じ処理を示している。このように、生成装置１は、アルゴリズムの分岐文と１対１に対応するＣ言語用の分岐文を生成することができる。
【０１６７】
以下、生成装置１は、インタフェース５に入力された行番号の順に、アルゴリズムの命令文に１対１に対応するＣ言語用の命令文を生成する。生成装置１は、Ｃ言語用の命令文を生成した順序で記述することにより、コンピュータプログラム２４を生成する。
【０１６８】
このようにして生成されたコンピュータプログラム２４のアルゴリズムは、インタフェース５に入力されたアルゴリズムと同じである。従って、生成されたコンピュータプログラム２４をコンピュータに実行させた場合、コンピュータは、ユーザの意図に反する処理を実行することがない。つまり、生成されたコンピュータプログラムを修正しなくてもよいため、開発効率を向上させることができる。
【０１６９】
また、生成装置１により生成されるＣ言語用の命令文は、Ｃ言語の文法に従って構成された代入文木３又は分岐文木４を行きがけ順で巡航することにより生成されるため、Ｃ言語の文法エラーが発生することがない。従って、コンピュータプログラムの開発効率を向上させることができる。
【０１７０】
なお、上記実施の形態の代入文木３及び分岐文木４において、Ｃ言語に用いられる命令文（代入文及び分岐文）の構成要素が葉ノードに格納される例を説明したが、これに限られない。命令文の構成要素は、子ノードを有するノード（中間ノード）に格納されていてもよい。すなわち、文法データベース２２は、Ｃ言語に用いられる命令文の構成要素を格納するノードを含む木構造を有していればよい。
【０１７１】
また、上記実施の形態において、行番号「００２」で記述されたアルゴリズムの代入文中の演算式を変換した演算式（１）を、ノード３２０（葉ノード）に格納する処理を説明した。しかし、生成装置１は、演算式（１）の構成要素の各々を、式を構成するノードに格納してもよい。
【０１７２】
図１２は、図７に示す演算式部分木３ｃの変形例を示す図である。図１２を参照して、演算式部分木３ｃは、演算式（１）の構成要素を格納するノード３５１〜３５８を含む。ノード３５１〜３５８は、演算式（１）の木構造（部分木３５）を構成する。部分木３５の根であるノード３５１は、ノード３１９の子であり、加算を示す演算子「＋」を格納する。ノード３５１は、ノード３５２及び３５５を子ノードとして有する。
【０１７３】
ノード３５２は、乗算を示す演算子「＊」を格納し、ノード３５３及び３５４を子ノードとして有する。ノード３５３は、識別子「Ｖ００２」を格納し、ノード３５４は、識別子「Ｖ００３」を格納する。
【０１７４】
ノード３５５は、ノード３５６〜３５８を子ノードとして有する。ノード３５５〜３５８は、演算式（１）の構成要素のうち、添字付変数（配列）の構成要素を格納する。ノード３５５は、配列名を示す識別子「Ｖ００４」を格納する。ノード３５６は、Ｃ言語において配列の要素番号を定義するために用いられる左大括弧記号を格納する。ノード３５８は、右大括弧記号を格納する。ノード３５７は、配列の要素番号を示す識別子「Ｖ００５」を格納する。
【０１７５】
このように、演算式（１）の構成要素を、演算式部分木３ｃの葉ノード、あるいは、中間ノードに格納してもよい。分岐判定式（３）も、演算式（１）と同様に、ノード４１２（図８参照）に格納されなくてもよい。この場合、判定式部分木４ｂは、分岐判定式（３）の構成要素を格納するノード（葉ノード及び中間ノード）を含んでいればよい。
【０１７６】
なお、上記実施の形態では、所定のプログラミング言語としてＣ言語を例にして説明したが、これに限られない。所定のプログラミング言語は、ＦＯＲＴＲＡＮ、ＢＡＳＩＣなどの高水準言語であってもよい。所定のプログラミング言語としてＦＯＲＴＲＡＮが用いられる場合、代入文木３及び分岐文木４は、ＦＯＲＴＲＡＮの文法に従って構成される。
【０１７７】
あるいは、所定のプログラミング言語は、アセンブリ言語などの低水準言語であってもよいし、機械語であってもよい。アセンブリ言語を用いる場合、代入文木３及び分岐文木４は、アセンブリ言語の文法に従って構成される。機械語を用いる場合も同様である。
【０１７８】
また、上記実施の形態において、アルゴリズムの代入文の演算式を入力する際に、１次元配列「オフセット（添字Ａ）」を入力する場合を説明した（図６参照）。しかし、ユーザは、代入文の演算式、分岐文の分岐判定式、あるいは、変数を入力する際に、２次元以上の配列を用いてもよい。
【０１７９】
生成装置１がＣ言語に用いられる２次元以上の配列を生成する場合、配列の要素番号を示す記号列は、以下のようにして生成される。例えば、テキストボックス５４１ｂ（図６参照）に入力される「オフセット（添字Ａ）」に代えて、ユーザは、「オフセット（添字Ａ，添字Ｂ）」と入力する。この場合、生成装置１は、図１０に示す配列記号変換処理（ステップＳ３６）において、カンマを基準に小括弧内の文字列を区分して、２つの用語（添字Ａ、添字Ｂ）を取得する。生成装置１は、取得した２つの用語から変換された２つの識別子を、大括弧でそれぞれ括る。これにより、配列の要素番号を示す記号列が生成される。
【０１８０】
また、生成装置１がＦＯＲＴＲＡＮに用いられる配列を生成する場合、変換された２つの識別子をカンマで区切ることにより、配列の要素番号を示す記号列を生成すればよい。
【０１８１】
このように、配列の表現形式に関するプログラミング言語ごとの定義は、配列要素番号を定義する文法によって定められる。この文法は、文法データベース２２に予め登録される。
【０１８２】
また、生成装置１は、上述のプログラム生成処理を用いて、生成プログラム２１を生成してもよい。
【０１８３】
以上、本発明の実施の形態を説明したが、上述した実施の形態は本発明を実施するための例示に過ぎない。よって、本発明は上述した実施の形態に限定されることなく、その趣旨を逸脱しない範囲内で上述した実施の形態を適宜変形して実施することが可能である。
【符号の説明】
【０１８４】
１  コンピュータプログラム生成装置
３  代入文木
４  分岐文木
５  インタフェース
１１  ＣＰＵ
１２  ＲＡＭ
１３  操作部
１４  モニタ
１５  ＨＤＤ
２１  コンピュータプログラム生成プログラム
２２  文法データベース
２３  用語データベース
【図１】
0005844347.tif 000002
【図２】
0005844347.tif 000003
【図３】
0005844347.tif 000004
【図４】
0005844347.tif 000005
【図５】
0005844347.tif 000006
【図６】
0005844347.tif 000007
【図７】
0005844347.tif 000008
【図８】
0005844347.tif 000009
【図９】
0005844347.tif 000010
【図１０】
0005844347.tif 000011
【図１１】
0005844347.tif 000012
【図１２】
0005844347.tif 000013