JP2006338190A - 実装コード開発システム、及び実装コード開発プログラム - Google Patents

実装コード開発システム、及び実装コード開発プログラム Download PDF

Info

Publication number
JP2006338190A
JP2006338190A JP2005160427A JP2005160427A JP2006338190A JP 2006338190 A JP2006338190 A JP 2006338190A JP 2005160427 A JP2005160427 A JP 2005160427A JP 2005160427 A JP2005160427 A JP 2005160427A JP 2006338190 A JP2006338190 A JP 2006338190A
Authority
JP
Japan
Prior art keywords
class
source code
code
object model
function
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.)
Granted
Application number
JP2005160427A
Other languages
English (en)
Other versions
JP5399601B2 (ja
Inventor
Satoshi Ishida
聡 石田
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.)
NEC Corp
Original Assignee
NEC Corp
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 NEC Corp filed Critical NEC Corp
Priority to JP2005160427A priority Critical patent/JP5399601B2/ja
Publication of JP2006338190A publication Critical patent/JP2006338190A/ja
Application granted granted Critical
Publication of JP5399601B2 publication Critical patent/JP5399601B2/ja
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Landscapes

  • Devices For Executing Special Programs (AREA)
  • Stored Programmes (AREA)

Abstract

【課題】フレームワークを利用するシステム開発の開発効率を向上させること。
【解決手段】記録媒体13には、ソースコード20、及びホットスポットに適合する条件が記述された継承情報記述ファイル40が格納される。ソースコードパース部110は、記録媒体13から読み込まれるソースコード20の内容に応じて所定のクラス群をインスタンス化し、ソースコード20の内容を示す第1オブジェクトモデルをメモリ12上に展開する。継承情報付与部120は、記録媒体13から継承情報記述ファイル40を読み込み、第1オブジェクトモデルを、上記条件が付与された第2オブジェクトモデルに変更する。アウトプット部130は、メモリ12上に展開された第2オブジェクトモデルをコード化することにより、ホットスポット実装コード50を作成する。
【選択図】図2

Description

