JPH10187450A - オブジェクト指向プログラム自動生成装置,自動生成方法およびそのプログラム記憶媒体 - Google Patents

オブジェクト指向プログラム自動生成装置,自動生成方法およびそのプログラム記憶媒体

Info

Publication number
JPH10187450A
JPH10187450A JP26843297A JP26843297A JPH10187450A JP H10187450 A JPH10187450 A JP H10187450A JP 26843297 A JP26843297 A JP 26843297A JP 26843297 A JP26843297 A JP 26843297A JP H10187450 A JPH10187450 A JP H10187450A
Authority
JP
Japan
Prior art keywords
program
generation
pattern
class
information
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.)
Withdrawn
Application number
JP26843297A
Other languages
English (en)
Inventor
Shigeki Naota
繁樹 直田
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Fujitsu Ltd
Original Assignee
Fujitsu Ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Fujitsu Ltd filed Critical Fujitsu Ltd
Priority to JP26843297A priority Critical patent/JPH10187450A/ja
Publication of JPH10187450A publication Critical patent/JPH10187450A/ja
Withdrawn legal-status Critical Current

Links

Abstract

(57)【要約】 【課題】オブジェクト指向プログラムの自動生成技術に
関し,オブジェクト指向プログラム開発の生産性向上を
図ることを目的とする。 【解決手段】クラス定義11の構文を解析した構文解析情
報31と,プログラムパターンを生成する複数のクラス間
の協働関係を記述した生成パターン記述41とに基づい
て,プログラム生成部5によりオブジェクト指向のソー
スプログラム7を生成する。また,生成検証部6により
プログラム生成部5が生成したプログラムが既存の定義
と矛盾していないかどうかを検証する。

Description

