(57)【要約】【課題】  コンポーネントに不要な機能を含まない軽量なスタブやスケルトンを自動生成できるようにする。【解決手段】  ＩＤＬ定義解析部５１は、入力したＩＤＬ定義２を解析し、ＩＤＬ定義解析情報５２を生成する。また、コンポーネント定義解析部５３は、入力したコンポーネント定義６を解析し、コンポーネント定義解析情報５４を生成する。コンポーネント機能解析部５５は、ＩＤＬ定義解析情報５２及びコンポーネント定義解析情報５４にもとづいて各コンポーネントで用いられる機能を解析し、解析結果を含むコンポーネント機能解析情報５６を生成する。コンポーネントコード生成部５７は、コンポーネント機能解析情報５６にもとづいて各コンポーネントで用いられる機能に対応するコードを生成し、生成したコードを含むコンポーネント用スタブ７やコンポーネント用スケルトン８を生成する。【選択図】  図１
2006048236.tif 000002
【特許請求の範囲】
【請求項１】
ソフトウェアで用いられるインタフェースの定義を示すインタフェース定義データにもとづいて、スタブ又はスケルトンを生成するＩＤＬコンパイル装置であって、
前記ソフトウェアに含まれるコンポーネントで用いられる機能の定義を示すコンポーネント定義データを入力するコンポーネント定義入力手段と、
前記コンポーネント定義入力手段が入力したコンポーネント定義データにもとづいて、前記インタフェース定義データで定義されるインタフェースのうち、コンポーネントで用いられる機能に対応するインタフェースを抽出するインタフェース抽出手段と、
前記インタフェース抽出手段が抽出したインタフェースに対応するコードを生成し、前記生成したコードを含むスタブ又はスケルトンを生成するコード生成手段と
を備えたことを特徴とするＩＤＬコンパイル装置。
【請求項２】
コンポーネント定義入力手段は、ソフトウェアに含まれる複数のコンポーネントで用いられる機能の定義を示すコンポーネント定義データを入力し、
インタフェース抽出手段は、前記コンポーネント定義データにもとづいて、コンポーネントで用いられる機能に対応するインタフェースをコンポーネントごとに抽出し、
コード生成手段は、前記インタフェース抽出手段が抽出したインタフェースに対応するコードを含むスタブ又はスケルトンをコンポーネントごとに生成する
請求項１記載のＩＤＬコンパイル装置。
【請求項３】
コンポーネント定義入力手段が入力したコンポーネント定義データの内容を解析し、前記解析結果を含むコンポーネント定義解析データを生成するコンポーネント定義解析手段を備え、
インタフェース抽出手段は、前記コンポーネント定義解析手段が生成したコンポーネント定義解析データにもとづいて、コンポーネントで用いられる機能に対応するインタフェースを抽出する
請求項１又は請求項２記載のＩＤＬコンパイル装置。
【請求項４】
インタフェース定義データを入力するインタフェース定義入力手段と、
前記インタフェース入力手段が入力したインタフェース定義データの内容を解析し、前記解析結果を含むインタフェース定義解析データを生成するインタフェース定義解析手段とを備え、
インタフェース抽出手段は、前記インタフェース定義解析手段が生成したインタフェース定義解析データにもとづいて、コンポーネントで用いられる機能に対応するインタフェースを抽出する
請求項３記載のＩＤＬコンパイル装置。
【請求項５】
インタフェース抽出手段は、コンポーネント定義解析手段が生成したコンポーネント定義解析データ、及びインタフェース定義解析手段が生成したインタフェース定義解析データにもとづいて、コンポーネントで用いられる機能を解析し、前記解析結果を含むコンポーネント機能解析データを生成し、
コード生成手段は、前記インタフェース抽出手段が生成したコンポーネント機能解析データにもとづいて、前記コンポーネントで用いられる機能に対応するコードを生成する
請求項４記載のＩＤＬコンパイル装置。
【請求項６】
コード生成手段は、
インタフェース抽出手段が生成したコンポーネント機能解析データにもとづいて、処理対象のコンポーネントが当該コンポーネントとは別のコンポーネントの機能を利用するか否かを判断し、
前記処理対象のコンポーネントとは別のコンポーネントの機能を利用すると判断すると、前記処理対象のコンポーネントとは別のコンポーネントの機能に対応するコードを含むスタブを生成する
請求項５記載のＩＤＬコンパイル装置。
【請求項７】
コード生成手段は、
インタフェース抽出手段が生成したコンポーネント機能解析データにもとづいて、処理対象のコンポーネントが当該コンポーネントとは別のコンポーネントに利用させる機能をもつか否かを判断し、
前記処理対象のコンポーネントとは別のコンポーネントに利用させる機能をもつと判断すると、前記処理対象のコンポーネントとは別のコンポーネントに利用させる機能に対応するコードを含むスケルトンを生成する
請求項５又は請求項６記載のＩＤＬコンパイル装置。
【請求項８】
ソフトウェアで用いられるインタフェースの定義を示すインタフェース定義データにもとづいて、スタブ又はスケルトンを生成するＩＤＬコンパイル方法であって、
前記ソフトウェアに含まれるコンポーネントで用いられる機能の定義を示すコンポーネント定義データを入力するコンポーネント定義入力ステップと、
前記入力したコンポーネント定義データにもとづいて、前記インタフェース定義データで定義されるインタフェースのうち、コンポーネントで用いられる機能に対応するインタフェースを抽出するインタフェース抽出ステップと、
前記抽出したインタフェースに対応するコードを生成し、前記生成したコードを含むスタブ又はスケルトンを生成するコード生成ステップと
を含むことを特徴とするＩＤＬコンパイル方法。
【請求項９】
コンポーネント定義入力ステップで、ソフトウェアに含まれる複数のコンポーネントで用いられる機能の定義を示すコンポーネント定義データを入力し、
インタフェース抽出ステップで、前記コンポーネント定義データにもとづいて、コンポーネントで用いられる機能に対応するインタフェースをコンポーネントごとに抽出し、
コード生成ステップで、前記抽出したインタフェースに対応するコードを含むスタブ又はスケルトンをコンポーネントごとに生成する
請求項８記載のＩＤＬコンパイル方法。
【請求項１０】
ソフトウェアで用いられるインタフェースの定義を示すインタフェース定義データにもとづいて、スタブ又はスケルトンを生成するＩＤＬコンパイラであって、
コンピュータに、
前記ソフトウェアに含まれるコンポーネントで用いられる機能の定義を示すコンポーネント定義データを入力する処理と、
前記入力したコンポーネント定義データにもとづいて、前記インタフェース定義データで定義されるインタフェースのうち、コンポーネントで用いられる機能に対応するインタフェースを抽出する処理と、
前記抽出したインタフェースに対応するコードを生成し、前記生成したコードを含むスタブ又はスケルトンを生成する処理と
を実行させるためのＩＤＬコンパイラ。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ＩＤＬ定義データをコンパイルして、アプリケーションソフトウェアのコンポーネントで用いられるスタブやスケルトンを生成するＩＤＬコンパイル装置、ＩＤＬコンパイル方法及びＩＤＬコンパイラに関する。
【背景技術】
【０００２】
Common Object Request Broker Architecture （ＣＯＲＢＡ）技術を利用したアプリケーションソフトウェアのソフトウェアコンポーネント（コンポーネント）で用いられるスタブやスケルトンを生成するために、Interface Definition Language （ＩＤＬ）コンパイラが用いられる。図１１は、ＩＤＬコンパイラの構成の一例を示すブロック図である。図１１に示すように、ＩＤＬコンパイラ１１０１は、ＩＤＬ定義解析部１１１１及びコード生成部１１１３を含む。ＩＤＬコンパイラ１１０１は、ＣＯＲＢＡ技術を利用したコンポーネント間通信で送受信されるデータのデータ型の定義であるＩＤＬ定義１１０２を入力し、コンポーネントで用いられるスタブ１１０３やスケルトン１１０４を生成する。
【０００３】
ＩＤＬ定義解析部１１１１は、入力したＩＤＬ定義１１０２を解析する。また、ＩＤＬ定義解析部１１１１は、ＩＤＬコンパイラ１１０１の各構成部が使用可能なデータ形式にＩＤＬ定義１１０２を変換し、ＩＤＬ定義解析情報９１２を生成する。コード生成部１１１３は、ＩＤＬ定義解析情報９１２にもとづいて、クライアント機能をもつコンポーネントで用いられるスタブ１１０３を生成する。また、コード生成部１１１３は、ＩＤＬ定義解析情報９１２にもとづいて、サーバ機能をもつコンポーネントで用いられるスケルトン１１０４を生成する。
【０００４】
また、ＩＤＬコンパイラの例として、例えば、特許文献１には、インタフェース定義ファイルにもとづいて字句解析及び構文解析を行い、クライアントスタブやサーバスケルトン、ルーティングプログラムを生成するＩＤＬコンパイラが記載されている。
【０００５】
【特許文献１】特開平１０−２３２７８０号公報（段落００１７−００２８、図２−５）
【発明の開示】
【発明が解決しようとする課題】
【０００６】
図１１や特許文献１に記載されたＩＤＬコンパイラは、大規模なアプリケーションソフトウェアのコンポーネントで使用できるように、一般に様々なコンポーネントの機能に対応した汎用的なスタブやスケルトンを生成する。そのため、ＩＤＬコンパイラが生成するスタブやスケルトンのファイルサイズが大きく、メモリを必要以上に使用してしまう。また、組み込み機器等に用いる場合にはコンポーネントの機能や構成を予め予測できるにもかかわらず、ＩＤＬコンパイラは、コンポーネントに不要な機能を多く含んだスタブやスケルトンを生成してしまう。
【０００７】
必要な機能だけを含むスタブやスケルトンを生成するために、組み込みアプリケーションソフトウェアの開発者がコンポーネントで必要となる機能だけを抜き出したりＩＤＬ定義情報を分割して、個別にスタブやスケルトンを生成することが考えられる。しかし、コンポーネントで必要となる機能を抜き出したりＩＤＬ定義情報を分割したりする作業が必要となり、ソフトウェア開発者の作業負担が大きい。
【０００８】
そこで、本発明は、コンポーネントに不要な機能を含まない軽量なスタブやスケルトンを自動生成できるＩＤＬコンパイル装置、ＩＤＬコンパイル方法及びＩＤＬコンパイラを提供することを目的とする。
【課題を解決するための手段】
【０００９】
本発明によるＩＤＬコンパイル装置は、ソフトウェアで用いられるインタフェースの定義を示すインタフェース定義データ（例えば、ＩＤＬ定義２）にもとづいて、スタブ又はスケルトンを生成するＩＤＬコンパイル装置であって、ソフトウェアに含まれるコンポーネントで用いられる機能の定義を示すコンポーネント定義データ（例えば、コンポーネント定義６）を入力するコンポーネント定義入力手段（例えば、コンポーネント定義解析部５３によって実現される）と、コンポーネント定義入力手段が入力したコンポーネント定義データにもとづいて、インタフェース定義データで定義されるインタフェースのうち、コンポーネントで用いられる機能に対応するインタフェースを抽出するインタフェース抽出手段（例えば、コンポーネント機能解析部５５によって実現される）と、インタフェース抽出手段が抽出したインタフェースに対応するコードを生成し、生成したコードを含むスタブ又はスケルトンを生成するコード生成手段（例えば、コンポーネントコード生成部５７によって実現される）とを備えたことを特徴とする。
【００１０】
また、コンポーネント定義入力手段は、ソフトウェアに含まれる複数のコンポーネントで用いられる機能の定義を示すコンポーネント定義データを入力し、インタフェース抽出手段は、コンポーネント定義データにもとづいて、コンポーネントで用いられる機能に対応するインタフェースをコンポーネントごとに抽出し、コード生成手段は、インタフェース抽出手段が抽出したインタフェースに対応するコードを含むスタブ又はスケルトンをコンポーネントごとに生成するものであってもよい。そのような構成によれば、１つのインタフェース定義データにもとづいて、複数のコンポーネント用のスタブやスケルトンを自動生成する。従って、各コンポーネント用にインタフェース定義データを分割して使用する場合と比較して、インタフェース定義データを容易に管理することができる。
【００１１】
また、ＩＤＬコンパイル装置は、コンポーネント定義入力手段が入力したコンポーネント定義データの内容を解析し、解析結果を含むコンポーネント定義解析データ（例えば、コンポーネント定義解析情報５４）を生成するコンポーネント定義解析手段（例えば、コンポーネント定義解析部５３によって実現される）を備え、インタフェース抽出手段は、コンポーネント定義解析手段が生成したコンポーネント定義解析データにもとづいて、コンポーネントで用いられる機能に対応するインタフェースを抽出するものであってもよい。
【００１２】
また、ＩＤＬコンパイル装置は、インタフェース定義データを入力するインタフェース定義入力手段（例えば、ＩＤＬ定義解析部５１によって実現される）と、インタフェース入力手段が入力したインタフェース定義データの内容を解析し、解析結果を含むインタフェース定義解析データ（例えば、ＩＤＬ定義解析情報５２）を生成するインタフェース定義解析手段（例えば、ＩＤＬ定義解析部５１によって実現される）とを備え、インタフェース抽出手段は、インタフェース定義解析手段が生成したインタフェース定義解析データにもとづいて、コンポーネントで用いられる機能に対応するインタフェースを抽出するものであってもよい。
【００１３】
また、インタフェース抽出手段は、コンポーネント定義解析手段が生成したコンポーネント定義解析データ、及びインタフェース定義解析手段が生成したインタフェース定義解析データにもとづいて、コンポーネントで用いられる機能を解析し、解析結果を含むコンポーネント機能解析データ（例えば、コンポーネント機能解析情報５６）を生成し、コード生成手段は、インタフェース抽出手段が生成したコンポーネント機能解析データにもとづいて、コンポーネントで用いられる機能に対応するコードを生成するものであってもよい。
【００１４】
また、コード生成手段は、インタフェース抽出手段が生成したコンポーネント機能解析データにもとづいて、処理対象のコンポーネントがコンポーネントとは別のコンポーネントの機能を利用するか否かを判断し、処理対象のコンポーネントとは別のコンポーネントの機能を利用すると判断すると、処理対象のコンポーネントとは別のコンポーネントの機能に対応するコードを含むスタブを生成するものであってもよい。
【００１５】
また、コード生成手段は、インタフェース抽出手段が生成したコンポーネント機能解析データにもとづいて、処理対象のコンポーネントがコンポーネントとは別のコンポーネントに利用させる機能をもつか否かを判断し、処理対象のコンポーネントとは別のコンポーネントに利用させる機能をもつと判断すると、処理対象のコンポーネントとは別のコンポーネントに利用させる機能に対応するコードを含むスケルトンを生成するものであってもよい。
【００１６】
本発明によるＩＤＬコンパイル方法は、ソフトウェアで用いられるインタフェースの定義を示すインタフェース定義データにもとづいて、スタブ又はスケルトンを生成するＩＤＬコンパイル方法であって、ソフトウェアに含まれるコンポーネントで用いられる機能の定義を含むコンポーネント定義データを入力するコンポーネント定義入力ステップと、入力したコンポーネント定義データにもとづいて、インタフェース定義データで定義されるインタフェースのうち、コンポーネントで用いられる機能に対応するインタフェースを抽出するインタフェース抽出ステップと、抽出したインタフェースに対応するコードを生成し、生成したコードを含むスタブ又はスケルトンを生成するコード生成ステップとを含むことを特徴とする。
【００１７】
また、ＩＤＬコンパイル方法は、コンポーネント定義入力ステップで、ソフトウェアに含まれる複数のコンポーネントで用いられる機能の定義を示すコンポーネント定義データを入力し、インタフェース抽出ステップで、コンポーネント定義データにもとづいて、コンポーネントで用いられる機能に対応するインタフェースをコンポーネントごとに抽出し、コード生成ステップで、抽出したインタフェースに対応するコードを含むスタブ又はスケルトンをコンポーネントごとに生成するものであってもよい。そのような構成によれば、１つのインタフェース定義データにもとづいて、複数のコンポーネント用のスタブやスケルトンを自動生成する。従って、各コンポーネント用にインタフェース定義データを分割して使用する場合と比較して、インタフェース定義データを容易に管理することができる。
【００１８】
本発明によるＩＤＬコンパイラは、ソフトウェアで用いられるインタフェースの定義を示すインタフェース定義データにもとづいて、スタブ又はスケルトンを生成するためのＩＤＬコンパイラであって、コンピュータに、ソフトウェアに含まれるコンポーネントで用いられる機能の定義を示すコンポーネント定義データを入力する処理と、入力したコンポーネント定義データにもとづいて、インタフェース定義データで定義されるインタフェースのうち、コンポーネントで用いられる機能に対応するインタフェースを抽出する処理と、抽出したインタフェースに対応するコードを生成し、生成したコードを含むスタブ又はスケルトンを生成する処理とを実行させることを特徴とする。
【発明の効果】
【００１９】
本発明によれば、コンポーネント定義データにもとづいて、インタフェース定義データで定義されるインタフェースのうち、コンポーネントで用いられるインタフェースを抽出する。そして、抽出したインタフェースに対応するコードを生成し、生成したコードを含むスタブやスケルトンを生成する。従って、コンポーネントに不要な機能を含まない軽量なスタブやスケルトンを自動生成することができる。
【発明を実施するための最良の形態】
【００２０】
以下、本発明の実施の形態を図面を参照して説明する。図１は、本発明によるＩＤＬコンパイラの構成の一例を示す説明図である。本実施の形態では、情報処理装置のＣＰＵが図１に示すＩＤＬコンパイラに従って動作することによってＩＤＬコンパイル装置が実現される。本実施の形態では、ＩＤＬコンパイル装置は、アプリケーションソフトウェアで用いられるインタフェースの定義を示すインタフェース定義データをコンパイルして、スタブやスケルトンを生成する。
【００２１】
図１に示すように、ＩＤＬコンパイラ５は、ＩＤＬ定義解析部５１、コンポーネント定義解析部５３、コンポーネント機能解析部５５及びコンポーネントコード生成部５７を含む。本実施の形態では、ＩＤＬコンパイラ５は、図１１に示す構成要素に加えて、コンポーネント定義解析部５３及びコンポーネント機能解析部５５を含む点で、図１１に示す従来のＩＤＬコンパイラ１１０１と異なる。また、本実施の形態では、ＩＤＬコンパイラ５のコンポーネントコード生成部５７の機能が、図１１に示す従来のＩＤＬコンパイラ１１０１のコード生成部１１１３の機能と異なる。
【００２２】
ＩＤＬコンパイラ５は、インタフェース定義データとして、ＣＯＲＢＡ技術を利用したソフトウェアコンポーネント（以下、単にコンポーネントという）間通信で送受信されるデータのデータ型（以下、ＩＤＬ型という）の定義を含むＩＤＬ定義２を入力する。また、ＩＤＬコンパイラ５は、ＩＤＬ定義２に加えて、アプリケーションソフトウェアに含まれる複数のコンポーネントで用いられる機能の定義を示すコンポーネント定義データを入力する。本実施の形態では、ＩＤＬコンパイラ５は、コンポーネント定義データとして、各コンポーネントが他のコンポーネントに提供する機能や、各コンポーネントが使用する他のコンポーネントの機能、各コンポーネントが内部で使用する機能の定義を含むコンポーネント定義６を入力する。
【００２３】
また、ＩＤＬコンパイラ５は、ＩＤＬ定義２及びコンポーネント定義６にもとづいて、各コンポーネントで用いられるコンポーネント用スタブ７やコンポーネント用スケルトン８を生成する。なお、本実施の形態では、ＩＤＬコンパイラ５が生成する等の表現を用いるが、実際には、情報処理装置のＣＰＵがＩＤＬコンパイラ５に従って処理を実行する。
【００２４】
ＩＤＬ定義解析部５１は、ＩＤＬ定義解析手順を実行して、ＩＤＬ定義２に含まれるＩＤＬ型の解析を行い、ＩＤＬ定義解析情報５２を生成する機能を備える。本実施の形態では、ＩＤＬ定義解析部５１は、文字列等の形式で記載されたＩＤＬ定義２に含まれるＩＤＬ型を解析する。また、ＩＤＬ定義解析部５１は、解析結果にもとづいて、ＩＤＬ定義２をＩＤＬコンパイラ５の各構成部が使用可能なデータ形式に変換したデータであるＩＤＬ定義解析情報５２を生成する。
【００２５】
コンポーネント定義解析部５３は、コンポーネント定義解析手順を実行して、コンポーネント定義６の解析を行い、コンポーネント定義解析情報５４を生成する機能を備える。本実施の形態では、コンポーネント定義解析部５３は、文字列等の形式で記載されたコンポーネント定義６を解析する。また、コンポーネント定義解析部５３は、解析結果にもとづいて、コンポーネント定義６をＩＤＬコンパイラ５の各構成部が使用可能なデータ形式に変換したデータであるコンポーネント定義解析情報５４を生成する。
【００２６】
コンポーネント機能解析部５５は、コンポーネント機能解析手順を実行して、各コンポーネントが必要とする機能の解析を行い、コンポーネント機能解析情報５６を生成する機能を備える。すなわち、コンポーネント機能解析部５５は、インタフェース定義データ（ＩＤＬ定義２）で定義されるインタフェースのうち、コンポーネントで用いられる機能に対応するインタフェースを抽出し、コンポーネント機能解析情報５６を生成する機能を備える。本実施の形態では、コンポーネント機能解析部５５は、ＩＤＬ定義解析情報５２及びコンポーネント定義解析情報５４にもとづいて、各コンポーネントが必要とする機能及び各コンポーネントが必要としない機能をコンポーネントごとに解析する。また、コンポーネント機能解析部５５は、解析結果を含むデータであるコンポーネント機能解析情報５６を生成する。
【００２７】
コンポーネントコード生成部５７は、コンポーネントコード生成手順を実行して、コンポーネント機能解析情報５６にもとづいて各コンポーネント用のスタブやスケルトンを生成する機能を備える。すなわち、コンポーネントコード生成部５７は、コンポーネント機能解析部５５が抽出したインタフェースに対応するコードを生成し、生成したコードを含むスタブやスケルトンを生成する機能を備える。本実施の形態では、コンポーネントコード生成部５７は、コンポーネント機能解析情報５６にもとづいて、コンポーネントが必要とする機能だけを含むコンポーネント用スタブ７やコンポーネント用スケルトン８を、コンポーネントごとに生成して出力する。
【００２８】
次に、動作について具体例を用いて説明する。図２は、ＣＯＲＢＡ技術を利用したアプリケーションソフトウェアの一例を示す説明図である。図２に示すように、アプリケーションソフトウェア９は、ＣＯＲＢＡ技術を利用したコンポーネントＸ９１及びコンポーネントＹ９２を含む。
【００２９】
また、図３は、図２に示すアプリケーションソフトウェア９全体で用いられるＩＤＬ型のＩＤＬ定義２の例を示す説明図である。本実施の形態では、アプリケーションソフトウェア９全体で２つの構造体Ｓ１，Ｓ２のＩＤＬ型と、２つのインタフェースＩ１，Ｉ２のＩＤＬ型とが用いられる。そのため、図３に示すように、本実施の形態では、ＩＤＬ定義２は、構造体Ｓ１の定義２１、構造体Ｓ２の定義２２、インタフェースＩ１の定義２３及びインタフェースＩ２の定義２４を含む。
【００３０】
また、図４は、図２に示す各コンポーネント９１，９２で用いられる機能のコンポーネント定義６の例を示す説明図である。図４に示すように、本実施の形態では、コンポーネント定義６は、コンポーネントＸ９１に対応するコンポーネントＸ定義６１と、コンポーネントＹ９２に対応するコンポーネントＹ定義６２とを含む。
【００３１】
また、図５は、図２に示す各コンポーネント９１，９２で用いられるスタブ及びスケルトンを生成する場合のＩＤＬコンパイラ５の具体的な構成の一例を示すブロック図である。本実施の形態では、図２に示すアプリケーションソフトウェア９のコンポーネントＸ９１及びコンポーネントＹ９２が用いるスタブやスケルトンを、ＩＤＬコンパイラ５が生成する場合の動作を説明する。本実施の形態では、ＩＤＬコンパイラ５は、図３に示すＩＤＬ定義２及び図４に示すコンポーネント定義６を入力し解析する。そして、ＩＤＬコンパイラ５は、図５に示すように、解析結果にもとづいて、コンポーネントＸ用スタブ７１、コンポーネントＹ用スタブ７２及びコンポーネントＸ用スケルトン８１を生成する。
【００３２】
図６は、ＩＤＬコンパイラ５が実行するＩＤＬコンパイル手順の処理の一例を示す流れ図である。ＩＤＬコンパイラ５は、ＩＤＬコンパイル手順の実行を開始すると、ＩＤＬ定義２を解析するＩＤＬ定義解析手順を実行する（ステップＳ２００）。ステップＳ２００において、ＩＤＬコンパイラ５は、ファイル等からＩＤＬ定義２を読み込み、ＩＤＬ定義２で定義されたＩＤＬ型がもつ要素やオペレーション、引数等の解析を行い、ＩＤＬ定義解析情報５２を生成する。
【００３３】
また、ＩＤＬコンパイラ５は、コンポーネント定義６を解析するコンポーネント定義解析手順を実行する（ステップＳ３００）。ステップＳ３００において、ＩＤＬコンパイラ５は、ファイル等からコンポーネント定義６を読み込こむ。また、ＩＤＬコンパイラ５は、読み込んだコンポーネント定義６にもとづいて、各コンポーネントが他のコンポーネントに提供する機能や、各コンポーネントが使用する他のコンポーネントの機能を解析する。そして、ＩＤＬコンパイラ５は、解析結果にもとづいてコンポーネント定義解析情報５４を生成する。
【００３４】
また、ＩＤＬコンパイラ５は、各コンポーネントが必要とする機能を解析するコンポーネント機能解析手順を実行する（ステップＳ４００）。ステップＳ４００において、ＩＤＬコンパイラ５は、ＩＤＬ定義解析情報５２及びコンポーネント定義解析情報５４にもとづいて、各コンポーネントが必要とするＩＤＬ型を抽出したり、抽出したＩＤＬ型のうち不要な機能があるか否か解析する。また、ＩＤＬコンパイラ５は、解析結果を含むコンポーネント機能解析情報５６を生成する。
【００３５】
また、ＩＤＬコンパイラ５は、スタブやスケルトンを生成するコンポーネントコード生成手順を実行する（ステップＳ５００）。ステップＳ５００において、ＩＤＬコンパイラ５は、コンポーネント機能解析情報５６にもとづいて、各コンポーネントが用いるスタブやスケルトンを生成する。
【００３６】
図７は、ステップＳ２００のＩＤＬ定義解析手順の処理の一例を示す流れ図である。ステップＳ２００のＩＤＬ定義解析手順において、ＩＤＬコンパイラ５のＩＤＬ定義解析部５１は、ファイル等に保存されているＩＤＬ定義２を読み込む（ステップＳ２０１）。
【００３７】
ＩＤＬ定義解析部５１は、読み込んだＩＤＬ定義２で定義されているＩＤＬ型がどのような要素やオペレーション、引数をもつかを解析する（ステップＳ２０２）。また、ＩＤＬ定義解析部５１は、ＩＤＬ定義解析情報５２を生成し、生成したＩＤＬ定義解析情報５２に解析結果の内容を書き込む。
【００３８】
ＩＤＬ定義解析部５１は、ＩＤＬ定義２で定義されている全てのＩＤＬ型の解析を終了したか否かを判断する（ステップＳ２０３）。全てのＩＤＬ型の解析を終了していない（未解析のＩＤＬ型がある）と判断した場合、ＩＤＬ定義解析部５１は、未解析のＩＤＬ型についてステップＳ２０２の処理を繰り返し実行し、ＩＤＬ定義解析情報５２に解析結果の内容を書き込んで加える。
【００３９】
ステップＳ２０３で全てのＩＤＬ型の解析を終了した（未解析のＩＤＬ型がない）と判断した場合、ＩＤＬ定義解析部５１は、生成したＩＤＬ定義解析情報５２をコンポーネント機能解析部５５に送信（出力）する（ステップＳ２０４）。
【００４０】
本実施の形態では、ＩＤＬ定義解析部５１は、図３に示すＩＤＬ定義２にもとづいて、アプリケーションソフトウェア９で用いられるＩＤＬ型が構造体Ｓ１型、構造体Ｓ２型、インタフェースＩ１型及びインタフェースＩ２型である旨の解析内容を含むＩＤＬ定義解析情報５２を生成する。
【００４１】
例えば、ＩＤＬ定義解析部５１は、構造体Ｓ１型がlong型の要素e1をもち、構造体Ｓ２型がfloat 型の要素e2をもつ旨の解析内容を含むＩＤＬ定義解析情報５２を生成する。また、ＩＤＬ定義解析部５１は、インタフェースＩ１型がオペレーションop1_1 ，op1_2 をもち、オペレーションop1_1 が引数として構造体Ｓ１型の要素をもち、オペレーションop1_2 が引数として構造体Ｓ２型の要素をもつ旨の解析内容を含むＩＤＬ定義解析情報５２を生成する。また、ＩＤＬ定義解析部５１は、インタフェースＩ２型がオペレーションop2_1 ，op2_2 をもち、オペレーションop2_1 が引数として構造体Ｓ１型の要素をもち、オペレーションop2_2 が引数として構造体Ｓ２型の要素をもつ旨の解析内容を含むＩＤＬ定義解析情報５２を生成する。
【００４２】
図８は、ステップＳ３００のコンポーネント定義解析手順の処理の一例を示す流れ図である。ステップＳ３００のコンポーネント定義解析手順において、ＩＤＬコンパイラ５のコンポーネント定義解析部５３は、ファイル等に保存されているコンポーネント定義６を読み込む（ステップＳ３０１）。
【００４３】
コンポーネント定義解析部５３は、読み込んだコンポーネント定義６で定義されている各コンポーネントがどのような機能を他のコンポーネントに提供するかや、他のコンポーネントのどのような機能を使用するかを解析する（ステップＳ３０２）。また、コンポーネント定義解析部５３は、コンポーネント定義解析情報５４を生成し、生成したコンポーネント定義解析情報５４に解析結果の内容を書き込む。
【００４４】
コンポーネント定義解析部５３は、コンポーネント定義６で定義されている全てのコンポーネントの解析を終了したか否かを判断する（ステップＳ３０３）。全てのコンポーネントの解析を終了していない（未解析のコンポーネントの定義がある）と判断した場合、コンポーネント定義解析部５３は、未解析のコンポーネントについてステップＳ３０２の処理を繰り返し実行し、コンポーネント定義解析情報５４に解析結果の内容を書き込んで加える。
【００４５】
ステップＳ３０３で全てのコンポーネントの解析を終了した（未解析のコンポーネントの定義がない）と判断した場合、コンポーネント定義解析部５３は、生成したコンポーネント定義解析情報５４をコンポーネント機能解析部５５に送信（出力）する（ステップＳ３０４）。
【００４６】
本実施の形態では、コンポーネント定義解析部５３は、図４に示すコンポーネント定義６にもとづいて、コンポーネントＸ９１及びコンポーネントＹ９２で用いられる機能の定義の解析内容を含むコンポーネント定義解析情報５４を生成する。
【００４７】
例えば、コンポーネント定義解析部５３は、コンポーネントＸ９１が、サーバ機能として、他のコンポーネントにインタフェースＩ１型で定義される全機能と、インタフェースＩ２型のop2_1 で定義される機能とを提供する旨の解析内容を含むコンポーネント定義解析情報５４を生成する。また、コンポーネント定義解析部５３は、コンポーネントＸ９１が、クライアント機能として、インタフェースＩ１型で定義される機能を使用する旨の解析内容を含むコンポーネント定義解析情報５４を生成する。また、コンポーネント定義解析部５３は、コンポーネントＹ９２が、クライアント機能として、他のコンポーネントが提供するインタフェースＩ１型のop1_1 の機能を使用する旨の解析内容を含むコンポーネント定義解析情報５４を生成する。
【００４８】
図９は、ステップＳ４００のコンポーネント機能解析手順の処理の一例を示す流れ図である。ステップＳ４００のコンポーネント機能解析手順において、ＩＤＬコンパイラ５のコンポーネント機能解析部５５は、ＩＤＬ定義解析部５１からのＩＤＬ定義解析情報５２を受信（入力）する（ステップＳ４０１）。また、コンポーネント機能解析部５５は、コンポーネント定義解析部５３からのコンポーネント定義解析情報５４を受信（入力）する（ステップＳ４０２）。
【００４９】
コンポーネント機能解析部５５は、入力したコンポーネント定義解析情報５４から、各コンポーネントの機能に対応するインターフェース型を抽出する（ステップＳ４０３）。本実施の形態では、コンポーネント機能解析部５５は、コンポーネントＸ９１に対応するインタフェース型として、インタフェースＩ１型及びインタフェースＩ２型を抽出して取得する。また、コンポーネント機能解析部５５は、コンポーネントＹ９２に対応するインタフェース型として、インタフェースＩ１型を抽出して取得する。
【００５０】
また、コンポーネント機能解析部５５は、入力したＩＤＬ定義解析情報５２から、ステップＳ４０３で取得したインタフェース型の情報と、ステップＳ４０３で取得したインタフェース型で提供されるオペレーションの引数となっているＩＤＬ型の情報とを抽出する（ステップＳ４０４）。
【００５１】
本実施の形態では、コンポーネント機能解析部５５は、コンポーネントＸ９１について、インタフェースＩ１型と、インタフェースＩ１型がもつオペレーションop1_1 の引数である構造体Ｓ１型と、オペレーションop1_2 の引数である構造体Ｓ２型との情報を抽出する。また、コンポーネント機能解析部５５は、コンポーネントＸ９１について、インタフェースＩ２型と、インタフェースＩ２型がもつオペレーションop2_1 ，op2_2 の引数である構造体Ｓ１型及び構造体Ｓ２型との情報を抽出する。また、同様に、コンポーネント機能解析部５５は、コンポーネントＹ９２について、インタフェースＩ１型と、構造体Ｓ１型及び構造体Ｓ２型との情報を抽出する。
【００５２】
また、コンポーネント機能解析部５５は、コンポーネント定義解析情報５４とステップＳ４０４で抽出したＩＤＬ型の情報とにもとづいて、抽出したＩＤＬ型の機能のうちいずれが必要な機能又は不要な機能であるかを解析し、省略できる機能を抽出する（ステップＳ４０５）。また、コンポーネント機能解析部５５は、コンポーネント機能解析情報５６を生成し、生成したコンポーネント機能解析情報５６に解析結果の内容を書き込む。
【００５３】
コンポーネント機能解析部５５は、全てのコンポーネントの解析を終了したか否かを判断する（ステップＳ４０６）。全てのコンポーネントの解析を終了していない（未解析のコンポーネントがある）と判断した場合、コンポーネント機能解析部５５は、未解析のコンポーネントについてステップＳ４０３以降の処理を繰り返し実行し、コンポーネント機能解析情報５６に解析結果の内容を書き込んで加える。
【００５４】
ステップＳ４０６で全てのコンポーネントの解析を終了した（未解析のコンポーネントがない）と判断した場合、コンポーネント機能解析部５５は、生成したコンポーネント機能解析情報５６をコンポーネントコード生成部５７に送信（出力）する（ステップＳ４０７）。
【００５５】
本実施の形態では、コンポーネント機能解析部５５は、ＩＤＬ定義解析情報５２及びコンポーネント定義解析情報５４にもとづいて、コンポーネントＸ９１及びコンポーネントＹ９２が必要とする機能の解析内容を含むコンポーネント機能解析情報５６を生成する。
【００５６】
例えば、コンポーネント機能解析部５５は、コンポーネントＸ９１について、スタブとして、インタフェースＩ１型の全ての機能と構造体Ｓ１型及び構造体Ｓ２型をオペレーションの引数として送信する機能とが必要であり、インタフェースＩ２型の機能が必要でない旨の解析内容を含むコンポーネント機能解析情報５６を生成する。また、コンポーネント機能解析部５５は、コンポーネントＸ９１について、スケルトンとして、インタフェースＩ１型の全ての機能と、構造体Ｓ１型及び構造体Ｓ２型をオペレーションの引数として受信する機能と、インタフェースＩ２型のop2_1 の機能とが必要である旨の解析内容を含むコンポーネント機能解析情報５６を生成する。
【００５７】
また、コンポーネント機能解析部５５は、コンポーネントＹ９２について、スタブとして、インタフェースＩ１型のオペレーションop1_1 の機能と構造体Ｓ１型をオペレーションの引数として送信する機能とが必要であり、オペレーションop1_2 の機能と構造体Ｓ１型を受信する機能と構造体Ｓ２の送受信を行う機能とが不要である旨の解析内容を含むコンポーネント機能解析情報５６を生成する。また、コンポーネント機能解析部５５は、コンポーネントＹ９２について、他のコンポーネントに提供する機能がなく、スケルトンが不要である旨の解析内容を含むコンポーネント機能解析情報５６を生成する。
【００５８】
図１０は、ステップＳ５００のコンポーネントコード生成手順の処理の一例を示す流れ図である。ステップＳ５００のコンポーネントコード生成手順において、ＩＤＬコンパイラ５のコンポーネントコード生成部５７は、コンポーネント機能解析部５５からのコンポーネント機能解析情報５６を受信（入力）する（ステップＳ５０１）。
【００５９】
コンポーネントコード生成部５７は、入力したコンポーネント機能解析情報５６にもとづいて、処理対象のコンポーネントが他のコンポーネントの機能を使用する（利用する）か否かを判断する（ステップＳ５０２）。他のコンポーネントの機能を使用しないと判断した場合、コンポーネントコード生成部５７は、ステップＳ５０３の処理を実行せずに、そのままステップＳ５０４の処理を実行する。
【００６０】
ステップＳ５０２で処理対象のコンポーネントが他のコンポーネントの機能を使用すると判断した場合、コンポーネントコード生成部５７は、コンポーネント機能解析情報５６にもとづいてコード生成を行い、処理対象のコンポーネントに対応するコンポーネント用スタブを生成する（ステップＳ５０３）。すなわち、コンポーネントコード生成部５７は、処理対象のコンポーネントが使用する他のコンポーネントの機能に対応するコードを含むコンポーネント用スタブを生成する。
【００６１】
コンポーネントコード生成部５７は、コンポーネント機能解析情報５６にもとづいて、処理対象のコンポーネントが他のコンポーネントに提供する機能が存在するか否かを判断する（ステップＳ５０４）。他のコンポーネントに提供する機能がないと判断した場合、コンポーネントコード生成部５７は、ステップＳ５０５の処理を実行せずに、そのままステップＳ５０６の処理を実行する。
【００６２】
ステップＳ５０４で処理対象のコンポーネントが他のコンポーネントに提供する機能があると判断した場合、コンポーネントコード生成部５７は、コンポーネント機能解析情報５６にもとづいてコード生成を行い、処理対象のコンポーネントに対応するコンポーネント用スケルトンを生成する（ステップＳ５０５）。すなわち、コンポーネントコード生成部５７は、処理対象のコンポーネントが他のコンポーネントに提供する機能に対応するコードを含むコンポーネント用スケルトンを生成する。
【００６３】
コンポーネントコード生成部５７は、全てのコンポーネントについて処理を終了したか否かを判断する（ステップＳ５０６）。全てのコンポーネントについて処理を終了していない（未処理のコンポーネントが存在する）と判断した場合、コンポーネントコード生成部５７は、ステップＳ５０２以降の処理を繰り返し実行し、未処理のコンポーネントのコード生成を行う。全てのコンポーネントについて処理を終了した（未処理のコンポーネントが存在する）と判断した場合、コンポーネントコード生成部５７は、コンポーネントコード生成手順の処理を終了する。
【００６４】
本実施の形態では、コンポーネントコード生成部５７は、コンポーネント機能解析情報５６にもとづいて、コンポーネントＸ９１について、コンポーネントＸ用スタブ７１及びコンポーネントＸ用スケルトン８１を生成する。また、コンポーネントコード生成部５７は、コンポーネントＹ９２について、コンポーネントＹ用スタブ７２を生成する。
【００６５】
例えば、コンポーネントコード生成部５７は、コンポーネント機能解析情報５６にもとづいて、インタフェースＩ１型、構造体Ｓ１型及び構造体Ｓ２型についてのコードを含むコンポーネントＸ用スタブ７１を生成する。また、コンポーネントコード生成部５７は、インタフェースＩ１型の全機能とインタフェースＩ２型のop2_1 の機能についてのコードを含むコンポーネントＸ用スケルトン８１を生成する。すなわち、コンポーネントＸ用スケルトン８１ではインタフェースＩ２型のop2_2 の機能が使用されないので、コンポーネントコード生成部５７は、インタフェースＩ２型のop2_2 の機能を省略したコードを含むコンポーネントＸ用スケルトン８１を生成する。そのようにすることによって、コンポーネントコード生成部５７は、コードサイズの小さいコンポーネントＸ用スケルトン８１を生成する。
【００６６】
また、コンポーネントコード生成部５７は、コンポーネント機能解析情報５６にもとづいて、インタフェースＩ１型のop1_1 の機能を含むコンポーネントＹ用スタブ７２を生成する。すなわち、コンポーネントＹ用スタブ７２ではインタフェースＩ１型のop1_2 の機能が使用されないので、コンポーネントコード生成部５７は、インタフェースＩ１型のop1_2 の機能を省略したコードを含むコンポーネントＹ用スタブ７２を生成する。そのようにすることによって、コンポーネントコード生成部５７は、コードサイズの小さいコンポーネントＹ用スタブ７２を生成する。
【００６７】
なお、本実施の形態では、コンポーネントＹ９２は他のコンポーネントに提供する機能をもたないので、コンポーネントコード生成部５７は、コンポーネントＹ９２に対応するスケルトンを生成しない。
【００６８】
以上のように、本実施の形態によれば、ＩＤＬコンパイラ５は、コンポーネント定義６にもとづいて、各コンポーネントが必要とするＩＤＬ定義を解析して、各コンポーネントが使用するＩＤＬ型を抽出する。また、ＩＤＬコンパイラ５は、抽出したＩＤＬ型で提供される機能のうち必要な機能と不要な機能とを解析することによって、コンポーネントが使用しないコードを含まないスタブやスケルトンを生成する。従って、コンポーネントに不要なデータ型や機能を含まない軽量なスタブやスケルトンを自動生成することができる。
【００６９】
特に、本実施の形態によれば、コンポーネントの機能や構成を予め予測できる組み込み機器等において、組み込みアプリケーションソフトウェアのコンポーネントに不要な機能を含まない軽量なスタブやスケルトンを自動生成することができる。従って、組み込み機器ソフトウェア向けのスタブやスケルトンを生成するＩＤＬコンパイラを実装する用途に適用することができる。
【００７０】
また、本実施の形態によれば、ＩＤＬコンパイラ５は、１つのＩＤＬ定義２にもとづいて、複数のコンポーネント用のスタブやスケルトンを自動生成する。従って、各コンポーネント用にＩＤＬ定義２を分割して使用する場合と比較して、ＩＤＬ定義２を容易に管理することができる。
【産業上の利用可能性】
【００７１】
本発明は、ＩＤＬ定義データをコンパイルしてスタブやスケルトンを生成するＩＤＬコンパイラに適用できる。特に、本発明を用いることによって、コンポーネントに不要なデータ型や機能を含まない軽量なスタブやスケルトンを自動生成することができる。また、組み込み機器ソフトウェア向けのスタブやスケルトンを生成するＩＤＬコンパイラを実装する用途に適用することができる。
【図面の簡単な説明】
【００７２】
【図１】本発明によるＩＤＬコンパイラの構成の一例を示す説明図である。
【図２】ＣＯＲＢＡ技術を利用したアプリケーションソフトウェアの一例を示す説明図である。
【図３】図２に示すアプリケーションソフトウェア９全体で用いられるＩＤＬ型のＩＤＬ定義２の例を示す説明図である。
【図４】図２に示す各コンポーネント９１，９２で用いられる機能のコンポーネント定義６の例を示す説明図である。
【図５】図２に示す各コンポーネント９１，９２で用いられるスタブ及びスケルトンを生成する場合のＩＤＬコンパイラ５の具体的な構成の一例を示すブロック図である。
【図６】ＩＤＬコンパイラ５が実行するＩＤＬコンパイル手順の処理の一例を示す流れ図である。
【図７】ＩＤＬ定義解析手順の処理の一例を示す流れ図である。
【図８】コンポーネント定義解析手順の処理の一例を示す流れ図である。
【図９】コンポーネント機能解析手順の処理の一例を示す流れ図である。
【図１０】コンポーネントコード生成手順の処理の一例を示す流れ図である。
【図１１】従来のＩＤＬコンパイラの構成の一例を示すブロック図である。
【符号の説明】
【００７３】
２  ＩＤＬ定義
５  ＩＤＬコンパイラ
６  コンポーネント定義
７  コンポーネント用スタブ
８  コンポーネント用スケルトン
５１  ＩＤＬ定義解析部
５２  ＩＤＬ定義解析情報
５３  コンポーネント定義解析部
５４  コンポーネント定義解析情報
５５  コンポーネント機能解析部
５６  コンポーネント機能解析情報
５７  コンポーネントコード生成部
７１  コンポーネントＸ用スタブ
７２  コンポーネントＹ用スタブ
８１  コンポーネントＸ用スケルトン
【図１】
2006048236.tif 000003
【図２】
2006048236.tif 000004
【図３】
2006048236.tif 000005
【図４】
2006048236.tif 000006
【図５】
2006048236.tif 000007
【図６】
2006048236.tif 000008
【図７】
2006048236.tif 000009
【図８】
2006048236.tif 000010
【図９】
2006048236.tif 000011
【図１０】
2006048236.tif 000012
【図１１】
2006048236.tif 000013