JP4902069B2 - プログラム生成支援装置、プログラム生成方法、およびプログラム - Google Patents
プログラム生成支援装置、プログラム生成方法、およびプログラム Download PDFInfo
- Publication number
- JP4902069B2 JP4902069B2 JP2001244282A JP2001244282A JP4902069B2 JP 4902069 B2 JP4902069 B2 JP 4902069B2 JP 2001244282 A JP2001244282 A JP 2001244282A JP 2001244282 A JP2001244282 A JP 2001244282A JP 4902069 B2 JP4902069 B2 JP 4902069B2
- Authority
- JP
- Japan
- Prior art keywords
- template
- source code
- parameters
- instance
- program
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Expired - Lifetime
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/30—Creation or generation of source code
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- General Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Stored Programmes (AREA)
Description
【発明の属する技術分野】
本発明はプログラム生成支援装置、プログラム生成方法、更にはこれらをソフトウェアの機能で実現するためのプログラムに関するものである。
【0002】
【従来の技術】
従来、コンピュータプログラムの生成を支援する装置として、ソースコードジェネレータなどが用いられている。ソースコードジェネレータは、プロセス間通信のインタフェース部分や、所定の規則に従って動作する部分など、定型的な部分のプログラムを生成する際に利用して好適なものである。このソースコードジェネレータは、例えば、ソースコードのテンプレートをあらかじめ準備しておき、これにプログラムの仕様情報等を入力することによって所望のソースコードを自動的に生成できるようにしたものである。
【0003】
図9(a)、(b)は、従来のソースコードジェネレータの動作を説明するための図である。図9(a)はあるテンプレートファイルを示し、図9(b)はそのテンプレートファイルを用いて生成されるソースコードを示している。ここでは、一例として、オブジェクト指向のクラスに関するテンプレートを用いて、関数の宣言を行うソースコードを生成する場合について示している。
【0004】
図9(a)のようなテンプレートを用いて図9(b)のようなソースコードを生成する場合、生成するソースコード中に
void get_data();
void set_data();
void change_data();
の3行を記載することが分かっているので、テンプレート中の$functions$の部分からこの3行を自動生成するためのプログラムをテンプレートとは別に準備する。そして、この準備したプログラムと図9(a)のようなテンプレートとを使用して、図9(b)のソースコードを生成する。
【0005】
【発明が解決しようとする課題】
従来のソースコードジェネレータでは、テンプレートをファイルとして幾つか用意しておき、使用するテンプレートを変更することで、異なるソースコードを生成することが可能であった。しかしながら、上記従来のソースコードジェネレータは、テンプレートを展開して所望のソースコードを生成するためのプログラム(生成エンジン)をテンプレートとは別に準備する必要があった。そのため、テンプレートの定型部分やパラメータの有無/位置を変更することは可能であっても、生成エンジンのプログラムを書き換えない限り、パラメータの展開内容までは変更することができなかった。
【0006】
ところが、プログラム開発においては、あるソースコードと非常に似た別のソースコードを生成したり、少しずつソースコードを追加したりすることなどがしばしば発生する。この場合に、従来は同じテンプレートを使用するにもかかわらず、その度にそのソースコードを生成するための生成エンジンのプログラムを用意する必要があり、多大の労力を要するという問題があった。
【0007】
本発明は、このような問題を解決するために成されたものであり、パラメータの展開内容を容易に変更できるようにし、より柔軟にソースコードの自動生成を行うことができるようにすることを目的とする。
【0008】
【課題を解決するための手段】
本発明のプログラム生成支援装置は、テンプレートを使用してソースコードを自動生成するプログラム生成支援装置であって、上位のテンプレートで表される内部記述の少なくとも一部を、上記ソースコードの仕様情報中から抽出されたパラメータ間で共通の下位のテンプレートにより表すように多重化されたテンプレートを記憶するテンプレート記憶手段と、上記パラメータ間で共通の下位のテンプレートに対し、上記各パラメータを入力して、上記パラメータ夫々に対応するインスタンスを生成してインスタンス化するとともに、生成した下位のインスタンスを上位のテンプレートに入力して更にインスタンス化することにより目的とするソースコードを生成するインスタンス化手段とを備えたことを特徴とする。
【0009】
本発明のプログラム生成支援装置の他の態様では、上記インスタンス化手段は、最も下位のテンプレートをインスタンス化する際には、上記ソースコードの仕様情報中から抽出された関数の名前及び関数の型の組を少なくとも含んだパラメータを入力してインスタンス化を行うことを特徴とする。
本発明のプログラム生成支援装置のその他の態様では、上記テンプレート記憶手段に記憶されるテンプレートは、1つのテンプレートファイル中に1つ以上のテンプレートを含むことを特徴とする。
本発明のプログラム生成支援装置のその他の態様では、上記インスタンス化手段は、インスタンスを生成する際に、上記テンプレートに記載されている文字種に対応したインスタンス化をすることを特徴とする。
【0010】
また、本発明のプログラム生成方法は、テンプレートを使用してソースコードを自動生成するプログラム生成方法であって、上位のテンプレートで表される内部記述の少なくとも一部を、上記ソースコードの仕様情報中から抽出されたパラメータ間で共通の下位のテンプレートにより表すようにテンプレートを多重化し、上記パラメータ間で共通の下位のテンプレートに対し、上記各パラメータを入力して、上記パラメータ夫々に対応するインスタンスを生成してインスタンス化するとともに、生成した下位のインスタンスを上位のテンプレートに入力して更にインスタンス化することにより目的とするソースコードを生成するようにしたことを特徴とする。
【0011】
本発明のプログラム生成方法の他の態様では、最も下位のテンプレートをインスタンス化する際には、上記ソースコードの仕様情報中から抽出された関数の名前及び関数の型の組を少なくとも含んだパラメータを入力してインスタンス化を行うことを特徴とする。
本発明のプログラム生成方法のその他の態様では、1つのテンプレートファイル内に含まれる1つ以上のテンプレートの中から、上位のテンプレートにより指定されるテンプレートを選択的に用いてインスタンス化を行うようにしたことを特徴とする。
本発明のプログラム生成方法のその他の態様では、上記テンプレートからインスタンス生成する際に、上記テンプレートに記載されている文字種に対応したインスタンス化をすることを特徴とする。
【0015】
また、本発明のプログラムは、上位のテンプレートで表される内部記述の少なくとも一部を、ソースコードの仕様情報中から抽出されたパラメータ間で共通の下位のテンプレートにより表すように多重化されたテンプレートを記憶するテンプレート記憶手段と、上記パラメータ間で共通の下位のテンプレートに対し、上記各パラメータを入力して、上記パラメータ夫々に対応するインスタンスを生成してインスタンス化するとともに、生成した下位のインスタンスを上位のテンプレートに入力して更にインスタンス化することにより目的とするソースコードを生成するインスタンス化手段としてコンピュータを機能させる。
【0016】
本発明のプログラムの他の態様では、上位のテンプレートで表される内部記述の少なくとも一部を、ソースコードの仕様情報中から抽出されたパラメータ間で共通の下位のテンプレートにより表すように多重化されたテンプレートを用いて、上記パラメータ間で共通の下位のテンプレートに対し、上記各パラメータを入力して、上記パラメータ夫々に対応するインスタンスを生成してインスタンス化するとともに、生成した下位のインスタンスを上位のテンプレートに入力して更にインスタンス化することにより目的とするソースコードを生成する処理手順をコンピュータに実行させる。
【0017】
本発明のプログラムのその他の態様では、上記テンプレートからインスタンス生成する際に、上記テンプレートに記載されている文字種に対応したインスタンス化をすることを特徴とする。
【0018】
【発明の実施の形態】
以下、本発明の一実施形態を図面に基づいて説明する。
本実施形態のプログラム生成支援装置は、所望のソースコードを生成する際に使用するテンプレートを多重化し、例えばパラメータの展開方法に何らかの法則性・規則性がある場合には、そのパターンを更に別のテンプレート(子テンプレート)で用意しておくようにしたものである。
【0019】
図1(a)〜(c)は、本実施形態によるプログラム生成支援装置の動作(プログラム生成方法)を説明するための図であり、本実施形態で用いるテンプレートファイルの概念を示している。なお、この図1(a)〜(c)においても、図9(a)、(b)と同様に、オブジェクト指向に関するテンプレートを用いて関数の宣言を行うソースコードを生成する場合について示しているが、本発明はこの例に限定されない。
【0020】
上述したように、従来のソースコードジェネレータでは、図1(c)のようなソースコードを生成する場合、図1(b)のようなクラスのテンプレートからそのソースコードを生成するための生成エンジンのプログラムを準備し、この生成エンジンを用いて図1(b)のテンプレートを展開することにより、目的のソースコードを生成していた。
【0021】
これに対して、本実施形態のプログラム生成支援装置では、図1(b)に示すクラスのテンプレートファイル中に含まれる関数の定義部分($functions$)を、更に図1(a)に示す関数のテンプレートファイルで用意する。ここで、クラスのテンプレートファイルは、生成物の大まかな仕様に該当する部分をテンプレート化したものであり、関数のテンプレートファイルは、クラスのテンプレート内部の細かい部分をテンプレート化したものである。この意味で、関数のテンプレートはクラスのテンプレートに対して入れ子の状態にある。以下では、外側に該当する上位のテンプレートを「親テンプレート」と呼び、その内側に該当する下位のテンプレートを「子テンプレート」と呼ぶ。
【0022】
本実施形態においては、子テンプレートである図1(a)に示す関数のテンプレートファイルにget_data、set_data、change_dataの各パラメータを入力して展開することにより、3つの子インスタンスを生成する。さらに、この生成した3つの子インスタンスを親テンプレートである図1(b)に示すクラスのテンプレートファイルに入力して展開することにより、最終的な生成物である図1(c)のソースコードを生成する。
【0023】
このようにテンプレートを多重化することにより、必要に応じて子テンプレートを変更すれば、生成エンジンのプログラムを変更しなくても異なるソースコードを生成することができる。テンプレートの変更は、生成エンジンのプログラムを書き換えることに比べればはるかに簡単である。
【0024】
図2は、本実施形態によるプログラム生成支援装置を適用したシステムの構成例を示すブロック図である。なお、この図2は、図1(a)〜(c)のようなオブジェクト指向のソースコードを生成する場合について示したものであるが、生成するソースコードはオブジェクト指向のものに限定されない。
【0025】
図2において、クラス定義ファイル1は、生成したいソースコードの仕様などをテキストデータ等の形式で記述した仕様定義情報である。このクラス定義ファイル1の中には、子テンプレートの中に入力すべきパラメータが少なくとも記述されている。
【0026】
クラス定義解析部2は、上記クラス定義ファイル1の内容を解析し、子テンプレートの中に入力すべきパラメータを抽出する。ここで抽出するパラメータは、例えば、関数の名前や型などの情報である。
テンプレートファイル記憶部3は、少なくとも1つ以上の子テンプレートファイル3aと、少なくとも1つ以上の親テンプレートファイル3bとを記憶するものであり、例えばハードディスク等の記憶装置により構成される。
【0027】
テンプレートインスタンス化部4は、テンプレートのインスタンス化部4aとインスタンスの切り出し部4bとを備えており、テンプレートファイル記憶部3から読み出した任意のテンプレートに対して、クラス定義解析部2により抽出された各パラメータを入力して展開することにより、テンプレートをインスタンス化(具体化)する。
【0028】
上記テンプレートのインスタンス化部4aは、子テンプレートファイル3aおよび親テンプレートファイル3bに含まれる各種テンプレートのインスタンス化を行う。また、インスタンスの切り出し部4bは、テンプレートのインスタンス化部4aにより子テンプレートファイル3aから生成された子インスタンスを切り出し、親テンプレートのインスタンス化を行うためにその切り出した子インスタンスをテンプレートのインスタンス化部4aに供給する処理を行う。
【0029】
すなわち、子テンプレートのインスタンス化の際には、インスタンス化部4aは、テンプレートファイル記憶部3から読み出された任意の子テンプレートファイル3aに対して、クラス定義解析部2により抽出された各パラメータを入力して展開することにより、当該子テンプレートファイル3aに含まれる子テンプレートから子インスタンスを生成する。
【0030】
また、親テンプレートのインスタンス化の際には、切り出し部4bは、インスタンス化部4aにより生成された子インスタンスを切り出してインスタンス化部4aに供給する。そして、インスタンス化部4aは、テンプレートファイル記憶部3から読み出された任意の親テンプレートファイル3bに対して、切り出し部4bから供給された子インスタンスを入力して展開することにより、親テンプレートファイル3bに含まれる親テンプレートから親インスタンスを生成する。
【0031】
このようにして生成される親インスタンスは、プロセス間通信のインタフェース部分や、所定の規則に従って動作する部分など、定型的な部分のプログラムを表したソースコードである。
ソースコードファイル生成部5は、以上のようにしてテンプレートインスタンス化部4により生成された複数の親インスタンスから最終生成物である大きなソースコード6のファイルを生成する。
【0032】
なお、以上に述べたプログラム生成支援装置のクラス定義解析部2、テンプレートインスタンス化部4およびソースコードファイル生成部5の各構成は、実際にはCPU、ROMおよびRAMなどからなるマイクロコンピュータにより構成されている。
【0033】
図3は、本実施形態のプログラム生成支援装置によるテンプレート展開の手順を示すデータフロー図である。また、図4は、クラス定義ファイル1の一例を示す図であり、図5(a)、(b)は、親テンプレートファイル3bの一例を示す図であり、図5(c)は、子テンプレートファイル3aの一例を示す図である。以下に、この図4および図5(a)〜(c)に示す具体例を用いながら、図3のテンプレート展開の手順について詳しく説明していく。
【0034】
図3において、まず最初にクラス定義解析部2において、クラス定義ファイル1の中から、子テンプレートの中に入力すべきパラメータを抽出する。図4のようにクラス定義ファイル1が記述されていた場合、クラス定義解析部2は、関数の名前としてage,addressの2つのパラメータを抽出し、関数の型としてint,Stringの2つのパラメータを抽出する。なお、この図4のクラス定義ファイル1の例では、"Person"というクラスの中にint型の関数"age"とString型の関数"address"とが含まれることを示している。
【0035】
次に、テンプレートのインスタンス化部4aにおいて、テンプレートファイル記憶部3の中から読み出した図5(c)のような子テンプレートファイル3aに対して、上記抽出した各パラメータを入力して展開することにより、子テンプレートをインスタンス化して子インスタンス7を生成する。
【0036】
そして、インスタンスの切り出し部4bにおいて、上述のように生成された子インスタンス7を切り出した後、テンプレートのインスタンス化部4aにおいて、テンプレートファイル記憶部3の中から読み出した図5(a)および(b)のような親テンプレートファイル3bに対して、上記切り出した子インスタンス7を入力して展開することにより、親テンプレートをインスタンス化して親インスタンス8を生成する。
なお、子テンプレートに更に入れ子で子(孫)テンプレートに相当するテンプレートを多段に設けても良い。その場合、図3のフローチャートでは、点線で示すように4bで子インスタンスの切り出しを行った後に、4aの前に戻り、繰り返し子インスタンスを生成しても良い。
【0037】
図6は、上記図5(c)に示した上記子テンプレートファイル3aのインスタンス化について詳細に示す図である。なお、ここに示す子テンプレートファイル3aは、"$BEGIN:DECLARE$"で始まり"$END:DECLARE$"で終わる部分と、"$BEGIN:IMPLEMENT$"で始まり"$END:IMPLEMENT$"で終わる部分との2つの子テンプレートを1つのテンプレートファイル3a中に含んでいる。
【0038】
上述したように、図4に示すクラス定義ファイル1には関数の名前と型とが2つずつ記述されており、それらがクラス定義解析部2によって抽出されている。そのため、子テンプレートファイル3aをインスタンス化する際には、それぞれのパラメータを順に入力してインスタンス化の処理を2回繰り返して行うことにより、図6に示すような2つの子インスタンス7-1,7-2を生成する。
【0039】
すなわち、図6に示すように、子テンプレートファイル3a中に記述されている"$NAME$","$TYPE$","$CLASS$"をそれぞれ"age","int","Person"に置換することにより、第1の子インスタンス7-1を生成する。また、子テンプレートファイル3a中に記述されている"$NAME$","$TYPE$","$CLASS$"をそれぞれ"address","String","Person"に置換することにより、第2の子インスタンス7-2を生成する。
【0040】
図7は、上記図5(a)および(b)に示した2つの親テンプレートファイル3b-1,3b-2のインスタンス化について詳細に示す図である。この図7に示す一方の親テンプレートファイル3b-1においては、"$MEMBER_FUNCTION_DECLARES$"の部分によって対応する子インスタンスが指定され、他方の親テンプレートファイル3b-2においては、"$MEMBER_FUNCTION_IMPLEMENTS$"の部分によって対応する子インスタンスが指定される。
【0041】
例えば、一方の親テンプレートファイル3b-1をインスタンス化する場合は、当該親テンプレートファイル3b-1中に記述されている"$NAME$"を"Person"に置換するとともに、"$MEMBER_FUNCTION_DECLARES$"の部分に子インスタンス中の対応する部分("$BEGIN:DECLARE$"で始まり"$END:DECLARE$"で終わる部分)を入力して展開することになる。
【0042】
この場合、子テンプレートファイル3aから2つの子インスタンス7-1,7-2が生成されており、それぞれの子インスタンス7-1,7-2中に"DECLARE"によって指定される部分が含まれている。よって、"$MEMBER_FUNCTION_DECLARES$"を第1の子インスタンス7-1の"$BEGIN:DECLARE$"〜"$END:DECLARE$"に置換するとともに、"$MEMBER_FUNCTION_DECLARES$"に第2の子インスタンス7-2の"$BEGIN:DECLARE$"〜"$END:DECLARE$"を追加することにより、第1の親インスタンス8-1を生成する。
【0043】
また、他方の親テンプレートファイル3b-2をインスタンス化する場合は、当該親テンプレートファイル3b-2中に記述されている"$NAME$"を"Person"に置換するとともに、"$MEMBER_FUNCTION_IMPLEMENTS$"の部分に子インスタンス中の対応する部分("$BEGIN:IMPLEMENT$"で始まり"$END:IMPLEMENT$"で終わる部分)を入力して展開することになる。
【0044】
この場合も、生成された2つの子インスタンス7-1,7-2中に"IMPLEMENT"によって指定される部分が含まれている。よって、"$MEMBER_FUNCTION_IMPLEMENTS$"を第1の子インスタンス7-1の"$BEGIN:IMPLEMENT$"〜"$END:IMPLEMENT$"に置換するとともに、"$MEMBER_FUNCTION_IMPLEMENTS$"に第2の子インスタンス7-2の"$BEGIN:IMPLEMENT$"〜"$END:IMPLEMENT$"を追加することによって、第2の親インスタンス8-2を生成する。
【0045】
以上詳しく説明したように、本実施形態のプログラム生成支援装置によれば、テンプレートを多重化し、何らかの法則性・規則性があるパラメータの展開方法のパターンを更に別の子テンプレートで用意しておくようにしたので、生成エンジンのプログラムを変更せずに、使用する子テンプレートを変えるだけで別のソースコードを簡単に生成することができるようになる。
【0046】
例えば、上記図6および図7においては、例えばint型の関数"age"に関して"set_age"および"get_age"の2つの命令を含む親インスタンス8-1,8-2のソースコードを生成しているが、更に"change_age"の命令を含むソースコードを生成する場合について考える。
【0047】
この場合、従来のソースコードジェネレータでは、ソースコード中に"change_age"という文字列を記述するための生成エンジンのプログラムを追加するか、あるいは元のプログラムをそのように修正する必要があった。これに対して、本実施形態によれば、生成エンジンのプログラムとは別に用意される子テンプレートファイルを変えるだけで、生成物であるソースコード中に"change_age"という文字列を追加することができる。
【0048】
また、"age"や"address"以外に新たな関数を追加したソースコードを生成したいような場合にも、追加したい関数名と型をクラス定義ファイル1中に追加して以上と同様の手順で処理すれば、生成エンジンのプログラムは変更することなく、新たな関数を追加したソースコードを簡単に生成することができる。
【0049】
これにより、子テンプレートやクラス定義ファイルを変えることによってパラメータの展開内容を容易に変更できるようになるので、例えば、既に作成したソースコードと非常に似た別のソースコードを生成したり、少しずつソースコードを追加したりする場合などにおいて、ソースコードの自動生成をより柔軟に行うことができるようになる。
【0050】
なお、子テンプレートのインスタンス化処理の際に、元の子テンプレートの記述の仕方をそのまま反映して子インスタンスを生成するようにしても良い。すなわち、図6の例では、例えば第1の子インスタンス7-1を生成する際に、子テンプレートファイル3a中に記述されている"$NAME$"を、クラス定義ファイル1から抽出した関数名"age"そのものに置換することにより、子テンプレートファイル3a中の"set_$NAME$"の部分を"set_age"に置換していた。
【0051】
これに対して、子テンプレートファイル3a中で"$NAME$"の部分が大文字で記述されていることを反映して、例えば"set_$NAME$"の部分を"set_AGE"のように置換するようにしても良い。この場合、仮に子テンプレートファイル3aの記述がアンダーバーを除いて"set$NAME$"とされていたとすると、その"set$NAME$"の部分は"setAGE"に置換されることになる。
【0052】
このように、子テンプレートファイル3aの記述の仕方を反映して子インスタンス7-1,7-2を生成するようにすることにより、子テンプレートの記述の仕方を変えるだけで、それから生成される子インスタンス7-1,7-2、および更にこの子インスタンス7-1,7-2から生成される親インスタンス8-1,8-2にバリエーションを与えることができ、子テンプレートの記述のわずかな変更だけで異なるソースコードを簡単に生成することができる。
【0053】
図8は、使用する子テンプレートを変えることによって、1つのクラス定義ファイル1から様々な用途向けのソースコードを生成する例を示した図である。
図8において、本実施形態のプログラム生成支援装置(ソースコードジェネレータ)10は、1つのクラス定義ファイル1からGUI用ソースコード11、クライアントサーバ通信用ソースコード12、モデル用ソースコード13およびデータベース用ソースコード14を生成している。なお、ここでモデルとは、実世界における業務やプロセスなどをデータに置き換えて表したものを言う。
【0054】
このようにして本実施形態のソースコードジェネレータ10により生成された様々な用途向けのソースコード11〜14、および必要に応じて個々のプログラマが作成した非定型的なソースコードを任意に組み合わせることにより、最終生成物のソースコードが生成される。
【0055】
なお、以上に説明した本実施形態のプログラム生成支援装置は、コンピュータのCPUあるいはMPU、RAM、ROMなどで構成されるものであり、RAMやROMに記憶されたプログラムが動作することによって実現でき、上記プログラムは本発明の実施形態に含まれる。また、コンピュータが上記機能を果たすように動作させるプログラムを、例えばCD−ROMのような記録媒体に記録し、コンピュータに読み込ませることによって実現できるものであり、上記プログラムを記録した記録媒体は本発明の実施形態に含まれる。上記プログラムを記録する記録媒体としては、CD−ROM以外に、フレキシブルディスク、ハードディスク、磁気テープ、光磁気ディスク、不揮発性メモリカード等を用いることができる。
【0056】
また、コンピュータがプログラムを実行し処理を行うことにより、上述の実施形態の機能が実現されるプログラムプロダクトは、本発明の実施形態に含まれる。上記プログラムプロダクトとしては、上述の実施形態の機能を実現するプログラム自体、上記プログラムが読み込まれたコンピュータ、ネットワークを介して通信可能に接続されたコンピュータに上記プログラムを提供可能な送信装置、および当該送信装置を備えるネットワークシステム等がある。
【0057】
また、コンピュータが供給されたプログラムを実行することにより上述の実施形態の機能が実現されるだけでなく、そのプログラムがコンピュータにおいて稼働しているOS(オペレーティングシステム)あるいは他のアプリケーションソフト等と共同して上述の実施形態の機能が実現される場合や、供給されたプログラムの処理の全てあるいは一部がコンピュータの機能拡張ボードや機能拡張ユニットにより行われて上述の実施形態の機能が実現される場合も、かかるプログラムは本発明の実施形態に含まれる。
【0058】
また、本発明をネットワーク環境で利用するべく、全部あるいは一部のプログラムが他のコンピュータで実行されるようになっていても良い。
【0059】
なお、上記に説明した実施形態は、本発明を実施するにあたっての具体化の一例を示したものに過ぎず、これによって本発明の技術的範囲が限定的に解釈されてはならないものである。すなわち、本発明はその精神、またはその主要な特徴から逸脱することなく、様々な形で実施することができる。例えば、上述の実施形態ではテンプレートを親テンプレートと子テンプレートとに2重化しているが、これより多くのテンプレートに多重化するようにしても良い。
【0060】
【発明の効果】
本発明は上述したように、上位のテンプレートで表される内部記述の少なくとも一部を、ソースコードの仕様情報中から抽出されたパラメータ間で共通の下位のテンプレートにより表すようにテンプレートを多重化し、パラメータ間で共通の下位のテンプレートに対し、各パラメータを入力して、上記パラメータ夫々に対応するインスタンスを生成してインスタンス化するとともに、生成した下位のインスタンスを上位のテンプレートに入力して更にインスタンス化することによって目的とするソースコードを生成するようにしたので、ソースコードとして展開される内部記述のパターンに柔軟性を持たせることができ、インスタンス化を行うためのエンジンプログラムを変更しなくても、使用する下位のテンプレートを変えるだけで別のソースコードを簡単に生成することができるようになる。これにより、ソースコードの自動生成をより柔軟に行うことができる。
【図面の簡単な説明】
【図1】本実施形態によるプログラム生成支援装置の動作を説明するための図である。
【図2】本実施形態によるプログラム生成支援装置を適用したシステムの構成例を示すブロック図である。
【図3】本実施形態のプログラム生成支援装置によるテンプレート展開の手順を示すデータフロー図である。
【図4】本実施形態のクラス定義ファイルの一例を示す図である。
【図5】本実施形態の子テンプレートファイルおよび親テンプレートファイルの一例を示す図である。
【図6】本実施形態による子テンプレートファイルのインスタンス化について詳細に示す図である。
【図7】本実施形態による親テンプレートファイルのインスタンス化について詳細に示す図である。
【図8】1つのクラス定義ファイルから様々な用途向けのソースコードを生成する例を示す図である。
【図9】従来のソースコードジェネレータの動作を説明するための図である。
【符号の説明】
1 クラス定義ファイル
2 クラス定義解析部
3 テンプレートファイル記憶部
3a 子テンプレートファイル
3b 親テンプレートファイル
4 テンプレートインスタンス化部
4a テンプレートのインスタンス化部
4b インスタンスの切り出し部
5 ソースコードファイル生成部
6 ソースコード
7 子インスタンス
8 親インスタンス
10 ソースコードジェネレータ
Claims (11)
- テンプレートを使用してソースコードを自動生成するプログラム生成支援装置であって、
上位のテンプレートで表される内部記述の少なくとも一部を、上記ソースコードの仕様情報中から抽出されたパラメータ間で共通の下位のテンプレートにより表すように多重化されたテンプレートを記憶するテンプレート記憶手段と、
上記パラメータ間で共通の下位のテンプレートに対し、上記各パラメータを入力して、上記パラメータ夫々に対応するインスタンスを生成してインスタンス化するとともに、生成した下位のインスタンスを上位のテンプレートに入力して更にインスタンス化することにより目的とするソースコードを生成するインスタンス化手段とを備えたことを特徴とするプログラム生成支援装置。 - 上記インスタンス化手段は、最も下位のテンプレートをインスタンス化する際には、上記ソースコードの仕様情報中から抽出された関数の名前及び関数の型の組を少なくとも含んだパラメータを入力してインスタンス化を行うことを特徴とする請求項1に記載のプログラム生成支援装置。
- 上記テンプレート記憶手段に記憶されるテンプレートは、1つのテンプレートファイル中に1つ以上のテンプレートを含むことを特徴とする請求項1または2に記載のプログラム生成支援装置。
- 上記インスタンス化手段は、インスタンスを生成する際に、上記テンプレートに記載されている文字種に対応したインスタンス化をすることを特徴とする請求項1に記載のプログラム生成支援装置。
- テンプレートを使用してソースコードを自動生成するプログラム生成方法であって、
上位のテンプレートで表される内部記述の少なくとも一部を、上記ソースコードの仕様情報中から抽出されたパラメータ間で共通の下位のテンプレートにより表すようにテンプレートを多重化し、上記パラメータ間で共通の下位のテンプレートに対し、上記各パラメータを入力して、上記パラメータ夫々に対応するインスタンスを生成してインスタンス化するとともに、生成した下位のインスタンスを上位のテンプレートに入力して更にインスタンス化することにより目的とするソースコードを生成するようにしたことを特徴とするプログラム生成方法。 - 最も下位のテンプレートをインスタンス化する際には、上記ソースコードの仕様情報中から抽出された関数の名前及び関数の型の組を少なくとも含んだパラメータを入力してインスタンス化を行うことを特徴とする請求項5に記載のプログラム生成方法。
- 1つのテンプレートファイル内に含まれる1つ以上のテンプレートの中から、上位のテンプレートにより指定されるテンプレートを選択的に用いてインスタンス化を行うようにしたことを特徴とする請求項5または6に記載のプログラム生成方法。
- 上記テンプレートからインスタンス生成する際に、上記テンプレートに記載されている文字種に対応したインスタンス化をすることを特徴とする請求項5に記載のプログラム生成方法。
- 上位のテンプレートで表される内部記述の少なくとも一部を、ソースコードの仕様情報中から抽出されたパラメータ間で共通の下位のテンプレートにより表すように多重化されたテンプレートを記憶するテンプレート記憶手段と、
上記パラメータ間で共通の下位のテンプレートに対し、上記各パラメータを入力して、上記パラメータ夫々に対応するインスタンスを生成してインスタンス化するとともに、生成した下位のインスタンスを上位のテンプレートに入力して更にインスタンス化することにより目的とするソースコードを生成するインスタンス化手段としてコンピュータを機能させるためのプログラム。 - 上位のテンプレートで表される内部記述の少なくとも一部を、ソースコードの仕様情報中から抽出されたパラメータ間で共通の下位のテンプレートにより表すように多重化されたテンプレートを用いて、上記パラメータ間で共通の下位のテンプレートに対し、上記各パラメータを入力して、上記パラメータ夫々に対応するインスタンスを生成してインスタンス化するとともに、生成した下位のインスタンスを上位のテンプレートに入力して更にインスタンス化することにより目的とするソースコードを生成する処理手順をコンピュータに実行させるためのプログラム。
- 上記テンプレートからインスタンス生成する際に、上記テンプレートに記載されている文字種に対応したインスタンス化をすることを特徴とする請求項9または10に記載のプログラム。
Priority Applications (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2001244282A JP4902069B2 (ja) | 2000-09-06 | 2001-08-10 | プログラム生成支援装置、プログラム生成方法、およびプログラム |
US09/946,734 US6889373B2 (en) | 2000-09-06 | 2001-09-06 | Program generating support system, program generating method, storage medium and program |
Applications Claiming Priority (4)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2000270163 | 2000-09-06 | ||
JP2000270163 | 2000-09-06 | ||
JP2000-270163 | 2000-09-06 | ||
JP2001244282A JP4902069B2 (ja) | 2000-09-06 | 2001-08-10 | プログラム生成支援装置、プログラム生成方法、およびプログラム |
Publications (3)
Publication Number | Publication Date |
---|---|
JP2002157118A JP2002157118A (ja) | 2002-05-31 |
JP2002157118A5 JP2002157118A5 (ja) | 2008-09-25 |
JP4902069B2 true JP4902069B2 (ja) | 2012-03-21 |
Family
ID=26599350
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2001244282A Expired - Lifetime JP4902069B2 (ja) | 2000-09-06 | 2001-08-10 | プログラム生成支援装置、プログラム生成方法、およびプログラム |
Country Status (2)
Country | Link |
---|---|
US (1) | US6889373B2 (ja) |
JP (1) | JP4902069B2 (ja) |
Families Citing this family (23)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2001033348A2 (en) * | 1999-11-01 | 2001-05-10 | Curl Corporation | System and method supporting mapping of option bindings |
AU1246001A (en) * | 1999-11-01 | 2001-05-14 | Curl Corporation | System and method supporting property values as options |
EP1226496B1 (en) * | 1999-11-01 | 2004-01-14 | Curl Corporation | System and method supporting type checking of options |
US7275250B1 (en) | 2001-05-01 | 2007-09-25 | Microsoft Corporation | Method and apparatus for correlating events |
US7100167B2 (en) * | 2001-05-01 | 2006-08-29 | Microsoft Corporation | Method and apparatus for creating templates |
US8554650B1 (en) * | 2002-07-31 | 2013-10-08 | Ariba, Inc. | Importable template |
US8219968B2 (en) * | 2003-07-17 | 2012-07-10 | Raytheon Company | Designing computer programs |
US20050055682A1 (en) * | 2003-09-08 | 2005-03-10 | Microsoft Corporation | Authoring and using generic classes in JAVA language code |
US7543271B2 (en) * | 2003-09-08 | 2009-06-02 | Microsoft Corporation | Compiling source code using generic classes |
US7487493B1 (en) | 2003-12-30 | 2009-02-03 | Itt Manufacturing Enterprises, Inc. | Method and apparatus for developing standard architecture compliant software for programmable radios |
US8631393B2 (en) * | 2004-03-16 | 2014-01-14 | Vision Genesis, Inc. | Custom database system and method of building and operating the same |
JP2007079906A (ja) * | 2005-09-14 | 2007-03-29 | Hitachi Software Eng Co Ltd | ソースコード生成装置 |
US9430455B2 (en) * | 2005-12-15 | 2016-08-30 | Simpliance, Inc. | Methods and systems for intelligent form-filling and electronic document generation |
US20080140472A1 (en) * | 2006-12-12 | 2008-06-12 | Dagan Gilat | Method and Computer Program Product for Modeling an Organization |
JP2009211143A (ja) * | 2008-02-29 | 2009-09-17 | Toshiba Corp | 情報処理装置および情報処理プログラム |
US8060857B2 (en) * | 2009-01-31 | 2011-11-15 | Ted J. Biggerstaff | Automated partitioning of a computation for parallel or other high capability architecture |
JP5581894B2 (ja) * | 2010-08-26 | 2014-09-03 | 日本電気株式会社 | データ処理プログラム自動生成システム |
CN102053839A (zh) * | 2010-12-31 | 2011-05-11 | 山东中创软件商用中间件股份有限公司 | 监控探针生成方法和装置 |
JP5605228B2 (ja) * | 2011-01-07 | 2014-10-15 | 富士ゼロックス株式会社 | 画像処理装置及びプログラム |
EP3296827A4 (en) * | 2015-05-13 | 2019-01-09 | Mitsubishi Electric Corporation | LOGIC CONTROL DIAGRAM ANALYSIS DEVICE AND LOGICAL CONTROL DIAGRAM ANALYSIS METHOD |
US10769209B1 (en) * | 2017-01-13 | 2020-09-08 | Marklogic Corporation | Apparatus and method for template driven data extraction in a semi-structured document database |
US20190102841A1 (en) * | 2017-10-04 | 2019-04-04 | Servicenow, Inc. | Mapping engine configurations with task managed workflows and grid user interfaces |
EP3467642B1 (en) * | 2017-10-04 | 2023-10-04 | ServiceNow, Inc. | Guided configuration item class creation in a remote network management platform |
Family Cites Families (18)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5287449A (en) * | 1987-11-06 | 1994-02-15 | Hitachi, Ltd. | Automatic program generation method with a visual data structure display |
JPH01191233A (ja) * | 1988-01-27 | 1989-08-01 | Hitachi Ltd | プログラム自動生成方式 |
US5172326A (en) * | 1990-03-19 | 1992-12-15 | Forcam, Incorporated | Patterned web cutting method and system for operation manipulation of displayed nested templates relative to a displayed image of a patterned web |
JPH08115323A (ja) * | 1994-10-18 | 1996-05-07 | Toppan Printing Co Ltd | 自動ページアップルール作成装置 |
US6063128A (en) * | 1996-03-06 | 2000-05-16 | Bentley Systems, Incorporated | Object-oriented computerized modeling system |
US5835577A (en) * | 1996-04-25 | 1998-11-10 | Copytele, Inc. | Multi-functional personal telecommunications apparatus |
US6151703A (en) * | 1996-05-20 | 2000-11-21 | Inprise Corporation | Development system with methods for just-in-time compilation of programs |
CA2178898C (en) * | 1996-06-12 | 2000-02-01 | David Joseph Streeter | Sequencing and error detection of template instantiations during compilation of c++ programs |
US5844554A (en) * | 1996-09-17 | 1998-12-01 | Bt Squared Technologies, Inc. | Methods and systems for user interfaces and constraint handling configurations software |
JPH10214194A (ja) * | 1997-01-29 | 1998-08-11 | Nec Corp | クラス定義取り込み方式 |
US5790855A (en) * | 1997-01-31 | 1998-08-04 | Sun Microsystems, Inc. | System, method and article of manufacture for type checking appropriateness of port connection and variable type matching in connection with multiport object-oriented components |
US6106569A (en) * | 1997-08-14 | 2000-08-22 | International Business Machines Corporation | Method of developing a software system using object oriented technology |
US6173276B1 (en) * | 1997-08-21 | 2001-01-09 | Scicomp, Inc. | System and method for financial instrument modeling and valuation |
US6032152A (en) * | 1997-12-31 | 2000-02-29 | Intel Corporation | Object factory template |
US6405368B1 (en) * | 1999-04-16 | 2002-06-11 | Brian Freyburger | Method for separate compilation of templates |
US6199195B1 (en) * | 1999-07-08 | 2001-03-06 | Science Application International Corporation | Automatically generated objects within extensible object frameworks and links to enterprise resources |
US6268853B1 (en) * | 1999-09-30 | 2001-07-31 | Rockwell Technologies, L.L.C. | Data structure for use in enterprise controls |
US6785673B1 (en) * | 2000-02-09 | 2004-08-31 | At&T Corp. | Method for converting relational data into XML |
-
2001
- 2001-08-10 JP JP2001244282A patent/JP4902069B2/ja not_active Expired - Lifetime
- 2001-09-06 US US09/946,734 patent/US6889373B2/en not_active Expired - Lifetime
Also Published As
Publication number | Publication date |
---|---|
US20020095654A1 (en) | 2002-07-18 |
US6889373B2 (en) | 2005-05-03 |
JP2002157118A (ja) | 2002-05-31 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP4902069B2 (ja) | プログラム生成支援装置、プログラム生成方法、およびプログラム | |
Kirda et al. | Experiences in engineering flexible web services | |
US7793268B2 (en) | Method, system, and program product for composing a virtualized computing environment | |
US8839192B2 (en) | System and method for presentation of cross organizational applications | |
JP2004005568A (ja) | レガシー・アプリケーションの高速gui体裁更新 | |
EP2772851A1 (en) | Customizing a GUI of a MES screen | |
CN101719056A (zh) | 用于实时系统控制的组件模型 | |
JP6673359B2 (ja) | システム構築支援システム、方法およびプログラム | |
JP2008158989A (ja) | Gui生成装置及びgui生成方法 | |
JP2008204369A (ja) | シミュレータ開発システム及びシミュレータ開発方法 | |
JPH10254689A (ja) | クライアント・サーバシステムのアプリケーション構成設計支援方式 | |
JP2001296996A (ja) | コンポーネントの自動生成装置および表現方法 | |
CN114265595B (zh) | 一种基于智能合约的云原生应用开发与部署系统和方法 | |
JP7428006B2 (ja) | システム構成導出装置、方法およびプログラム | |
JP2019079165A (ja) | 編集プログラム、編集装置、及び、編集方法 | |
JP2002268882A (ja) | Webアプリケーションシステム、及びプログラム | |
Freeman et al. | The model/view/controller pattern | |
JP7417462B2 (ja) | パッケージ生成装置、パッケージ管理システム及びパッケージ生成方法 | |
JP2007094453A (ja) | プログラム開発支援システム、プログラム開発支援方法およびプログラム | |
JP6652724B2 (ja) | 情報処理装置、情報処理装置の制御方法、及びプログラム | |
Topcu et al. | Towards a UML profile for HLA federation design, Part II | |
JP4120879B2 (ja) | プログラム生成システム及び方法とそのプログラム | |
Cabac et al. | Net components revisited | |
CN116502005A (zh) | 网络资源配置化生成方法、装置、电子设备及存储介质 | |
Gündoğan | Robotic Process Automation in Desktop Publishing: An Introduction to Software-based Automation of Artwork Processes |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A521 | Request for written amendment filed |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20080811 |
|
A621 | Written request for application examination |
Free format text: JAPANESE INTERMEDIATE CODE: A621 Effective date: 20080811 |
|
A977 | Report on retrieval |
Free format text: JAPANESE INTERMEDIATE CODE: A971007 Effective date: 20110531 |
|
A131 | Notification of reasons for refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A131 Effective date: 20110607 |
|
A521 | Request for written amendment filed |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20110805 |
|
A131 | Notification of reasons for refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A131 Effective date: 20110823 |
|
A521 | Request for written amendment filed |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20111024 |
|
TRDD | Decision of grant or rejection written | ||
A01 | Written decision to grant a patent or to grant a registration (utility model) |
Free format text: JAPANESE INTERMEDIATE CODE: A01 Effective date: 20111213 |
|
A01 | Written decision to grant a patent or to grant a registration (utility model) |
Free format text: JAPANESE INTERMEDIATE CODE: A01 |
|
A61 | First payment of annual fees (during grant procedure) |
Free format text: JAPANESE INTERMEDIATE CODE: A61 Effective date: 20111228 |
|
R150 | Certificate of patent or registration of utility model |
Ref document number: 4902069 Country of ref document: JP Free format text: JAPANESE INTERMEDIATE CODE: R150 Free format text: JAPANESE INTERMEDIATE CODE: R150 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20150113 Year of fee payment: 3 |
|
R250 | Receipt of annual fees |
Free format text: JAPANESE INTERMEDIATE CODE: R250 |
|
R250 | Receipt of annual fees |
Free format text: JAPANESE INTERMEDIATE CODE: R250 |
|
R250 | Receipt of annual fees |
Free format text: JAPANESE INTERMEDIATE CODE: R250 |
|
R250 | Receipt of annual fees |
Free format text: JAPANESE INTERMEDIATE CODE: R250 |
|
R250 | Receipt of annual fees |
Free format text: JAPANESE INTERMEDIATE CODE: R250 |
|
R250 | Receipt of annual fees |
Free format text: JAPANESE INTERMEDIATE CODE: R250 |
|
R250 | Receipt of annual fees |
Free format text: JAPANESE INTERMEDIATE CODE: R250 |
|
EXPY | Cancellation because of completion of term |