(57)【要約】【課題】ソースコードに記述されたインタフェースと実装プログラムとの対応付けを行うことができる情報処理プログラム、情報処理方法および情報処理装置を提供する。【解決手段】情報処理プログラムは、ソースコードに記述されたインタフェースそれぞれについて、当該インタフェースと関連付けられた実装プログラムを、ソースコードおよび実装プログラムの対応ソースコードの記述に基づいて特定する処理を実行させる。情報処理プログラムは、特定された実装プログラムの識別子を、当該実装プログラムに関連付けられたインタフェースと関連付けて記憶する処理を実行させる。情報処理プログラムは、ソースコードの規定内容に基づき、当該ソースコードの実行時に実行されるインタフェースを特定する処理を実行させる。情報処理プログラムは、プログラムの実行時に、特定されたインタフェースと関連付いた実装プログラムを識別可能に出力する処理を実行させる。【選択図】図２
2015184824.tif 000002
【特許請求の範囲】
【請求項１】
ソースコードに記述されたインタフェースそれぞれについて、当該インタフェースと関連付けられた実装プログラムを、前記ソースコードおよび前記実装プログラムに対応する対応ソースコードの記述に基づいて特定し、
特定された実装プログラムの識別子を、当該実装プログラムに関連付けられたインタフェースと関連付けて記憶部に記憶し、
前記ソースコードの規定内容に基づき、当該ソースコードの実行時に実行されるインタフェースを特定し、
前記ソースコードに基づくプログラムの実行時に、前記特定されたインタフェースと関連付けて識別子が前記記憶部に記憶された実装プログラムを識別可能に出力する
処理をコンピュータに実行させることを特徴とする情報処理プログラム。
【請求項２】
前記実装プログラムを特定する処理は、さらに、前記ソースコード、および、前記ソースコードに対応する定義ファイルに基づいて、それぞれの木構造を生成するために解析し、
前記ソースコードの木構造と、前記定義ファイルの木構造とを走査し、前記実装プログラムの名前を含む名前空間を走査し、
前記解析する処理の解析結果、および、前記走査する処理の走査結果に基づいて、前記ソースコードに対し前記インタフェースおよび前記実装プログラムとの対応を示す識別子であるアノテーションを挿入して、前記アノテーションが挿入されたソースコードを生成し、
前記生成する処理で生成されたソースコードを、前記ソースコードおよび前記対応ソースコードとして、前記実装プログラムを特定することを特徴とする請求項１に記載の情報処理プログラム。
【請求項３】
前記生成する処理は、前記定義ファイルの木構造に対応する前記ソースコードの木構造がない部分に対して、仮想の木構造を生成することを特徴とする請求項２に記載の情報処理プログラム。
【請求項４】
前記生成する処理は、前記定義ファイルについて、前記ソースコードに挿入された前記アノテーションに対応する定義を削除して、前記実装プログラムを探索する範囲を定義する探索範囲定義を追加して、更新された定義ファイルを生成することを特徴とする請求項２または３に記載の情報処理プログラム。
【請求項５】
前記走査する処理は、前記実装プログラムが複数の前記インタフェースを持つ場合には、前記探索範囲定義の優先度に基づいて、前記実装プログラムを走査することを特徴とする請求項４に記載の情報処理プログラム。
【請求項６】
ソースコードに記述されたインタフェースそれぞれについて、当該インタフェースと関連付けられた実装プログラムを、前記ソースコードおよび前記実装プログラムに対応する対応ソースコードの記述に基づいて特定し、
特定された実装プログラムの識別子を、当該実装プログラムに関連付けられたインタフェースと関連付けて記憶部に記憶し、
前記ソースコードの規定内容に基づき、当該ソースコードの実行時に実行されるインタフェースを特定し、
前記ソースコードに基づくプログラムの実行時に、前記特定されたインタフェースと関連付けて識別子が前記記憶部に記憶された実装プログラムを識別可能に出力する
処理をコンピュータが実行することを特徴とする情報処理方法。
【請求項７】
ソースコードに記述されたインタフェースそれぞれについて、当該インタフェースと関連付けられた実装プログラムを、前記ソースコードおよび前記実装プログラムに対応する対応ソースコードの記述に基づいて特定する第１特定部と、
特定された実装プログラムの識別子を、当該実装プログラムに関連付けられたインタフェースと関連付けて記憶する記憶部と、
前記ソースコードの規定内容に基づき、当該ソースコードの実行時に実行されるインタフェースを特定する第２特定部と、
前記ソースコードに基づくプログラムの実行時に、前記特定されたインタフェースと関連付けて識別子が前記記憶部に記憶された実装プログラムを識別可能に出力する出力制御部と
を有することを特徴とする情報処理装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、情報処理プログラム、情報処理方法および情報処理装置に関する。
【背景技術】
【０００２】
プログラムのソースコードでは、クラスの依存関係を抽象的なメソッドであるインタフェースで規定し、プログラムの実行時にインタフェースと具体的な実装プログラムとを対応させて、プログラムに基づく処理を実行する技術がある。当該技術は、ＤＩ（Dependency  Injection）コンテナと呼ばれる。この様なＤＩコンテナでは、インタフェースと実装プログラムとの対応付けは、例えば、別途定義ファイルを生成する手法や、対応付けのためのデータであるアノテーションをソースコードに追記する手法が存在する。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特開２００９−２５１７６９号公報
【発明の概要】
【発明が解決しようとする課題】
【０００４】
しかしながら、プログラム開発の観点では、アノテーションによりインタフェースと実装プログラムとの対応付けを行うことが望まれるが、既に開発されたプログラムでは、定義ファイルを用いている場合がある。このため、例えば、定義ファイルによりなされたインタフェースと実装プログラムとの対応付けを、アノテーションで対応付ける形式に変更することが必要になる。
【０００５】
また、１つのインタフェースに対して、複数の実装プログラムが適用され得る状況が存在する。この場合には、アノテーションによる対応付けでは、１つのインタフェースに１つの実装プログラムしか対応付けを行うことができない。さらに、仮にアノテーションを複数の実装プログラムに追記したとしても、ＤＩコンテナの実行環境では、いずれの実装プログラムを利用するかが判別できない。
【０００６】
一つの側面では、本発明は、ソースコードに記述されたインタフェースと実装プログラムとの対応付けを行うことができる情報処理プログラム、情報処理方法および情報処理装置を提供することにある。
【課題を解決するための手段】
【０００７】
一つの態様では、情報処理プログラムは、ソースコードに記述されたインタフェースそれぞれについて、当該インタフェースと関連付けられた実装プログラムを、前記ソースコードおよび前記実装プログラムに対応する対応ソースコードの記述に基づいて特定する処理をコンピュータに実行させる。また、情報処理プログラムは、特定された実装プログラムの識別子を、当該実装プログラムに関連付けられたインタフェースと関連付けて記憶部に記憶する処理をコンピュータに実行させる。また、情報処理プログラムは、前記ソースコードの規定内容に基づき、当該ソースコードの実行時に実行されるインタフェースを特定する処理をコンピュータに実行させる。また、情報処理プログラムは、前記ソースコードに基づくプログラムの実行時に、前記特定されたインタフェースと関連付けて識別子が前記記憶部に記憶された実装プログラムを識別可能に出力する処理をコンピュータに実行させる。
【発明の効果】
【０００８】
ソースコードに記述されたインタフェースと実装プログラムとの対応付けを行うことができる。
【図面の簡単な説明】
【０００９】
【図１】図１は、定義ファイルをアノテーションに移行する一例を示す説明図である。
【図２】図２は、実施例の情報処理装置の構成の一例を示すブロック図である。
【図３】図３は、関係テーブル記憶部の一例を示す説明図である。
【図４】図４は、ソースコードおよび定義ファイルの木構造の一例を示す説明図である。
【図５】図５は、木構造が一致する場合の一例を示す説明図である。
【図６】図６は、木構造が一致しない場合の一例を示す説明図である。
【図７】図７は、１つの実装が複数のインタフェースを有する場合の一例を示す説明図である。
【図８】図８は、ソースコードに未実装部分がある場合の一例を示す説明図である。
【図９】図９は、定義ファイルの更新の一例を示す説明図である。
【図１０】図１０は、アノテーション移行処理の一例を示すフローチャートである。
【図１１】図１１は、探索優先度処理の一例を示すフローチャートである。
【図１２】図１２は、プログラム実行処理の一例を示すフローチャートである。
【図１３】図１３は、情報処理プログラムを実行するコンピュータの一例を示す説明図である。
【発明を実施するための形態】
【００１０】
以下、図面に基づいて、本願の開示する情報処理プログラム、情報処理方法および情報処理装置の実施例を詳細に説明する。なお、本実施例により、開示技術が限定されるものではない。また、以下の実施例は、矛盾しない範囲で適宜組みあわせてもよい。
【実施例】
【００１１】
まず、定義ファイルによりなされたインタフェースと実装プログラムとの対応付けを、アノテーションで対応付ける形式への移行について説明する。図１は、定義ファイルをアノテーションに移行する一例を示す説明図である。図１に示すように、例えば、クラスＡクライアントが実装Ｂサービスを利用する場合に、移行前の定義ファイル１１ａには、クラスＡクライアントについてインスタンス化した実装Ｂサービスと対応する識別ＩＤとが記述される。
【００１２】
定義ファイル１１ａをアノテーションに移行するには、例えば、クラスＡクライアントのソースコードには、「＠ａｕｔｏｗｉｒｅｄ」というアノテーション１２ａを挿入する。また、実装Ｂサービスのソースコードには、「＠ｃｏｍｐｏｎｅｎｔ」というアノテーション１２ｂを挿入する。さらに、定義ファイル１１ｂは、クラスの依存に関する記述を削除する。定義ファイルからアノテーションへの移行は、基本的に上述の様な流れで実施する。なお、定義ファイル１１ａおよび１１ｂでは、Ａクライアントを「Ａｃｌｉｅｎｔ」と表し、Ｂサービスを「Ｂｓｅｒｖｉｃｅ」と表す。また、上記のクラスＡクライアントおよび実装Ｂサービスは、共にクラスであるが、以下の説明では、依存する側を単にクラスとも表記し、依存される側を単に実装または実装プログラムとも表記する。
【００１３】
図２は、実施例の情報処理装置の構成の一例を示すブロック図である。図２に示す情報処理装置１００は、入力部１１０と、出力部１１１と、記憶部１２０と、制御部１３０とを有する。
【００１４】
入力部１１０は、例えば、外部記憶装置等から、アノテーションに移行するソースコードと、当該ソースコードに対応する定義ファイルとが入力される。入力部１１０は、入力されたソースコードと定義ファイルとを制御部１３０に出力する。
【００１５】
出力部１１１は、例えば、制御部１３０からソースコードに基づくプログラムの実行結果データが入力されると、図示しない液晶ディスプレイ等の表示デバイスに、入力された実行結果を出力する。実行結果は、例えば、画面中にウィンドウを設けて、所定の処理結果がウィンドウ内に表示される。
【００１６】
記憶部１２０は、例えば、ＲＡＭ（Random  Access  Memory）、フラッシュメモリ（Flash  Memory）等の半導体メモリ素子、ハードディスクや光ディスク等の記憶装置によって実現される。記憶部１２０は、解析結果記憶部１２１と、構造記憶部１２２と、名前空間記憶部１２３と、アノテーションルール記憶部１２４とを有する。また、記憶部１２０は、ソースコード記憶部１２５と、関係テーブル記憶部１２６と、定義ファイル記憶部１２７と、プログラム記憶部１２８とを有する。また、記憶部１２０は、制御部１３０での処理に用いる情報を記憶する。
【００１７】
解析結果記憶部１２１は、ソースコードおよび定義ファイルに記述された定義の解析結果を記憶する。解析結果記憶部１２１は、ソースコードおよび定義ファイルに記述された定義の解析結果として、例えば、木構造の解析結果を記憶する。
【００１８】
構造記憶部１２２は、ソースコードの解析結果の木構造と、定義ファイルに記述された定義の解析結果の木構造とを比較した場合における、構造の一致および不一致を記憶する。構造記憶部１２２は、構造の不一致として、例えば、ソースコードでは、あるクラスはインタフェースを介して２つの実装に依存するが、定義ファイルに記述された定義では、１つの実装に依存する定義のみがある場合が挙げられる。構造記憶部１２２は、構造の不一致として、例えば、定義ファイルに記述された定義では、ある実装が定義されているが、ソースコードでは、対応する実装がない場合が挙げられる。
【００１９】
名前空間記憶部１２３は、実装プログラムのパッケージ名、つまり識別子を記憶する。名前空間記憶部１２３は、実装プログラムのパッケージ名として、例えば、ｐ１、ｐ２、ｐ３といったパッケージ名を記憶する。すなわち、名前空間記憶部１２３は、ソースコード内に含まれる実装プログラムのパッケージ名を記憶する。
【００２０】
アノテーションルール記憶部１２４は、ソースコードおよび実装プログラムに対応する対応ソースコードに挿入するアノテーションを定義して記憶する。アノテーションルール記憶部１２４は、例えば、依存する側のクラスに「＠ａｕｔｏｗｉｒｅｄ」を挿入し、依存される側の実装に「＠ｃｏｍｐｏｎｅｎｔ」を挿入することを定義して記憶する。
【００２１】
ソースコード記憶部１２５は、定義ファイルからアノテーションへの移行後のソースコードを記憶する。つまり、ソースコード記憶部１２５は、アノテーションが挿入されたソースコードを記憶する。
【００２２】
関係テーブル記憶部１２６は、インタフェースごとに実装を対応付けて記憶する。図３は、関係テーブル記憶部の一例を示す説明図である。図３に示すように、関係テーブル記憶部１２６は、インタフェース１２６ａ、実装（デフォルト）１２６ｂ、実装１２６ｃ、実装１２６ｄといった項目を有する。関係テーブル記憶部１２６は、ＤＩコンテナがプログラムを実行するときに読み込まれ、実装（デフォルト）１２６ｂ、実装１２６ｃ、実装１２６ｄのいずれかが選択される。実装１２６ｂ〜１２６ｄは、実装プログラムを探索する範囲を定義する探索範囲定義を指定し、実装１２６ｂ〜１２６ｄに応じて、使用する実装プログラムを切り替えることができる。すなわち、関係テーブル記憶部１２６は、各インタフェースについて、ソースコードおよび実装プログラムに対応するソースコードの記述に基づいて特定された、各インタフェースに関連付けられた実装プログラムの識別子を各インタフェースと関連付けて記憶する。
【００２３】
インタフェース１２６ａは、クラスが利用するインタフェースを示す。実装（デフォルト）１２６ｂは、デフォルト設定の場合に各インタフェースと関連付けられる実装プログラムを示し、「定義名」、「パッケージ名」、「クラス名」といった要素を有する。「定義名」は、ＤＩコンテナが実装プログラムを探索するための探索範囲定義の定義名である。「パッケージ名」は、実装プログラムを識別する。「クラス名」は、実装プログラムが提供するサービスを識別する。例えば、図３のインタフェースＣのデフォルトの実装プログラムは、ＤＩコンテナが探索するための定義名が「ｄｅｆ１」、パッケージ名が「ｐ１」、クラス名が「Ｃサービス」となる。実装１２６ｃおよび実装１２６ｄは、実装（デフォルト）１２６ｂと同様に、各インタフェースと関連付けられる実装プログラムを示し、「定義名」、「パッケージ名」、「クラス名」といった要素を有する。実装１２６ｃおよび実装１２６ｄは、ＤＩコンテナがプログラムを実行するときに、プログラムの起動者に選択肢として提示される。
【００２４】
図２の説明に戻って、定義ファイル記憶部１２７は、定義ファイルからアノテーションへの移行後の定義ファイルを記憶する。つまり、定義ファイル記憶部１２７は、入力部１１０から入力された定義ファイルに対して、クラスの依存に関する記述が削除された、更新後定義ファイルを記憶する。
【００２５】
プログラム記憶部１２８は、アノテーションが挿入されたソースコードが後述するコンパイル部１３４でコンパイルされて生成された、ＤＩコンテナで実行可能なコードである実行プログラムを記憶する。
【００２６】
制御部１３０は、例えば、ＣＰＵ（Central  Processing  Unit）やＭＰＵ（Micro  Processing  Unit）等によって、内部の記憶装置に記憶されているプログラムがＲＡＭを作業領域として実行されることにより実現される。また、制御部１３０は、例えば、ＡＳＩＣ（Application  Specific  Integrated  Circuit）やＦＰＧＡ（Field  Programmable  Gate  Array）等の集積回路により実現されるようにしてもよい。制御部１３０は、構造解析部１３１と、走査部１３２と、生成部１３３と、コンパイル部１３４と、実行解析部１３５と、決定部１３６と実行部１３７とを有し、以下に説明する情報処理の機能や作用を実現または実行する。なお、制御部１３０の内部構成は、図２に示した構成に限られず、後述する情報処理を行う構成であれば他の構成であってもよい。
【００２７】
構造解析部１３１は、入力部１１０からソースコードおよび定義ファイルが入力されると、ソースコードおよび定義ファイルに記述された定義を解析して木構造を生成する。図４は、ソースコードおよび定義ファイルの木構造の一例を示す説明図である。図４に示すように、解析して生成された木構造は、例えば、ソースコードを解析した木構造１３、および、定義ファイルに記述された定義を解析した木構造１４のようになる。例えば、木構造１３は、アプリクラスＡ、アプリクラスＢ、アプリクラスＣ、および、インタフェースδＩＦを実装するアプリクラスＤを有する。また、木構造１３は、インタフェースαＩＦを実装するＤＢクラスα、インタフェースβＩＦを実装するＤＢクラスβおよびβｖ、ならびに、インタフェースγＩＦを実装するＤＢクラスγを有する。
【００２８】
例えば、木構造１４は、アプリクラスＡ、アプリクラスＢ、アプリクラスＣおよびアプリクラスＤを有する。また、木構造１４は、ＤＢクラスα、ＤＢクラスβ、ならびに、ＤＢクラスγ、γｖおよびγｗを有する。構造解析部１３１は、ソースコードおよび定義ファイルに記述された定義から解析して生成された木構造を解析結果記憶部１２１に記憶し、解析完了情報を走査部１３２に出力する。また、構造解析部１３１は、ソースコードおよび定義ファイルを記憶部１２０のバッファに記憶する。
【００２９】
図２の説明に戻って、走査部１３２は、構造解析部１３１から解析完了情報が入力されると、解析結果記憶部１２１からソースコードおよび定義ファイルに記述された定義から解析して生成された木構造を読み出して走査し、木構造の一致部分および不一致部分を特定する。図４の例では、走査部１３２は、ソースコードの木構造１３ａと、定義の木構造１４ａとは一致するので、木構造１３ａと木構造１４ａとを対応付けて構造一致として構造記憶部１２２に記憶する。同様に、走査部１３２は、ソースコードの木構造１３ｂと、定義の木構造１４ｂとは一致するので、木構造１３ｂと木構造１４ｂとを対応付けて構造一致として構造記憶部１２２に記憶する。
【００３０】
また、図４の例では、走査部１３２は、ソースコードの木構造１３ｃと、定義の木構造１４ｃとは不一致であるので、木構造１３ｃと木構造１４ｃとを対応付けて構造不一致として構造記憶部１２２に記憶する。同様に、走査部１３２は、ソースコードの木構造１３ｄと、定義の木構造１４ｄとは不一致であるので、木構造１３ｄと木構造１４ｄとを対応付けて構造不一致として構造記憶部１２２に記憶する。
【００３１】
また、走査部１３２は、生成部１３３から名前空間の走査を指示されると、構造記憶部１２２を参照して走査する部分を決定し、実装プログラムのパッケージ名について解析結果を走査し、解析結果に含まれる実装プログラムのパッケージ名を抽出する。走査部１３２は、抽出した実装プログラムのパッケージ名を名前空間記憶部１２３に記憶する。走査部１３２は、構造またはパッケージ名の走査が完了すると、それぞれ対応する走査完了情報を生成部１３３に出力する。
【００３２】
図２の説明に戻って、生成部１３３は、走査部１３２から構造に係る走査完了情報が入力されると、構造記憶部１２２を参照して、関係テーブルを生成する。つまり、生成部１３３は、インタフェースごとに１つ以上の探索範囲定義である関係テーブルの実装を生成する。言い換えると、生成部１３３は、各インタフェースについて、ソースコードおよび実装プログラムに対応するソースコードの記述に基づいて特定された、各インタフェースに関連付けられた実装プログラムの識別子を各インタフェースと関連付ける。生成部１３３は、生成した関係テーブルを関係テーブル記憶部１２６に記憶する。生成部１３３は、構造記憶部１２２から読み出したソースコードおよび定義の木構造のうち、ソースコードにのみ記述されている部分がある場合には、走査部１３２に対して名前空間の走査を指示する。生成部１３３は、走査部１３２からパッケージ名に係る走査完了情報が入力されると、探索優先度処理を実行する。
【００３３】
また、生成部１３３は、記憶部１２０のバッファからソースコードおよび定義ファイルを読み出して、アノテーションが挿入されたソースコードと、更新された定義ファイルとを生成する。生成部１３３は、構造記憶部１２２、名前空間記憶部１２３およびアノテーションルール記憶部１２４を参照して、ソースコードにアノテーションを挿入する。生成部１３３は、探索優先度に応じて探索範囲定義を定義ファイルに追加し、定義ファイルからクラス関係の定義を削除する。生成部１３３は、生成したアノテーションが挿入されたソースコードをソースコード記憶部１２５に記憶し、更新された定義ファイルを定義ファイル記憶部１２７に記憶する。生成部１３３は、関係テーブル、アノテーションが挿入されたソースコード、および、更新された定義ファイルの生成が完了すると、コンパイル部１３４に生成完了情報を出力する。なお、以下の説明では、アノテーションが挿入されたソースコードを、アノテーション付ソースコードともいう。
【００３４】
図５は、木構造が一致する場合の一例を示す説明図である。図５に示すように、生成部１３３は、ソースコードと定義ファイルに記述された定義の木構造が一致する場合には、例えば、ソースコードのクラスＡクライアントに、「＠ａｕｔｏｗｉｒｅｄ」というアノテーション１５ａを挿入する。また、生成部１３３は、ソースコードの実装Ｂサービス、および、実装Ｃサービスに、「＠ｃｏｍｐｏｎｅｎｔ」というアノテーション１５ｂを挿入する。
【００３５】
図６は、木構造が一致しない場合の一例を示す説明図である。図６に示すように、例えば、ソースコードには、インタフェースＣを有する実装として、実装ｐ１のＣサービスと、実装ｐ２のＣαサービスとがあり、対応する定義には、Ｃサービスがある場合について説明する。生成部１３３は、ソースコードと定義ファイルに記述された定義の木構造が一致しない場合には、例えば、「定義ｄｅｆ１」として「ｓｃａｎ  ｐ１」を探索範囲定義１６ａとして定義ファイルに追加する。また、生成部１３３は、「定義ｄｅｆ１  ａｎｏｔｈｅｒ」として「ｓｃａｎ  ｐ２」を探索範囲定義１６ｂとして定義ファイルに追加する。ここで、「定義ｄｅｆ１」は、ＤＩコンテナが実装プログラムを探索するときに、実装ｐ１を探索する定義である。また、「定義ｄｅｆ１  ａｎｏｔｈｅｒ」は、ＤＩコンテナが実装プログラムを探索するときに、実装ｐ２を探索する定義である。すなわち、「定義ｄｅｆ１」および「定義ｄｅｆ１  ａｎｏｔｈｅｒ」は、実装プログラムの名前空間ごとの探索範囲定義である。
【００３６】
次に、生成部１３３は、例えば、ソースコードのクラスＡクライアントに、「＠ａｕｔｏｗｉｒｅｄ」というアノテーション１５ａを挿入する。また、生成部１３３は、ソースコードの実装Ｂサービス、実装ｐ１のＣサービス、および、実装ｐ２のＣαサービスに、「＠ｃｏｍｐｏｎｅｎｔ」というアノテーション１５ｂを挿入する。
【００３７】
図７は、１つの実装が複数のインタフェースを有する場合の一例を示す説明図である。図７に示すように、例えば、ソースコードには、クラスＡクライアントが依存する実装として、インタフェースＢを有する実装ｐ２のＢサービスと、インタフェースＣを有する実装ｐ３のＣサービスとがある。また、ソースコードには、クラスＡクライアントが依存する実装として、インタフェースＢおよびＣを有する実装ｐ１のＤサービスがある。また、例えば、定義には、クラスＡが依存する実装として、ＣサービスとＤサービスとがある。このように、例えば、Ｊａｖａ（登録商標）等では、１つの実装が複数のインタフェースを有する場合がある。
【００３８】
生成部１３３は、探索範囲定義を定義ファイルに追加する。このとき、生成部１３３は、仮に、探索範囲定義として、例えば「ｓｃａｎ  ｐ１」と記述すると、インタフェースＢに対する実装として、実装ｐ１のＤサービスを先に探索する。すると、実装ｐ１は、インタフェースＣも有するので、インタフェースＣに対する実装としても実装ｐ１のＤサービスを探索し、実装ｐ３のＣサービスが探索されないことになる。
【００３９】
このため、生成部１３３は、「定義ｄｅｆ１」として「ｓｃａｎ  ｐ３」と「ｓｃａｎ  ｐ１」とを、「ｓｃａｎ  ｐ３」の探索優先度Ｓを「ｓｃａｎ  ｐ１」の探索優先度Ｓよりも高くして、探索範囲定義１６ｃとして定義ファイルに追加する。ここで、探索優先度Ｓは、実装しているインタフェースの数が少ないものほど高くし、単一である場合に最も探索優先度Ｓを高くする。なお、探索優先度Ｓは、数が小さいものほど優先度が高く、数が大きいものほど優先度が低くなる。
【００４０】
生成部１３３は、探索優先度処理として、探索優先度Ｓを次の手順で付与する。ソースコードの木構造は、クラスＡがインタフェースＩｎｔＦ１を実装しているクラスＺに依存しており、当該クラスＺがインタフェースＩｎｔＦ１以外のＮ−１個の異なるインタフェースを実装しているとする。なお、実装しているインタフェースの数はＮ個とする。まず、生成部１３３は、実装インタフェース数ＮがＮ＝１であるか否かを判定する。生成部１３３は、Ｎ＝１の場合、つまり、クラスＺがインタフェースＩｎｔＦ１以外にインタフェースを実装していない場合には、クラスＺの探索優先度ＳをＳ＝０とする。すなわち、最も探索優先度Ｓを高くする。
【００４１】
生成部１３３は、Ｎ＝１でない、すなわちＮ＞１の場合には、インタフェースＩｎｔＦ１以外のインタフェースにおいて、クラスＡの依存があるか否かを判定する。生成部１３３は、クラスＡの依存がない場合には、クラスＺの探索優先度ＳをＳ＝１とする。生成部１３３は、クラスＡの依存がある場合には、クラスＡが依存している実装に探索優先度Ｐが付与されているか否かを判定する。なお、探索優先度Ｐは、当該実装における探索優先度Ｓであり、クラスＺの探索優先度Ｓと区別するために異なる文字を用いたものである。
【００４２】
生成部１３３は、クラスＡが依存している実装に探索優先度Ｐが付与されている場合には、探索優先度ＳをＳ＝Ｐ＋１とする。生成部１３３は、クラスＡが依存している実装に探索優先度Ｐが付与されていない場合には、依存先の実装に探索優先度Ｐが付与されるまで待機する。このようにして、生成部１３３は、各実装に探索優先度Ｓを付与する。
【００４３】
生成部１３３は、図７の例では、実装ｐ２は、インタフェースＢを実装しているので探索優先度を「０」とする。実装ｐ３は、インタフェースＣを実装しているので、実装ｐ２と同様に、探索優先度を「０」とする。実装ｐ１は、インタフェースＢおよびＣを実装しているので、例えば、インタフェースＢを基準とすると、インタフェースＣにおいてクラスＡクライアントの依存があるか否かを判定する。インタフェースＣは、クラスＡクライアントの依存があるので、依存している実装ｐ３に探索優先度Ｐが付与されているか否かを判定する。実装ｐ３には、探索優先度Ｐとして「０」が付与されているので、実装ｐ１の探索優先度Ｓは、Ｓ＝Ｐ＋１より「１」となる。これにより、探索範囲定義１６ｃとして、実装ｐ３を探索する「ｓｃａｎ  ｐ３」を、実装ｐ１を探索する「ｓｃａｎ  ｐ１」よりも先に実行する、すなわち、実装ｐ３を実装ｐ１よりも先に探索することができる。
【００４４】
次に、生成部１３３は、例えば、ソースコードのクラスＡクライアントに、「＠ａｕｔｏｗｉｒｅｄ」というアノテーション１５ａを挿入する。また、生成部１３３は、ソースコードの実装ｐ２のＢサービス、実装ｐ１のＤサービス、および、実装ｐ３のＣサービスに、「＠ｃｏｍｐｏｎｅｎｔ」というアノテーション１５ｂを挿入する。
【００４５】
図８は、ソースコードに未実装部分がある場合の一例を示す説明図である。図８に示すように、例えば、ソースコードには、クラスＡクライアントのみがある。未実装部分１７は、インタフェースＢを有する実装Ｂサービス、および、インタフェースＣを有する実装Ｃサービスを有し、これらはソースコードには未実装である。また、例えば、定義には、クラスＡが依存する実装として、実装Ｂと実装Ｃとがある。生成部１３３は、定義からアノテーションに移行する際に、実装Ｂおよび実装Ｃの情報が喪失しないように、仮設のインタフェースＢとして仮設インタフェース１８ａ、および、仮設インタフェースＣとして仮設インタフェース１８ｂを生成する。また、生成部１３３は、仮設の実装Ｂとして仮設実装１９ａ、および、仮設の実装Ｃとして仮設実装１９ｂを生成する。
【００４６】
生成部１３３は、例えば、ソースコードのクラスＡクライアントに、「＠ａｕｔｏｗｉｒｅｄ」というアノテーション１５ａを挿入する。また、生成部１３３は、ソースコードの仮設実装１９ａおよび仮設実装１９ｂに、「＠ｃｏｍｐｏｎｅｎｔ」というアノテーション１５ｂを挿入する。
【００４７】
図９は、定義ファイルの更新の一例を示す説明図である。図９に示すように、クラスの依存関係の定義２０は、アノテーションに移行することで不要となり、定義ファイルから削除される。また、探索範囲定義２１は、アノテーションに移行することで定義ファイルに追加される。図９の例では、定義ファイルからアノテーションに移行することで、１２個のタグが削除され、２個のタグが追加される。このように、アノテーションに移行することで、定義の量を削減することができる。また、クラスの依存関係の定義は、クラス関係をそれぞれ定義するので、クラス関係が増加すると記述が膨大になるが、探索範囲定義は、パッケージ単位の列挙なので可読性も向上する。なお、情報処理装置１００は、構造解析部１３１と走査部１３２と生成部１３３とを統合して第１特定部として構成してもよい。
【００４８】
コンパイル部１３４は、生成部１３３から生成完了情報が入力されると、ソースコード記憶部１２５からアノテーションが挿入されたソースコードを読み出して、ＤＩコンテナで実行可能なコンパイルプログラム、すなわち実行プログラムを生成する。コンパイル部１３４は、生成した実行プログラムをプログラム記憶部１２８に記憶する。コンパイル部１３４は、アノテーションが挿入されたソースコードのコンパイルが完了すると、コンパイル完了情報を実行解析部１３５に出力する。なお、コンパイル部１３４は、コンパイル完了情報を出力部１１１を介して図示しない表示デバイスに表示させ、ユーザに報知するようにしてもよい。また、コンパイル部１３４は、例えば、図示しない入力デバイスから入力されるユーザの実行開始指示に基づいて、実行解析部１３５に解析の開始を指示するようにしてもよい。
【００４９】
実行解析部１３５は、コンパイル部１３４からコンパイル完了情報が入力されると、プログラム記憶部１２８から実行プログラムを読み出して解析する。また、実行解析部１３５は、定義ファイル記憶部１２７から更新された定義ファイルを読み出して解析する。さらに、実行解析部１３５は、関係テーブル記憶部１２６から関係テーブルを読み出して解析する。実行解析部１３５は、各解析の結果を決定部１３６に出力する。また、実行解析部１３５は、実行プログラムと定義ファイルとを実行部１３７に出力する。
【００５０】
決定部１３６は、実行解析部１３５から各解析の結果が入力されると、プログラムの起動者に対して、関係テーブルの選択肢である実装を、出力部１１１を介して図示しない表示デバイスに表示させて提示する。決定部１３６は、インタフェースごとに使用する実装の探索範囲定義を関係テーブルからプログラムの起動者に選択させ、図示しない入力デバイスから入力される選択情報を取得する。決定部１３６は、選択情報に基づいて、使用する実装、すなわち、使用する探索範囲定義を決定する。決定部１３６は、決定した実装の情報を実行部１３７に出力する。すなわち、実行解析部１３５および決定部１３６は、ソースコードの規定内容に基づき、当該ソースコードの実行時に実行されるインタフェースを特定する第２特定部である。
【００５１】
実行部１３７は、決定部１３６から実装の情報が入力され、実行解析部１３５から実行プログラムと定義ファイルとが入力されると、実装の情報と定義ファイルとに基づいて、実装を探索する。実行部１３７は、探索された実装に基づいて、依存クラスの関係付けを行う。すなわち、実行部１３７は、インタフェースと関連付けられた実装プログラムとを識別可能とする。続いて、実行部１３７は、実行プログラムを実行する。実行部１３７は、実行結果データを出力部１１１に出力し、例えば、図示しない表示デバイスに表示させる。言い換えると、実行部１３７は、ソースコードに基づくプログラムの実行時に、特定されたインタフェースと関連付けて識別子が関係テーブル記憶部１２６に記憶された実装プログラムを識別可能に出力する出力制御部である。
【００５２】
次に、実施例の情報処理装置１００の動作について説明する。
【００５３】
まず、定義ファイルによりなされたインタフェースと実装プログラムとの対応付けを、アノテーションで対応付ける形式への移行するアノテーション移行処理について説明する。図１０は、アノテーション移行処理の一例を示すフローチャートである。構造解析部１３１は、入力部１１０からソースコードおよび定義ファイルが入力されると、ソースコードを解析して木構造Ａを生成する（ステップＳ１）。また、構造解析部１３１は、定義ファイルを解析して木構造Ｂを生成する（ステップＳ２）。構造解析部１３１は、ソースコードおよび定義ファイルから生成された木構造ＡおよびＢを解析結果記憶部１２１に記憶し、解析完了情報を走査部１３２に出力する。また、構造解析部１３１は、ソースコードおよび定義ファイルを記憶部１２０のバッファに記憶する。
【００５４】
走査部１３２は、構造解析部１３１から解析完了情報が入力されると、解析結果記憶部１２１からソースコードおよび定義ファイルから生成された木構造を読み出して走査し、木構造の一致部分および不一致部分を特定する（ステップＳ３）。走査部１３２は、ソースコードの木構造と定義ファイルの木構造とを対応付けて、木構造の各部分について構造一致または構造不一致として、それぞれ構造記憶部１２２に記憶する。走査部１３２は、構造の走査が完了すると、構造に係る走査完了情報を生成部１３３に出力する。
【００５５】
生成部１３３は、走査部１３２から構造に係る走査完了情報が入力されると、構造記憶部１２２および名前空間記憶部１２３を参照して、関係テーブルを生成する（ステップＳ４）。生成部１３３は、生成した関係テーブルを関係テーブル記憶部１２６に記憶する。生成部１３３は、構造記憶部１２２を参照して、木構造ＡおよびＢの各部分について、一致部分か否かを判定する（ステップＳ５）。生成部１３３は、一致部分である場合には（ステップＳ５：肯定）、構造記憶部１２２、名前空間記憶部１２３およびアノテーションルール記憶部１２４を参照して、ソースコードにアノテーションを挿入する（ステップＳ６）。また、生成部１３３は、定義ファイル内に名前空間ごとの探索範囲定義を生成し、クラス関係の定義を削除して定義ファイルを更新する。
【００５６】
生成部１３３は、生成したアノテーション付ソースコードをソースコード記憶部１２５に記憶する（ステップＳ７）。また、生成部１３３は、更新された定義ファイルを定義ファイル記憶部１２７に記憶し（ステップＳ８）、アノテーション移行処理を終了する。生成部１３３は、アノテーション移行処理を終了すると、コンパイル部１３４に生成完了情報を出力する。
【００５７】
コンパイル部１３４は、生成部１３３から生成完了情報が入力されると、ソースコード記憶部１２５からアノテーション付ソースコードを読み出して、実行プログラムを生成する。コンパイル部１３４は、生成した実行プログラムをプログラム記憶部１２８に記憶する。
【００５８】
ステップＳ５の説明に戻って、生成部１３３は、一致部分でない場合には（ステップＳ５：否定）、不一致部分がソースコードにのみ記述されているか否かを判定する（ステップＳ９）。生成部１３３は、不一致部分がソースコードにのみ記述されている場合には（ステップＳ９：肯定）、走査部１３２に対して名前空間の走査を指示する（ステップＳ１０）。走査部１３２は、生成部１３３から名前空間の走査を指示されると、実装プログラムのパッケージ名について解析結果を走査し、解析結果に含まれる実装プログラムのパッケージ名を抽出する。走査部１３２は、抽出した実装プログラムのパッケージ名を名前空間記憶部１２３に記憶する。走査部１３２は、パッケージ名の走査が完了すると、パッケージ名に係る走査完了情報を生成部１３３に出力する。
【００５９】
生成部１３３は、走査部１３２からパッケージ名に係る走査完了情報が入力されると、探索優先度処理を実行する（ステップＳ１１）。図１１は、探索優先度処理の一例を示すフローチャートである。なお、前提条件は、上述の探索優先度Ｓを付与する説明と同じとする。生成部１３３は、実装インタフェース数ＮがＮ＝１であるか否かを判定する（ステップＳ１１１）。生成部１３３は、Ｎ＝１の場合には（ステップＳ１１１：肯定）、クラスＺの探索優先度ＳをＳ＝０とする（ステップＳ１１２）。生成部１３３は、探索優先度Ｓを決定すると元の処理に戻る。
【００６０】
生成部１３３は、Ｎ＞１の場合には（ステップＳ１１１：否定）、インタフェースＩｎｔＦ１以外のインタフェースにおいて、クラスＡの依存があるか否かを判定する（ステップＳ１１３）。生成部１３３は、クラスＡの依存がない場合には（ステップＳ１１３：否定）、クラスＺの探索優先度ＳをＳ＝１とする（ステップＳ１１４）。生成部１３３は、探索優先度Ｓを決定すると元の処理に戻る。
【００６１】
生成部１３３は、クラスＡの依存がある場合には（ステップＳ１１３：肯定）、クラスＡが依存している実装に探索優先度Ｐが付与されているか否かを判定する（ステップＳ１１５）。生成部１３３は、クラスＡが依存している実装に探索優先度Ｐが付与されている場合には（ステップＳ１１５：肯定）、探索優先度ＳをＳ＝Ｐ＋１とする（ステップＳ１１６）。生成部１３３は、探索優先度Ｓを決定すると元の処理に戻る。
【００６２】
生成部１３３は、クラスＡが依存している実装に探索優先度Ｐが付与されていない場合には（ステップＳ１１５：否定）、依存先の実装に探索優先度Ｐが付与されるまで待機し（ステップＳ１１７）、ステップＳ１１５に戻る。これにより、１つの実装が複数のインタフェースを有する場合であっても、適切な実装を探索することができる。
【００６３】
図１０に戻って、生成部１３３は、探索優先度に応じて定義ファイル内に名前空間ごとの探索範囲定義を生成し、定義ファイルを更新する（ステップＳ１２）。また、生成部１３３は、定義ファイルからクラス関係の定義を削除する。
【００６４】
生成部１３３は、構造記憶部１２２、名前空間記憶部１２３およびアノテーションルール記憶部１２４を参照して、ソースコードにアノテーションを挿入し（ステップＳ１３）、ステップＳ７の処理に移る。
【００６５】
生成部１３３は、不一致部分がソースコードにのみ記述されていない場合には（ステップＳ９：否定）、ソースコードに未実装部分があるとして、仮設のインタフェースおよび実装を生成する。つまり、生成部１３３は、ソースコードの未実装部分に仮設ソースコードを生成する（ステップＳ１４）。生成部１３３は、定義ファイル内に名前空間ごとの探索範囲定義を生成し、定義ファイルを更新する（ステップＳ１５）。また、生成部１３３は、定義ファイルからクラス関係の定義を削除し、ステップＳ１３の処理に移る。これにより、クラス間の依存関係を記述した定義ファイルを用いるソースコードから、アノテーション付ソースコードを生成できる。
【００６６】
次に、生成されたアノテーション付ソースコードをコンパイル部１３４で実行プログラムにコンパイルした後に、当該実行プログラムを実行するプログラム実行処理について説明する。図１２は、プログラム実行処理の一例を示すフローチャートである。実行解析部１３５は、コンパイル部１３４からコンパイル完了情報が入力されると、プログラム記憶部１２８から実行プログラムをロードする。また、実行解析部１３５は、定義ファイル記憶部１２７から更新された定義ファイルをロードする。さらに、実行解析部１３５は、関係テーブル記憶部１２６から関係テーブルをロードする（ステップＳ５１）。
【００６７】
実行解析部１３５は、実行プログラムをロードすると、実行プログラムを解析する（ステップＳ５２）。実行解析部１３５は、更新された定義ファイルをロードすると、定義ファイル内の探索範囲定義を解析する（ステップＳ５３）。実行解析部１３５は、関係テーブルをロードすると、関係テーブル、すなわち、クラスの関係を解析する（ステップＳ５４）。実行解析部１３５は、各解析の結果を決定部１３６に出力する。また、実行解析部１３５は、実行プログラムと定義ファイルとを実行部１３７に出力する。
【００６８】
決定部１３６は、実行解析部１３５から各解析の結果が入力されると、プログラムの起動者に対して、関係テーブルの選択肢である実装を、出力部１１１を介して図示しない表示デバイスに表示させて提示する。決定部１３６は、インタフェースごとに使用する実装の探索範囲定義を関係テーブルからプログラムの起動者に選択させ、図示しない入力デバイスから入力される選択情報を取得する（ステップＳ５５）。決定部１３６は、選択情報に基づいて、使用する実装、すなわち、使用する探索範囲定義を決定する。決定部１３６は、決定した実装の情報を実行部１３７に出力する。
【００６９】
実行部１３７は、決定部１３６から実装の情報が入力され、実行解析部１３５から実行プログラムと定義ファイルとが入力されると、実装の情報と定義ファイルとに基づいて、実装を探索する（ステップＳ５６）。実行部１３７は、探索された実装に基づいて、依存クラスの関係付けを行う（ステップＳ５７）。続いて、実行部１３７は、実行プログラムを実行する（ステップＳ５８）。実行部１３７は、実行結果データを出力部１１１に出力し、例えば、図示しない表示デバイスに表示させ、プログラム実行処理を終了する。これにより、アノテーション付ソースコードに基づいた実行プラグラムを、選択された実装の探索範囲定義に応じて実行することができる。
【００７０】
このように、情報処理装置１００は、ソースコードに記述されたインタフェースそれぞれについて、当該インタフェースと関連付けられた実装プログラムを、ソースコードおよび実装プログラムに対応する対応ソースコードの記述に基づいて特定する。また、情報処理装置１００は、特定された実装プログラムの識別子を、当該実装プログラムに関連付けられたインタフェースと関連付けて関係テーブル記憶部１２６に記憶する。また、情報処理装置１００は、ソースコードの規定内容に基づき、当該ソースコードの実行時に実行されるインタフェースを特定する。また、情報処理装置１００は、ソースコードに基づくプログラムの実行時に、特定されたインタフェースと関連付けて識別子が関係テーブル記憶部１２６に記憶された実装プログラムを識別可能に出力する。その結果、ソースコードに記述されたインタフェースと実装プログラムとの対応付けを行うことができる。
【００７１】
また、情報処理装置１００は、ソースコード、および、ソースコードに対応する定義ファイルに基づいて、それぞれの木構造を生成するために解析する。また、情報処理装置１００は、ソースコードの木構造と、定義ファイルの木構造とを走査し、実装プログラムの名前を含む名前空間を走査する。また、情報処理装置１００は、解析結果、および、走査結果に基づいて、ソースコードに対しインタフェースおよび実装プログラムとの対応を示す識別子であるアノテーションを挿入して、アノテーションが挿入されたソースコードを生成する。また、情報処理装置１００は、生成されたソースコードをソースコードおよび対応ソースコードとして実装プログラムを特定する。その結果、ソースコードおよび定義ファイルの木構造に応じて、インタフェースと実装プログラムとの対応付けを行うことができる。
【００７２】
また、情報処理装置１００は、定義ファイルの木構造に対応するソースコードの木構造がない部分に対して、仮想の木構造を生成する。その結果、アノテーションへの移行時に定義ファイルの情報の欠落を防止することができる。また、実行プログラムの再コンパイルを行うことなく、実装のクラスの切り替えを行うことができる。すなわち、アノテーション付ソースコードに移行しても、例えば、テストプログラムと本番プログラムとを再コンパイルを行うことなく、容易に切り替えることができる。
【００７３】
また、情報処理装置１００は、定義ファイルについて、ソースコードに挿入されたアノテーションに対応する定義を削除して、実装プログラムを探索する範囲を定義する探索範囲定義を追加して、更新された定義ファイルを生成する。その結果、定義ファイルから膨大で複雑なクラスの関係の記述を削減でき、保守性や可読性が向上する。
【００７４】
また、情報処理装置１００は、実装プログラムが複数のインタフェースを持つ場合には、探索範囲定義の優先度に基づいて、実装プログラムを走査する。その結果、適切な実装プログラムを探索でき、ＤＩコンテナが正しい依存性の注入を行うことができる。また、ソースコード作成者によるアノテーション挿入作業が不要となり、作業コストを抑制することができる。
【００７５】
なお、上記実施例では、アノテーション付ソースコードを生成した後に、コンパイルを行って実行プログラムを生成し、当該実行プログラムを実行したが、これに限定されない。例えば、情報処理装置１００は、アノテーション付ソースコードと対応する定義ファイルと関係テーブルとを生成し記憶部に記憶した時点で処理を一旦中断し、その後、コンパイルを行うようにしてもよい。また、同様に、情報処理装置１００は、コンパイル済の実行プログラムを生成した時点で処理を中断し、その後、実行プログラムを実行するようにしてもよい。これにより、アノテーション付ソースコードおよび実行プログラムを他の情報処理装置に送信して、他の情報処理装置でコンパイルまたは実行することができる。
【００７６】
また、上記実施例では、情報処理装置１００でアノテーション移行処理とプログラム実行処理とを行ったが、これに限定されない。例えば、情報処理装置１００でアノテーション移行処理を実行して、アノテーション付ソースコードを生成してコンパイルを行って実行プログラムを生成し、当該実行プログラムを他の情報処理装置に送信して、他の情報処理装置で実行プラグラムを実行するようにしてもよい。これにより、実行プログラムだけを利用者に配信することができる。
【００７７】
また、図示した各部の各構成要素は、必ずしも物理的に図示の如く構成されていることを要しない。すなわち、各部の分散・統合の具体的形態は図示のものに限られず、その全部または一部を、各種の負荷や使用状況等に応じて、任意の単位で機能的または物理的に分散・統合して構成することができる。例えば、上記の実施例では、アノテーション移行処理を実行する構造解析部１３１、走査部１３２および生成部１３３と、コンパイルを実行するコンパイル部１３４と、プログラム実行処理を実行する実行解析部１３５、決定部１３６および実行部１３７とを同一の情報処理装置１００内で行ったが、これらを複数の情報処理装置に分けて行ってもよい。
【００７８】
さらに、各装置で行われる各種処理機能は、ＣＰＵ（またはＭＰＵ、ＭＣＵ（Micro  Controller  Unit）等のマイクロ・コンピュータ）上で、その全部または任意の一部を実行するようにしてもよい。また、各種処理機能は、ＣＰＵ（またはＭＰＵ、ＭＣＵ等のマイクロ・コンピュータ）で解析実行されるプログラム上、またはワイヤードロジックによるハードウェア上で、その全部または任意の一部を実行するようにしてもよいことは言うまでもない。
【００７９】
ところで、上記の実施例で説明した各種の処理は、予め用意されたプログラムをコンピュータで実行することで実現できる。そこで、以下では、上記の実施例と同様の機能を有するプログラムを実行するコンピュータの一例を説明する。図１３は、情報処理プログラムを実行するコンピュータの一例を示す説明図である。
【００８０】
図１３が示すように、コンピュータ２００は、各種演算処理を実行するＣＰＵ２０１と、データ入力を受け付ける入力装置２０２と、モニタ２０３とを有する。また、コンピュータ２００は、記憶媒体からプログラム等を読み取る媒体読取装置２０４と、各種装置と接続するためのインタフェース装置２０５と、他の情報処理装置等と有線または無線により接続するための通信装置２０６とを有する。また、コンピュータ２００は、各種情報を一時記憶するＲＡＭ２０７と、ハードディスク装置２０８とを有する。また、各装置２０１〜２０８は、バス２０９に接続される。
【００８１】
ハードディスク装置２０８には、図２に示した構造解析部１３１、走査部１３２、生成部１３３、コンパイル部１３４、実行解析部１３５、決定部１３６および実行部１３７の各処理部と同様の機能を有する情報処理プログラムが記憶される。また、ハードディスク装置２０８には、解析結果記憶部１２１、構造記憶部１２２、名前空間記憶部１２３およびアノテーションルール記憶部１２４が記憶される。また、ハードディスク装置２０８には、ソースコード記憶部１２５、関係テーブル記憶部１２６、定義ファイル記憶部１２７、プログラム記憶部１２８、および、情報処理プログラムを実現するための各種データが記憶される。入力装置２０２は、図２に示した入力部１１０と同様の機能を有し、アノテーションに移行するソースコードと、当該ソースコードに対応する定義ファイルの入力を受け付ける。モニタ２０３は、図２に示した出力部１１１に接続される表示デバイスと同様の機能を有し、例えば、実行結果に係る画面を表示する。インタフェース装置２０５は、例えば印刷装置等が接続される。通信装置２０６は、例えば、他の情報処理装置と接続され、アノテーション付ソースコード、定義ファイル、実行プログラム等の各種情報をやりとりする。
【００８２】
ＣＰＵ２０１は、ハードディスク装置２０８に記憶された各プログラムを読み出して、ＲＡＭ２０７に展開して実行することで、各種の処理を行う。また、これらのプログラムは、コンピュータ２００を図２に示した構造解析部１３１、走査部１３２、生成部１３３、コンパイル部１３４、実行解析部１３５、決定部１３６および実行部１３７として機能させることができる。
【００８３】
なお、上記の情報処理プログラムは、必ずしもハードディスク装置２０８に記憶されている必要はない。例えば、コンピュータ２００が読み取り可能な記憶媒体に記憶されたプログラムを、コンピュータ２００が読み出して実行するようにしてもよい。コンピュータ２００が読み取り可能な記憶媒体は、例えば、ＣＤ−ＲＯＭやＤＶＤディスク、ＵＳＢ（Universal  Serial  Bus）メモリ等の可搬型記録媒体、フラッシュメモリ等の半導体メモリ、ハードディスクドライブ等が対応する。また、公衆回線、インターネット、ＬＡＮ等に接続された装置にこの情報処理プログラムを記憶させておき、コンピュータ２００がこれらから情報処理プログラムを読み出して実行するようにしてもよい。
【符号の説明】
【００８４】
１００  情報処理装置
１１０  入力部
１１１  出力部
１２０  記憶部
１２１  解析結果記憶部
１２２  構造記憶部
１２３  名前空間記憶部
１２４  アノテーションルール記憶部
１２５  ソースコード記憶部
１２６  関係テーブル記憶部
１２７  定義ファイル記憶部
１２８  プログラム記憶部
１３０  制御部
１３１  構造解析部
１３２  走査部
１３３  生成部
１３４  コンパイル部
１３５  実行解析部
１３６  決定部
１３７  実行部
【図１】
2015184824.tif 000003
【図２】
2015184824.tif 000004
【図３】
2015184824.tif 000005
【図４】
2015184824.tif 000006
【図５】
2015184824.tif 000007
【図６】
2015184824.tif 000008
【図７】
2015184824.tif 000009
【図８】
2015184824.tif 000010
【図９】
2015184824.tif 000011
【図１０】
2015184824.tif 000012
【図１１】
2015184824.tif 000013
【図１２】
2015184824.tif 000014
【図１３】
2015184824.tif 000015