(57)【特許請求の範囲】
【請求項１】
テンプレートを使用してソースコードを自動生成するプログラム生成支援装置であって、
上位のテンプレートで表される内部記述の少なくとも一部を、上記ソースコードの仕様情報中から抽出されたパラメータ間で共通の下位のテンプレートにより表すように多重化されたテンプレートを記憶するテンプレート記憶手段と、
上記パラメータ間で共通の下位のテンプレートに対し、上記各パラメータを入力して、上記パラメータ夫々に対応するインスタンスを生成してインスタンス化するとともに、生成した下位のインスタンスを上位のテンプレートに入力して更にインスタンス化することにより目的とするソースコードを生成するインスタンス化手段とを備えたことを特徴とするプログラム生成支援装置。
【請求項２】
上記インスタンス化手段は、最も下位のテンプレートをインスタンス化する際には、上記ソースコードの仕様情報中から抽出された関数の名前及び関数の型の組を少なくとも含んだパラメータを入力してインスタンス化を行うことを特徴とする請求項１に記載のプログラム生成支援装置。
【請求項３】
上記テンプレート記憶手段に記憶されるテンプレートは、１つのテンプレートファイル中に１つ以上のテンプレートを含むことを特徴とする請求項１または２に記載のプログラム生成支援装置。
【請求項４】
上記インスタンス化手段は、インスタンスを生成する際に、上記テンプレートに記載されている文字種に対応したインスタンス化をすることを特徴とする請求項１に記載のプログラム生成支援装置。
【請求項５】
テンプレートを使用してソースコードを自動生成するプログラム生成方法であって、
上位のテンプレートで表される内部記述の少なくとも一部を、上記ソースコードの仕様情報中から抽出されたパラメータ間で共通の下位のテンプレートにより表すようにテンプレートを多重化し、上記パラメータ間で共通の下位のテンプレートに対し、上記各パラメータを入力して、上記パラメータ夫々に対応するインスタンスを生成してインスタンス化するとともに、生成した下位のインスタンスを上位のテンプレートに入力して更にインスタンス化することにより目的とするソースコードを生成するようにしたことを特徴とするプログラム生成方法。
【請求項６】
最も下位のテンプレートをインスタンス化する際には、上記ソースコードの仕様情報中から抽出された関数の名前及び関数の型の組を少なくとも含んだパラメータを入力してインスタンス化を行うことを特徴とする請求項５に記載のプログラム生成方法。
【請求項７】
１つのテンプレートファイル内に含まれる１つ以上のテンプレートの中から、上位のテンプレートにより指定されるテンプレートを選択的に用いてインスタンス化を行うようにしたことを特徴とする請求項５または６に記載のプログラム生成方法。
【請求項８】
上記テンプレートからインスタンス生成する際に、上記テンプレートに記載されている文字種に対応したインスタンス化をすることを特徴とする請求項５に記載のプログラム生成方法。
【請求項９】
上位のテンプレートで表される内部記述の少なくとも一部を、ソースコードの仕様情報中から抽出されたパラメータ間で共通の下位のテンプレートにより表すように多重化されたテンプレートを記憶するテンプレート記憶手段と、
上記パラメータ間で共通の下位のテンプレートに対し、上記各パラメータを入力して、上記パラメータ夫々に対応するインスタンスを生成してインスタンス化するとともに、生成した下位のインスタンスを上位のテンプレートに入力して更にインスタンス化することにより目的とするソースコードを生成するインスタンス化手段としてコンピュータを機能させるためのプログラム。
【請求項１０】
上位のテンプレートで表される内部記述の少なくとも一部を、ソースコードの仕様情報中から抽出されたパラメータ間で共通の下位のテンプレートにより表すように多重化されたテンプレートを用いて、上記パラメータ間で共通の下位のテンプレートに対し、上記各パラメータを入力して、上記パラメータ夫々に対応するインスタンスを生成してインスタンス化するとともに、生成した下位のインスタンスを上位のテンプレートに入力して更にインスタンス化することにより目的とするソースコードを生成する処理手順をコンピュータに実行させるためのプログラム。
【請求項１１】
上記テンプレートからインスタンス生成する際に、上記テンプレートに記載されている文字種に対応したインスタンス化をすることを特徴とする請求項９または１０に記載のプログラム。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明はプログラム生成支援装置、プログラム生成方法、更にはこれらをソフトウェアの機能で実現するためのプログラムに関するものである。
【０００２】
【従来の技術】
従来、コンピュータプログラムの生成を支援する装置として、ソースコードジェネレータなどが用いられている。ソースコードジェネレータは、プロセス間通信のインタフェース部分や、所定の規則に従って動作する部分など、定型的な部分のプログラムを生成する際に利用して好適なものである。このソースコードジェネレータは、例えば、ソースコードのテンプレートをあらかじめ準備しておき、これにプログラムの仕様情報等を入力することによって所望のソースコードを自動的に生成できるようにしたものである。
【０００３】
図９（ａ）、（ｂ）は、従来のソースコードジェネレータの動作を説明するための図である。図９（ａ）はあるテンプレートファイルを示し、図９（ｂ）はそのテンプレートファイルを用いて生成されるソースコードを示している。ここでは、一例として、オブジェクト指向のクラスに関するテンプレートを用いて、関数の宣言を行うソースコードを生成する場合について示している。
【０００４】
図９（ａ）のようなテンプレートを用いて図９（ｂ）のようなソースコードを生成する場合、生成するソースコード中に
void get＿data();
void set＿data();
void change＿data();
の３行を記載することが分かっているので、テンプレート中の$functions$の部分からこの３行を自動生成するためのプログラムをテンプレートとは別に準備する。そして、この準備したプログラムと図９（ａ）のようなテンプレートとを使用して、図９（ｂ）のソースコードを生成する。
【０００５】
【発明が解決しようとする課題】
従来のソースコードジェネレータでは、テンプレートをファイルとして幾つか用意しておき、使用するテンプレートを変更することで、異なるソースコードを生成することが可能であった。しかしながら、上記従来のソースコードジェネレータは、テンプレートを展開して所望のソースコードを生成するためのプログラム（生成エンジン）をテンプレートとは別に準備する必要があった。そのため、テンプレートの定型部分やパラメータの有無／位置を変更することは可能であっても、生成エンジンのプログラムを書き換えない限り、パラメータの展開内容までは変更することができなかった。
【０００６】
ところが、プログラム開発においては、あるソースコードと非常に似た別のソースコードを生成したり、少しずつソースコードを追加したりすることなどがしばしば発生する。この場合に、従来は同じテンプレートを使用するにもかかわらず、その度にそのソースコードを生成するための生成エンジンのプログラムを用意する必要があり、多大の労力を要するという問題があった。
【０００７】
本発明は、このような問題を解決するために成されたものであり、パラメータの展開内容を容易に変更できるようにし、より柔軟にソースコードの自動生成を行うことができるようにすることを目的とする。
【０００８】
【課題を解決するための手段】
本発明のプログラム生成支援装置は、テンプレートを使用してソースコードを自動生成するプログラム生成支援装置であって、上位のテンプレートで表される内部記述の少なくとも一部を、上記ソースコードの仕様情報中から抽出されたパラメータ間で共通の下位のテンプレートにより表すように多重化されたテンプレートを記憶するテンプレート記憶手段と、上記パラメータ間で共通の下位のテンプレートに対し、上記各パラメータを入力して、上記パラメータ夫々に対応するインスタンスを生成してインスタンス化するとともに、生成した下位のインスタンスを上位のテンプレートに入力して更にインスタンス化することにより目的とするソースコードを生成するインスタンス化手段とを備えたことを特徴とする。
【０００９】
本発明のプログラム生成支援装置の他の態様では、上記インスタンス化手段は、最も下位のテンプレートをインスタンス化する際には、上記ソースコードの仕様情報中から抽出された関数の名前及び関数の型の組を少なくとも含んだパラメータを入力してインスタンス化を行うことを特徴とする。
本発明のプログラム生成支援装置のその他の態様では、上記テンプレート記憶手段に記憶されるテンプレートは、１つのテンプレートファイル中に１つ以上のテンプレートを含むことを特徴とする。
本発明のプログラム生成支援装置のその他の態様では、上記インスタンス化手段は、インスタンスを生成する際に、上記テンプレートに記載されている文字種に対応したインスタンス化をすることを特徴とする。
【００１０】
また、本発明のプログラム生成方法は、テンプレートを使用してソースコードを自動生成するプログラム生成方法であって、上位のテンプレートで表される内部記述の少なくとも一部を、上記ソースコードの仕様情報中から抽出されたパラメータ間で共通の下位のテンプレートにより表すようにテンプレートを多重化し、上記パラメータ間で共通の下位のテンプレートに対し、上記各パラメータを入力して、上記パラメータ夫々に対応するインスタンスを生成してインスタンス化するとともに、生成した下位のインスタンスを上位のテンプレートに入力して更にインスタンス化することにより目的とするソースコードを生成するようにしたことを特徴とする。
【００１１】
本発明のプログラム生成方法の他の態様では、最も下位のテンプレートをインスタンス化する際には、上記ソースコードの仕様情報中から抽出された関数の名前及び関数の型の組を少なくとも含んだパラメータを入力してインスタンス化を行うことを特徴とする。
本発明のプログラム生成方法のその他の態様では、１つのテンプレートファイル内に含まれる１つ以上のテンプレートの中から、上位のテンプレートにより指定されるテンプレートを選択的に用いてインスタンス化を行うようにしたことを特徴とする。
本発明のプログラム生成方法のその他の態様では、上記テンプレートからインスタンス生成する際に、上記テンプレートに記載されている文字種に対応したインスタンス化をすることを特徴とする。
【００１５】
また、本発明のプログラムは、上位のテンプレートで表される内部記述の少なくとも一部を、ソースコードの仕様情報中から抽出されたパラメータ間で共通の下位のテンプレートにより表すように多重化されたテンプレートを記憶するテンプレート記憶手段と、上記パラメータ間で共通の下位のテンプレートに対し、上記各パラメータを入力して、上記パラメータ夫々に対応するインスタンスを生成してインスタンス化するとともに、生成した下位のインスタンスを上位のテンプレートに入力して更にインスタンス化することにより目的とするソースコードを生成するインスタンス化手段としてコンピュータを機能させる。
【００１６】
本発明のプログラムの他の態様では、上位のテンプレートで表される内部記述の少なくとも一部を、ソースコードの仕様情報中から抽出されたパラメータ間で共通の下位のテンプレートにより表すように多重化されたテンプレートを用いて、上記パラメータ間で共通の下位のテンプレートに対し、上記各パラメータを入力して、上記パラメータ夫々に対応するインスタンスを生成してインスタンス化するとともに、生成した下位のインスタンスを上位のテンプレートに入力して更にインスタンス化することにより目的とするソースコードを生成する処理手順をコンピュータに実行させる。
【００１７】
本発明のプログラムのその他の態様では、上記テンプレートからインスタンス生成する際に、上記テンプレートに記載されている文字種に対応したインスタンス化をすることを特徴とする。
【００１８】
【発明の実施の形態】
以下、本発明の一実施形態を図面に基づいて説明する。
本実施形態のプログラム生成支援装置は、所望のソースコードを生成する際に使用するテンプレートを多重化し、例えばパラメータの展開方法に何らかの法則性・規則性がある場合には、そのパターンを更に別のテンプレート（子テンプレート）で用意しておくようにしたものである。
【００１９】
図１（ａ）〜（ｃ）は、本実施形態によるプログラム生成支援装置の動作（プログラム生成方法）を説明するための図であり、本実施形態で用いるテンプレートファイルの概念を示している。なお、この図１（ａ）〜（ｃ）においても、図９（ａ）、（ｂ）と同様に、オブジェクト指向に関するテンプレートを用いて関数の宣言を行うソースコードを生成する場合について示しているが、本発明はこの例に限定されない。
【００２０】
上述したように、従来のソースコードジェネレータでは、図１（ｃ）のようなソースコードを生成する場合、図１（ｂ）のようなクラスのテンプレートからそのソースコードを生成するための生成エンジンのプログラムを準備し、この生成エンジンを用いて図１（ｂ）のテンプレートを展開することにより、目的のソースコードを生成していた。
【００２１】
これに対して、本実施形態のプログラム生成支援装置では、図１（ｂ）に示すクラスのテンプレートファイル中に含まれる関数の定義部分（$functions$）を、更に図１（ａ）に示す関数のテンプレートファイルで用意する。ここで、クラスのテンプレートファイルは、生成物の大まかな仕様に該当する部分をテンプレート化したものであり、関数のテンプレートファイルは、クラスのテンプレート内部の細かい部分をテンプレート化したものである。この意味で、関数のテンプレートはクラスのテンプレートに対して入れ子の状態にある。以下では、外側に該当する上位のテンプレートを「親テンプレート」と呼び、その内側に該当する下位のテンプレートを「子テンプレート」と呼ぶ。
【００２２】
本実施形態においては、子テンプレートである図１（ａ）に示す関数のテンプレートファイルにget＿data、set＿data、change＿dataの各パラメータを入力して展開することにより、３つの子インスタンスを生成する。さらに、この生成した３つの子インスタンスを親テンプレートである図１（ｂ）に示すクラスのテンプレートファイルに入力して展開することにより、最終的な生成物である図１（ｃ）のソースコードを生成する。
【００２３】
このようにテンプレートを多重化することにより、必要に応じて子テンプレートを変更すれば、生成エンジンのプログラムを変更しなくても異なるソースコードを生成することができる。テンプレートの変更は、生成エンジンのプログラムを書き換えることに比べればはるかに簡単である。
【００２４】
図２は、本実施形態によるプログラム生成支援装置を適用したシステムの構成例を示すブロック図である。なお、この図２は、図１（ａ）〜（ｃ）のようなオブジェクト指向のソースコードを生成する場合について示したものであるが、生成するソースコードはオブジェクト指向のものに限定されない。
【００２５】
図２において、クラス定義ファイル１は、生成したいソースコードの仕様などをテキストデータ等の形式で記述した仕様定義情報である。このクラス定義ファイル１の中には、子テンプレートの中に入力すべきパラメータが少なくとも記述されている。
【００２６】
クラス定義解析部２は、上記クラス定義ファイル１の内容を解析し、子テンプレートの中に入力すべきパラメータを抽出する。ここで抽出するパラメータは、例えば、関数の名前や型などの情報である。
テンプレートファイル記憶部３は、少なくとも１つ以上の子テンプレートファイル３ａと、少なくとも１つ以上の親テンプレートファイル３ｂとを記憶するものであり、例えばハードディスク等の記憶装置により構成される。
【００２７】
テンプレートインスタンス化部４は、テンプレートのインスタンス化部４ａとインスタンスの切り出し部４ｂとを備えており、テンプレートファイル記憶部３から読み出した任意のテンプレートに対して、クラス定義解析部２により抽出された各パラメータを入力して展開することにより、テンプレートをインスタンス化（具体化）する。
【００２８】
上記テンプレートのインスタンス化部４ａは、子テンプレートファイル３ａおよび親テンプレートファイル３ｂに含まれる各種テンプレートのインスタンス化を行う。また、インスタンスの切り出し部４ｂは、テンプレートのインスタンス化部４ａにより子テンプレートファイル３ａから生成された子インスタンスを切り出し、親テンプレートのインスタンス化を行うためにその切り出した子インスタンスをテンプレートのインスタンス化部４ａに供給する処理を行う。
【００２９】
すなわち、子テンプレートのインスタンス化の際には、インスタンス化部４ａは、テンプレートファイル記憶部３から読み出された任意の子テンプレートファイル３ａに対して、クラス定義解析部２により抽出された各パラメータを入力して展開することにより、当該子テンプレートファイル３ａに含まれる子テンプレートから子インスタンスを生成する。
【００３０】
また、親テンプレートのインスタンス化の際には、切り出し部４ｂは、インスタンス化部４ａにより生成された子インスタンスを切り出してインスタンス化部４ａに供給する。そして、インスタンス化部４ａは、テンプレートファイル記憶部３から読み出された任意の親テンプレートファイル３ｂに対して、切り出し部４ｂから供給された子インスタンスを入力して展開することにより、親テンプレートファイル３ｂに含まれる親テンプレートから親インスタンスを生成する。
【００３１】
このようにして生成される親インスタンスは、プロセス間通信のインタフェース部分や、所定の規則に従って動作する部分など、定型的な部分のプログラムを表したソースコードである。
ソースコードファイル生成部５は、以上のようにしてテンプレートインスタンス化部４により生成された複数の親インスタンスから最終生成物である大きなソースコード６のファイルを生成する。
【００３２】
なお、以上に述べたプログラム生成支援装置のクラス定義解析部２、テンプレートインスタンス化部４およびソースコードファイル生成部５の各構成は、実際にはＣＰＵ、ＲＯＭおよびＲＡＭなどからなるマイクロコンピュータにより構成されている。
【００３３】
図３は、本実施形態のプログラム生成支援装置によるテンプレート展開の手順を示すデータフロー図である。また、図４は、クラス定義ファイル１の一例を示す図であり、図５（ａ）、（ｂ）は、親テンプレートファイル３ｂの一例を示す図であり、図５（ｃ）は、子テンプレートファイル３ａの一例を示す図である。以下に、この図４および図５（ａ）〜（ｃ）に示す具体例を用いながら、図３のテンプレート展開の手順について詳しく説明していく。
【００３４】
図３において、まず最初にクラス定義解析部２において、クラス定義ファイル１の中から、子テンプレートの中に入力すべきパラメータを抽出する。図４のようにクラス定義ファイル１が記述されていた場合、クラス定義解析部２は、関数の名前としてage,addressの２つのパラメータを抽出し、関数の型としてint,Stringの２つのパラメータを抽出する。なお、この図４のクラス定義ファイル１の例では、"Person"というクラスの中にint型の関数"age"とString型の関数"address"とが含まれることを示している。
【００３５】
次に、テンプレートのインスタンス化部４ａにおいて、テンプレートファイル記憶部３の中から読み出した図５（ｃ）のような子テンプレートファイル３ａに対して、上記抽出した各パラメータを入力して展開することにより、子テンプレートをインスタンス化して子インスタンス７を生成する。
【００３６】
そして、インスタンスの切り出し部４ｂにおいて、上述のように生成された子インスタンス７を切り出した後、テンプレートのインスタンス化部４ａにおいて、テンプレートファイル記憶部３の中から読み出した図５（ａ）および（ｂ）のような親テンプレートファイル３ｂに対して、上記切り出した子インスタンス７を入力して展開することにより、親テンプレートをインスタンス化して親インスタンス８を生成する。
なお、子テンプレートに更に入れ子で子（孫）テンプレートに相当するテンプレートを多段に設けても良い。その場合、図３のフローチャートでは、点線で示すように４ｂで子インスタンスの切り出しを行った後に、４ａの前に戻り、繰り返し子インスタンスを生成しても良い。
【００３７】
図６は、上記図５（ｃ）に示した上記子テンプレートファイル３ａのインスタンス化について詳細に示す図である。なお、ここに示す子テンプレートファイル３ａは、"$BEGIN:DECLARE$"で始まり"$END:DECLARE$"で終わる部分と、"$BEGIN:IMPLEMENT$"で始まり"$END:IMPLEMENT$"で終わる部分との２つの子テンプレートを１つのテンプレートファイル３ａ中に含んでいる。
【００３８】
上述したように、図４に示すクラス定義ファイル１には関数の名前と型とが２つずつ記述されており、それらがクラス定義解析部２によって抽出されている。そのため、子テンプレートファイル３ａをインスタンス化する際には、それぞれのパラメータを順に入力してインスタンス化の処理を２回繰り返して行うことにより、図６に示すような２つの子インスタンス７-1，７-2を生成する。
【００３９】
すなわち、図６に示すように、子テンプレートファイル３ａ中に記述されている"$NAME$"，"$TYPE$"，"$CLASS$"をそれぞれ"age"，"int"，"Person"に置換することにより、第１の子インスタンス７-1を生成する。また、子テンプレートファイル３ａ中に記述されている"$NAME$"，"$TYPE$"，"$CLASS$"をそれぞれ"address"，"String"，"Person"に置換することにより、第２の子インスタンス７-2を生成する。
【００４０】
図７は、上記図５（ａ）および（ｂ）に示した２つの親テンプレートファイル３ｂ-1，３ｂ-2のインスタンス化について詳細に示す図である。この図７に示す一方の親テンプレートファイル３ｂ-1においては、"$MEMBER＿FUNCTION＿DECLARES$"の部分によって対応する子インスタンスが指定され、他方の親テンプレートファイル３ｂ-2においては、"$MEMBER＿FUNCTION＿IMPLEMENTS$"の部分によって対応する子インスタンスが指定される。
【００４１】
例えば、一方の親テンプレートファイル３ｂ-1をインスタンス化する場合は、当該親テンプレートファイル３ｂ-1中に記述されている"$NAME$"を"Person"に置換するとともに、"$MEMBER＿FUNCTION＿DECLARES$"の部分に子インスタンス中の対応する部分（"$BEGIN:DECLARE$"で始まり"$END:DECLARE$"で終わる部分）を入力して展開することになる。
【００４２】
この場合、子テンプレートファイル３ａから２つの子インスタンス７-1，７-2が生成されており、それぞれの子インスタンス７-1，７-2中に"DECLARE"によって指定される部分が含まれている。よって、"$MEMBER＿FUNCTION＿DECLARES$"を第１の子インスタンス７-1の"$BEGIN:DECLARE$"〜"$END:DECLARE$"に置換するとともに、"$MEMBER＿FUNCTION＿DECLARES$"に第２の子インスタンス７-2の"$BEGIN:DECLARE$"〜"$END:DECLARE$"を追加することにより、第１の親インスタンス８-1を生成する。
【００４３】
また、他方の親テンプレートファイル３ｂ-2をインスタンス化する場合は、当該親テンプレートファイル３ｂ-2中に記述されている"$NAME$"を"Person"に置換するとともに、"$MEMBER＿FUNCTION＿IMPLEMENTS$"の部分に子インスタンス中の対応する部分（"$BEGIN:IMPLEMENT$"で始まり"$END:IMPLEMENT$"で終わる部分）を入力して展開することになる。
【００４４】
この場合も、生成された２つの子インスタンス７-1，７-2中に"IMPLEMENT"によって指定される部分が含まれている。よって、"$MEMBER＿FUNCTION＿IMPLEMENTS$"を第１の子インスタンス７-1の"$BEGIN:IMPLEMENT$"〜"$END:IMPLEMENT$"に置換するとともに、"$MEMBER＿FUNCTION＿IMPLEMENTS$"に第２の子インスタンス７-2の"$BEGIN:IMPLEMENT$"〜"$END:IMPLEMENT$"を追加することによって、第２の親インスタンス８-2を生成する。
【００４５】
以上詳しく説明したように、本実施形態のプログラム生成支援装置によれば、テンプレートを多重化し、何らかの法則性・規則性があるパラメータの展開方法のパターンを更に別の子テンプレートで用意しておくようにしたので、生成エンジンのプログラムを変更せずに、使用する子テンプレートを変えるだけで別のソースコードを簡単に生成することができるようになる。
【００４６】
例えば、上記図６および図７においては、例えばint型の関数"age"に関して"set＿age"および"get＿age"の２つの命令を含む親インスタンス８-1，８-2のソースコードを生成しているが、更に"change＿age"の命令を含むソースコードを生成する場合について考える。
【００４７】
この場合、従来のソースコードジェネレータでは、ソースコード中に"change＿age"という文字列を記述するための生成エンジンのプログラムを追加するか、あるいは元のプログラムをそのように修正する必要があった。これに対して、本実施形態によれば、生成エンジンのプログラムとは別に用意される子テンプレートファイルを変えるだけで、生成物であるソースコード中に"change＿age"という文字列を追加することができる。
【００４８】
また、"age"や"address"以外に新たな関数を追加したソースコードを生成したいような場合にも、追加したい関数名と型をクラス定義ファイル１中に追加して以上と同様の手順で処理すれば、生成エンジンのプログラムは変更することなく、新たな関数を追加したソースコードを簡単に生成することができる。
【００４９】
これにより、子テンプレートやクラス定義ファイルを変えることによってパラメータの展開内容を容易に変更できるようになるので、例えば、既に作成したソースコードと非常に似た別のソースコードを生成したり、少しずつソースコードを追加したりする場合などにおいて、ソースコードの自動生成をより柔軟に行うことができるようになる。
【００５０】
なお、子テンプレートのインスタンス化処理の際に、元の子テンプレートの記述の仕方をそのまま反映して子インスタンスを生成するようにしても良い。すなわち、図６の例では、例えば第１の子インスタンス７-1を生成する際に、子テンプレートファイル３ａ中に記述されている"$NAME$"を、クラス定義ファイル１から抽出した関数名"age"そのものに置換することにより、子テンプレートファイル３ａ中の"set＿$NAME$"の部分を"set＿age"に置換していた。
【００５１】
これに対して、子テンプレートファイル３ａ中で"$NAME$"の部分が大文字で記述されていることを反映して、例えば"set＿$NAME$"の部分を"set＿AGE"のように置換するようにしても良い。この場合、仮に子テンプレートファイル３ａの記述がアンダーバーを除いて"set$NAME$"とされていたとすると、その"set$NAME$"の部分は"setAGE"に置換されることになる。
【００５２】
このように、子テンプレートファイル３ａの記述の仕方を反映して子インスタンス７-1，７-2を生成するようにすることにより、子テンプレートの記述の仕方を変えるだけで、それから生成される子インスタンス７-1，７-2、および更にこの子インスタンス７-1，７-2から生成される親インスタンス８-1，８-2にバリエーションを与えることができ、子テンプレートの記述のわずかな変更だけで異なるソースコードを簡単に生成することができる。
【００５３】
図８は、使用する子テンプレートを変えることによって、１つのクラス定義ファイル１から様々な用途向けのソースコードを生成する例を示した図である。
図８において、本実施形態のプログラム生成支援装置（ソースコードジェネレータ）１０は、１つのクラス定義ファイル１からＧＵＩ用ソースコード１１、クライアントサーバ通信用ソースコード１２、モデル用ソースコード１３およびデータベース用ソースコード１４を生成している。なお、ここでモデルとは、実世界における業務やプロセスなどをデータに置き換えて表したものを言う。
【００５４】
このようにして本実施形態のソースコードジェネレータ１０により生成された様々な用途向けのソースコード１１〜１４、および必要に応じて個々のプログラマが作成した非定型的なソースコードを任意に組み合わせることにより、最終生成物のソースコードが生成される。
【００５５】
なお、以上に説明した本実施形態のプログラム生成支援装置は、コンピュータのＣＰＵあるいはＭＰＵ、ＲＡＭ、ＲＯＭなどで構成されるものであり、ＲＡＭやＲＯＭに記憶されたプログラムが動作することによって実現でき、上記プログラムは本発明の実施形態に含まれる。また、コンピュータが上記機能を果たすように動作させるプログラムを、例えばＣＤ−ＲＯＭのような記録媒体に記録し、コンピュータに読み込ませることによって実現できるものであり、上記プログラムを記録した記録媒体は本発明の実施形態に含まれる。上記プログラムを記録する記録媒体としては、ＣＤ−ＲＯＭ以外に、フレキシブルディスク、ハードディスク、磁気テープ、光磁気ディスク、不揮発性メモリカード等を用いることができる。
【００５６】
また、コンピュータがプログラムを実行し処理を行うことにより、上述の実施形態の機能が実現されるプログラムプロダクトは、本発明の実施形態に含まれる。上記プログラムプロダクトとしては、上述の実施形態の機能を実現するプログラム自体、上記プログラムが読み込まれたコンピュータ、ネットワークを介して通信可能に接続されたコンピュータに上記プログラムを提供可能な送信装置、および当該送信装置を備えるネットワークシステム等がある。
【００５７】
また、コンピュータが供給されたプログラムを実行することにより上述の実施形態の機能が実現されるだけでなく、そのプログラムがコンピュータにおいて稼働しているＯＳ（オペレーティングシステム）あるいは他のアプリケーションソフト等と共同して上述の実施形態の機能が実現される場合や、供給されたプログラムの処理の全てあるいは一部がコンピュータの機能拡張ボードや機能拡張ユニットにより行われて上述の実施形態の機能が実現される場合も、かかるプログラムは本発明の実施形態に含まれる。
【００５８】
また、本発明をネットワーク環境で利用するべく、全部あるいは一部のプログラムが他のコンピュータで実行されるようになっていても良い。
【００５９】
なお、上記に説明した実施形態は、本発明を実施するにあたっての具体化の一例を示したものに過ぎず、これによって本発明の技術的範囲が限定的に解釈されてはならないものである。すなわち、本発明はその精神、またはその主要な特徴から逸脱することなく、様々な形で実施することができる。例えば、上述の実施形態ではテンプレートを親テンプレートと子テンプレートとに２重化しているが、これより多くのテンプレートに多重化するようにしても良い。
【００６０】
【発明の効果】
本発明は上述したように、上位のテンプレートで表される内部記述の少なくとも一部を、ソースコードの仕様情報中から抽出されたパラメータ間で共通の下位のテンプレートにより表すようにテンプレートを多重化し、パラメータ間で共通の下位のテンプレートに対し、各パラメータを入力して、上記パラメータ夫々に対応するインスタンスを生成してインスタンス化するとともに、生成した下位のインスタンスを上位のテンプレートに入力して更にインスタンス化することによって目的とするソースコードを生成するようにしたので、ソースコードとして展開される内部記述のパターンに柔軟性を持たせることができ、インスタンス化を行うためのエンジンプログラムを変更しなくても、使用する下位のテンプレートを変えるだけで別のソースコードを簡単に生成することができるようになる。これにより、ソースコードの自動生成をより柔軟に行うことができる。
【図面の簡単な説明】
【図１】本実施形態によるプログラム生成支援装置の動作を説明するための図である。
【図２】本実施形態によるプログラム生成支援装置を適用したシステムの構成例を示すブロック図である。
【図３】本実施形態のプログラム生成支援装置によるテンプレート展開の手順を示すデータフロー図である。
【図４】本実施形態のクラス定義ファイルの一例を示す図である。
【図５】本実施形態の子テンプレートファイルおよび親テンプレートファイルの一例を示す図である。
【図６】本実施形態による子テンプレートファイルのインスタンス化について詳細に示す図である。
【図７】本実施形態による親テンプレートファイルのインスタンス化について詳細に示す図である。
【図８】１つのクラス定義ファイルから様々な用途向けのソースコードを生成する例を示す図である。
【図９】従来のソースコードジェネレータの動作を説明するための図である。
【符号の説明】
１  クラス定義ファイル
２  クラス定義解析部
３  テンプレートファイル記憶部
３ａ  子テンプレートファイル
３ｂ  親テンプレートファイル
４  テンプレートインスタンス化部
４ａ  テンプレートのインスタンス化部
４ｂ  インスタンスの切り出し部
５  ソースコードファイル生成部
６  ソースコード
７  子インスタンス
８  親インスタンス
１０  ソースコードジェネレータ
【図１】
0004902069.tif 000002
【図２】
0004902069.tif 000003
【図３】
0004902069.tif 000004
【図４】
0004902069.tif 000005
【図５】
0004902069.tif 000006
【図６】
0004902069.tif 000007
【図７】
0004902069.tif 000008
【図８】
0004902069.tif 000009
【図９】
0004902069.tif 000010