本発明は、フレームワークのホットスポットを実装する技術に関する。特に、本発明は、フレームワークのホットスポットを実装するホットスポット実装コードを開発するためのシステム及びプログラムに関する。
システムやソフトウェアを開発する際、開発効率を向上させるために「フレームワーク」がしばしば利用される。フレームワークとは、特定のアーキテクチャに基づいて実装されたできあいの半完成のシステムのことである。このフレームワークに、プラグインとして作成される特定のソフトウェア部品をはめ込むことにより、所望のシステムを効率的に構築することが可能である。
フレームワークにおいて、今後の変更が起こらないと分析される部分は「フローズンスポット」と呼ばれる。このフローズンスポットの実装は、フレームワークの開発者によって行われる。一方、新たな要求の発生が予想される部分は「ホットスポット(可変部分)」と呼ばれる。このホットスポットの実装は、フレームワークの使用者によって行われる。つまり、フレームワークの使用者は、ホットスポットの変更に応じたプラグインを開発し、そのプラグインを用いてホットスポットを実装する。
オブジェクト指向によるフレームワークの場合、ホットスポットには、そのフレームワークが提供する抽象クラス(インターフェース)が用意される。そのホットスポットの実装を行うためには、その抽象クラスを継承するサブクラスがプラグインとして用意されればよい。つまり、ホットスポットに適合するサブクラスが規定されたコードが開発され、そのコードがホットスポットに適用されればよい。以下、このコードは、「ホットスポット実装コード」と参照される。
フレームワークを利用した開発では、フレームワーク自体(フローズンスポット)の実装言語と同じ言語を利用して、ホットスポット実装コードを開発する必要がある。このことは、システムの開発効率の低下を招く可能性がある。例えば、複雑な行列計算処理でホットスポットを実装する必要があり、その行列計算コード(ホットスポット実装コード)をJava(登録商標)言語により開発する必要がある場合を考える。行列計算の例として「E=AB+CD」を考える。この場合、開発者は、次のようなJava(登録商標)コードを記述する必要がある。
E = A.multiply(B).add(C.multiply(D))
Java(登録商標)言語は、演算子のオーバーロードをサポートしていないため、“メソッド呼び出し”という形式を用いて行列計算を記述せざるを得ない。そのために、上記行列計算コードの可読性は良好ではなく、保守性も低下してしまう。また、Java(登録商標)の標準ライブラリには行列クラスが含まれていないため、開発者は、適当な行列クラスを作成するか、適当な数値計算パッケージを入手する必要がある。
一方、科学や工学で必要とされる数値や数式計算をサポートする記述性に優れたプログラミング言語も存在する。そのようなプログラミング言語の1つとして、MatLabが挙げられる。MatLabで記述されるプログラムファイルの拡張子は“.m”であるため、MatLabファイルは「Mファイル」と呼ばれる場合もある。このMatLabを用いる場合、上述の行列計算(E=AB+CD)は、次のように記述される。
E = A * B + C * D
この表現方式は、Java(登録商標)による行列計算の表現方式と比較すると、可読性及び保守性の点において優れていると言える。また、Matlabは数値計算ライブラリを内包しているので、開発者は、行列計算のためのライブラリを入手する必要はない。
一般に、C言語やJava(登録商標)言語といったソフトウェア開発でよく用いられるプログラミング言語においては、行列演算や数式をネイティブに扱うための仕組みが言語レベルでは用意されていない。従って、行列演算などを扱いたい場合、開発者は、第三者が作成したライブラリを別途利用する必要がある。一方、MatLabはそのようなライブラリを内包したマクロ的言語である。よって、C言語やJava(登録商標)言語と比較して、行列演算等の数値計算を簡潔に記述することが可能となる。
このように、様々なプログラミング言語は、それぞれ異なるプロパティを有しており、それぞれ異なる長所・短所を有している。ある言語で構築されたフレームワークのホットスポットに、ある処理を適用する場合、その処理の内容によっては、ホットスポット実装コードの開発が困難になる可能性がある。つまり、フレームワークという制限のために、ホットスポット実装コードの開発効率が低下するという問題点があった。ホットスポット実装コードの開発効率を向上させることができる技術が望まれる。
尚、フレームワークやソフトウェアの開発に関連する技術として以下のものが知られている。
特許文献1には、アプリケーションに共通する雛型ソフトウェアを有するモデルを用いて、利用者が要求する要求機能を実行するフレームワークの開発を支援するフレームワーク開発支援装置が開示されている。このフレームワーク開発支援装置は、利用者からフレームワークに対する要求機能の入力を受け付け、受け付けた要求機能を編集する要求機能編集部と、要求機能編集部が編集した要求機能を格納する要求機能格納部と、モデルを編集するモデル編集部と、モデル編集部が編集したモデルを格納するモデル格納部と、モデル格納部に格納されたモデルと要求機能格納部に格納された要求機能とを対応づける追跡関係を生成する追跡関係編集部と、追跡関係編集部が生成した追跡関係を格納する追跡関係格納部とを備える。
特許文献2には、オブジェクト指向による再利用可能なソフトウェア部品の開発を支援するソフトウェア部品開発支援装置が開示されている。このソフトウェア部品開発支援装置は、分析モデル生成手段と、変換手段とを備えている。分析モデル生成手段は、ある問題領域のアプリケーションに共通となる要求仕様の分析時に、仕様の変動性に関する情報を入力し、該情報を用いて要求仕様を分析して分析モデルを生成する。変換手段は、分析モデルを入力して、アプリケーション開発環境の要素となる再利用可能ソフトウェアの設計情報に変換する。
特許文献3には、ディジタルシグナルプロセッサ(DSP)のプログラムのソースコードを中間コードに変換し、その中間コードを上記DSPに対応したオブジェクトコードに変換するコンパイル方法が開示されている。このコンパイル方法において、上記中間コードは、DSPのプログラムを記述するための複数の言語、または複数のDSPにそれぞれ対応したオブジェクトコードに共通である。
特開2002−157117号公報 特開平11−237982号公報 特開平5−342012号公報
本発明の目的は、フレームワークを利用するシステム開発の開発効率を向上させることができる技術を提供することにある。
本発明の他の目的は、フレームワークのホットスポットを実装するホットスポット実装コードの開発効率を向上させることができる技術を提供することにある。
本発明の更に他の目的は、フレームワークの利用者が、ホットスポットを実装する処理内容に応じて、最適な開発言語を選択することができる開発システム及び開発プログラムを提供することにある。
以下に、[発明を実施するための最良の形態]で使用される番号・符号を用いて、[課題を解決するための手段]を説明する。これらの番号・符号は、[特許請求の範囲]の記載と[発明を実施するための最良の形態]との対応関係を明らかにするために括弧付きで付加されたものである。ただし、それらの番号・符号を、[特許請求の範囲]に記載されている発明の技術的範囲の解釈に用いてはならない。
本発明によれば、開発者によって様々な言語で記述されたソースコードが、一つの共通なオブジェクトモデルへ変換される。そのオブジェクトモデルは、メモリ上に展開される。そのオブジェクトモデルから、ホットスポットを実装するソースコード(ホットスポット実装コード)が生成される。つまり、本発明に係る実装コード開発システム及び開発プログラムは、オブジェクトモデルを中間表現として利用することによって、開発者が作成するソースコードを、ホットスポットに適合するホットスポット実装コードに変換する。
本発明に係る実装コード開発システム(10)は、フレームワーク(1)のホットスポット(3)を実装するホットスポット実装コード(50)を開発する。その実装コード開発システム(10)は、記録媒体(13)と、ソースコードパース部(110)と、継承情報付与部(120)と、アウトプット部(130)とを備える。記録媒体(13)には、ソースコード(20)、及びホットスポット(3)に適合する条件が記述された継承情報記述ファイル(40)が格納される。ソースコードパース部(110)は、記録媒体(13)から読み込まれるソースコード(20)の内容に応じて所定のクラス群をインスタンス化し、ソースコード(20)の内容を示す第1オブジェクトモデル(30A)をメモリ(12)上に展開する。継承情報付与部(120)は、記録媒体(13)から継承情報記述ファイル(40)を読み込み、第1オブジェクトモデル(30A)を、上記条件が付与された第2オブジェクトモデル(30B)に変更する。アウトプット部(130)は、メモリ(12)上に展開された第2オブジェクトモデル(30B)をコード化することにより、ホットスポット実装コード(50)を作成する。
上記ソースコードパース部(110)は、字句解析部(111)と構文解析部(112)とを備える。字句解析部(111)は、ソースコード(20)を受け取り、そのソースコード(20)に含まれる字句を抽出する。構文解析部(112)は、抽出された字句に基づいて、ソースコード(20)の構文を解析する。構文解析部(112)は、構文の解析結果に基づいて所定のクラス群をインスタンス化することにより、第1オブジェクトモデル(30A)をメモリ(12)上に展開する。
また、上記ソースコードパース部(110)は、複数のファイル形式のそれぞれに対応した複数の字句解析部(111)と、複数のファイル形式のそれぞれに対応した複数の構文解析部(112)とを備える。複数の字句解析部(111)の各々は、ソースコード(20)に含まれる字句を抽出する。複数の構文解析部(112)の各々は、抽出された字句に基づいて、ソースコード(20)の構文を解析する。ソースコード(20)は、複数の字句解析部(111)のうち、ソースコード(20)のファイル形式に対応する一の字句解析部(111)に入力される。複数の構文解析部(112)のうちソースコード(20)のファイル形式に対応する一の構文解析部(112)は、構文の解析結果に基づいて所定のクラス群をインスタンス化することにより、第1オブジェクトモデル(30A)をメモリ(12)上に展開する。
ソースコードパース部(110)は、更に、拡張子判定部(113)を備えていてもよい。この拡張子判定部(113)は、ソースコード(20)の拡張子を識別することにより、複数の字句解析部(111)から上記一の字句解析部(111)を決定する。そして、拡張子判定部(113)は、ソースコード(20)を、決定された一の字句解析部(111)に出力する。
継承情報記述ファイル(40)に記述される情報は、ホットスポット(3)における抽象クラスを継承するための継承情報(4000)を含む。
アウトプット部(130)は、デザインパターンであるVisitorパターンに基づいて構築されてもよい。この場合、アウトプット部(130)は、第2オブジェクトモデル(30B)に含まれる複数のインスタンスを順番に巡りながら、第2オブジェクトモデル(30B)をコード化する。
本発明に係る実装コード開発プログラム(100)は、フレームワーク(1)のホットスポット(3)を実装するホットスポット実装コード(50)を開発するためのプログラムであり、コンピュータにより実行される。そのコンピュータは、ソースコード(20)及びホットスポット(3)に適合する条件が記述された継承情報記述ファイル(40)が格納される記録媒体(13)と、メモリ(12)とを備える。本発明に係る実装コード開発プログラム(100)は、(A)記録媒体(13)からソースコード(20)を読み込むステップと、(B)ソースコード(20)の内容に応じて所定のクラス群をインスタンス化し、ソースコード(20)の内容を示す第1オブジェクトモデル(30A)をメモリ(12)上に展開するステップと、(C)記録媒体(13)から継承情報記述ファイル(40)を読み込み、第1オブジェクトモデル(30A)を、上記条件が付与された第2オブジェクトモデル(30B)に変更するステップと、(D)メモリ(12)上に展開された第2オブジェクトモデル(30B)をコード化することにより、ホットスポット実装コード(50)を作成するステップとをコンピュータに実行させる。
上記(B)ステップは、(B1)ソースコード(20)に含まれる字句を抽出するステップと、(B2)抽出された字句に基づいて、ソースコード(20)の構文を解析するステップと、(B3)構文の解析結果に基づいて所定のクラス群をインスタンス化することにより、第1オブジェクトモデル(30A)をメモリ(12)上に展開するステップとを含む。
また、上記(B)ステップは、(b1)ソースコード(20)の拡張子を識別することにより、ソースコード(20)のファイル形式を決定するステップと、(b2)そのファイル形式に準拠して、ソースコード(20)に含まれる字句を抽出するステップと、(b3)抽出された字句及びファイル形式に基づいて、ソースコード(20)の構文を解析するステップと、(b4)構文の解析結果に基づいて所定のクラス群をインスタンス化することにより、第1オブジェクトモデル(30A)をメモリ(12)上に展開するステップとを含む。
継承情報記述ファイル(40)に記述される情報は、ホットスポット(3)における抽象クラスを継承するための継承情報(4000)を含む。
上記(D)ステップは、デザインパターンであるVisitorパターンに基づいて、第2オブジェクトモデル(30B)に含まれる複数のインスタンスを順番に巡りながら、第2オブジェクトモデル(30B)をコード化するステップを含む。
上記所定のクラス群は、ソースコード(20)を表現するためのSourceFileクラス(1000)と、ソースコード(20)に含まれる関数群を表現するためのFunctionsクラス(1100)と、ソースコード(20)に含まれる変数群を表現するためのVariablesクラス(1200)とを含む。SourceFileクラス(1000)は、集約クラスであり、Functionsクラス(1100)及びVariablesクラス(1200)を含む。
上記Functionsクラス(1100)は、集約クラスであり、関数群に含まれる関数を表現するためのFunctionクラス(1300)を含む。また、Functionクラス(1300)も、集約クラスである。Functionクラス(1300)は、関数に含まれるメソッド群を表現するためのStatementsクラス(1400)と、関数の引数を表現するためのArgumentListクラス(1500)と、関数で用いられる変数群を表現するためのVariablesクラス(1200)と、関数で用いられる定数を表現するためのConstantクラス(1930)とを含む。
本発明に係る開発システム及び開発プログラムによれば、フレームワークの利用者(システムの開発者)は、ホットスポットを実装する処理内容に応じて、最適な開発言語を選択することが可能となる。つまり、本発明によれば、開発者は、自分が得意とするプログラミング言語を利用して、ホットスポット実装コードを開発することが可能となる。従って、ホットスポット実装コードの開発効率が向上する。最適な言語を利用してホットスポットの実装を行うことができるため、開発者は、フレームワークを利用するシステムを短期間で効率良く開発することが可能となる。
添付図面を参照して、本発明に係るホットスポット実装コードの開発システム及び開発プログラムを説明する。
図1は、本発明の全体を概念的に示している。本発明において、所望のシステムはフレームワーク1を利用することによって開発される。そのフレームワーク1は、フローズンスポット2とホットスポット3を備えている。フレームワーク1は、オブジェクト指向によるフレームワークであり、ホットスポット3には、そのフレームワーク1が提供する「抽象クラス(インターフェース)」が用意される。
所望のシステムを構築するために、所望の機能を実現するプログラムによりホットスポット3の実装が行われる。そのプログラムのソースコード、すなわちホットスポット実装コード50は、フレームワーク1の開発言語と同じプログラミング言語で記述される。例えば、フレームワーク1がJava(登録商標)で開発された場合、ホットスポット実装コード50もJava(登録商標)で記述される。また、そのホットスポット実装コード50には、ホットスポット3における抽象クラスを継承するサブクラスが規定される必要がある。このようなホットスポット実装コード50、つまりホットスポット3に適合するようなホットスポット実装コード50は、本発明に係る実装コード開発システム10によって作成される。
図1に示されるように、本発明に係る実装コード開発システム10は、システム開発者によって作成されるソースコード20を入力し、ホットスポット実装コード50を出力する。ソースコード20は、Java(登録商標)、C言語、MatLab、XMLなど様々なプログラミング言語で作成される。ソースコード20を記述する言語は、フレームワーク1の開発言語と異なっていてもよいし、同一でもよい。開発者は、自分が得意とするプログラミング言語を用いてソースコード20を開発すればよい。
後述されるように、実装コード開発システム10には、所定の「クラス群」が規定されている。入力されたソースコード20の内容に応じてそのクラス群をインスタンス化することにより、ソースコード20の内容が反映されたオブジェクトモデル30が生成される。そして、共通のクラス群に基づいて作成されたオブジェクトモデル30が、ホットスポット3に適合するホットスポット実装コード50に変換される。生成されたホットスポット実装コード50はコンパイルされ、ホットスポット3に適用される。これにより、ホットスポット3の実装が完了する。
このように、本発明に係る実装コード開発システム10は、様々な言語で記述され得るソースコード20を、ホットスポット3に適合する一の言語で記述されるホットスポット実装コード50に変換する。その変換過程において、実装コード開発システム10は、オブジェクトモデル30を「中間表現」として利用している。オブジェクトモデルとは、プログラム上で扱われるデータがオブジェクト指向設計によってモデリングされた、データ構造とそれに与えられる一連の動作の骨組みのことである。代表的なオブジェクトモデルとして、XMLファイルを表現するためのDOM(Document Object Model)が挙げられる。本発明に係るオブジェクトモデル30は、ある処理を行うプログラムのソースコードを表現するためのオブジェクトモデルであると言える。
以下、本発明に係る実装コード開発システム10の構成及び動作が、更に詳細に説明される。
(構成)
図2は、本発明に係る実装コード開発システム10の構成を示すブロック図である。実装コード開発システム10は、演算処理装置11、メモリ12、記録媒体13、入力装置14、及び表示装置15を備えている。メモリ12は、データ処理用の一時記憶装置であり、例としてDRAM(Dynamic Random Access Memory)が挙げられる。記録媒体13は、データやプログラムを格納するための記憶装置であり、例としてハードディスクが挙げられる。入力装置14としては、キーボードやマウスが例示される。表示装置15としては、液晶ディスプレイが例示される。演算処理装置11は、プログラムの命令に従って、各種演算や各装置の制御を実行する。開発者は、表示装置15に表示される情報を参照しながら、入力装置14を用いてファイルの編集やコマンドの入力を行うことができる。この実装コード開発システム10は、例えばワークステーション上に構築される。
記録媒体13には、ソースコード20、継承情報記述ファイル40、及びホットスポット実装コード50が格納される。ソースコード20は、実装コード開発システム10によってホットスポット実装コード50に変換されるファイルである。開発者は、入力装置14を用いることによって、ソースコード20を作成・編集することができる。また、開発者は、入力装置14を用いることによって、入力されるソースコード20のファイル形式(MatLab等)を指定することができる。継承情報記述ファイル40は、後述されるように、実装コード開発システム10によるファイル変換処理に用いられるファイルである。継承情報記述ファイル40には、ホットスポット3における抽象クラスを継承するための情報、つまり、ホットスポット3に適合する条件が記述される。開発者は、入力装置14を用いることによって、継承情報記述ファイル40(例えばXMLファイル)を作成・編集することができる。ホットスポット実装コード50は、実装コード開発システム10によって作成されるファイルである。開発者は、入力装置14を用いることによって、出力されるホットスポット実装コード50のファイル形式、すなわちホットスポット3に適合する所望のファイル形式(Java(登録商標)等)を指定することができる。
また、記録媒体13には変換プログラム(実装コード開発プログラム)100が格納される。この変換プログラム100は、ソースコード20をホットスポット実装コード50に変換するためのプログラムであり、演算処理装置11によって実行される。逆に言えば、演算処理装置11は、変換プログラム100による命令に従って、ソースコード20をホットスポット実装コード50に変換する。この変換プログラム100は、ソースコードパース部110、継承情報付与部120、及びアウトプット部130を含んでいる。後述されるように、ソースコードパース部110は、ソースコード20をオブジェクトモデル30に変換し、オブジェクトモデル30をメモリ12上に展開する機能を備えている。継承情報付与部120は、継承情報記述ファイル40に記述された情報を、オブジェクトモデル30に付与する機能を備えている。アウトプット部130は、メモリ12上に展開されたオブジェクトモデル30から、ホットスポット実装コード50を作成する機能を備えている。
(動作)
図3A及び図3Bは、本発明に係る実装コード開発システム10におけるデータ処理の流れを示している。以下、図2と共にこれら図3A及び図3Bを参照することによって、ソースコード20がホットスポット実装コード50に変換されるまでの処理を説明する。尚、ソースコード20及び継承情報記述ファイル40は、開発者により予め作成され、記録媒体13に格納されているとする。ソースコード20は、開発者が得意とするプログラミング言語により作成されている。また、継承情報記述ファイル40は、所定の言語により作成されている。また、作成されるホットスポット実装コード50のファイル形式、すなわち所望のファイル形式は、開発者により予め指定されている。例えば、出力ファイル形式は、Java(登録商標)に設定される。以下に示される処理は、演算処理装置11と、その演算処理装置11によって実行される変換プログラム100とによって実現される。
1.処理前半(入力から中間表現まで)
図3Aは、本発明に係るデータ処理の前半を示しており、ソースコード20からオブジェクトモデル30が作成されるまでの処理を示している。開発者が入力装置14を用いてソースコード20を指定すると、変換プログラム100のソースコードパース部110は、指定されたソースコード20を記録媒体13から読み込む。そして、ソースコードパース部110は、そのソースコード20の内容を示すオブジェクトモデル30(以下、「ソースコードオブジェクトモデル30A」と参照される)を生成する。ソースコードパース部110は、生成されるソースコードオブジェクトモデル30Aをメモリ12上に展開する。
具体的には、ソースコードパース部110は、字句解析部111と構文解析部112を有している。まず、ソースコード20は、字句解析部111に入力される。字句解析部111は、受け取ったソースコード20に含まれる字句を抽出する。言い換えれば、字句解析部111は、ソースコード20中の文言を単語(トークン)ごとに切り分ける。例えば、ソースコード20中に「i = 1」というコードが記述されている場合、スペースがセパレータの役目を果たしている。よって、字句解析部111は、スペースを認識することにより、ソースコード20に含まれる文言をトークンごとに読み込むことができる。また例えば、字句解析部111は、ソースコード20中の「=」を認識することにより、トークンの読み込みを行うこともできる。
ここで、ソースコード20は様々なプログラミング言語で記述され得るため、図3Aに示されるように、字句解析部111は、ソースコード20のファイル形式ごとに複数設けられてもよい。例えば、C言語で記述されたソースコード20−1は、字句解析部111−1に入力される。Matlabで記述されたソースコード20−2は、字句解析部111−2に入力される。Java(登録商標)で記述されたソースコード20−3は、字句解析部111−3に入力される。各字句解析部は、ソースコード20のファイル形式に準拠して、ソースコード20に含まれる字句を抽出する。
ソースコード20が複数の字句解析部111のうちどの字句解析部111に入力されるかは、例えば、開発者によって予め指定される。開発者は、入力装置14を用い、変換対象のソースコード20のファイル形式を指定する。ソースコード20は、その指定されたファイル形式に対応する字句解析部111に入力される。例えば、ファイル形式としてMatLabが指定される場合、ソースコード20−2は、字句解析部111−2に入力される。
あるいは、ソースコード20のファイル形式は、ソースコード20の拡張子(.c, .m, .java等)に基づいて自動的に判定されてもよい。その場合、ソースコードパース部110は、入力されるソースコード20の拡張子を自動的に識別する拡張子判定部113を有する。拡張子判定部113は、ソースコード20のファイル形式を判別し、そのファイル形式に応じた一の字句解析部111を、複数の字句解析部111の中から決定する。例えば、MatLabで記述されたソースコード20−2(Mファイル)が入力された場合、拡張子判定部113は、複数の字句解析部111から字句解析部111−2を選択する。これにより、ソースコード20−2が、対応する字句解析部111−2に入力される。
次に、字句解析部111によって抽出された字句を表す情報(トークン列)が、構文解析部112に入力される。字句解析部111と同様に、構文解析部112は、ソースコード20のファイル形式ごとに複数設けられる。例えば、字句解析部111−1からのトークン列は、C言語に対して設けられた構文解析部112−1に入力される。字句解析部111−2からのトークン列は、MatLabに対して設けられた構文解析部112−2に入力される。字句解析部111−3からのトークン列は、Java(登録商標)言語に対して設けられた構文解析部112−3に入力される。各構文解析部112は、ソースコード20のトークン列を受け取り、そのトークン列に基づいてソースコード20の構文と文脈を解析する。構文・文脈の解析は、対応するファイル形式に準拠して、すなわち各プログラミング言語の文法に基づいて行われる。
また、構文解析部112は、構文の解析結果に基づいて、ソースコード20の構造を表現するようなソースコードオブジェクトモデル30Aを作成する。そのためには、様々なプログラミング言語によるソースコード20を表現できるような「共通のクラス群」が予め用意され、そのクラス群が構文解析部112に組み込まれていればよい。様々なプログラミング言語は、それぞれ異なる文法を有しているが、「変数の宣言」「分岐」といった処理内容は、どのようなソースコード20についても共通である。従って、「変数の宣言」を表現するためのクラスや、「分岐」を表現するためのクラスなどが用意されていればよい。
言い換えれば、本発明に係るクラス群は、ソースコード20中の各処理の内容を格納するための1セットのクラスである。このクラス群は、様々なプログラミング言語によるソースコード20に対して共通に用いられる。ソースコード20を記述する言語が変わっても、構文解析部112に規定されるクラス群を変更する必要はない。構文解析部112は、構文の解析結果をうけて、ソースコード20の処理内容を反映するように上記クラス群をインスタンス化する。つまり、構文解析部112は、ソースコード20の処理内容に応じて、上記クラス群をインスタンス化する。これにより、ソースコード20の処理内容を示すソースコードオブジェクトモデル30Aが生成される。構文解析部112は、ソースコードオブジェクトモデル30Aをメモリ12上に展開する。
図4は、ソースコードオブジェクトモデル30Aを構成するためのクラス群を示すクラス図であり、UML(Unified Modeling Language)に準拠して記載されている。SourceFileクラス(1000)は、1つのソースコード20を表現するためのクラスである。1つのソースコード20に対し、1つのSourceFileオブジェクトが対応する。従って、n個のソースファイル20がオブジェクトモデル化されると、n個のSourceFileオブジェクトが生成される。
SourceFileクラス(1000)は、集約クラスであり、Functionsクラス(1100)とVariablesクラス(1200)を含んでいる。Functionsクラス(1100)は、ソースコード20中で定義された関数群の全てを表現するためのクラスである。また、Functionsクラス(1100)は、集約クラスであり、Functionクラス(1300)を含む。1つのFunctionクラス(1300)は、ソースコード20中の1つの関数を表現するためのクラスである。つまり、Functionsクラス(1100)は、関数群のそれぞれを表現する一群のFunctionクラス(1300)を含む。また、Variablesクラス(1200)は、ソースコード20中のグローバル変数群を表現するためのクラスである。
作成されるSourceFileオブジェクト内を走査することにより、ソースコード20に記述されたプログラムの内容を把握することができる。図5は、C言語で記述されたソースコード20(test.c)がオブジェクトモデル化される例を示している。ソースコード20中には、大域変数21、main関数22、f1関数23、及びf2関数24が記述されている。このソースコード20の内容に従い、対応するクラスをインスタンス化することによって、1つのSouceFileオブジェクト(3000)が作成される。
SourceFileオブジェクト(3000)は、Functionsオブジェクト(3100)及びVariablesオブジェクト(3200)を含んでいる。Functionsオブジェクト(3100)は、Functionオブジェクト(3300−1〜3300−3)を含んでいる。Variablesオブジェクト(3200)は、大域変数21に応じてVariablesクラス(1200)をインスタンス化することにより得られる。Functionオブジェクト(3300−1)は、main関数22の内容に基づいて、Functionクラス(1300)をインスタンス化することにより得られる。Functionオブジェクト(3300−2)は、f1関数23の内容に基づいて、Functionクラス(1300)をインスタンス化することにより得られる。Functionオブジェクト(3300−3)は、f2関数24の内容に基づいて、Functionクラス(1300)をインスタンス化することにより得られる。
また、図4を参照して、Functionクラス(1300)は、集約クラスである。このFunctionクラス(1300)は、Variablesクラス(1200)、Statementsクラス(1400)、ArgumentListクラス(1500)、及びConstantクラス(1930)を含んでいる。Statementsクラス(1400)は、関数に含まれるメソッド群を表現するためのクラスである。ArgumentListクラス(1500)は、関数の引数を表現するためのクラスである。Constantクラス(1930)は、関数で用いられる定数を表現するためのクラスである。また、この場合のVariablesクラス(1200)は、関数中で用いられる変数群を表現するためのクラスである。
Statementsクラス(1400)は、集約クラスであり、Statementクラス(1600)を含む。1つのStatementクラス(1600)は、関数中の1つのメソッド(文)を表現するためのクラスである。つまり、Statementsクラス(1400)は、メソッド群のそれぞれを表現する一群のStatementクラス(1600)を含む。また、Statementクラス(1600)は、「抽象クラス」である。Statementクラス(1600)を特化したサブクラスとして、クラス1601〜1609、及び1800が挙げられる。逆に言えば、様々なメソッドを表現するサブクラス1601〜1609、及び1800が汎化されたクラスが、Statementクラス(1600)である。
Statementクラス(1600)のサブクラスであるBreakクラス(1601)は、“Break文”を表現するためのクラスである。Continueクラス(1602)は、“Continue文”を表現するためのクラスである。DefineVariableクラス(1603)は、“変数宣言文”を表現するためのクラスである。DoWhileクラス(1604)は、“Do−Whileループ文”を表現するためのクラスである。Forクラス(1605)は、“Forループ文”を表現するためのクラスである。Ifクラス(1606)は、“If文”を表現するためのクラスである。Returnクラス(1607)は、“Return文”を表現するためのクラスである。Switchクラス(1608)は、“Switch文”を表現するためのクラスである。Whileクラス(1609)は、“While文”を表現するためのクラスである。
また、Statementクラス(1600)のサブクラスであるExpressionクラス(1800)は、演算子を用いる文を表現するためのクラスである。演算子を用いる文としては、例えば、「i = 1」が挙げられる。
図6は、C言語で記述されたソースコード20中のForループ文がオブジェクトモデル化される例を示している。Forループ文中には、「初期化文」、「ループ条件文」、「更新文」、及び「実行文」が記述される。このように、Forループ文中には、更に文(Statements)が含まれており、特に、初期化文やループ条件文といった演算子を用いる文(Expression)が含まれている。ネストされた制御構文を表現するために、図7に示されるようにクラス階層を構成する。Statementsクラス(1400)は、Statementクラス(1600)のサブクラスであるForクラス(1605)、Ifクラス(1606)、Whileクラス(1609)といったループ文用クラスのリストを保持できる。各ループ文用クラスは、さらにその「実行文」を保持するためのStatementsクラス(1400)を保持する。このような構成により、多重ネストした制御構文を保持することが可能となる。尚、図4において、図7に示されたクラス階層の記載が省略されている。
図6に示されるように、Forループ文がオブジェクトモデル化されることにより、Forオブジェクト3605が作成される。Forオブジェクト3605は、Expressionオブジェクト3800−1〜3800−3、及びStatementsオブジェクト3400を含んでいる。Expressionオブジェクト(3800−1)は、初期化文の内容に基づいて、Expressionクラス(1800)をインスタンス化することにより得られる。Expressionオブジェクト(3800−2)は、ループ条件文の内容に基づいて、Expressionクラス(1800)をインスタンス化することにより得られる。Expressionオブジェクト(3800−3)は、更新文の内容に基づいて、Expressionクラス(1800)をインスタンス化することにより得られる。Statementsオブジェクト(3400)は、実行文の内容に基づいて、Statementsクラス(1400)をインスタンス化することにより得られる。このようにして、ネストされた制御構文がオブジェクトモデル化される。
また、Expressionクラス(1800)は、Expressionsクラス(1700)に含まれており、Symbolクラス(1900)を含んでいる。このSymbolクラス(1900)は、シンボルを表現するための抽象クラスである。シンボルとは四則演算や代入文を構成する個々の値や演算子のことを指す。例えば、「i = 1」という文(Expression)は、“i”、“=”及び“1”という3つのシンボルの組み合わせにより構成されている。これら3つのシンボルはそれぞれ、変数、二項演算子及び定数に分類される。これら値や演算子を表現するために、Symbolクラス(1900)を特化したサブクラスとして、Valueクラス(1910)やOperatorクラス(1920)が用意されている。
Valueクラス(1910)は、Symbolクラス(1900)のサブクラスであり、「値」を表現するためのサブクラスである。同時に、Valueクラス(1910)は抽象クラスであり、そのサブクラスとして、変数を表現するためのVariableクラス(1940)と定数を表現するためのConstantクラス(1930)が用意されている。Variableクラス(1940)も抽象クラスであり、そのサブクラスとしては、例えば、整数の変数を表現するためのIntegerVariableクラス(1941)が挙げられる。また、Constanctクラス(1930)も抽象クラスであり、そのサブクラスとしては、例えば、変数の定数を表現するためのIntegerConstantクラス(1931)が挙げられる。
Operatorクラス(1920)は、Symbolクラス(1900)のサブクラスであり、「演算子」を表現するためのサブクラスである。同時に、Operatorクラス(1920)は抽象クラスであり、そのサブクラスとして、二項演算子を表現するためのBinaryOperatorクラス(1950)と、単項演算子を表現するためのMonadicOperatorクラス(1960)とが用意されている。BinaryOperatorクラス(1950)も抽象クラスであり、そのサブクラスとしては、例えば“=”を表現するためのAssignmentクラス(1951)が挙げられる。
上述の「i = 1」という文の場合、シンボル“i”は、IntegerVariableクラス(1941)を用いてオブジェクト化される。同様に、シンボル“=”は、Assignmentクラス(1951)を用いてオブジェクト化される。また、シンボル“1”は、IntegerConstantクラス(1931)を用いてオブジェクト化される。図8は、「i = 1」を表現するExpressionオブジェクトを示している。このExpressionオブジェクトは、IntegerVariableオブジェクト(3941)、IntegerConstantオブジェクト(3931)、及びAssignmentオブジェクト(3951)を有している。図8に示されるように、これらオブジェクト(3941、3931、3951)は、「i、1、=」というように、逆ポーランド記法に準拠してスタックされている。このように、Expressionオブジェクトは、保持する文を構成するシンボルを、逆ポーランド順でスタックすることにより保持する。
以上に説明された事項を参照して、あるソースコード20からソースコードオブジェクトモデル30Aが作成される1つの具体例を示す。図9は、変換されるソースコード20の例として、MatLabで記述されたMファイル(myfunc.m)を示している。このMファイルは、1つの関数「myfunc」からなる。関数myfuncは、行列の足し算を行い(C=A+B)、その演算結果を戻り値として返すという処理を行う。本発明に係る変換プログラム100のソースコードパース部110は、その処理内容に応じて、図4に示されたクラス群を適宜インスタンス化する。これにより、Mファイルがオブジェクトモデル化され、その処理内容を示すソースコードオブジェクトモデル30Aがメモリ12上に展開される。
図10は、本例において生成されるソースコードオブジェクトモデル30Aを示している。ソースコード20であるMファイルがオブジェクトモデル化されることにより、1つのSourceFileオブジェクト(3000)が生成される。このSourceFileオブジェクト(3000)は、関数myfuncに対応する1つのFunctionオブジェクト(3300)を有している。Functionオブジェクト(3300)は、関数内のメソッド群を表すStatementsオブジェクト(3400)を有している。また、Functionオブジェクト(3300)は、関数名や戻り値の型といったシグネチャをあらわすオブジェクト群を有している。
また、Statementsオブジェクト(3400)は、それぞれの演算文を表すExpressionオブジェクト(3800−1〜3800−4)を有している。図10に示されるように、各Expressionオブジェクトにおいて、Symbolオブジェクトは逆ポーランド記法に準拠してスタックされている。また、Statementsオブジェクト(3400)は、変数宣言を表すDefineVariableオブジェクト(3603)、及びreturn文を表すReturnオブジェクト(3607)を有している。本例において、これら2つのオブジェクト(3603、3607)は、構文解析部112の判断により自動的に作成される。つまり、構文解析部112は、読み込まれたソースコード20の文脈に基づいて、必要なオブジェクトを作成する。
2.処理後半(中間表現から出力まで)
図3Bは、本発明に係るデータ処理の後半を示しており、オブジェクトモデル30からホットスポット実装コード50が作成されるまでの処理を示している。現在、メモリ12上には、図10に示されたソースコードオブジェクトモデル30Aが作成されている。
ソースコードオブジェクトモデル30Aが作成された後、変換プログラム100は、記録媒体13から継承情報記述ファイル40を読み込む。この継承情報記述ファイル40には、生成されるホットスポット実装コード50をホットスポット3に適合させるための情報が記述されている。つまり、継承情報記述ファイル40には、実装対象であるホットスポット3に適合する条件が記述されており、生成されるホットスポット実装コード50に影響を及ぼす情報が記述されている。例えば、継承情報記述ファイル40に記述される情報は、ホットスポット3における抽象クラスを継承するための継承情報を含んでいる。
図11は、継承情報記述ファイル40の一例を示している。継承情報記述ファイル40は、例えばXML(eXtensible Markup Language)で記述されるXMLファイルである。拡張子より前の名前は、例えば、ソースコード20(myfunc.m)と同じ名前である。図11に示された継承情報記述ファイル40(myfunc.xml)には、以下の継承情報が記述されている。
・“com.nec.some.frameworkパッケージ”を利用すること。
・スーパークラスは、上記パッケージの“FrameworkTemplateクラス”であること。つまり、出力されるコードは、上記パッケージの“FrameworkTemplateクラス”を継承する。
・出力されるコードは、staticクラスではない(“false”)こと。
このような継承情報記述ファイル40は、実装対象のホットスポット3の規格に応じて、開発者により作成されればよい。図3Bに示されるように、変換プログラム100の継承情報付与部120が、記録媒体13から継承情報記述ファイル40を読み込む。そのため、継承情報付与部120は、例えばXMLパーサ121を含んでいる。継承情報付与部120は、継承情報記述ファイル40に記述された継承情報を、ソースコードオブジェクトモデル30Aに付与する。これにより、継承情報が付与されたオブジェクトモデル30(以下、「継承情報付与後オブジェクトモデル30B」と参照される)が作成される。つまり、継承情報付与部120は、継承情報記述ファイル40を参照することによって、ソースコードオブジェクトモデル30Aを継承情報付与後オブジェクトモデル30Bに変換される。この継承情報付与後オブジェクトモデル30Bは、メモリ12上に展開されている。
図12は、本例において生成される継承情報付与後オブジェクトモデル30Bを示している。図12に示されるように、継承情報付与後オブジェクトモデル30Bには、継承情報4000が付与されている。具体的には、SourceFileオブジェクト(3000)は、継承情報を格納するためのフィールド4100〜4500を有している。それらフィールド4100〜4500のそれぞれに、継承情報記述ファイル40に記述された情報が格納されている。例えば、フィールド4100には、パッケージ名“com.nec.som.framework”が記録されている。フィールド4200には、スーパークラス名“FrameworkTemplate”が記録されている。フィールド4500には、“false”が記録されている。このように、継承情報付与部120は、ソースコード20の処理内容が反映されたソースコードオブジェクトモデル30Aが保持していない情報を付与する。これにより、ホットスポット30に適合するホットスポット実装コード50を生成するための準備が整う。
最後に、変換プログラム100のアウトプット部130は、メモリ12上の継承情報付与後オブジェクトモデル30B中の各インスタンスをコード化することにより、ホットスポット実装コード50を作成する。例えば、アウトプット部130は、デザインパターンの一つである「Visitorパターン」に基づいて構築される。一般に、Visitorオブジェクトは、集合の要素を一つ一つ巡って、所定の処理を実行していく。本例の場合、「集合の要素」とは、図12に示された継承情報付与後オブジェクトモデル30Bの各インスタンスである。また、「所定の処理」とは、各インスタンスの内容を解釈し、コードを作成することである。図4に示されたクラス群の各々は、Visitorオブジェクトを受けいれる(Acceptする)ように設定されていればよい。アウトプット部130は、図12に示されたSourceFileオブジェクト3000をルート要素とするオブジェクトツリー上を渡り歩き、各オブジェクトを順次コード化する。
図13は、アウトプット部130による処理を示すフローチャートである。また、図14は、作成されるホットスポット実装コード50の一例を示している。本例において、出力ファイルの形式は、Java(登録商標)に設定されているとする。この場合、ホットスポット実装コード50として、Java(登録商標)ファイル(myfunc.java)が作成される。尚、ホットスポット実装コード50において、数値計算ライブラリ(com.nec.some.numericalパッケージ)も利用されるとする。
まず、アウトプット部130は、SourceFileオブジェクト3000を発見すると、クラスの出力を開始する(ステップS1)。アウトプット部130は、図12に示された継承情報4000を参照し、クラスの宣言部の出力を行う(ステップS2)。その結果、図14に示されるように、クラスの継承関係が、ホットスポット実装コード50の宣言部に出力される。
次に、アウトプット部130は、各関数のコード化を行う。具体的には、未出力のFunctionオブジェクト3300があるかどうか判定される(ステップS3)。未出力のFunctionオブジェクト3300がある場合(ステップS3;Yes)、アウトプット部130は、そのFunctionオブジェクト3300によるメソッドの出力を開始する(ステップS4)。まず、メソッドのシグネチャ(図12参照)の出力が行われる(ステップS5)。その結果、図14に示されるように、関数のシグネチャが出力される。
次に、アウトプット部130は、各関数の実装文を順番にコード化する。具体的には、未出力のStatementオブジェクトがあるかどうか判定される(ステップS6)。未出力のStatementオブジェクトがある場合(ステップS6;Yes)、アウトプット部130は、そのStatementオブジェクトによる実装文を出力する(ステップS7)。
処理中のFunctionオブジェクト3000が有する全てのStatementオブジェクトについてコード化が終了すると(ステップS6;No)、そのFunctionオブジェクト3300に関する出力処理は終了する(ステップS8)。全てのFunctionオブジェクト3300についてコード化が終了すると(ステップS3;No)、クラスの出力処理が終了する(ステップS9)。
以上の処理により、ソースコード20は、実装対象のホットスポット3に適合したホットスポット実装コード50に変換される。上述の例においては、実装対象のフレームワーク1はJava(登録商標)言語で実装されているが、開発者は、ソースコード20をMatLabで開発することができる。つまり、数値計算の記述性に優れたMatlabを用いてホットスポット3のコーディングが行われ、Java(登録商標)フレームワークのホットスポット3の実装が行われている。継承情報記述ファイル40で指定された継承関係を参照することにより、ソースコード20中に記述された行列計算が、ホットスポット3に適合する形でホットスポット実装コード50中に実現されている。
以上に説明されたように、本発明に係る開発システム及び開発プログラムによれば、フレームワーク1の利用者(システムの開発者)は、ホットスポット3を実装する処理内容に応じて、最適な開発言語を選択することが可能となる。つまり、本発明によれば、開発者は、自分が得意とするプログラミング言語を利用して、ホットスポット実装コード50を開発することが可能となる。従って、ホットスポット実装コード50の開発効率が向上する。最適な言語を利用してホットスポット3の実装を行うことができるため、開発者は、フレームワーク1を利用するシステムを短期間で効率良く開発することが可能となる。ソースコードパース部110とアウトプット部130がサポートするプログラミング言語を拡張することによって、あらゆるフレームワーク1に本発明を適用することが可能となる。
図1は、本発明の全体的な概念を示す図である。 図2は、本発明に係る実装コード開発システムの構成を示すブロック図である。 図3Aは、本発明に係るデータ処理の前半を示すブロック図である。 図3Bは、本発明に係るデータ処理の後半を示すブロック図である。 図4は、本発明に係るオブジェクトモデルを構成するためのクラス群を示すクラス図である。 図5は、C言語で記述されたソースコードをオブジェクトモデルへ変換する例を示す図である。 図6は、ソースコード中のfor文をオブジェクトモデルへ変換する例を示す図である。 図7は、ネストされた制御構文を表現するためのクラス階層を示す図である。 図8は、「i=1」を表現するExpressionオブジェクト中のスタックの図である。 図9は、ソースコードの例としてのMatlabファイルを示す図である。 図10は、ソースコードオブジェクトモデルの一例を示す概念図である。 図11は、継承情報記述ファイルの一例を示す図である。 図12は、継承情報付与後オブジェクトモデルの一例を示す概念図である。 図13は、本発明に係るアウトプット部による処理を示すフローチャートである。 図14は、生成されるホットスポット実装コードの例としてのJava(登録商標)ファイルを示す図である。
符号の説明
1 フレームワーク
2 フローズンスポット
3 ホットスポット
10 実装コード開発システム
11 演算処理装置
12 メモリ
13 記録媒体
14 入力装置
15 表示装置
20 ソースコード
30 オブジェクトモデル
30A ソースコードオブジェクトモデル
30B 継承情報付与後オブジェクトモデル
40 継承情報記述ファイル
50 ホットスポット実装コード
100 変換プログラム
110 ソースコードパース部
111 字句解析部
112 構文解析部
113 拡張子判定部
120 継承情報付与部
130 アウトプット部
1000 SourceFileクラス
1100 Functionsクラス
1200 Variablesクラス
1300 Functionクラス
1400 Statementsクラス
1600 Statementクラス
1800 Expressionクラス
3000 SourceFileオブジェクト
3100 Functionsオブジェクト
3200 Variablesオブジェクト
3300 Functionオブジェクト
3400 Statementsオブジェクト
3600 Statementオブジェクト
3800 Expressionオブジェクト
4000 継承情報