【発明の詳細な説明】
【0001】
【発明の属する技術分野】本発明は,オブジェクト指向
プログラム開発の生産性向上を図るためのオブジェクト
指向プログラム自動生成装置,自動生成方法およびその
プログラム記憶媒体に関する。
【0002】
【従来の技術】図31に示すような,従業員情報を表す
C++でのクラス定義を考えるとする。
【0003】図32(A)は,図31に示すクラス定義
の構造を示す図である。このクラス定義をコピーコンス
トラクタでコピーする場合,従来の通常のデフォルトの
操作では,図32(B)に示す構造が生成される。
【0004】しかし,クラス定義の所属(sectio
n)は共通するが,名前(name)はコピー時に新規
に作られるので,図32(C)に示すように,所属のポ
インタは共有し,名前のポインタは別にすることが望ま
しい動作である。
【0005】したがって,コピーコンストラクタの動作
は,図32(C)に示すような動作であることが望まし
いが,図32(C)に示すような生成は,自動的に判断
することができず,ユーザから指定を与える必要があ
る。
【0006】従来,図32(C)に示すようなオブジェ
クト指向プログラムを自動生成する技術はなかった。ま
た従来,一般にプログラムの記述を容易にするための方
法として,マクロ定義による手法が用いられている。
【0007】
【発明が解決しようとする課題】従来のマクロによるプ
ログラム生成方法では,単純な文字列操作しか行ってお
らず,オブジェクト指向プログラムのように,マクロ引
数となるものがオブジェクトのような複雑な構造を持っ
ている場合には,その内部構造を調べることができない
ため,単純な置き換えのような操作しか行えなかった。
【0008】また,既存の定義と矛盾するようなプログ
ラムの生成を行ったとしても,プログラムのコンパイル
を行う前に判断することはできなかった。本発明は上記
問題点の解決を図り,クラス間の関係を記述したオブジ
ェクト指向プログラムのパターンを生成するための記述
と,それへの入力クラス定義からプログラムを自動生成
する場合に,パターン記述中で入力クラス構造情報を利
用できるようにすることにより,オブジェクト指向プロ
グラムを開発する上での生産性向上を図ることを目的と
する。
【0009】
【課題を解決するための手段】本発明は,前記課題を解
決するため,図1に示すような手段を持つ。図1は,本
発明の原理説明図である。図1において,1はクラス定
義記憶部,11はクラス定義,2は構文解析部,3は構
文解析情報記憶部,31は構文解析情報,4は生成パタ
ーン記述記憶部,41は生成パターン記述,5はプログ
ラム生成部,6は生成検証部,61はメンバ変数チェッ
ク部,62はメソッドチェック部,63はスーパークラ
ス重複チェック部,7は生成プログラム(ソースプログ
ラム)を表す。
【0010】クラス定義記憶部1は,オブジェクト指向
プログラムの1または複数のクラス定義11を記憶する
手段である。構文解析部2は,クラス定義11の内部構
造を解析して構文解析情報31を得る手段である。
【0011】構文解析情報記憶部3は,構文解析情報3
1を記憶する手段である。生成パターン記述記憶部4
は,プログラムパターンを生成するための複数のクラス
間の協働関係を記述した生成パターン記述41を記憶す
る手段である。
【0012】プログラム生成部5は,構文解析情報31
を参照しながら,生成パターン記述41に基づいて,指
定されたプログラムパターン(プログラム)の生成を行
う手段である。
【0013】生成検証部6は,プログラム生成部5で生
成されたプログラムが,構文解析情報31で表されてい
る既存のクラス定義と矛盾していないかどうかを検証す
る手段である。
【0014】メンバ変数チェック部61は,プログラム
生成部5で生成されたプログラムのメンバ変数の重複を
判定する手段である。メソッドチェック部62は,プロ
グラム生成部5で生成されたプログラムのメソッドの重
複を判定する手段である。
【0015】スーパークラス重複チェック部63は,プ
ログラム生成部5で生成されたプログラムの多重継承に
よるメンバの重複を判定する手段である。本発明は,以
下のように作用する。
【0016】クラス定義記憶部1に記憶されたクラス定
義11を入力として,構文解析部2では,クラス名,ク
ラスに付加されたコメント,クラスの各メンバ変数につ
いて,名前,型,および付加されたコメントの情報,各
メソッドについては,名前,引数の型情報,付加された
コメントおよび継承関係等について検出し,これらを構
文解析情報31として,構文解析情報記憶部3へ記憶す
る。
【0017】プログラム生成部5では,構文解析情報記
憶部3の構文解析情報31を参照しながら,生成パター
ン記述記憶部4に記憶した生成パターン記述41に基づ
いて指定されたプログラム(プログラムパターン)の生
成を行う。
【0018】その際,生成パターン記述41中の検証記
述を解釈すると,生成検証部6のメンバ変数チェック部
61,メソッドチェック部62,スーパークラス重複チ
ェック部63のいずれかを呼び出し,このプログラム生
成処理において構文解析情報31で表されている既存の
クラス定義との矛盾が発生しないかどうかを検証する。
【0019】このように,生成するプログラムパターン
の検証を行いながら生成処理を行い,生成プログラム
(ソースプログラム)7として出力する。本発明は,生
成するプログラムパターン中に埋め込むクラス情報の内
部構造をを解析して,クラス内部の構文情報を参照する
ことができ,また,生成パターン記述41中のコメント
によるユーザからの意味情報を解釈することができるた
め,生成パターン記述を利用して,プログラムパターン
生成処理での複雑な指定が可能となる。さらに,既存の
クラス定義の構文解析情報を利用して,生成するパター
ンと既存の定義の間の矛盾を生成時に検出するようにパ
ターンを記述することができる。
【0020】以上のオブジェクト指向プログラム自動生
成装置,オブジェクト指向プログラム自動生成方法を実
現するためのプログラムは,適当な記憶媒体に格納して
頒布することができる。
【0021】
【発明の実施の形態】以下,本発明の実施の形態とし
て,本発明をプログラミング言語C++において実施す
る場合の例を説明する。なお,以下の説明では,C++
言語での用語を用いるので,これまでに用いてきたオブ
ジェクト指向言語の一般的用語とは異なった表現とな
る。これらの対応を以下に示す。
【0022】 [一般用語] ←→ [C++での用語] メンバ変数 ←→ データメンバ メソッド ←→ メンバ関数 スーパークラス ←→ ベースクラス サブクラス ←→ 派生クラス 〔1〕クラス定義 図2は,C++で記述した入力クラス定義となる入力プ
ログラムの例を示す図である。「//」は,C++の通
常のコメント指定を表し,その位置から行端までをコメ
ントとみなすものである。
【0023】ここでは,さらに「//!!」というコメ
ント記号を導入し,構文解析時に,この記号後に続く記
述を認識し,対応する名前への意味情報であると解釈す
る。例えば,「//!!has−a」は,そのデータメ
ンバがそのクラスのオブジェクトに含まれるものであ
り,生成や削除が一体として行われることを示す。これ
がない場合には,そのデータメンバは他のオブジェクト
に含まれていて,そこで参照しているだけであることを
示している。
【0024】〔2〕構文解析情報 図3は,図2に示す入力プログラム例に対する構文解析
の結果の例を示す図である。
【0025】構文解析部2により図2に示すクラス定義
の構文を解析することにより,図3に示すような構文解
析情報31が得られる。この構文解析情報31の構造
は,プログラム中に現れるクラス名,データメンバ名を
含む変数名,メンバ関数名を含む関数名および継承関係
がどのように定義されているか等の情報を持つようにな
っている。
【0026】〔3〕生成パターン記述 生成パターン記述は,パターン名,パターン要素(パタ
ーン変数)一覧,生成ルール出力先一覧,生成ルールか
らなる。生成ルールは,さらに,一般生成ルール,メン
バ関数生成ルール,データメンバ変換ルール,宣言追加
ルール,補助関数定義から構成される。
【0027】図4は,生成パターン記述の例を示す図で
ある。図4に示す記述は,既存のアプリケーションクラ
スの外側にタスク管理クラス(TaskMan)の派生
クラスを置き,その派生クラスで外部との通信処理を担
当させるような枠組を生成する場合の生成パターン記述
である。図4(A)は,生成パターン記述のパターン
名,パターン要素,ルール出力先を表す記述,図4
(B)および(C)は一般生成ルールを表す記述の例で
ある。
【0028】生成ルールや補助関数の定義の中で現れる
「!!PRINT_BEGIN」等の「!!」で始まる
大文字の名前は,生成ルールの制御構造や入出力操作を
表すキーワードであり,意味は,通常のプログラミング
言語とほぼ同等である。また,生成パターン記述の中の
「#」以下,行末までがコメントを表し,「!!」で始
まる小文字の名前は,組込関数の呼び出しを表すもので
ある。
【0029】生成ルールの中には,代入文,行出力開始
文(!!PRINT_BEGIN文),行出力終了文
(!!PRINT_END文),条件分岐文(!!I
F),リスト要素繰り返し文(!!FORALL),デ
ータメンバ変換ルール呼び出し文(ルール名(データメ
ンバ名)),関数呼び出し文(!!関数名(引数リス
ト))等の実行文が記述される。以下に実行文を説明す
る。
【0030】図5(A)は,代入文の例を示す図であ
る。代入文は,通常のプログラミング言語と同様に,等
号記号の右辺から左辺へ代入処理を行うことを表すもの
である。
【0031】図5(B)は,行出力開始文「!!PRI
NT_BEGIN文」および行出力終了文「!!PRI
NT_END文」の例を示す図である。行出力開始文
「!!PRINT_BEGIN文」は,生成結果を出力
するための実行文であり, 1)生成ルール中の次の行を読み込み, 2)その行内に現れる生成ルールの変数($記号で始ま
る)を調べ,その変数の出現を現在の値の文字列表現に
置き換え, 3)全ての変数の置き換えが終了すると,その行を出力
する,という処理を,行出力終了文「!!PRINT_
END文」が現れるまで繰り返すことを表す。
【0032】図5(C)は,図5(B)に示す例の出力
結果である。図5(D)は,条件分岐文「!!IF」の
例を示す図である。条件分岐文は,通常のプログラミン
グ言語と同様に,条件分岐処理を行うことを表すもので
ある。この例では,生成ルールの変数$xが100のと
き,$yに相当する変数に10を代入する実行文の行を
出力し,そうでない場合に,$yに相当する変数に1を
代入する実行文の行を出力する。
【0033】図5(E)は,リスト要素繰り返し文「!
!FORALL」の例を示す図である。リスト要素繰り
返し文「!!FORALL」は,INの後に指定された
リストの要素を先頭から順に取り出し,第1要素で指定
された変数に代入した上で,括弧{ }内の処理を実行
し,これをリストの終端に達するまで繰り返すことを表
すものである。
【0034】データメンバ変換ルール呼び出し文「ルー
ル名(データメンバ名)」は,データメンバ名を引数と
し,さらにその定義情報をグローバル変数に設定した上
で,ルールの定義の実行を行うことを表すものである。
【0035】関数呼び出し文「!!関数名(引数リス
ト)」は,ユーザ定義補助関数または組込関数をサブル
ーチンコールすることを表すものである。組込関数の処
理では,ユーザ定義の補助関数の他に,構文解析情報を
利用するための以下のような組込関数を実行できるよう
にする。
【0036】・type_string(メンバ名) ・comment_check(名前,コメント文字
列) ・member_vars(クラス名) ・base_classes(クラス名) ・add_base_list(ベースクラス名) ・replace_header(文字列) ・error(文字列) ・warning(文字列) ・生成検証の組込関数 「type_string(メンバ名)」は,データメ
ンバ変換ルールにおいて,現在処理対象となっているメ
ンバ名の定義を取り出し,型の情報を文字列にして返す
関数である。
【0037】「comment_check(名前,コ
メント文字列)」は,第1引数で指定した名前の定義を
検索し,そのコメントに第2引数の文字列が含まれるか
どうかを調べる関数である。この場合の検索範囲は,一
般生成ルールではグローバルな名前表であり,メンバ関
数生成ルールおよび宣言追加ルールにおいては,現在処
理対象のクラスとそのクラスのメンバ定義である。
【0038】「member_vars(クラス名)」
は,指定されたクラスの全てのデータメンバを取り出
し,リストにして返す関数である。「base_cla
sses(クラス名)」は,指定されたクラスの全ての
ベースクラスを取り出し,リストにして返す関数であ
る。
【0039】「add_base_list(ベースク
ラス名)」は,現在処理対象のクラスに対して,引数の
クラスをpublicなベースクラスとして追加する関
数である。
【0040】「replace_header(文字
列)」は,引数で指定した文字列でクラス宣言のヘッド
部(クラス名およびベースクラス宣言部)を置き換える
関数である。文字列中に変数参照が含まれている場合に
は,その部分はあらかじめその変数の値に置き換えられ
る。
【0041】「error(文字列)」は,エラーメッ
セージを出して生成処理を中断する関数である。「wa
rning(文字列)」は,警告メッセージを出して,
生成処理についてはそのまま続行する関数である。
【0042】さらに,生成検証部6の各部を呼び出す組
込関数としては,「check_member」,「c
heck_method」,「check_dupli
cate」がある。
【0043】「check_member」は,データ
メンバの重複の判定を行うデータメンバチェック部61
を呼び出す関数である。「check_method」
は,メンバ関数の重複の判定を行うメンバ関数チェック
部62を呼び出す関数である。
【0044】「check_duplicate」は,
多重継承によるメンバ名の重複の判定を行うベースクラ
ス重複チェック部63を呼び出す関数である。 〔4〕プログラム生成部の動作 プログラム生成部5は,構文解析情報31と生成パター
ン記述41とをもとにして生成ルール等の実行処理を行
う。
【0045】ルール実行処理においては,メンバ関数生
成ルールおよび宣言追加ルールにもとづいて,プログラ
ムパターンを生成する。メンバ関数生成ルールおよび宣
言追加ルールは,予め処理対象のクラスを指定して実行
する。データメンバ変換ルールおよび補助関数は,これ
らのルール実行処理の中で呼び出される。
【0046】次に,ルール実行処理において用いられる
メンバ関数生成ルールおよび宣言追加ルールについて説
明する。 (1)初めに,コピーコンストラクタを定義する生成パ
ターン記述の例の一部を示す。図6は,コピーコンスト
ラクタを定義する生成パターン記述の2つのデータメン
バ変換ルールの例を示している。
【0047】図6(A)に示すデータメンバ変換ルール
では,!!type_string関数によって,デー
タメンバの型についての情報を構文解析情報31から取
得し,取得したデータメンバの型の種別に応じたコピー
のための初期指定子の生成処理を記述している。
【0048】図6(B)に示すデータメンバ変換ルール
では,さらに!!comment_check関数を用
いて,コメントとして付加された「has−a」関係の
指定の有無を調べて,それに基づき生成する処理を分岐
させている。
【0049】図7は,コピーコンストラクタ関数の宣言
を生成するための宣言追加ルールの例を示す図である。
図6に示すデータメンバ変換ルールを用いて,図7に示
す宣言追加ルールにより,コピーコンストラクタ関数の
宣言が生成される。
【0050】図8は,コピーコンストラクタ関数の定義
を生成するためのメンバ関数生成ルールの例を示す図で
ある。図8に示すメンバ関数生成ルールにより,コピー
コンストラクタ関数の定義を生成することができる。
【0051】このように,本発明では,生成パターン記
述中の実行文により,クラス定義の構文解析情報から得
られるクラスのメンバ変数に関する名前,型の情報,メ
ンバに付加したプログラム中のコメントの情報等を参照
することができ,それに応じてプログラムパターンを条
件分けして生成することができる。
【0052】(2)さらに,プログラムパターンの生成
時に,生成パターン記述中の宣言追加ルールにおいて,
クラス宣言に追加するデータメンバが既存のクラス定義
と衝突するかどうかをチェックする組込関数「!!ch
eck_member」を呼び出すことにより,不適切
な生成が行われることを防ぐことができる。!!che
ck_member関数は,生成検証部6のデータメン
バチェック部61を呼び出し,追加するデータメンバ名
が与えられたクラスの既存のデータメンバと衝突しない
ことを構文解析情報31を用いて検査する。
【0053】図9は,!!check_member関
数を使用した宣言追加ルールの例を示している。 (3)図10は,メンバ関数(メソッド)の情報を利用
して生成するプログラムパターンを書き分ける場合の例
を示す図である。図10に示すように,入力したクラス
定義中に,パラメータが特定の値の時にコメントを指定
して,それらの呼び出しをまとめる関数を生成する。
【0054】生成ルールとしては,図11に示すような
メンバ関数生成ルールを記述する。このメンバ関数生成
ルール中では,comment_check関数で指定
された関数を認識し,かつ,comment_para
ms関数でコメントから指定された引数を利用して,場
合分け処理を生成できるようにしている。
【0055】これにより,生成パターン記述中で,クラ
ス定義の構造を解析した構文解析情報31から得られる
クラスのメソッドの名前,型の情報,メソッドに付加し
たプログラム中のコメント等の情報を参照することがで
き,それに応じて,生成するプログラムパターンを条件
分けして生成することができる。なお,宣言追加ルール
は省略する。
【0056】(4)オブジェクト指向型のプログラミン
グ言語では,一般にメソッドの多重定義を許し,メソッ
ド名が同じであっても引数の型や個数が異なれば,それ
は別のメソッドとして扱われる。そこで,正しい重複チ
ェックを行うためには引数の個数や型情報に合わせて重
複チェックを行う必要がある。
【0057】図12は,このような場合のコピーコンス
トラクタ関数の宣言追加ルールの例を示す図である。図
12に示す例は,前出の項目(1)の例で示したような
コピーコンストラクタで重複した定義を生成するのを避
けるような記述の例を表している。なお,宣言追加ルー
ルだけを示すが,メンバ関数生成ルールのほうも同様で
ある。
【0058】この場合,check_method関数
が生成検証部6のメンバ関数チェック部62を呼び出
す。メンバ関数チェック部62では,まず,文字列で指
定されたメンバ関数宣言(コピーコンストラクタの宣
言)の構造を解析する。次に,解析結果を該当するクラ
ス内のメンバ関数定義情報と対照して,衝突の有無を確
認する処理を行う。
【0059】これにより,メソッドの多重定義をも考慮
して,既存の定義と衝突するプログラムパターンを生成
しないように,生成パターン記述41で制御することが
可能となる。
【0060】(5)クラスのデータメンバの内容をベー
スクラス(スーパークラス)を含めてすべて出力するよ
うな出力関数を生成するルールは,図13のようにベー
スクラスの有無を参照した上で処理を行うことができ
る。
【0061】図13は,このような出力関数を生成する
メンバ関数生成ルールの例を示す図である。このルール
では,ベースクラスの継承に関する情報を一緒に生成す
るようにしている。
【0062】これにより,生成パターン記述中で,クラ
ス定義の構文解析情報から得られるベースクラス(スー
パークラス)に関する情報を参照することができ,それ
に応じて,プログラムパターンを条件分けして生成する
ことができる。
【0063】(6)既存クラスに,あるベースクラス
(スーパークラス)を継承させて新しい機能を持たせる
ような生成パターン記述を定義する場合を考える。この
場合,継承させたクラスのメンバが,既存クラスのメン
バに上書きされてしまう可能性があるので,プログラム
パターンの生成時に,警告を出すように生成パターン記
述のルールを定義する必要がある。
【0064】図14は,このようなベースクラス追加の
場合の宣言追加ルールの例を示す図である。ここで,
「replace_header」は,クラス定義の先
頭を置き換えることを表している。
【0065】このルールにより,構文解析情報の継承に
関する情報を利用して,継承している既存の定義を上書
きする場合には警告を発するように,生成パターン記述
41で制御することができる。
【0066】(7)前項(6)と同様に,既存クラス
に,あるベースクラス(スーパークラス)を継承させて
新しい機能を持たせるような生成パターン記述を定義す
る場合を考える。このとき対象となる既存クラスが既に
別のベースクラスを継承している場合には,そのベース
クラスと新たに継承させるクラスの間にメンバ名の衝突
が起こる可能性がありうる。このような場合には,生成
したクラスで,その衝突したメンバを参照するとコンパ
イルエラーを起こしてしまう。そこで,あらかじめ生成
時にこのような衝突を避けるように,ルールを記述する
ことができるようにしている。
【0067】図15は,このようなベースクラス追加の
場合の宣言追加ルールの例を示す図である。このルール
により,継承に関する情報を利用して,既存の多重継承
の関係と衝突するプログラムパターンを生成しないよう
に,生成パターン記述41で制御することができる。
【0068】(8)一定の性質を持つ要素オブジェクト
からなる複合的な構造に対して,一連の処理を行う場合
を考える。それらの処理を個々の要素オブジェクトの中
に持たせていたのでは,全体が複雑になってしまう。す
なわち,類似する処理が必要になるたびに,個々の要素
オブジェクトに処理を定義していたのでは,全体が複雑
になってしまう。
【0069】例えば,図形データなどの複雑な構造を持
つデータをプリンタに出力する場合に,出力するプリン
タの機能によって異なる処理を行うことになるが,それ
らの処理を個々の図形データの側に持たせることは,機
能を柔軟に追加する上で避けるべきである。
【0070】したがって,このような処理を柔軟に行う
ために,Visitorパターンと呼ばれるものが知ら
れている。まず,このVisitorパターンについて
説明する。
【0071】処理対象の要素は,すべてElememt
というベースクラスを継承する。Elementに対し
て行われる処理を代表するクラスをProcessor
とする。Element側には,Processorの
ポインタを受け取るacceptという仮想メンバ関数
を宣言する。この関数の定義は,個々の具体的な要素ご
とに行い,プロセッサ側で用意されている個々の要素の
処理を定義した関数に対して,自分のポインタを渡すだ
けの処理を行う。
【0072】図16は,Elementのクラス定義の
例を示す図である。図16中,E1,…,Emが具体的
な要素のクラスを指している。図17は,処理を行うP
rocessor側のクラス定義の例を示す図である。
図17中,具体的な要素ごとの処理がベースクラスのP
rocessorの仮想メンバ関数として宣言され,個
々の処理は,個別の処理クラスP1,…,Pnで実現さ
れる。
【0073】図18は,このような生成パターン記述中
での役割をコメントで指定する例を示す図である。前述
したようなパターンを生成する場合に,入力の与えられ
るクラスが,Elementのサブクラスになる要素ク
ラス群と,Processorのサブクラスになる一つ
のクラスであるとする。それらの生成パターン記述の中
で,図18に示すように役割をコメントで指定してお
く。
【0074】これに対し,Elementの継承を追加
する生成パターン記述の宣言追加ルールの例を図19に
示す。Elementクラスは,既存であるとする。図
20〜図23は,その他のルールの例を示す図である。
【0075】図20は,accept追加の宣言追加ル
ールの例を示す図であり,図21は,Processo
rを生成する場合の一般生成ルールの例を示す図であ
り,図22は,Processor継承の宣言追加ルー
ルの例を示す図であり,図23は,Processor
関数宣言生成の宣言追加ルールの例を示す図である。
【0076】ここでは,これまでの例と同様にcomm
ent_check関数によって,クラスに付加された
コメントを認識し,プログラムパターン中でのそのクラ
スの役割を判定し,必要な継承の追加を行っている。
【0077】これにより,あらかじめ複数のクラス定義
やそのメンバについて,各々のプログラムパターン内で
の役割をコメントとして与え,生成パターン記述中で
は,それを意味情報として利用することにより,プログ
ラムパターンの生成処理を行うことができる。
【0078】(9)前項の(8)において,Proce
ssorのサブクラスであるP1クラスが必要な処理を
行うために,Elementの全てのサブクラスが特定
のメンバ関数「void mf()」を持つことを要求
する場合がある。そのために,P1クラスに,「Req
uest_Element_method(’void
mf()’)」というコメントを付加する。
【0079】これを解釈するための確認用の補助関数が
必要である。図24は,このような補助関数の例を示す
図である。これを生成パターン記述のルールの中で使用
し,Element側が与えられた条件を満たすかどう
かをチェックする。図24中の,check_meth
od関数は,先に用いた重複をチェックするものである
ため,結果がOKでない場合は,関数が未定義であるこ
とを示している。
【0080】次に,プログラム生成部5の動作を説明す
る。図25は,プログラム生成部5の動作の概要を示す
フローチャートである。ステップS1では,プログラム
生成部5は,生成パターン記述記憶部4に記憶された生
成パターン記述41を読み込む。
【0081】ステップS2では,生成パターン記述41
の中にユーザ入力パターン要素があるかどうかを判定す
る。ユーザ入力パターン要素がある場合には,ステップ
S3,S4の処理を行い,ユーザ入力パターン要素がな
い場合にはステップS5の処理へ進む。
【0082】ステップS3では,ユーザに対し,ユーザ
入力パターン要素の入力を要求する。ステップS4で
は,入力したユーザ入力パターン要素の設定を行う。
【0083】次に,ステップS5では,構文解析情報記
憶部3に記憶された構文解析情報31を読み込む。ステ
ップS6では,ファイル入力パターン要素があるかどう
かを判定する。ファイル入力パターン要素がある場合に
は,ステップS7の処理を行い,ファイル入力パターン
要素がない場合にはステップS8の処理へ進む。
【0084】ステップS7では,パターン要素名を生成
指示コメントに持つクラス名やメンバ名をパターン要素
に設定する。ステップS8では,後述する生成ルール実
行処理を行い,処理を終了する。
【0085】図26は,図25のステップS8に示す生
成ルール実行処理の処理フローチャートである。ステッ
プS11では,生成パターン記述41から,一般生成ル
ールを順に取り出す。
【0086】ステップS12では,一般生成ルールがあ
るかどうかを判定する。一般生成ルールがある場合には
ステップS13の処理へ進み,一般生成ルールがない場
合にはステップS15の処理へ進む。
【0087】ステップS13では,生成するプログラム
の出力先ファイルを決める。ステップS14では,取り
出した一般生成ルールを実行する。その後,ステップS
11へ戻る。
【0088】ステップS15では,入力したクラスを順
に取り出す。ステップS16では,クラスがあるかどう
かを判定する。クラスがある場合にはステップS17,
S18の処理を行い,クラスがない場合には処理を終了
する。
【0089】ステップS17では,ルールの処理対象に
そのクラスを設定する。ステップS18では,メンバ関
数生成ルールおよび宣言追加ルールを実行し,その後,
ステップS15へ戻り,同様に処理を繰り返す。
【0090】図27は,図26のステップS18に示す
メンバ関数生成ルールおよび宣言追加ルールを実行する
処理の処理フローチャートである。ステップS21で
は,メンバ関数生成ルールを順に取り出す。
【0091】ステップS22では,メンバ関数生成ルー
ルがあるかどうかを判定する。メンバ関数生成ルールが
ある場合にはステップS23,S24の処理を行い,メ
ンバ関数生成ルールがない場合にはステップS25の処
理へ進む。
【0092】ステップS23では,生成するプログラム
の出力先ファイルを決める。ステップS24では,取り
出したメンバ関数生成ルールを実行し,その後,ステッ
プS21へ戻る。
【0093】次に,ステップS25では,宣言追加ルー
ルを順に取り出す。ステップS26では,宣言追加ルー
ルがあるかどうかを判定する。宣言追加ルールがある場
合にはステップS27,S28の処理を行い,宣言追加
ルールがない場合には処理を終了する。
【0094】ステップS27では,入力クラス定義ファ
イルからクラス定義の宣言追加位置を特定する。ステッ
プS28では,取り出した宣言追加ルールを実行し,そ
の後,ステップS25へ戻る。
【0095】次に,生成検証部6の動作を説明する。図
28は,メンバ変数(データメンバ)チェック部61の
処理フローチャートである。
【0096】ステップS31では,構文解析情報31か
ら与えられたクラス名に対応するクラス定義情報を得
る。ステップS32では,取得したクラス定義情報から
メンバ定義表を得る。
【0097】ステップS33では,メンバ定義表に与え
られたデータメンバがあるかどうかを判定する。データ
メンバがある場合にはステップS34の処理を行い,デ
ータメンバがない場合にはステップS35の処理を行
う。
【0098】ステップS34では,プログラム生成部5
へNGを返して処理を終了する。ステップS35では,
プログラム生成部5へOKを返して処理を終了する。図
29は,メソッド(メンバ関数)チェック部62の処理
フローチャートである。
【0099】ステップS41では,構文解析情報31か
ら,与えられたクラス名に対応するクラス定義情報を得
る。ステップS42では,取得したクラス定義情報から
メンバ定義表を得る。
【0100】ステップS43では,メンバ定義表に与え
られたメンバ関数名があるかどうかを判定する。メンバ
関数名がある場合にはステップS44の処理へ進み,メ
ンバ関数名がない場合にはステップS48の処理へ進
む。
【0101】ステップS44では,メンバ定義表からメ
ンバ関数名に対応する関数定義リストを取り出す。ステ
ップS45では,関数定義リストの要素順に要素を取り
出す。
【0102】ステップS46では,呼出形式が一致して
いるかどうかを判定する。呼出形式が一致している場合
にはステップS49の処理を行い,呼出形式が一致して
いない場合にはステップS47の処理を行う。
【0103】ステップS47では,次の要素があるかど
うかを判定し,次の要素がある場合にはステップS45
の処理を行い,チェックを繰り返す。次の要素がない場
合にはステップS48の処理を行う。
【0104】ステップS48では,プログラム生成部5
へOKを返して処理を終了する。ステップS49では,
プログラム生成部5へNGを返して処理を終了する。図
30は,スーパークラス(ベースクラス)重複チェック
部63の処理フローチャートである。
【0105】ステップS51では,構文解析情報31か
ら,追加するベースクラス名に対応するクラス定義情報
を得る。ステップS52では,取得したクラス定義情報
からメンバ定義表を得る。
【0106】ステップS53では,メンバ定義表からメ
ンバを順に取り出す。ステップS54では,メンバの種
別を調べ,メンバがデータメンバの場合にはステップS
55の処理を行い,メンバがメンバ関数の場合にはステ
ップS56の処理を行う。
【0107】ステップS55では,メンバ名と既存ベー
スクラス名とでデータメンバチェック部61を呼び出
し,ステップS57でその結果の真偽を判定する。ステ
ップS56では,メンバ名と既存ベースクラス名とでメ
ンバ関数チェック部62を呼び出し,ステップS57で
その結果の真偽を判定する。
【0108】ステップS57では,判定の結果が真(O
K)であれば,ステップS58の処理を行い,判定の結
果が偽(NG)であれば,ステップS60の処理を行
う。ステップS58では,次のメンバがあるかどうかを
判定し,次のメンバがある場合にはステップS53の処
理へ戻り,同様に処理を繰り返す。次のメンバがない場
合にはステップS59の処理を行う。
【0109】ステップS59では,プログラム生成部5
へOKを返して処理を終了する。ステップS60では,
プログラム生成部5へNGを返して処理を終了する。
【0110】
【発明の効果】以上説明したように,本発明では,生成
パターン記述に所定の記述を行うことにより,生成する
プログラムパターン中に埋め込むクラス情報の内部構造
を利用して生成するプログラムパターンの複雑な指定が
可能になり,さらに,既存の定義構造情報を利用して,
生成するプログラムパターンと既存の定義の間の矛盾を
プログラムパターン生成時に検出できる。
【0111】また,生成パターン記述中のコメントを,
ユーザからの意味情報として利用することにより,生成
するプログラムパターンの複雑な指定が可能になる。
【図面の簡単な説明】
【図1】本発明の原理説明図である。
【図2】入力クラス定義となる入力プログラムの例を示
す図である。
【図3】入力プログラム例に対する構文解析の結果の例
を示す図である。
【図4】生成パターン記述の例を示す図である。
【図5】生成ルールの実行文の例を示す図である。
【図6】コピーコンストラクタを定義するデータメンバ
変換ルールの例を示す図である。
【図7】コピーコンストラクタ関数の宣言追加ルールの
例を示す図である。
【図8】コピーコンストラクタ関数のメンバ関数生成ル
ールの例を示す図である。
【図9】データメンバチェック部を呼び出す関数を含む
宣言追加ルールの例を示す図である。
【図10】メンバ関数の情報を利用して生成を書き分け
る場合のパターン記述の例を示す図である。
【図11】メンバ関数の情報を利用して生成を書き分け
る場合のメンバ関数生成ルールの例を示す図である。
【図12】メソッドの多重定義をチェックする関数を含
む宣言追加ルールの例を示す図である。
【図13】クラスのデータメンバの内容をすべて出力す
るような出力関数を生成する場合のメンバ関数生成ルー
ルの例を示す図である。
【図14】既存クラスのメンバへの上書きを警告する関
数を含む宣言追加ルールの例を示す図である。
【図15】既存の定義との衝突を警告する関数を含む宣
言追加ルールの例を示す図である。
【図16】Elementのクラス定義の例を示す図で
ある。
【図17】処理を行うProcessor側のクラス定
義の例を示す図である。
【図18】生成パターン記述中での役割をコメントで指
定する例を示す図である。
【図19】Element継承を追加する場合の宣言追
加ルールの例を示す図である。
【図20】accept関数を追加する場合の宣言追加
ルールの例を示す図である。
【図21】Processorを生成する場合の一般生
成ルールの例を示す図である。
【図22】Processor継承の宣言追加ルールの
例を示す図である。
【図23】Processor関数宣言生成の宣言追加
ルールの例を示す図である。
【図24】補助関数の例を示す図である。
【図25】プログラム生成部の動作の概要を示すフロー
チャートである。
【図26】生成ルール実行処理の処理フローチャートで
ある。
【図27】メンバ関数生成ルールおよび宣言追加ルール
を実行する処理フローチャートである。
【図28】メンバ変数チェック部の処理フローチャート
である。
【図29】メソッドチェック部の処理フローチャートで
ある。
【図30】スーパークラス重複クラスチェック部の処理
フローチャートである。
【図31】従来の方法を説明する図である。
【図32】従来の方法を説明する図である。
【符号の説明】
1 クラス定義記憶部 11 クラス定義 2 構文解析部 3 構文解析情報記憶部 31 構文解析情報 4 生成パターン記述記憶部 41 生成パターン記述 5 プログラム生成部 6 生成検証部 61 メンバ変数チェック部 62 メソッドチェック部 63 スーパークラス重複チェック部 7 生成プログラム(ソースプログラム)

