(57)【特許請求の範囲】
【請求項１】
フレームワークのホットスポットを実装するホットスポット実装コードを開発するための実装コード開発プログラムであって、
ソースコード、及び前記ホットスポットにおける抽象クラスを継承するための継承情報を含む継承情報記述ファイルが格納される記録媒体と、演算処理装置と、メモリと、を備えた実装コード開発システムにおいて、
前記演算処理装置に、
（Ａ）前記記録媒体から前記ソースコードを読み込むステップと、
（Ｂ）プログラミング言語の種類に依らず共通な様々な処理内容を表現するための所定のクラス群を用い、前記ソースコードの処理内容を反映するように前記所定のクラス群をインスタンス化することによって、前記ソースコードの処理内容を示す第１オブジェクトモデルを生成し、前記第１オブジェクトモデルを前記メモリ上に展開するステップと、
（Ｃ）前記記録媒体から前記継承情報記述ファイルを読み込み、前記第１オブジェクトモデルに前記継承情報を格納したフィールドを追加し、前記継承情報が付与された第２オブジェクトモデルを生成するステップと、
（Ｄ）前記メモリ上に展開された前記第２オブジェクトモデルにおける継承情報を参照して、クラスの継承関係が前記ホットスポット実装コードの宣言部に出力し、前記第２オブジェクトモデルにおける関数がコード化して、所定のプログラミング言語で記述される前記ホットスポット実装コードを作成するステップと
を実行させる
実装コード開発プログラム。
【請求項２】
請求項１に記載の実装コード開発プログラムであって、
前記（Ｂ）ステップは、
（Ｂ１）前記ソースコードに含まれる字句を抽出するステップと、
（Ｂ２）前記抽出された字句に基づいて、前記ソースコードの構文を解析するステップと、
（Ｂ３）前記構文の解析結果に基づいて前記所定のクラス群をインスタンス化することにより、前記第１オブジェクトモデルを前記メモリ上に展開するステップと
を含む
実装コード開発プログラム。
【請求項３】
請求項１に記載の実装コード開発プログラムであって、
前記（Ｂ）ステップは、
（ｂ１）前記ソースコードの拡張子を識別することにより、前記ソースコードのファイル形式を決定するステップと、
（ｂ２）前記ファイル形式に準拠して、前記ソースコードに含まれる字句を抽出するステップと、
（ｂ３）前記抽出された字句及び前記ファイル形式に基づいて、前記ソースコードの構文を解析するステップと、
（ｂ４）前記構文の解析結果に基づいて前記所定のクラス群をインスタンス化することにより、前記第１オブジェクトモデルを前記メモリ上に展開するステップと
を含む
実装コード開発プログラム。
【請求項４】
請求項１乃至３のいずれかに記載の実装コード開発プログラムであって、
前記（Ｄ）ステップは、デザインパターンであるＶｉｓｉｔｏｒパターンに基づいて、前記第２オブジェクトモデルに含まれる複数のインスタンスを順番に巡りながら、前記ホットスポット実装コードを作成する
実装コード開発プログラム。
【請求項５】
請求項１乃至４のいずれかに記載の実装コード開発プログラムであって、
前記所定のクラス群は、
前記ソースコードを表現するためのＳｏｕｒｃｅＦｉｌｅクラスと、
前記ソースコードに含まれる関数群を表現するためのＦｕｎｃｔｉｏｎｓクラスと、
前記ソースコードに含まれる変数群を表現するためのＶａｒｉａｂｌｅｓクラスと
を含み、
前記ＳｏｕｒｃｅＦｉｌｅクラスは、集約クラスであり、前記Ｆｕｎｃｔｉｏｎｓクラス及び前記Ｖａｒｉａｂｌｅｓクラスを含む
実装コード開発プログラム。
【請求項６】
請求項５に記載の実装コード開発プログラムであって、
前記Ｆｕｎｃｔｉｏｎｓクラスは、集約クラスであり、前記関数群に含まれる関数を表現するためのＦｕｎｃｔｉｏｎクラスを含み、
前記Ｆｕｎｃｔｉｏｎクラスは、集約クラスであり、
前記関数に含まれるメソッド群を表現するためのＳｔａｔｅｍｅｎｔｓクラスと、
前記関数の引数を表現するためのＡｒｇｕｍｅｎｔＬｉｓｔクラスと、
前記関数で用いられる変数群を表現するための前記Ｖａｒｉａｂｌｅｓクラスと、
前記関数で用いられる定数を表現するためのＣｏｎｓｔａｎｔクラスと
を含む
実装コード開発プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、フレームワークのホットスポットを実装する技術に関する。特に、本発明は、フレームワークのホットスポットを実装するホットスポット実装コードを開発するためのシステム及びプログラムに関する。
【背景技術】
【０００２】
システムやソフトウェアを開発する際、開発効率を向上させるために「フレームワーク」がしばしば利用される。フレームワークとは、特定のアーキテクチャに基づいて実装されたできあいの半完成のシステムのことである。このフレームワークに、プラグインとして作成される特定のソフトウェア部品をはめ込むことにより、所望のシステムを効率的に構築することが可能である。
【０００３】
フレームワークにおいて、今後の変更が起こらないと分析される部分は「フローズンスポット」と呼ばれる。このフローズンスポットの実装は、フレームワークの開発者によって行われる。一方、新たな要求の発生が予想される部分は「ホットスポット（可変部分）」と呼ばれる。このホットスポットの実装は、フレームワークの使用者によって行われる。つまり、フレームワークの使用者は、ホットスポットの変更に応じたプラグインを開発し、そのプラグインを用いてホットスポットを実装する。
【０００４】
オブジェクト指向によるフレームワークの場合、ホットスポットには、そのフレームワークが提供する抽象クラス（インターフェース）が用意される。そのホットスポットの実装を行うためには、その抽象クラスを継承するサブクラスがプラグインとして用意されればよい。つまり、ホットスポットに適合するサブクラスが規定されたコードが開発され、そのコードがホットスポットに適用されればよい。以下、このコードは、「ホットスポット実装コード」と参照される。
【０００５】
フレームワークを利用した開発では、フレームワーク自体（フローズンスポット）の実装言語と同じ言語を利用して、ホットスポット実装コードを開発する必要がある。このことは、システムの開発効率の低下を招く可能性がある。例えば、複雑な行列計算処理でホットスポットを実装する必要があり、その行列計算コード（ホットスポット実装コード）をＪａｖａ（登録商標）言語により開発する必要がある場合を考える。行列計算の例として「Ｅ＝ＡＢ＋ＣＤ」を考える。この場合、開発者は、次のようなＪａｖａ（登録商標）コードを記述する必要がある。
【０００６】
Ｅ  ＝  Ａ．ｍｕｌｔｉｐｌｙ（Ｂ）．ａｄｄ（Ｃ．ｍｕｌｔｉｐｌｙ（Ｄ））
【０００７】
Ｊａｖａ（登録商標）言語は、演算子のオーバーロードをサポートしていないため、“メソッド呼び出し”という形式を用いて行列計算を記述せざるを得ない。そのために、上記行列計算コードの可読性は良好ではなく、保守性も低下してしまう。また、Ｊａｖａ（登録商標）の標準ライブラリには行列クラスが含まれていないため、開発者は、適当な行列クラスを作成するか、適当な数値計算パッケージを入手する必要がある。
【０００８】
一方、科学や工学で必要とされる数値や数式計算をサポートする記述性に優れたプログラミング言語も存在する。そのようなプログラミング言語の１つとして、ＭａｔＬａｂが挙げられる。ＭａｔＬａｂで記述されるプログラムファイルの拡張子は“．ｍ”であるため、ＭａｔＬａｂファイルは「Ｍファイル」と呼ばれる場合もある。このＭａｔＬａｂを用いる場合、上述の行列計算（Ｅ＝ＡＢ＋ＣＤ）は、次のように記述される。
【０００９】
Ｅ  ＝  Ａ  ＊  Ｂ  ＋  Ｃ  ＊  Ｄ
【００１０】
この表現方式は、Ｊａｖａ（登録商標）による行列計算の表現方式と比較すると、可読性及び保守性の点において優れていると言える。また、Ｍａｔｌａｂは数値計算ライブラリを内包しているので、開発者は、行列計算のためのライブラリを入手する必要はない。
【００１１】
一般に、Ｃ言語やＪａｖａ（登録商標）言語といったソフトウェア開発でよく用いられるプログラミング言語においては、行列演算や数式をネイティブに扱うための仕組みが言語レベルでは用意されていない。従って、行列演算などを扱いたい場合、開発者は、第三者が作成したライブラリを別途利用する必要がある。一方、ＭａｔＬａｂはそのようなライブラリを内包したマクロ的言語である。よって、Ｃ言語やＪａｖａ（登録商標）言語と比較して、行列演算等の数値計算を簡潔に記述することが可能となる。
【００１２】
このように、様々なプログラミング言語は、それぞれ異なるプロパティを有しており、それぞれ異なる長所・短所を有している。ある言語で構築されたフレームワークのホットスポットに、ある処理を適用する場合、その処理の内容によっては、ホットスポット実装コードの開発が困難になる可能性がある。つまり、フレームワークという制限のために、ホットスポット実装コードの開発効率が低下するという問題点があった。ホットスポット実装コードの開発効率を向上させることができる技術が望まれる。
【００１３】
尚、フレームワークやソフトウェアの開発に関連する技術として以下のものが知られている。
【００１４】
特許文献１には、アプリケーションに共通する雛型ソフトウェアを有するモデルを用いて、利用者が要求する要求機能を実行するフレームワークの開発を支援するフレームワーク開発支援装置が開示されている。このフレームワーク開発支援装置は、利用者からフレームワークに対する要求機能の入力を受け付け、受け付けた要求機能を編集する要求機能編集部と、要求機能編集部が編集した要求機能を格納する要求機能格納部と、モデルを編集するモデル編集部と、モデル編集部が編集したモデルを格納するモデル格納部と、モデル格納部に格納されたモデルと要求機能格納部に格納された要求機能とを対応づける追跡関係を生成する追跡関係編集部と、追跡関係編集部が生成した追跡関係を格納する追跡関係格納部とを備える。
【００１５】
特許文献２には、オブジェクト指向による再利用可能なソフトウェア部品の開発を支援するソフトウェア部品開発支援装置が開示されている。このソフトウェア部品開発支援装置は、分析モデル生成手段と、変換手段とを備えている。分析モデル生成手段は、ある問題領域のアプリケーションに共通となる要求仕様の分析時に、仕様の変動性に関する情報を入力し、該情報を用いて要求仕様を分析して分析モデルを生成する。変換手段は、分析モデルを入力して、アプリケーション開発環境の要素となる再利用可能ソフトウェアの設計情報に変換する。
【００１６】
特許文献３には、ディジタルシグナルプロセッサ（ＤＳＰ）のプログラムのソースコードを中間コードに変換し、その中間コードを上記ＤＳＰに対応したオブジェクトコードに変換するコンパイル方法が開示されている。このコンパイル方法において、上記中間コードは、ＤＳＰのプログラムを記述するための複数の言語、または複数のＤＳＰにそれぞれ対応したオブジェクトコードに共通である。
【００１７】
【特許文献１】特開２００２−１５７１１７号公報
【特許文献２】特開平１１−２３７９８２号公報
【特許文献３】特開平５−３４２０１２号公報
【発明の開示】
【発明が解決しようとする課題】
【００１８】
本発明の目的は、フレームワークを利用するシステム開発の開発効率を向上させることができる技術を提供することにある。
【００１９】
本発明の他の目的は、フレームワークのホットスポットを実装するホットスポット実装コードの開発効率を向上させることができる技術を提供することにある。
【００２０】
本発明の更に他の目的は、フレームワークの利用者が、ホットスポットを実装する処理内容に応じて、最適な開発言語を選択することができる開発システム及び開発プログラムを提供することにある。
【課題を解決するための手段】
【００２１】
以下に、［発明を実施するための最良の形態］で使用される番号・符号を用いて、［課題を解決するための手段］を説明する。これらの番号・符号は、［特許請求の範囲］の記載と［発明を実施するための最良の形態］との対応関係を明らかにするために括弧付きで付加されたものである。ただし、それらの番号・符号を、［特許請求の範囲］に記載されている発明の技術的範囲の解釈に用いてはならない。
【００２２】
本発明によれば、開発者によって様々な言語で記述されたソースコードが、一つの共通なオブジェクトモデルへ変換される。そのオブジェクトモデルは、メモリ上に展開される。そのオブジェクトモデルから、ホットスポットを実装するソースコード（ホットスポット実装コード）が生成される。つまり、本発明に係る実装コード開発システム及び開発プログラムは、オブジェクトモデルを中間表現として利用することによって、開発者が作成するソースコードを、ホットスポットに適合するホットスポット実装コードに変換する。
【００２３】
本発明に係る実装コード開発システム（１０）は、フレームワーク（１）のホットスポット（３）を実装するホットスポット実装コード（５０）を開発する。その実装コード開発システム（１０）は、記録媒体（１３）と、ソースコードパース部（１１０）と、継承情報付与部（１２０）と、アウトプット部（１３０）とを備える。記録媒体（１３）には、ソースコード（２０）、及びホットスポット（３）に適合する条件が記述された継承情報記述ファイル（４０）が格納される。ソースコードパース部（１１０）は、記録媒体（１３）から読み込まれるソースコード（２０）の内容に応じて所定のクラス群をインスタンス化し、ソースコード（２０）の内容を示す第１オブジェクトモデル（３０Ａ）をメモリ（１２）上に展開する。継承情報付与部（１２０）は、記録媒体（１３）から継承情報記述ファイル（４０）を読み込み、第１オブジェクトモデル（３０Ａ）を、上記条件が付与された第２オブジェクトモデル（３０Ｂ）に変更する。アウトプット部（１３０）は、メモリ（１２）上に展開された第２オブジェクトモデル（３０Ｂ）をコード化することにより、ホットスポット実装コード（５０）を作成する。
【００２４】
上記ソースコードパース部（１１０）は、字句解析部（１１１）と構文解析部（１１２）とを備える。字句解析部（１１１）は、ソースコード（２０）を受け取り、そのソースコード（２０）に含まれる字句を抽出する。構文解析部（１１２）は、抽出された字句に基づいて、ソースコード（２０）の構文を解析する。構文解析部（１１２）は、構文の解析結果に基づいて所定のクラス群をインスタンス化することにより、第１オブジェクトモデル（３０Ａ）をメモリ（１２）上に展開する。
【００２５】
また、上記ソースコードパース部（１１０）は、複数のファイル形式のそれぞれに対応した複数の字句解析部（１１１）と、複数のファイル形式のそれぞれに対応した複数の構文解析部（１１２）とを備える。複数の字句解析部（１１１）の各々は、ソースコード（２０）に含まれる字句を抽出する。複数の構文解析部（１１２）の各々は、抽出された字句に基づいて、ソースコード（２０）の構文を解析する。ソースコード（２０）は、複数の字句解析部（１１１）のうち、ソースコード（２０）のファイル形式に対応する一の字句解析部（１１１）に入力される。複数の構文解析部（１１２）のうちソースコード（２０）のファイル形式に対応する一の構文解析部（１１２）は、構文の解析結果に基づいて所定のクラス群をインスタンス化することにより、第１オブジェクトモデル（３０Ａ）をメモリ（１２）上に展開する。
【００２６】
ソースコードパース部（１１０）は、更に、拡張子判定部（１１３）を備えていてもよい。この拡張子判定部（１１３）は、ソースコード（２０）の拡張子を識別することにより、複数の字句解析部（１１１）から上記一の字句解析部（１１１）を決定する。そして、拡張子判定部（１１３）は、ソースコード（２０）を、決定された一の字句解析部（１１１）に出力する。
【００２７】
継承情報記述ファイル（４０）に記述される情報は、ホットスポット（３）における抽象クラスを継承するための継承情報（４０００）を含む。
【００２８】
アウトプット部（１３０）は、デザインパターンであるＶｉｓｉｔｏｒパターンに基づいて構築されてもよい。この場合、アウトプット部（１３０）は、第２オブジェクトモデル（３０Ｂ）に含まれる複数のインスタンスを順番に巡りながら、第２オブジェクトモデル（３０Ｂ）をコード化する。
【００２９】
本発明に係る実装コード開発プログラム（１００）は、フレームワーク（１）のホットスポット（３）を実装するホットスポット実装コード（５０）を開発するためのプログラムであり、コンピュータにより実行される。そのコンピュータは、ソースコード（２０）及びホットスポット（３）に適合する条件が記述された継承情報記述ファイル（４０）が格納される記録媒体（１３）と、メモリ（１２）とを備える。本発明に係る実装コード開発プログラム（１００）は、（Ａ）記録媒体（１３）からソースコード（２０）を読み込むステップと、（Ｂ）ソースコード（２０）の内容に応じて所定のクラス群をインスタンス化し、ソースコード（２０）の内容を示す第１オブジェクトモデル（３０Ａ）をメモリ（１２）上に展開するステップと、（Ｃ）記録媒体（１３）から継承情報記述ファイル（４０）を読み込み、第１オブジェクトモデル（３０Ａ）を、上記条件が付与された第２オブジェクトモデル（３０Ｂ）に変更するステップと、（Ｄ）メモリ（１２）上に展開された第２オブジェクトモデル（３０Ｂ）をコード化することにより、ホットスポット実装コード（５０）を作成するステップとをコンピュータに実行させる。
【００３０】
上記（Ｂ）ステップは、（Ｂ１）ソースコード（２０）に含まれる字句を抽出するステップと、（Ｂ２）抽出された字句に基づいて、ソースコード（２０）の構文を解析するステップと、（Ｂ３）構文の解析結果に基づいて所定のクラス群をインスタンス化することにより、第１オブジェクトモデル（３０Ａ）をメモリ（１２）上に展開するステップとを含む。
【００３１】
また、上記（Ｂ）ステップは、（ｂ１）ソースコード（２０）の拡張子を識別することにより、ソースコード（２０）のファイル形式を決定するステップと、（ｂ２）そのファイル形式に準拠して、ソースコード（２０）に含まれる字句を抽出するステップと、（ｂ３）抽出された字句及びファイル形式に基づいて、ソースコード（２０）の構文を解析するステップと、（ｂ４）構文の解析結果に基づいて所定のクラス群をインスタンス化することにより、第１オブジェクトモデル（３０Ａ）をメモリ（１２）上に展開するステップとを含む。
【００３２】
継承情報記述ファイル（４０）に記述される情報は、ホットスポット（３）における抽象クラスを継承するための継承情報（４０００）を含む。
【００３３】
上記（Ｄ）ステップは、デザインパターンであるＶｉｓｉｔｏｒパターンに基づいて、第２オブジェクトモデル（３０Ｂ）に含まれる複数のインスタンスを順番に巡りながら、第２オブジェクトモデル（３０Ｂ）をコード化するステップを含む。
【００３４】
上記所定のクラス群は、ソースコード（２０）を表現するためのＳｏｕｒｃｅＦｉｌｅクラス（１０００）と、ソースコード（２０）に含まれる関数群を表現するためのＦｕｎｃｔｉｏｎｓクラス（１１００）と、ソースコード（２０）に含まれる変数群を表現するためのＶａｒｉａｂｌｅｓクラス（１２００）とを含む。ＳｏｕｒｃｅＦｉｌｅクラス（１０００）は、集約クラスであり、Ｆｕｎｃｔｉｏｎｓクラス（１１００）及びＶａｒｉａｂｌｅｓクラス（１２００）を含む。
【００３５】
上記Ｆｕｎｃｔｉｏｎｓクラス（１１００）は、集約クラスであり、関数群に含まれる関数を表現するためのＦｕｎｃｔｉｏｎクラス（１３００）を含む。また、Ｆｕｎｃｔｉｏｎクラス（１３００）も、集約クラスである。Ｆｕｎｃｔｉｏｎクラス（１３００）は、関数に含まれるメソッド群を表現するためのＳｔａｔｅｍｅｎｔｓクラス（１４００）と、関数の引数を表現するためのＡｒｇｕｍｅｎｔＬｉｓｔクラス（１５００）と、関数で用いられる変数群を表現するためのＶａｒｉａｂｌｅｓクラス（１２００）と、関数で用いられる定数を表現するためのＣｏｎｓｔａｎｔクラス（１９３０）とを含む。
【発明の効果】
【００３６】
本発明に係る開発システム及び開発プログラムによれば、フレームワークの利用者（システムの開発者）は、ホットスポットを実装する処理内容に応じて、最適な開発言語を選択することが可能となる。つまり、本発明によれば、開発者は、自分が得意とするプログラミング言語を利用して、ホットスポット実装コードを開発することが可能となる。従って、ホットスポット実装コードの開発効率が向上する。最適な言語を利用してホットスポットの実装を行うことができるため、開発者は、フレームワークを利用するシステムを短期間で効率良く開発することが可能となる。
【発明を実施するための最良の形態】
【００３７】
添付図面を参照して、本発明に係るホットスポット実装コードの開発システム及び開発プログラムを説明する。
【００３８】
図１は、本発明の全体を概念的に示している。本発明において、所望のシステムはフレームワーク１を利用することによって開発される。そのフレームワーク１は、フローズンスポット２とホットスポット３を備えている。フレームワーク１は、オブジェクト指向によるフレームワークであり、ホットスポット３には、そのフレームワーク１が提供する「抽象クラス（インターフェース）」が用意される。
【００３９】
所望のシステムを構築するために、所望の機能を実現するプログラムによりホットスポット３の実装が行われる。そのプログラムのソースコード、すなわちホットスポット実装コード５０は、フレームワーク１の開発言語と同じプログラミング言語で記述される。例えば、フレームワーク１がＪａｖａ（登録商標）で開発された場合、ホットスポット実装コード５０もＪａｖａ（登録商標）で記述される。また、そのホットスポット実装コード５０には、ホットスポット３における抽象クラスを継承するサブクラスが規定される必要がある。このようなホットスポット実装コード５０、つまりホットスポット３に適合するようなホットスポット実装コード５０は、本発明に係る実装コード開発システム１０によって作成される。
【００４０】
図１に示されるように、本発明に係る実装コード開発システム１０は、システム開発者によって作成されるソースコード２０を入力し、ホットスポット実装コード５０を出力する。ソースコード２０は、Ｊａｖａ（登録商標）、Ｃ言語、ＭａｔＬａｂ、ＸＭＬなど様々なプログラミング言語で作成される。ソースコード２０を記述する言語は、フレームワーク１の開発言語と異なっていてもよいし、同一でもよい。開発者は、自分が得意とするプログラミング言語を用いてソースコード２０を開発すればよい。
【００４１】
後述されるように、実装コード開発システム１０には、所定の「クラス群」が規定されている。入力されたソースコード２０の内容に応じてそのクラス群をインスタンス化することにより、ソースコード２０の内容が反映されたオブジェクトモデル３０が生成される。そして、共通のクラス群に基づいて作成されたオブジェクトモデル３０が、ホットスポット３に適合するホットスポット実装コード５０に変換される。生成されたホットスポット実装コード５０はコンパイルされ、ホットスポット３に適用される。これにより、ホットスポット３の実装が完了する。
【００４２】
このように、本発明に係る実装コード開発システム１０は、様々な言語で記述され得るソースコード２０を、ホットスポット３に適合する一の言語で記述されるホットスポット実装コード５０に変換する。その変換過程において、実装コード開発システム１０は、オブジェクトモデル３０を「中間表現」として利用している。オブジェクトモデルとは、プログラム上で扱われるデータがオブジェクト指向設計によってモデリングされた、データ構造とそれに与えられる一連の動作の骨組みのことである。代表的なオブジェクトモデルとして、ＸＭＬファイルを表現するためのＤＯＭ（Document Object Model）が挙げられる。本発明に係るオブジェクトモデル３０は、ある処理を行うプログラムのソースコードを表現するためのオブジェクトモデルであると言える。
【００４３】
以下、本発明に係る実装コード開発システム１０の構成及び動作が、更に詳細に説明される。
【００４４】
（構成）
図２は、本発明に係る実装コード開発システム１０の構成を示すブロック図である。実装コード開発システム１０は、演算処理装置１１、メモリ１２、記録媒体１３、入力装置１４、及び表示装置１５を備えている。メモリ１２は、データ処理用の一時記憶装置であり、例としてＤＲＡＭ（Dynamic Random Access Memory）が挙げられる。記録媒体１３は、データやプログラムを格納するための記憶装置であり、例としてハードディスクが挙げられる。入力装置１４としては、キーボードやマウスが例示される。表示装置１５としては、液晶ディスプレイが例示される。演算処理装置１１は、プログラムの命令に従って、各種演算や各装置の制御を実行する。開発者は、表示装置１５に表示される情報を参照しながら、入力装置１４を用いてファイルの編集やコマンドの入力を行うことができる。この実装コード開発システム１０は、例えばワークステーション上に構築される。
【００４５】
記録媒体１３には、ソースコード２０、継承情報記述ファイル４０、及びホットスポット実装コード５０が格納される。ソースコード２０は、実装コード開発システム１０によってホットスポット実装コード５０に変換されるファイルである。開発者は、入力装置１４を用いることによって、ソースコード２０を作成・編集することができる。また、開発者は、入力装置１４を用いることによって、入力されるソースコード２０のファイル形式（ＭａｔＬａｂ等）を指定することができる。継承情報記述ファイル４０は、後述されるように、実装コード開発システム１０によるファイル変換処理に用いられるファイルである。継承情報記述ファイル４０には、ホットスポット３における抽象クラスを継承するための情報、つまり、ホットスポット３に適合する条件が記述される。開発者は、入力装置１４を用いることによって、継承情報記述ファイル４０（例えばＸＭＬファイル）を作成・編集することができる。ホットスポット実装コード５０は、実装コード開発システム１０によって作成されるファイルである。開発者は、入力装置１４を用いることによって、出力されるホットスポット実装コード５０のファイル形式、すなわちホットスポット３に適合する所望のファイル形式（Ｊａｖａ（登録商標）等）を指定することができる。
【００４６】
また、記録媒体１３には変換プログラム（実装コード開発プログラム）１００が格納される。この変換プログラム１００は、ソースコード２０をホットスポット実装コード５０に変換するためのプログラムであり、演算処理装置１１によって実行される。逆に言えば、演算処理装置１１は、変換プログラム１００による命令に従って、ソースコード２０をホットスポット実装コード５０に変換する。この変換プログラム１００は、ソースコードパース部１１０、継承情報付与部１２０、及びアウトプット部１３０を含んでいる。後述されるように、ソースコードパース部１１０は、ソースコード２０をオブジェクトモデル３０に変換し、オブジェクトモデル３０をメモリ１２上に展開する機能を備えている。継承情報付与部１２０は、継承情報記述ファイル４０に記述された情報を、オブジェクトモデル３０に付与する機能を備えている。アウトプット部１３０は、メモリ１２上に展開されたオブジェクトモデル３０から、ホットスポット実装コード５０を作成する機能を備えている。
【００４７】
（動作）
図３Ａ及び図３Ｂは、本発明に係る実装コード開発システム１０におけるデータ処理の流れを示している。以下、図２と共にこれら図３Ａ及び図３Ｂを参照することによって、ソースコード２０がホットスポット実装コード５０に変換されるまでの処理を説明する。尚、ソースコード２０及び継承情報記述ファイル４０は、開発者により予め作成され、記録媒体１３に格納されているとする。ソースコード２０は、開発者が得意とするプログラミング言語により作成されている。また、継承情報記述ファイル４０は、所定の言語により作成されている。また、作成されるホットスポット実装コード５０のファイル形式、すなわち所望のファイル形式は、開発者により予め指定されている。例えば、出力ファイル形式は、Ｊａｖａ（登録商標）に設定される。以下に示される処理は、演算処理装置１１と、その演算処理装置１１によって実行される変換プログラム１００とによって実現される。
【００４８】
１．処理前半（入力から中間表現まで）
図３Ａは、本発明に係るデータ処理の前半を示しており、ソースコード２０からオブジェクトモデル３０が作成されるまでの処理を示している。開発者が入力装置１４を用いてソースコード２０を指定すると、変換プログラム１００のソースコードパース部１１０は、指定されたソースコード２０を記録媒体１３から読み込む。そして、ソースコードパース部１１０は、そのソースコード２０の内容を示すオブジェクトモデル３０（以下、「ソースコードオブジェクトモデル３０Ａ」と参照される）を生成する。ソースコードパース部１１０は、生成されるソースコードオブジェクトモデル３０Ａをメモリ１２上に展開する。
【００４９】
具体的には、ソースコードパース部１１０は、字句解析部１１１と構文解析部１１２を有している。まず、ソースコード２０は、字句解析部１１１に入力される。字句解析部１１１は、受け取ったソースコード２０に含まれる字句を抽出する。言い換えれば、字句解析部１１１は、ソースコード２０中の文言を単語（トークン）ごとに切り分ける。例えば、ソースコード２０中に「ｉ  ＝  １」というコードが記述されている場合、スペースがセパレータの役目を果たしている。よって、字句解析部１１１は、スペースを認識することにより、ソースコード２０に含まれる文言をトークンごとに読み込むことができる。また例えば、字句解析部１１１は、ソースコード２０中の「＝」を認識することにより、トークンの読み込みを行うこともできる。
【００５０】
ここで、ソースコード２０は様々なプログラミング言語で記述され得るため、図３Ａに示されるように、字句解析部１１１は、ソースコード２０のファイル形式ごとに複数設けられてもよい。例えば、Ｃ言語で記述されたソースコード２０−１は、字句解析部１１１−１に入力される。Ｍａｔｌａｂで記述されたソースコード２０−２は、字句解析部１１１−２に入力される。Ｊａｖａ（登録商標）で記述されたソースコード２０−３は、字句解析部１１１−３に入力される。各字句解析部は、ソースコード２０のファイル形式に準拠して、ソースコード２０に含まれる字句を抽出する。
【００５１】
ソースコード２０が複数の字句解析部１１１のうちどの字句解析部１１１に入力されるかは、例えば、開発者によって予め指定される。開発者は、入力装置１４を用い、変換対象のソースコード２０のファイル形式を指定する。ソースコード２０は、その指定されたファイル形式に対応する字句解析部１１１に入力される。例えば、ファイル形式としてＭａｔＬａｂが指定される場合、ソースコード２０−２は、字句解析部１１１−２に入力される。
【００５２】
あるいは、ソースコード２０のファイル形式は、ソースコード２０の拡張子（.c, .m, .java等）に基づいて自動的に判定されてもよい。その場合、ソースコードパース部１１０は、入力されるソースコード２０の拡張子を自動的に識別する拡張子判定部１１３を有する。拡張子判定部１１３は、ソースコード２０のファイル形式を判別し、そのファイル形式に応じた一の字句解析部１１１を、複数の字句解析部１１１の中から決定する。例えば、ＭａｔＬａｂで記述されたソースコード２０−２（Ｍファイル）が入力された場合、拡張子判定部１１３は、複数の字句解析部１１１から字句解析部１１１−２を選択する。これにより、ソースコード２０−２が、対応する字句解析部１１１−２に入力される。
【００５３】
次に、字句解析部１１１によって抽出された字句を表す情報（トークン列）が、構文解析部１１２に入力される。字句解析部１１１と同様に、構文解析部１１２は、ソースコード２０のファイル形式ごとに複数設けられる。例えば、字句解析部１１１−１からのトークン列は、Ｃ言語に対して設けられた構文解析部１１２−１に入力される。字句解析部１１１−２からのトークン列は、ＭａｔＬａｂに対して設けられた構文解析部１１２−２に入力される。字句解析部１１１−３からのトークン列は、Ｊａｖａ（登録商標）言語に対して設けられた構文解析部１１２−３に入力される。各構文解析部１１２は、ソースコード２０のトークン列を受け取り、そのトークン列に基づいてソースコード２０の構文と文脈を解析する。構文・文脈の解析は、対応するファイル形式に準拠して、すなわち各プログラミング言語の文法に基づいて行われる。
【００５４】
また、構文解析部１１２は、構文の解析結果に基づいて、ソースコード２０の構造を表現するようなソースコードオブジェクトモデル３０Ａを作成する。そのためには、様々なプログラミング言語によるソースコード２０を表現できるような「共通のクラス群」が予め用意され、そのクラス群が構文解析部１１２に組み込まれていればよい。様々なプログラミング言語は、それぞれ異なる文法を有しているが、「変数の宣言」「分岐」といった処理内容は、どのようなソースコード２０についても共通である。従って、「変数の宣言」を表現するためのクラスや、「分岐」を表現するためのクラスなどが用意されていればよい。
【００５５】
言い換えれば、本発明に係るクラス群は、ソースコード２０中の各処理の内容を格納するための１セットのクラスである。このクラス群は、様々なプログラミング言語によるソースコード２０に対して共通に用いられる。ソースコード２０を記述する言語が変わっても、構文解析部１１２に規定されるクラス群を変更する必要はない。構文解析部１１２は、構文の解析結果をうけて、ソースコード２０の処理内容を反映するように上記クラス群をインスタンス化する。つまり、構文解析部１１２は、ソースコード２０の処理内容に応じて、上記クラス群をインスタンス化する。これにより、ソースコード２０の処理内容を示すソースコードオブジェクトモデル３０Ａが生成される。構文解析部１１２は、ソースコードオブジェクトモデル３０Ａをメモリ１２上に展開する。
【００５６】
図４は、ソースコードオブジェクトモデル３０Ａを構成するためのクラス群を示すクラス図であり、ＵＭＬ（Unified Modeling Language）に準拠して記載されている。ＳｏｕｒｃｅＦｉｌｅクラス（１０００）は、１つのソースコード２０を表現するためのクラスである。１つのソースコード２０に対し、１つのＳｏｕｒｃｅＦｉｌｅオブジェクトが対応する。従って、ｎ個のソースファイル２０がオブジェクトモデル化されると、ｎ個のＳｏｕｒｃｅＦｉｌｅオブジェクトが生成される。
【００５７】
ＳｏｕｒｃｅＦｉｌｅクラス（１０００）は、集約クラスであり、Ｆｕｎｃｔｉｏｎｓクラス（１１００）とＶａｒｉａｂｌｅｓクラス（１２００）を含んでいる。Ｆｕｎｃｔｉｏｎｓクラス（１１００）は、ソースコード２０中で定義された関数群の全てを表現するためのクラスである。また、Ｆｕｎｃｔｉｏｎｓクラス（１１００）は、集約クラスであり、Ｆｕｎｃｔｉｏｎクラス（１３００）を含む。１つのＦｕｎｃｔｉｏｎクラス（１３００）は、ソースコード２０中の１つの関数を表現するためのクラスである。つまり、Ｆｕｎｃｔｉｏｎｓクラス（１１００）は、関数群のそれぞれを表現する一群のＦｕｎｃｔｉｏｎクラス（１３００）を含む。また、Ｖａｒｉａｂｌｅｓクラス（１２００）は、ソースコード２０中のグローバル変数群を表現するためのクラスである。
【００５８】
作成されるＳｏｕｒｃｅＦｉｌｅオブジェクト内を走査することにより、ソースコード２０に記述されたプログラムの内容を把握することができる。図５は、Ｃ言語で記述されたソースコード２０（test.c）がオブジェクトモデル化される例を示している。ソースコード２０中には、大域変数２１、ｍａｉｎ関数２２、ｆ１関数２３、及びｆ２関数２４が記述されている。このソースコード２０の内容に従い、対応するクラスをインスタンス化することによって、１つのＳｏｕｃｅＦｉｌｅオブジェクト（３０００）が作成される。
【００５９】
ＳｏｕｒｃｅＦｉｌｅオブジェクト（３０００）は、Ｆｕｎｃｔｉｏｎｓオブジェクト（３１００）及びＶａｒｉａｂｌｅｓオブジェクト（３２００）を含んでいる。Ｆｕｎｃｔｉｏｎｓオブジェクト（３１００）は、Ｆｕｎｃｔｉｏｎオブジェクト（３３００−１〜３３００−３）を含んでいる。Ｖａｒｉａｂｌｅｓオブジェクト（３２００）は、大域変数２１に応じてＶａｒｉａｂｌｅｓクラス（１２００）をインスタンス化することにより得られる。Ｆｕｎｃｔｉｏｎオブジェクト（３３００−１）は、ｍａｉｎ関数２２の内容に基づいて、Ｆｕｎｃｔｉｏｎクラス（１３００）をインスタンス化することにより得られる。Ｆｕｎｃｔｉｏｎオブジェクト（３３００−２）は、ｆ１関数２３の内容に基づいて、Ｆｕｎｃｔｉｏｎクラス（１３００）をインスタンス化することにより得られる。Ｆｕｎｃｔｉｏｎオブジェクト（３３００−３）は、ｆ２関数２４の内容に基づいて、Ｆｕｎｃｔｉｏｎクラス（１３００）をインスタンス化することにより得られる。
【００６０】
また、図４を参照して、Ｆｕｎｃｔｉｏｎクラス（１３００）は、集約クラスである。このＦｕｎｃｔｉｏｎクラス（１３００）は、Ｖａｒｉａｂｌｅｓクラス（１２００）、Ｓｔａｔｅｍｅｎｔｓクラス（１４００）、ＡｒｇｕｍｅｎｔＬｉｓｔクラス（１５００）、及びＣｏｎｓｔａｎｔクラス（１９３０）を含んでいる。Ｓｔａｔｅｍｅｎｔｓクラス（１４００）は、関数に含まれるメソッド群を表現するためのクラスである。ＡｒｇｕｍｅｎｔＬｉｓｔクラス（１５００）は、関数の引数を表現するためのクラスである。Ｃｏｎｓｔａｎｔクラス（１９３０）は、関数で用いられる定数を表現するためのクラスである。また、この場合のＶａｒｉａｂｌｅｓクラス（１２００）は、関数中で用いられる変数群を表現するためのクラスである。
【００６１】
Ｓｔａｔｅｍｅｎｔｓクラス（１４００）は、集約クラスであり、Ｓｔａｔｅｍｅｎｔクラス（１６００）を含む。１つのＳｔａｔｅｍｅｎｔクラス（１６００）は、関数中の１つのメソッド（文）を表現するためのクラスである。つまり、Ｓｔａｔｅｍｅｎｔｓクラス（１４００）は、メソッド群のそれぞれを表現する一群のＳｔａｔｅｍｅｎｔクラス（１６００）を含む。また、Ｓｔａｔｅｍｅｎｔクラス（１６００）は、「抽象クラス」である。Ｓｔａｔｅｍｅｎｔクラス（１６００）を特化したサブクラスとして、クラス１６０１〜１６０９、及び１８００が挙げられる。逆に言えば、様々なメソッドを表現するサブクラス１６０１〜１６０９、及び１８００が汎化されたクラスが、Ｓｔａｔｅｍｅｎｔクラス（１６００）である。
【００６２】
Ｓｔａｔｅｍｅｎｔクラス（１６００）のサブクラスであるＢｒｅａｋクラス（１６０１）は、“Ｂｒｅａｋ文”を表現するためのクラスである。Ｃｏｎｔｉｎｕｅクラス（１６０２）は、“Ｃｏｎｔｉｎｕｅ文”を表現するためのクラスである。ＤｅｆｉｎｅＶａｒｉａｂｌｅクラス（１６０３）は、“変数宣言文”を表現するためのクラスである。ＤｏＷｈｉｌｅクラス（１６０４）は、“Ｄｏ−Ｗｈｉｌｅループ文”を表現するためのクラスである。Ｆｏｒクラス（１６０５）は、“Ｆｏｒループ文”を表現するためのクラスである。Ｉｆクラス（１６０６）は、“Ｉｆ文”を表現するためのクラスである。Ｒｅｔｕｒｎクラス（１６０７）は、“Ｒｅｔｕｒｎ文”を表現するためのクラスである。Ｓｗｉｔｃｈクラス（１６０８）は、“Ｓｗｉｔｃｈ文”を表現するためのクラスである。Ｗｈｉｌｅクラス（１６０９）は、“Ｗｈｉｌｅ文”を表現するためのクラスである。
【００６３】
また、Ｓｔａｔｅｍｅｎｔクラス（１６００）のサブクラスであるＥｘｐｒｅｓｓｉｏｎクラス（１８００）は、演算子を用いる文を表現するためのクラスである。演算子を用いる文としては、例えば、「ｉ  ＝  １」が挙げられる。
【００６４】
図６は、Ｃ言語で記述されたソースコード２０中のＦｏｒループ文がオブジェクトモデル化される例を示している。Ｆｏｒループ文中には、「初期化文」、「ループ条件文」、「更新文」、及び「実行文」が記述される。このように、Ｆｏｒループ文中には、更に文（Ｓｔａｔｅｍｅｎｔｓ）が含まれており、特に、初期化文やループ条件文といった演算子を用いる文（Ｅｘｐｒｅｓｓｉｏｎ）が含まれている。ネストされた制御構文を表現するために、図７に示されるようにクラス階層を構成する。Ｓｔａｔｅｍｅｎｔｓクラス（１４００）は、Ｓｔａｔｅｍｅｎｔクラス（１６００）のサブクラスであるＦｏｒクラス（１６０５）、Ｉｆクラス（１６０６）、Ｗｈｉｌｅクラス（１６０９）といったループ文用クラスのリストを保持できる。各ループ文用クラスは、さらにその「実行文」を保持するためのＳｔａｔｅｍｅｎｔｓクラス（１４００）を保持する。このような構成により、多重ネストした制御構文を保持することが可能となる。尚、図４において、図７に示されたクラス階層の記載が省略されている。
【００６５】
図６に示されるように、Ｆｏｒループ文がオブジェクトモデル化されることにより、Ｆｏｒオブジェクト３６０５が作成される。Ｆｏｒオブジェクト３６０５は、Ｅｘｐｒｅｓｓｉｏｎオブジェクト３８００−１〜３８００−３、及びＳｔａｔｅｍｅｎｔｓオブジェクト３４００を含んでいる。Ｅｘｐｒｅｓｓｉｏｎオブジェクト（３８００−１）は、初期化文の内容に基づいて、Ｅｘｐｒｅｓｓｉｏｎクラス（１８００）をインスタンス化することにより得られる。Ｅｘｐｒｅｓｓｉｏｎオブジェクト（３８００−２）は、ループ条件文の内容に基づいて、Ｅｘｐｒｅｓｓｉｏｎクラス（１８００）をインスタンス化することにより得られる。Ｅｘｐｒｅｓｓｉｏｎオブジェクト（３８００−３）は、更新文の内容に基づいて、Ｅｘｐｒｅｓｓｉｏｎクラス（１８００）をインスタンス化することにより得られる。Ｓｔａｔｅｍｅｎｔｓオブジェクト（３４００）は、実行文の内容に基づいて、Ｓｔａｔｅｍｅｎｔｓクラス（１４００）をインスタンス化することにより得られる。このようにして、ネストされた制御構文がオブジェクトモデル化される。
【００６６】
また、Ｅｘｐｒｅｓｓｉｏｎクラス（１８００）は、Ｅｘｐｒｅｓｓｉｏｎｓクラス（１７００）に含まれており、Ｓｙｍｂｏｌクラス（１９００）を含んでいる。このＳｙｍｂｏｌクラス（１９００）は、シンボルを表現するための抽象クラスである。シンボルとは四則演算や代入文を構成する個々の値や演算子のことを指す。例えば、「ｉ  ＝  １」という文（Ｅｘｐｒｅｓｓｉｏｎ）は、“ｉ”、“＝”及び“１”という３つのシンボルの組み合わせにより構成されている。これら３つのシンボルはそれぞれ、変数、二項演算子及び定数に分類される。これら値や演算子を表現するために、Ｓｙｍｂｏｌクラス（１９００）を特化したサブクラスとして、Ｖａｌｕｅクラス（１９１０）やＯｐｅｒａｔｏｒクラス（１９２０）が用意されている。
【００６７】
Ｖａｌｕｅクラス（１９１０）は、Ｓｙｍｂｏｌクラス（１９００）のサブクラスであり、「値」を表現するためのサブクラスである。同時に、Ｖａｌｕｅクラス（１９１０）は抽象クラスであり、そのサブクラスとして、変数を表現するためのＶａｒｉａｂｌｅクラス（１９４０）と定数を表現するためのＣｏｎｓｔａｎｔクラス（１９３０）が用意されている。Ｖａｒｉａｂｌｅクラス（１９４０）も抽象クラスであり、そのサブクラスとしては、例えば、整数の変数を表現するためのＩｎｔｅｇｅｒＶａｒｉａｂｌｅクラス（１９４１）が挙げられる。また、Ｃｏｎｓｔａｎｃｔクラス（１９３０）も抽象クラスであり、そのサブクラスとしては、例えば、変数の定数を表現するためのＩｎｔｅｇｅｒＣｏｎｓｔａｎｔクラス（１９３１）が挙げられる。
【００６８】
Ｏｐｅｒａｔｏｒクラス（１９２０）は、Ｓｙｍｂｏｌクラス（１９００）のサブクラスであり、「演算子」を表現するためのサブクラスである。同時に、Ｏｐｅｒａｔｏｒクラス（１９２０）は抽象クラスであり、そのサブクラスとして、二項演算子を表現するためのＢｉｎａｒｙＯｐｅｒａｔｏｒクラス（１９５０）と、単項演算子を表現するためのＭｏｎａｄｉｃＯｐｅｒａｔｏｒクラス（１９６０）とが用意されている。ＢｉｎａｒｙＯｐｅｒａｔｏｒクラス（１９５０）も抽象クラスであり、そのサブクラスとしては、例えば“＝”を表現するためのＡｓｓｉｇｎｍｅｎｔクラス（１９５１）が挙げられる。
【００６９】
上述の「ｉ  ＝  １」という文の場合、シンボル“ｉ”は、ＩｎｔｅｇｅｒＶａｒｉａｂｌｅクラス（１９４１）を用いてオブジェクト化される。同様に、シンボル“＝”は、Ａｓｓｉｇｎｍｅｎｔクラス（１９５１）を用いてオブジェクト化される。また、シンボル“１”は、ＩｎｔｅｇｅｒＣｏｎｓｔａｎｔクラス（１９３１）を用いてオブジェクト化される。図８は、「ｉ  ＝  １」を表現するＥｘｐｒｅｓｓｉｏｎオブジェクトを示している。このＥｘｐｒｅｓｓｉｏｎオブジェクトは、ＩｎｔｅｇｅｒＶａｒｉａｂｌｅオブジェクト（３９４１）、ＩｎｔｅｇｅｒＣｏｎｓｔａｎｔオブジェクト（３９３１）、及びＡｓｓｉｇｎｍｅｎｔオブジェクト（３９５１）を有している。図８に示されるように、これらオブジェクト（３９４１、３９３１、３９５１）は、「ｉ、１、＝」というように、逆ポーランド記法に準拠してスタックされている。このように、Ｅｘｐｒｅｓｓｉｏｎオブジェクトは、保持する文を構成するシンボルを、逆ポーランド順でスタックすることにより保持する。
【００７０】
以上に説明された事項を参照して、あるソースコード２０からソースコードオブジェクトモデル３０Ａが作成される１つの具体例を示す。図９は、変換されるソースコード２０の例として、ＭａｔＬａｂで記述されたＭファイル（ｍｙｆｕｎｃ．ｍ）を示している。このＭファイルは、１つの関数「ｍｙｆｕｎｃ」からなる。関数ｍｙｆｕｎｃは、行列の足し算を行い（Ｃ＝Ａ＋Ｂ）、その演算結果を戻り値として返すという処理を行う。本発明に係る変換プログラム１００のソースコードパース部１１０は、その処理内容に応じて、図４に示されたクラス群を適宜インスタンス化する。これにより、Ｍファイルがオブジェクトモデル化され、その処理内容を示すソースコードオブジェクトモデル３０Ａがメモリ１２上に展開される。
【００７１】
図１０は、本例において生成されるソースコードオブジェクトモデル３０Ａを示している。ソースコード２０であるＭファイルがオブジェクトモデル化されることにより、１つのＳｏｕｒｃｅＦｉｌｅオブジェクト（３０００）が生成される。このＳｏｕｒｃｅＦｉｌｅオブジェクト（３０００）は、関数ｍｙｆｕｎｃに対応する１つのＦｕｎｃｔｉｏｎオブジェクト（３３００）を有している。Ｆｕｎｃｔｉｏｎオブジェクト（３３００）は、関数内のメソッド群を表すＳｔａｔｅｍｅｎｔｓオブジェクト（３４００）を有している。また、Ｆｕｎｃｔｉｏｎオブジェクト（３３００）は、関数名や戻り値の型といったシグネチャをあらわすオブジェクト群を有している。
【００７２】
また、Ｓｔａｔｅｍｅｎｔｓオブジェクト（３４００）は、それぞれの演算文を表すＥｘｐｒｅｓｓｉｏｎオブジェクト（３８００−１〜３８００−４）を有している。図１０に示されるように、各Ｅｘｐｒｅｓｓｉｏｎオブジェクトにおいて、Ｓｙｍｂｏｌオブジェクトは逆ポーランド記法に準拠してスタックされている。また、Ｓｔａｔｅｍｅｎｔｓオブジェクト（３４００）は、変数宣言を表すＤｅｆｉｎｅＶａｒｉａｂｌｅオブジェクト（３６０３）、及びｒｅｔｕｒｎ文を表すＲｅｔｕｒｎオブジェクト（３６０７）を有している。本例において、これら２つのオブジェクト（３６０３、３６０７）は、構文解析部１１２の判断により自動的に作成される。つまり、構文解析部１１２は、読み込まれたソースコード２０の文脈に基づいて、必要なオブジェクトを作成する。
【００７３】
２．処理後半（中間表現から出力まで）
図３Ｂは、本発明に係るデータ処理の後半を示しており、オブジェクトモデル３０からホットスポット実装コード５０が作成されるまでの処理を示している。現在、メモリ１２上には、図１０に示されたソースコードオブジェクトモデル３０Ａが作成されている。
【００７４】
ソースコードオブジェクトモデル３０Ａが作成された後、変換プログラム１００は、記録媒体１３から継承情報記述ファイル４０を読み込む。この継承情報記述ファイル４０には、生成されるホットスポット実装コード５０をホットスポット３に適合させるための情報が記述されている。つまり、継承情報記述ファイル４０には、実装対象であるホットスポット３に適合する条件が記述されており、生成されるホットスポット実装コード５０に影響を及ぼす情報が記述されている。例えば、継承情報記述ファイル４０に記述される情報は、ホットスポット３における抽象クラスを継承するための継承情報を含んでいる。
【００７５】
図１１は、継承情報記述ファイル４０の一例を示している。継承情報記述ファイル４０は、例えばＸＭＬ（eXtensible Markup Language）で記述されるＸＭＬファイルである。拡張子より前の名前は、例えば、ソースコード２０（ｍｙｆｕｎｃ．ｍ）と同じ名前である。図１１に示された継承情報記述ファイル４０（ｍｙｆｕｎｃ．ｘｍｌ）には、以下の継承情報が記述されている。
【００７６】
・“ｃｏｍ．ｎｅｃ．ｓｏｍｅ．ｆｒａｍｅｗｏｒｋパッケージ”を利用すること。
・スーパークラスは、上記パッケージの“ＦｒａｍｅｗｏｒｋＴｅｍｐｌａｔｅクラス”であること。つまり、出力されるコードは、上記パッケージの“ＦｒａｍｅｗｏｒｋＴｅｍｐｌａｔｅクラス”を継承する。
・出力されるコードは、ｓｔａｔｉｃクラスではない（“ｆａｌｓｅ”）こと。
【００７７】
このような継承情報記述ファイル４０は、実装対象のホットスポット３の規格に応じて、開発者により作成されればよい。図３Ｂに示されるように、変換プログラム１００の継承情報付与部１２０が、記録媒体１３から継承情報記述ファイル４０を読み込む。そのため、継承情報付与部１２０は、例えばＸＭＬパーサ１２１を含んでいる。継承情報付与部１２０は、継承情報記述ファイル４０に記述された継承情報を、ソースコードオブジェクトモデル３０Ａに付与する。これにより、継承情報が付与されたオブジェクトモデル３０（以下、「継承情報付与後オブジェクトモデル３０Ｂ」と参照される）が作成される。つまり、継承情報付与部１２０は、継承情報記述ファイル４０を参照することによって、ソースコードオブジェクトモデル３０Ａを継承情報付与後オブジェクトモデル３０Ｂに変換される。この継承情報付与後オブジェクトモデル３０Ｂは、メモリ１２上に展開されている。
【００７８】
図１２は、本例において生成される継承情報付与後オブジェクトモデル３０Ｂを示している。図１２に示されるように、継承情報付与後オブジェクトモデル３０Ｂには、継承情報４０００が付与されている。具体的には、ＳｏｕｒｃｅＦｉｌｅオブジェクト（３０００）は、継承情報を格納するためのフィールド４１００〜４５００を有している。それらフィールド４１００〜４５００のそれぞれに、継承情報記述ファイル４０に記述された情報が格納されている。例えば、フィールド４１００には、パッケージ名“ｃｏｍ．ｎｅｃ．ｓｏｍ．ｆｒａｍｅｗｏｒｋ”が記録されている。フィールド４２００には、スーパークラス名“ＦｒａｍｅｗｏｒｋＴｅｍｐｌａｔｅ”が記録されている。フィールド４５００には、“ｆａｌｓｅ”が記録されている。このように、継承情報付与部１２０は、ソースコード２０の処理内容が反映されたソースコードオブジェクトモデル３０Ａが保持していない情報を付与する。これにより、ホットスポット３０に適合するホットスポット実装コード５０を生成するための準備が整う。
【００７９】
最後に、変換プログラム１００のアウトプット部１３０は、メモリ１２上の継承情報付与後オブジェクトモデル３０Ｂ中の各インスタンスをコード化することにより、ホットスポット実装コード５０を作成する。例えば、アウトプット部１３０は、デザインパターンの一つである「Ｖｉｓｉｔｏｒパターン」に基づいて構築される。一般に、Ｖｉｓｉｔｏｒオブジェクトは、集合の要素を一つ一つ巡って、所定の処理を実行していく。本例の場合、「集合の要素」とは、図１２に示された継承情報付与後オブジェクトモデル３０Ｂの各インスタンスである。また、「所定の処理」とは、各インスタンスの内容を解釈し、コードを作成することである。図４に示されたクラス群の各々は、Ｖｉｓｉｔｏｒオブジェクトを受けいれる（Ａｃｃｅｐｔする）ように設定されていればよい。アウトプット部１３０は、図１２に示されたＳｏｕｒｃｅＦｉｌｅオブジェクト３０００をルート要素とするオブジェクトツリー上を渡り歩き、各オブジェクトを順次コード化する。
【００８０】
図１３は、アウトプット部１３０による処理を示すフローチャートである。また、図１４は、作成されるホットスポット実装コード５０の一例を示している。本例において、出力ファイルの形式は、Ｊａｖａ（登録商標）に設定されているとする。この場合、ホットスポット実装コード５０として、Ｊａｖａ（登録商標）ファイル（ｍｙｆｕｎｃ．ｊａｖａ）が作成される。尚、ホットスポット実装コード５０において、数値計算ライブラリ（ｃｏｍ．ｎｅｃ．ｓｏｍｅ．ｎｕｍｅｒｉｃａｌパッケージ）も利用されるとする。
【００８１】
まず、アウトプット部１３０は、ＳｏｕｒｃｅＦｉｌｅオブジェクト３０００を発見すると、クラスの出力を開始する（ステップＳ１）。アウトプット部１３０は、図１２に示された継承情報４０００を参照し、クラスの宣言部の出力を行う（ステップＳ２）。その結果、図１４に示されるように、クラスの継承関係が、ホットスポット実装コード５０の宣言部に出力される。
【００８２】
次に、アウトプット部１３０は、各関数のコード化を行う。具体的には、未出力のＦｕｎｃｔｉｏｎオブジェクト３３００があるかどうか判定される（ステップＳ３）。未出力のＦｕｎｃｔｉｏｎオブジェクト３３００がある場合（ステップＳ３；Ｙｅｓ）、アウトプット部１３０は、そのＦｕｎｃｔｉｏｎオブジェクト３３００によるメソッドの出力を開始する（ステップＳ４）。まず、メソッドのシグネチャ（図１２参照）の出力が行われる（ステップＳ５）。その結果、図１４に示されるように、関数のシグネチャが出力される。
【００８３】
次に、アウトプット部１３０は、各関数の実装文を順番にコード化する。具体的には、未出力のＳｔａｔｅｍｅｎｔオブジェクトがあるかどうか判定される（ステップＳ６）。未出力のＳｔａｔｅｍｅｎｔオブジェクトがある場合（ステップＳ６；Ｙｅｓ）、アウトプット部１３０は、そのＳｔａｔｅｍｅｎｔオブジェクトによる実装文を出力する（ステップＳ７）。
【００８４】
処理中のＦｕｎｃｔｉｏｎオブジェクト３０００が有する全てのＳｔａｔｅｍｅｎｔオブジェクトについてコード化が終了すると（ステップＳ６；Ｎｏ）、そのＦｕｎｃｔｉｏｎオブジェクト３３００に関する出力処理は終了する（ステップＳ８）。全てのＦｕｎｃｔｉｏｎオブジェクト３３００についてコード化が終了すると（ステップＳ３；Ｎｏ）、クラスの出力処理が終了する（ステップＳ９）。
【００８５】
以上の処理により、ソースコード２０は、実装対象のホットスポット３に適合したホットスポット実装コード５０に変換される。上述の例においては、実装対象のフレームワーク１はＪａｖａ（登録商標）言語で実装されているが、開発者は、ソースコード２０をＭａｔＬａｂで開発することができる。つまり、数値計算の記述性に優れたＭａｔｌａｂを用いてホットスポット３のコーディングが行われ、Ｊａｖａ（登録商標）フレームワークのホットスポット３の実装が行われている。継承情報記述ファイル４０で指定された継承関係を参照することにより、ソースコード２０中に記述された行列計算が、ホットスポット３に適合する形でホットスポット実装コード５０中に実現されている。
【００８６】
以上に説明されたように、本発明に係る開発システム及び開発プログラムによれば、フレームワーク１の利用者（システムの開発者）は、ホットスポット３を実装する処理内容に応じて、最適な開発言語を選択することが可能となる。つまり、本発明によれば、開発者は、自分が得意とするプログラミング言語を利用して、ホットスポット実装コード５０を開発することが可能となる。従って、ホットスポット実装コード５０の開発効率が向上する。最適な言語を利用してホットスポット３の実装を行うことができるため、開発者は、フレームワーク１を利用するシステムを短期間で効率良く開発することが可能となる。ソースコードパース部１１０とアウトプット部１３０がサポートするプログラミング言語を拡張することによって、あらゆるフレームワーク１に本発明を適用することが可能となる。
【図面の簡単な説明】
【００８７】
【図１】図１は、本発明の全体的な概念を示す図である。
【図２】図２は、本発明に係る実装コード開発システムの構成を示すブロック図である。
【図３Ａ】図３Ａは、本発明に係るデータ処理の前半を示すブロック図である。
【図３Ｂ】図３Ｂは、本発明に係るデータ処理の後半を示すブロック図である。
【図４】図４は、本発明に係るオブジェクトモデルを構成するためのクラス群を示すクラス図である。
【図５】図５は、Ｃ言語で記述されたソースコードをオブジェクトモデルへ変換する例を示す図である。
【図６】図６は、ソースコード中のｆｏｒ文をオブジェクトモデルへ変換する例を示す図である。
【図７】図７は、ネストされた制御構文を表現するためのクラス階層を示す図である。
【図８】図８は、「ｉ＝１」を表現するＥｘｐｒｅｓｓｉｏｎオブジェクト中のスタックの図である。
【図９】図９は、ソースコードの例としてのＭａｔｌａｂファイルを示す図である。
【図１０】図１０は、ソースコードオブジェクトモデルの一例を示す概念図である。
【図１１】図１１は、継承情報記述ファイルの一例を示す図である。
【図１２】図１２は、継承情報付与後オブジェクトモデルの一例を示す概念図である。
【図１３】図１３は、本発明に係るアウトプット部による処理を示すフローチャートである。
【図１４】図１４は、生成されるホットスポット実装コードの例としてのＪａｖａ（登録商標）ファイルを示す図である。
【符号の説明】
【００８８】
１    フレームワーク
２    フローズンスポット
３    ホットスポット
１０    実装コード開発システム
１１    演算処理装置
１２    メモリ
１３    記録媒体
１４    入力装置
１５    表示装置
２０    ソースコード
３０    オブジェクトモデル
３０Ａ  ソースコードオブジェクトモデル
３０Ｂ  継承情報付与後オブジェクトモデル
４０    継承情報記述ファイル
５０    ホットスポット実装コード
１００    変換プログラム
１１０    ソースコードパース部
１１１    字句解析部
１１２    構文解析部
１１３    拡張子判定部
１２０    継承情報付与部
１３０    アウトプット部
１０００    ＳｏｕｒｃｅＦｉｌｅクラス
１１００    Ｆｕｎｃｔｉｏｎｓクラス
１２００    Ｖａｒｉａｂｌｅｓクラス
１３００    Ｆｕｎｃｔｉｏｎクラス
１４００    Ｓｔａｔｅｍｅｎｔｓクラス
１６００    Ｓｔａｔｅｍｅｎｔクラス
１８００    Ｅｘｐｒｅｓｓｉｏｎクラス
３０００    ＳｏｕｒｃｅＦｉｌｅオブジェクト
３１００    Ｆｕｎｃｔｉｏｎｓオブジェクト
３２００    Ｖａｒｉａｂｌｅｓオブジェクト
３３００    Ｆｕｎｃｔｉｏｎオブジェクト
３４００    Ｓｔａｔｅｍｅｎｔｓオブジェクト
３６００    Ｓｔａｔｅｍｅｎｔオブジェクト
３８００    Ｅｘｐｒｅｓｓｉｏｎオブジェクト
４０００    継承情報
【図１】
0005399601.tif 000002
【図２】
0005399601.tif 000003
【図３Ａ】
0005399601.tif 000004
【図３Ｂ】
0005399601.tif 000005
【図４】
0005399601.tif 000006
【図５】
0005399601.tif 000007
【図６】
0005399601.tif 000008
【図７】
0005399601.tif 000009
【図８】
0005399601.tif 000010
【図９】
0005399601.tif 000011
【図１０】
0005399601.tif 000012
【図１１】
0005399601.tif 000013
【図１２】
0005399601.tif 000014
【図１３】
0005399601.tif 000015
【図１４】
0005399601.tif 000016