Claims (15)

  1. フレームワークのホットスポットを実装するホットスポット実装コードを開発する実装コード開発システムであって、
    ソースコード、及び前記ホットスポットに適合する条件が記述された継承情報記述ファイルが格納される記録媒体と、
    前記記録媒体から読み込まれる前記ソースコードの内容に応じて所定のクラス群をインスタンス化し、前記ソースコードの内容を示す第1オブジェクトモデルをメモリ上に展開するソースコードパース部と、
    前記記録媒体から前記継承情報記述ファイルを読み込み、前記第1オブジェクトモデルを、前記条件が付与された第2オブジェクトモデルに変更する継承情報付与部と、
    前記メモリ上に展開された前記第2オブジェクトモデルをコード化することにより、前記ホットスポット実装コードを作成するアウトプット部と
    を具備する
    実装コード開発システム。
  2. 請求項1に記載の実装コード開発システムであって、
    前記ソースコードパース部は、
    前記ソースコードを受け取り前記ソースコードに含まれる字句を抽出する字句解析部と、
    前記抽出された字句に基づいて、前記ソースコードの構文を解析する構文解析部と
    を備え、
    前記構文解析部は、前記構文の解析結果に基づいて前記所定のクラス群をインスタンス化することにより、前記第1オブジェクトモデルを前記メモリ上に展開する
    実装コード開発システム。
  3. 請求項1に記載の実装コード開発システムであって、
    前記ソースコードパース部は、
    複数のファイル形式のそれぞれに対応した複数の字句解析部と、
    前記複数のファイル形式のそれぞれに対応した複数の構文解析部と
    を備え、
    前記複数の字句解析部の各々は、前記ソースコードに含まれる字句を抽出し、
    前記複数の構文解析部の各々は、前記抽出された字句に基づいて、前記ソースコードの構文を解析し、
    前記ソースコードは、前記複数の字句解析部のうち前記ソースコードのファイル形式に対応する一の字句解析部に入力され、
    前記複数の構文解析部のうち前記ソースコードのファイル形式に対応する一の構文解析部は、前記構文の解析結果に基づいて前記所定のクラス群をインスタンス化することにより、前記第1オブジェクトモデルを前記メモリ上に展開する
    実装コード開発システム。
  4. 請求項3に記載の実装コード開発システムであって、
    前記ソースコードパース部は、更に、拡張子判定部を備え、
    前記拡張子判定部は、前記ソースコードの拡張子を識別することにより、前記複数の字句解析部から前記一の字句解析部を決定し、前記ソースコードを前記一の字句解析部に出力する
    実装コード開発システム。
  5. 請求項1乃至4のいずれかに記載の実装コード開発システムであって、
    前記継承情報記述ファイルに記述される情報は、前記ホットスポットにおける抽象クラスを継承するための継承情報を含む
    実装コード開発システム。
  6. 請求項1乃至5のいずれかに記載の実装コード開発システムであって、
    前記アウトプット部は、デザインパターンであるVisitorパターンに基づいて構築され、前記第2オブジェクトモデルに含まれる複数のインスタンスを順番に巡りながら、前記第2オブジェクトモデルをコード化する
    実装コード開発システム。
  7. 請求項1乃至6のいずれかに記載の実装コード開発システムであって、
    前記所定のクラス群は、
    前記ソースコードを表現するためのSourceFileクラスと、
    前記ソースコードに含まれる関数群を表現するためのFunctionsクラスと、
    前記ソースコードに含まれる変数群を表現するためのVariablesクラスと
    を含み、
    前記SourceFileクラスは、集約クラスであり、前記Functionsクラス及び前記Variablesクラスを含む
    実装コード開発システム。
  8. 請求項7に記載の実装コード開発システムであって、
    前記Functionsクラスは、集約クラスであり、前記関数群に含まれる関数を表現するためのFunctionクラスを含み、
    前記Functionクラスは、集約クラスであり、
    前記関数に含まれるメソッド群を表現するためのStatementsクラスと、
    前記関数の引数を表現するためのArgumentListクラスと、
    前記関数で用いられる変数群を表現するための前記Variablesクラスと、
    前記関数で用いられる定数を表現するためのConstantクラスと
    を含む
    実装コード開発システム。
  9. フレームワークのホットスポットを実装するホットスポット実装コードを開発するための実装コード開発プログラムであって、
    前記実装コード開発プログラムは、コンピュータにより実行され、
    前記コンピュータは、ソースコード及び前記ホットスポットに適合する条件が記述された継承情報記述ファイルが格納される記録媒体と、メモリとを備え、
    (A)前記記録媒体から前記ソースコードを読み込むステップと、
    (B)前記ソースコードの内容に応じて所定のクラス群をインスタンス化し、前記ソースコードの内容を示す第1オブジェクトモデルを前記メモリ上に展開するステップと、
    (C)前記記録媒体から前記継承情報記述ファイルを読み込み、前記第1オブジェクトモデルを、前記条件が付与された第2オブジェクトモデルに変更するステップと、
    (D)前記メモリ上に展開された前記第2オブジェクトモデルをコード化することにより、前記ホットスポット実装コードを作成するステップと
    をコンピュータに実行させる
    実装コード開発プログラム。
  10. 請求項9に記載の実装コード開発プログラムであって、
    前記(B)ステップは、
    (B1)前記ソースコードに含まれる字句を抽出するステップと、
    (B2)前記抽出された字句に基づいて、前記ソースコードの構文を解析するステップと、
    (B3)前記構文の解析結果に基づいて前記所定のクラス群をインスタンス化することにより、前記第1オブジェクトモデルを前記メモリ上に展開するステップと
    を含む
    実装コード開発プログラム。
  11. 請求項9に記載の実装コード開発プログラムであって、
    前記(B)ステップは、
    (b1)前記ソースコードの拡張子を識別することにより、前記ソースコードのファイル形式を決定するステップと、
    (b2)前記ファイル形式に準拠して、前記ソースコードに含まれる字句を抽出するステップと、
    (b3)前記抽出された字句及び前記ファイル形式に基づいて、前記ソースコードの構文を解析するステップと、
    (b4)前記構文の解析結果に基づいて前記所定のクラス群をインスタンス化することにより、前記第1オブジェクトモデルを前記メモリ上に展開するステップと
    を含む
    実装コード開発プログラム。
  12. 請求項9乃至11のいずれかに記載の実装コード開発プログラムであって、
    前記継承情報記述ファイルに記述される情報は、前記ホットスポットにおける抽象クラスを継承するための継承情報を含む
    実装コード開発プログラム。
  13. 請求項9乃至12のいずれかに記載の実装コード開発プログラムであって、
    前記(D)ステップは、デザインパターンであるVisitorパターンに基づいて、前記第2オブジェクトモデルに含まれる複数のインスタンスを順番に巡りながら、前記第2オブジェクトモデルをコード化するステップを含む
    実装コード開発プログラム。
  14. 請求項9乃至13のいずれかに記載の実装コード開発プログラムであって、
    前記所定のクラス群は、
    前記ソースコードを表現するためのSourceFileクラスと、
    前記ソースコードに含まれる関数群を表現するためのFunctionsクラスと、
    前記ソースコードに含まれる変数群を表現するためのVariablesクラスと
    を含み、
    前記SourceFileクラスは、集約クラスであり、前記Functionsクラス及び前記Variablesクラスを含む
    実装コード開発プログラム。
  15. 請求項14に記載の実装コード開発プログラムであって、
    前記Functionsクラスは、集約クラスであり、前記関数群に含まれる関数を表現するためのFunctionクラスを含み、
    前記Functionクラスは、集約クラスであり、
    前記関数に含まれるメソッド群を表現するためのStatementsクラスと、
    前記関数の引数を表現するためのArgumentListクラスと、
    前記関数で用いられる変数群を表現するための前記Variablesクラスと、
    前記関数で用いられる定数を表現するためのConstantクラスと
    を含む
    実装コード開発プログラム。