Claims (12)

    【特許請求の範囲】
  1. 【請求項1】 オブジェクト指向プログラムを自動的に
    生成するオブジェクト指向プログラム自動生成装置であ
    って,オブジェクト指向プログラムの1または複数のク
    ラス定義を記憶するクラス定義記憶部と,クラス定義の
    構文を解析して構文解析情報を得る構文解析手段と,前
    記構文解析情報を記憶する構文解析情報記憶部と,プロ
    グラムパターンを生成するための複数のクラス間の協働
    関係を記述した生成パターン記述を記憶する生成パター
    ン記述記憶部と,前記構文解析情報を参照しながら,前
    記生成パターン記述に基づいて,指定されたプログラム
    の生成を行うプログラム生成手段とを備えることを特徴
    とするオブジェクト指向プログラム自動生成装置。
  2. 【請求項2】 請求項1記載のオブジェクト指向プログ
    ラム自動生成装置において,前記プログラム生成手段で
    生成されたプログラムが,既存の定義と矛盾していない
    かどうかを検証する生成検証手段を備えることを特徴と
    するオブジェクト指向プログラム自動生成装置。
  3. 【請求項3】 請求項1記載のオブジェクト指向プログ
    ラム自動生成装置において,前記プログラム生成手段
    は,生成するパターンの記述の中で,前記構文解析情報
    から得られるクラスのメンバ変数に関する名前,型の情
    報,メンバに付加したプログラム中のコメント情報を参
    照し,それに応じてパターンを条件分けしてプログラム
    を生成することを特徴とするオブジェクト指向プログラ
    ム自動生成装置。
  4. 【請求項4】 請求項1記載のオブジェクト指向プログ
    ラム自動生成装置において,前記プログラム生成手段
    は,生成するパターンの記述の中で,前記構文解析情報
    から得られるスーパークラスに関する情報を参照し,そ
    れに応じてパターンを条件分けしてプログラムを生成す
    ることを特徴とするオブジェクト指向プログラム自動生
    成装置。
  5. 【請求項5】 請求項1記載のオブジェクト指向プログ
    ラム自動生成装置において,前記生成パターン記述の中
    に,前記プログラム生成手段が,継承関係に関する情報
    を利用して,継承している既存の定義を上書きする場合
    には警告を発生するための記述を有することを特徴とす
    るオブジェクト指向プログラム自動生成装置。
  6. 【請求項6】 請求項1記載のオブジェクト指向プログ
    ラム自動生成装置において,前記クラス定義は,複数の
    入力クラスやそのメンバについて,各々のパターン内で
    の役割をプログラム中のコメントとして持ち,前記プロ
    グラム生成手段は,前記生成パターン記述の中では当該
    コメントを意味情報として利用してプログラムを生成す
    ることを特徴とするオブジェクト指向プログラム自動生
    成装置。
  7. 【請求項7】 請求項2記載のオブジェクト指向プログ
    ラム自動生成装置において,前記生成検証手段は,前記
    構文解析情報から,生成時にパターンの役割に埋め込ま
    れるクラスが対応する役割の保持しているべきメソッド
    やメンバの条件を満たしているかどうかを確認するた
    め,メンバ変数の重複,メソッドの重複,または,多重
    継承によるメンバの重複の少なくともいずれかの判定を
    行う手段を持つことを特徴とするオブジェクト指向プロ
    グラム自動生成装置。
  8. 【請求項8】 請求項2記載のオブジェクト指向プログ
    ラム自動生成装置において,前記生成パターン記述の中
    に,前記プログラム生成手段が,前記構文解析情報のメ
    ンバ変数の名前情報を利用して,入力中の既存の定義と
    衝突する記述を生成しないように,前記生成検証手段に
    よって制御するための記述を有することを特徴とするオ
    ブジェクト指向プログラム自動生成装置。
  9. 【請求項9】 請求項2記載のオブジェクト指向プログ
    ラム自動生成装置において,前記生成パターン記述の中
    に,前記プログラム生成手段が,前記構文解析情報のメ
    ソッドの名前と引数の個数と型情報とを利用して,メソ
    ッドの多重定義をも考慮して既存の定義と衝突する記述
    を生成しないように,前記生成検証手段によって制御す
    るための記述を有することを特徴とするオブジェクト指
    向プログラム自動生成装置。
  10. 【請求項10】 請求項2記載のオブジェクト指向プロ
    グラム自動生成装置において,前記生成パターン記述の
    中に,前記プログラム生成手段が,前記構文解析情報の
    継承に関する情報を利用して,既存の多重継承の関係と
    衝突する記述を生成しないように,前記生成検証手段に
    よって制御するための記述を有することを特徴とするオ
    ブジェクト指向プログラム自動生成装置。
  11. 【請求項11】 オブジェクト指向プログラムを自動的
    に生成するオブジェクト指向プログラム自動生成方法に
    おいて,オブジェクト指向プログラムの1または複数の
    クラス定義の構文を解析して構文解析情報を得る過程
    と,前記構文解析情報を参照しながら,プログラムパタ
    ーンを生成するための複数のクラス間の協働関係を記述
    した生成パターン記述に基づいて,指定されたプログラ
    ムの生成を行う過程と,前記過程で生成されたプログラ
    ムが,前記構文解析情報で表されている既存の定義と矛
    盾していないかどうかを検証する過程とを備えることを
    特徴とするオブジェクト指向プログラム自動生成方法。
  12. 【請求項12】 オブジェクト指向プログラムを自動的
    に生成するオブジェクト指向プログラム自動生成方法を
    実現するためのプログラムを格納したプログラム記憶媒
    体であって,オブジェクト指向プログラムの1または複
    数のクラス定義の構文を解析して構文解析情報を得る過
    程と,前記構文解析情報を参照しながら,プログラムパ
    ターンを生成するための複数のクラス間の協働関係を記
    述した生成パターン記述に基づいて,指定されたプログ
    ラムの生成を行う過程と,前記過程で生成されたプログ
    ラムが,前記構文解析情報で表されている既存の定義と
    矛盾していないかどうかを検証する過程とを計算機に実
    行させるプログラムを格納したことを特徴とするプログ
    ラム記憶媒体。