JP2005160427A 2005-05-31 2005-05-31 実装コード開発システム、及び実装コード開発プログラム Expired - Fee Related JP5399601B2 (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2005160427A JP5399601B2 (ja) 2005-05-31 2005-05-31 実装コード開発システム、及び実装コード開発プログラム

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2005160427A JP5399601B2 (ja) 2005-05-31 2005-05-31 実装コード開発システム、及び実装コード開発プログラム

Publications (2)

Publication Number Publication Date
JP2006338190A true JP2006338190A (ja) 2006-12-14
JP5399601B2 JP5399601B2 (ja) 2014-01-29

Family

ID=37558713

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2005160427A Expired - Fee Related JP5399601B2 (ja) 2005-05-31 2005-05-31 実装コード開発システム、及び実装コード開発プログラム

Country Status (1)

Country Link
JP (1) JP5399601B2 (ja)

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2009098750A (ja) * 2007-10-12 2009-05-07 Nomura Research Institute Ltd コーディング支援装置
JP2009098751A (ja) * 2007-10-12 2009-05-07 Nomura Research Institute Ltd コーディング支援装置
JP2013524322A (ja) * 2010-03-31 2013-06-17 イルデト カナダ コーポレーション カプセル化し、ソフトウェアライブラリ中の多様化によって保護を可能にするための、システムと方法

Citations (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH0231235A (ja) 1988-07-20 1990-02-01 Nec Software Ltd 複数言語の構文解析方式
JPH02133824A (ja) 1988-11-14 1990-05-23 Yokogawa Electric Corp トランスレータ
JP2000112769A (ja) 1998-10-02 2000-04-21 Nec Software Ltd 多段トランスレータ
JP2001222486A (ja) * 2000-02-10 2001-08-17 Mitsubishi Electric Corp ネットワーク管理エージェント装置、ネットワーク管理方法およびその方法をコンピュータに実行させるためのプログラムを記録したコンピュータ読み取り可能な記録媒体
JP2002157117A (ja) * 2000-11-21 2002-05-31 Mitsubishi Electric Corp フレームワーク開発支援装置及びフレームワーク開発支援方法
JP2004272908A (ja) * 2003-03-06 2004-09-30 Microsoft Corp システムの設計、展開、管理のフェーズを統合する方法
JP2004362343A (ja) 2003-06-05 2004-12-24 Internatl Business Mach Corp <Ibm> ソースコード変換装置、ソースコード変換方法、およびプログラム

Patent Citations (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH0231235A (ja) 1988-07-20 1990-02-01 Nec Software Ltd 複数言語の構文解析方式
JPH02133824A (ja) 1988-11-14 1990-05-23 Yokogawa Electric Corp トランスレータ
JP2000112769A (ja) 1998-10-02 2000-04-21 Nec Software Ltd 多段トランスレータ
JP2001222486A (ja) * 2000-02-10 2001-08-17 Mitsubishi Electric Corp ネットワーク管理エージェント装置、ネットワーク管理方法およびその方法をコンピュータに実行させるためのプログラムを記録したコンピュータ読み取り可能な記録媒体
JP2002157117A (ja) * 2000-11-21 2002-05-31 Mitsubishi Electric Corp フレームワーク開発支援装置及びフレームワーク開発支援方法
JP2004272908A (ja) * 2003-03-06 2004-09-30 Microsoft Corp システムの設計、展開、管理のフェーズを統合する方法
JP2004362343A (ja) 2003-06-05 2004-12-24 Internatl Business Mach Corp <Ibm> ソースコード変換装置、ソースコード変換方法、およびプログラム

Non-Patent Citations (6)

* Cited by examiner, † Cited by third party
Title
CSNG200100224012; 増田 剛 外2名: 'デザインパターンの決定木学習システム開発への適用' レクチャーノート/ソフトウェア学 19 ソフトウェア工学の基礎 IV 初版, 19971220, p.87-90, 株式会社近代科学社 *
CSNG200201320002; 増田 ゆりか 外2名: '制約記述の導入によるフレームワークのカスタマイズ作法の提示' 電子情報通信学会技術研究報告 第100巻、第472号, 20001121, p.9-16, 社団法人電子情報通信学会 *
CSNG200400219001; 下之園 孝 外2名: 'アスペクト指向の導入によるフレームワークの理解容易性の向上' 電子情報通信学会技術研究報告 第102巻、第371号, 20021004, p.1-6, 社団法人電子情報通信学会 *
JPN6013033708; 下之園 孝 外2名: 'アスペクト指向の導入によるフレームワークの理解容易性の向上' 電子情報通信学会技術研究報告 第102巻、第371号, 20021004, p.1-6, 社団法人電子情報通信学会
JPN6013033709; 増田 ゆりか 外2名: '制約記述の導入によるフレームワークのカスタマイズ作法の提示' 電子情報通信学会技術研究報告 第100巻、第472号, 20001121, p.9-16, 社団法人電子情報通信学会
JPN6013033710; 増田 剛 外2名: 'デザインパターンの決定木学習システム開発への適用' レクチャーノート/ソフトウェア学 19 ソフトウェア工学の基礎 IV 初版, 19971220, p.87-90, 株式会社近代科学社

Cited By (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2009098750A (ja) * 2007-10-12 2009-05-07 Nomura Research Institute Ltd コーディング支援装置
JP2009098751A (ja) * 2007-10-12 2009-05-07 Nomura Research Institute Ltd コーディング支援装置
JP2013524322A (ja) * 2010-03-31 2013-06-17 イルデト カナダ コーポレーション カプセル化し、ソフトウェアライブラリ中の多様化によって保護を可能にするための、システムと方法
US10185837B2 (en) 2010-03-31 2019-01-22 Irdeto B.V. System and method for encapsulating and enabling protection through diverse variations in software libraries

Also Published As

Publication number Publication date
JP5399601B2 (ja) 2014-01-29

Similar Documents

Publication Publication Date Title
US11036614B1 (en) Data control-oriented smart contract static analysis method and system
JP4130713B2 (ja) プログラム変換装置
US8516458B2 (en) System representation and handling techniques
WO2016163901A1 (en) An apparatus for processing an abstract syntax tree being associated with a source code of a source program
US20060200796A1 (en) Program development apparatus, method for developing a program, and a computer program product for executing an application for a program development apparatus
CN113504914B (zh) 操作系统的构建编译方法及装置、电子设备、存储介质
Crary et al. Intensional polymorphism in type-erasure semantics
CN107463421B (zh) 一种静态流程模型的编译执行方法及系统
JP4652680B2 (ja) コンパイル方法および装置、ならびにコンパイラ
RU2347269C2 (ru) Система и способ декларативного определения и использования подклассов внутри разметки
JP5399601B2 (ja) 実装コード開発システム、及び実装コード開発プログラム
JP2009169864A (ja) コンパイル方法およびコンパイルプログラム
JP2005332146A (ja) 動的コンテンツ作成プログラムの生成装置、動的コンテンツ作成プログラムを生成するためのプログラム、及び動的コンテンツ作成プログラムの生成方法
JP2008276735A (ja) プログラムコード変換装置及びプログラムコード変換方法
US9697021B2 (en) Modifiable high-level intermediate representation of source code
Fritzson et al. Metamodelica–a symbolic-numeric modelica language and comparison to julia
JP5600301B2 (ja) システム表現およびハンドリング技術
Amatriain et al. A framework for efficient and rapid development of cross-platform audio applications
CN107562430B (zh) 一种针对移动π演算语言的文件处理功能的编译方法
CN111221532A (zh) 一种动态链接库的生成方法及装置
Walia et al. Sham: A DSL for Fast DSLs
Leupers Compiler optimization for media processors
Jeffery Build Your Own Programming Language: A programmer's guide to designing compilers, interpreters, and DSLs for solving modern computing problems
Mårtensson et al. Extending a Small Language with a Java Bytecode Back End
KR100276086B1 (ko) 로토스 명세로부터 씨 플러스 플러스 코드 생성방법

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20080414

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20110330

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20110819

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20111013

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20111102

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20111130

A02 Decision of refusal

Free format text: JAPANESE INTERMEDIATE CODE: A02

Effective date: 20120112

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20120411

A911 Transfer of reconsideration by examiner before appeal (zenchi)

Free format text: JAPANESE INTERMEDIATE CODE: A911

Effective date: 20120418

A912 Removal of reconsideration by examiner before appeal (zenchi)

Free format text: JAPANESE INTERMEDIATE CODE: A912

Effective date: 20120511

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20130906

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20131024

R150 Certificate of patent or registration of utility model

Free format text: JAPANESE INTERMEDIATE CODE: R150

LAPS Cancellation because of no payment of annual fees