JP26843297A 1996-11-07 1997-10-01 オブジェクト指向プログラム自動生成装置,自動生成方法およびそのプログラム記憶媒体 Withdrawn JPH10187450A (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP26843297A JPH10187450A (ja) 1996-11-07 1997-10-01 オブジェクト指向プログラム自動生成装置,自動生成方法およびそのプログラム記憶媒体

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
JP29470096 1996-11-07
JP8-294700 1996-11-07
JP26843297A JPH10187450A (ja) 1996-11-07 1997-10-01 オブジェクト指向プログラム自動生成装置,自動生成方法およびそのプログラム記憶媒体

Publications (1)

Publication Number Publication Date
JPH10187450A true JPH10187450A (ja) 1998-07-21

Family

ID=26548310

Family Applications (1)

Application Number Title Priority Date Filing Date
JP26843297A Withdrawn JPH10187450A (ja) 1996-11-07 1997-10-01 オブジェクト指向プログラム自動生成装置,自動生成方法およびそのプログラム記憶媒体

Country Status (1)

Country Link
JP (1) JPH10187450A (ja)

Cited By (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6792596B2 (en) 2000-03-23 2004-09-14 International Business Machines Corporation Method and system for protecting resource central programs
US7669192B2 (en) 2005-10-31 2010-02-23 International Business Machines Corporation Method to find a violation of a coding rule in program
CN105511867A (zh) * 2015-11-30 2016-04-20 华为技术有限公司 一种优化模式自动生成方法及优化装置
KR20200099796A (ko) * 2019-02-15 2020-08-25 주식회사 씽크소프트 Secs 메시지 소스 코드 자동 생성 시스템 및 방법

Cited By (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6792596B2 (en) 2000-03-23 2004-09-14 International Business Machines Corporation Method and system for protecting resource central programs
US7669192B2 (en) 2005-10-31 2010-02-23 International Business Machines Corporation Method to find a violation of a coding rule in program
CN105511867A (zh) * 2015-11-30 2016-04-20 华为技术有限公司 一种优化模式自动生成方法及优化装置
CN105511867B (zh) * 2015-11-30 2019-04-23 华为技术有限公司 一种优化模式自动生成方法及优化装置
KR20200099796A (ko) * 2019-02-15 2020-08-25 주식회사 씽크소프트 Secs 메시지 소스 코드 자동 생성 시스템 및 방법

Similar Documents

Publication Publication Date Title
US6901579B1 (en) Generation of source code from classes and maintaining the comment that indicates the role of the class in the generated source code
JP2802005B2 (ja) 障害検出方法
Waters The programmer's apprentice: A session with KBEmacs
EP1388064B1 (en) System and method for combinatorial test generation in a compatibility testing environment
JP4195479B2 (ja) インクリメンタル生成システム
US5493682A (en) Object based system for software maintenance
US8122440B1 (en) Method and apparatus for enumerating external program code dependencies
KR100942322B1 (ko) 마크업 내부에서 명시적으로 서브클래스를 정의하고 이용하는 시스템 및 방법
CN111796831B (zh) 一种多芯片兼容的编译方法和装置
JP2021533485A (ja) プログラムの機能を向上するための制御フローシステム、非一時的可読媒体、および方法
US11593076B2 (en) Method for merging architecture data
US5353433A (en) Method and apparatus for organizing and analyzing timing information
Wille et al. Variability mining of state charts
US6275986B1 (en) Compile-time data dependency verification
JPH10187450A (ja) オブジェクト指向プログラム自動生成装置,自動生成方法およびそのプログラム記憶媒体
CN114217773B (zh) 一种c/c++语言软件包二进制接口兼容性自动化判别方法
US11442845B2 (en) Systems and methods for automatic test generation
US6606616B1 (en) Modified action rules
US7146600B2 (en) Method and apparatus for deriving multiple test source files from one source file
Paradkar SALT-an integrated environment to automate generation of function tests for APIs
JP2004086545A (ja) データ項目の状態を管理することでプログラムを自動生成するプログラム開発支援システム
EP4290368A1 (en) Computer-implemented method and system for generating a command pipeline for controlling a technical device
Petzold et al. From STPA to Safe Behavior Models
Abdallah et al. A provably correct functional programming approach to the prototyping of formal Z specifications
Anguel et al. Towards models and metamodels co-evolution approach

Legal Events

Date Code Title Description
A300 Withdrawal of application because of no request for examination

Free format text: JAPANESE INTERMEDIATE CODE: A300

Effective date: 20041207