JP2001154850A - コンピュータプログラムのコンパイル方法 - Google Patents
コンピュータプログラムのコンパイル方法Info
- Publication number
- JP2001154850A JP2001154850A JP33372699A JP33372699A JP2001154850A JP 2001154850 A JP2001154850 A JP 2001154850A JP 33372699 A JP33372699 A JP 33372699A JP 33372699 A JP33372699 A JP 33372699A JP 2001154850 A JP2001154850 A JP 2001154850A
- Authority
- JP
- Japan
- Prior art keywords
- code
- data
- object code
- converted
- source code
- 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.)
- Pending
Links
Landscapes
- Devices For Executing Special Programs (AREA)
Abstract
(57)【要約】
【課題】 ソースコードから変換された後のオブジェク
トコードをコンピュータ装置で実行する際における処理
速度の低下を防止する。 【解決手段】 変換対象となるソースコードがプログラ
ム状態を示すデータの設定を行うためのデータ設定命令
と前記データに従いプログラム動作を決定するためのデ
ータ参照命令とを含む場合に、前記コンピュータ装置が
変換後のオブジェクトコードを実行する都度、そのオブ
ジェクトコードのうち前記データ参照命令に相当する部
分32が前記データ設定命令にて設定されるデータに応
じて書き換わるように、ソースコードからオブジェクト
コードへの変換を行う。
トコードをコンピュータ装置で実行する際における処理
速度の低下を防止する。 【解決手段】 変換対象となるソースコードがプログラ
ム状態を示すデータの設定を行うためのデータ設定命令
と前記データに従いプログラム動作を決定するためのデ
ータ参照命令とを含む場合に、前記コンピュータ装置が
変換後のオブジェクトコードを実行する都度、そのオブ
ジェクトコードのうち前記データ参照命令に相当する部
分32が前記データ設定命令にて設定されるデータに応
じて書き換わるように、ソースコードからオブジェクト
コードへの変換を行う。
Description
【0001】
【発明の属する技術分野】本発明は、プログラミング言
語で記述されたソースコードを、コンピュータ装置が直
接解読できるオブジェクトコードに変換する、コンピュ
ータプログラムのコンパイル方法に関するものである。
語で記述されたソースコードを、コンピュータ装置が直
接解読できるオブジェクトコードに変換する、コンピュ
ータプログラムのコンパイル方法に関するものである。
【0002】
【従来の技術】従来におけるコンピュータプログラムの
コンパイル方法では、例えば変換対象となるソースコー
ドが、プログラム状態を示すデータの設定を行うための
データ設定命令と、設定されたデータに従いプログラム
動作を決定するためのデータ参照命令とを含む場合に、
そのソースコードを図9に示すような構成のオブジェク
トコードに変換するようになっている。すなわち、ソー
スコードのデータ設定命令は、例えばコンピュータ装置
のメモリ内に設けられる所定のデータ領域51にプログ
ラム状態を示すデータ52を設定するためのコード(以
下「設定部」という)53に変換される。また、ソース
コードのデータ参照命令は、データ領域51内のデータ
52に従いプログラム動作を決定するためのコード(以
下「参照部」という)54に変換される。
コンパイル方法では、例えば変換対象となるソースコー
ドが、プログラム状態を示すデータの設定を行うための
データ設定命令と、設定されたデータに従いプログラム
動作を決定するためのデータ参照命令とを含む場合に、
そのソースコードを図9に示すような構成のオブジェク
トコードに変換するようになっている。すなわち、ソー
スコードのデータ設定命令は、例えばコンピュータ装置
のメモリ内に設けられる所定のデータ領域51にプログ
ラム状態を示すデータ52を設定するためのコード(以
下「設定部」という)53に変換される。また、ソース
コードのデータ参照命令は、データ領域51内のデータ
52に従いプログラム動作を決定するためのコード(以
下「参照部」という)54に変換される。
【0003】
【発明が解決しようとする課題】しかしながら、上述し
た従来のコンパイル方法によって変換された後のオブジ
ェクトコードでは、設定部53がデータ領域51内にデ
ータを設定するので、参照部54を実行する度にデータ
領域51へのアクセスが必要になってしまう。さらに
は、参照部54を実行する度に、参照部54によるプロ
グラム動作を決定する処理(例えば、所定の演算処理)
も実行される。そのため、設定部53の実行頻度が低
く、参照部54の実行頻度が高い場合には、そのオブジ
ェクトコードを実行するコンピュータ装置での処理速度
が低下してしまうおそれがある。このような処理速度の
低下を防ぐためには、参照部54の実行頻度を低くする
ことも考えられるが、そのためにはプログラム構造の工
夫等が必須となるため、ソースコードの作成効率等を鑑
みれば難点がある。
た従来のコンパイル方法によって変換された後のオブジ
ェクトコードでは、設定部53がデータ領域51内にデ
ータを設定するので、参照部54を実行する度にデータ
領域51へのアクセスが必要になってしまう。さらに
は、参照部54を実行する度に、参照部54によるプロ
グラム動作を決定する処理(例えば、所定の演算処理)
も実行される。そのため、設定部53の実行頻度が低
く、参照部54の実行頻度が高い場合には、そのオブジ
ェクトコードを実行するコンピュータ装置での処理速度
が低下してしまうおそれがある。このような処理速度の
低下を防ぐためには、参照部54の実行頻度を低くする
ことも考えられるが、そのためにはプログラム構造の工
夫等が必須となるため、ソースコードの作成効率等を鑑
みれば難点がある。
【0004】そこで、本発明は、変換後のオブジェクト
コードをコンピュータ装置で実行しても、そのコンピュ
ータ装置の処理速度が低下することのないように、ソー
スコードからオブジェクトコードへの変換を行うことの
できる、コンピュータプログラムのコンパイル方法を提
供することを目的とする。
コードをコンピュータ装置で実行しても、そのコンピュ
ータ装置の処理速度が低下することのないように、ソー
スコードからオブジェクトコードへの変換を行うことの
できる、コンピュータプログラムのコンパイル方法を提
供することを目的とする。
【0005】
【課題を解決するための手段】本発明は、上記目的を達
成するために案出されたコンピュータプログラムのコン
パイル方法で、プログラミング言語で記述されたソース
コードをコンピュータ装置が直接解読できるオブジェク
トコードに変換するコンピュータプログラムのコンパイ
ル方法において、変換対象となるソースコードがプログ
ラム状態を示すデータの設定を行うためのデータ設定命
令と前記データに従いプログラム動作を決定するための
データ参照命令とを含む場合に、前記コンピュータ装置
が変換後のオブジェクトコードを実行する都度、当該オ
ブジェクトコードのうち前記データ参照命令に相当する
部分が前記データ設定命令にて設定されるデータに応じ
て書き換わるように当該オブジェクトコードを生成する
ことを特徴とする。
成するために案出されたコンピュータプログラムのコン
パイル方法で、プログラミング言語で記述されたソース
コードをコンピュータ装置が直接解読できるオブジェク
トコードに変換するコンピュータプログラムのコンパイ
ル方法において、変換対象となるソースコードがプログ
ラム状態を示すデータの設定を行うためのデータ設定命
令と前記データに従いプログラム動作を決定するための
データ参照命令とを含む場合に、前記コンピュータ装置
が変換後のオブジェクトコードを実行する都度、当該オ
ブジェクトコードのうち前記データ参照命令に相当する
部分が前記データ設定命令にて設定されるデータに応じ
て書き換わるように当該オブジェクトコードを生成する
ことを特徴とする。
【0006】本発明に係るコンパイル方法によれば、変
換後のオブジェクトコードをコンピュータ装置で実行す
ると、その都度、オブジェクトコードの参照部(ソース
コードにおけるデータ参照命令に相当する部分)がプロ
グラム状態を示すデータに応じて書き換わるように、ソ
ースコードからオブジェクトコードへの変換を行う。し
たがって、本発明のコンパイル方法により変換されたオ
ブジェクトコードをコンピュータ装置で実行すれば、例
えばプログラム状態を示すデータを所定のデータ領域内
に設定したり、オブジェクトコードの参照部を実行する
度にそのデータ領域へのアクセスを行わなくても、プロ
グラム状態を示すデータに従いつつ、プログラム動作が
決定されることになる。
換後のオブジェクトコードをコンピュータ装置で実行す
ると、その都度、オブジェクトコードの参照部(ソース
コードにおけるデータ参照命令に相当する部分)がプロ
グラム状態を示すデータに応じて書き換わるように、ソ
ースコードからオブジェクトコードへの変換を行う。し
たがって、本発明のコンパイル方法により変換されたオ
ブジェクトコードをコンピュータ装置で実行すれば、例
えばプログラム状態を示すデータを所定のデータ領域内
に設定したり、オブジェクトコードの参照部を実行する
度にそのデータ領域へのアクセスを行わなくても、プロ
グラム状態を示すデータに従いつつ、プログラム動作が
決定されることになる。
【0007】
【発明の実施の形態】以下、図面に基づき本発明に係る
コンピュータプログラムのコンパイル方法について説明
する。図1は本発明に係るコンピュータプログラムのコ
ンパイル方法の一例の概要を示す説明図であり、図2は
そのコンパイル方法を実行するハードウェア構成の一例
を示すブロック図であり、図3はそのコンパイル方法を
実行するソフトウェア構成の一例を示すブロック図であ
る。
コンピュータプログラムのコンパイル方法について説明
する。図1は本発明に係るコンピュータプログラムのコ
ンパイル方法の一例の概要を示す説明図であり、図2は
そのコンパイル方法を実行するハードウェア構成の一例
を示すブロック図であり、図3はそのコンパイル方法を
実行するソフトウェア構成の一例を示すブロック図であ
る。
【0008】ここで、本発明に係るコンパイル方法の説
明に先立ち、そのコンパイル方法を用いるハードウェア
構成およびソフトウェア構成について説明する。
明に先立ち、そのコンパイル方法を用いるハードウェア
構成およびソフトウェア構成について説明する。
【0009】本発明に係るコンパイル方法は、例えば図
2に示すような構成のコンピュータ装置において用いら
れる。このコンピュータ装置では、RAM(Random Acc
essMemory)等のメモリ11に記憶されているプログラ
ムが、CPU(Central Processing Unit)12によって
読み出され、そのCPU12により実行される。そし
て、実行された処理の内容に応じて、CPU12に接続
する入出力装置13が情報(処理結果)の入出力を行っ
たり、CPU12がメモリ11への情報書き込みを行っ
たりする。
2に示すような構成のコンピュータ装置において用いら
れる。このコンピュータ装置では、RAM(Random Acc
essMemory)等のメモリ11に記憶されているプログラ
ムが、CPU(Central Processing Unit)12によって
読み出され、そのCPU12により実行される。そし
て、実行された処理の内容に応じて、CPU12に接続
する入出力装置13が情報(処理結果)の入出力を行っ
たり、CPU12がメモリ11への情報書き込みを行っ
たりする。
【0010】また、本発明に係るコンパイル方法は、例
えば図3に示すようなソフトウェア構成によって実現さ
れる。すなわち、プログラミング言語によって記述され
たソースコード21を読み込んで、そのソースコード2
1をコンピュータ装置のCPU12が直接解読できるオ
ブジェクトコード22に翻訳する、コンパイル装置(以
下「コンパイラ」という)23によって実現される。こ
のコンパイラ23は、CPU12による所定プログラム
の実行によって形成される。また、このコンパイラ23
によって処理されるソースコード21およびオブジェク
トコード22は、それぞれ、メモリ11内に格納された
り、あるいは入出力装置13にて入出力されるようにな
っている。
えば図3に示すようなソフトウェア構成によって実現さ
れる。すなわち、プログラミング言語によって記述され
たソースコード21を読み込んで、そのソースコード2
1をコンピュータ装置のCPU12が直接解読できるオ
ブジェクトコード22に翻訳する、コンパイル装置(以
下「コンパイラ」という)23によって実現される。こ
のコンパイラ23は、CPU12による所定プログラム
の実行によって形成される。また、このコンパイラ23
によって処理されるソースコード21およびオブジェク
トコード22は、それぞれ、メモリ11内に格納された
り、あるいは入出力装置13にて入出力されるようにな
っている。
【0011】このコンパイラ23によって処理されるソ
ースコード21としては、例えばC言語のような高級プ
ログラム言語によって記述されたものが挙げられるが、
これに限らず他のプログラミング言語によって記述され
たものであってもよういことはいうまでもない。ただ
し、変換対象となるソースコードは、状態を示すデータ
の設定を行うためのデータ設定命令と、設定されたデー
タに従いプログラム動作を決定するためのデータ参照命
令とを含んでいるものとする。
ースコード21としては、例えばC言語のような高級プ
ログラム言語によって記述されたものが挙げられるが、
これに限らず他のプログラミング言語によって記述され
たものであってもよういことはいうまでもない。ただ
し、変換対象となるソースコードは、状態を示すデータ
の設定を行うためのデータ設定命令と、設定されたデー
タに従いプログラム動作を決定するためのデータ参照命
令とを含んでいるものとする。
【0012】このようなハードウェア構成およびソフト
ウェア構成によって実現されるコンパイル方法は、変換
対象となるソースコード21を、例えば図1に示すよう
な構成のオブジェクトコード22に変換するようになっ
ている。すなわち、オブジェクトコード22の設定部
(ソースコード21におけるデータ設定命令に相当する
部分)31がプログラム状態を変更すると、それに対応
してオブジェクトコード22の参照部(ソースコード2
1におけるデータ参照命令に相当する部分)32もプロ
グラムコードが書き換わるように、ソースコード21か
らオブジェクトコード22への変換を行う。
ウェア構成によって実現されるコンパイル方法は、変換
対象となるソースコード21を、例えば図1に示すよう
な構成のオブジェクトコード22に変換するようになっ
ている。すなわち、オブジェクトコード22の設定部
(ソースコード21におけるデータ設定命令に相当する
部分)31がプログラム状態を変更すると、それに対応
してオブジェクトコード22の参照部(ソースコード2
1におけるデータ参照命令に相当する部分)32もプロ
グラムコードが書き換わるように、ソースコード21か
らオブジェクトコード22への変換を行う。
【0013】したがって、変換後のオブジェクトコード
22は、CPU12が実行する都度、その参照部32が
プログラム状態を示すデータに応じて書き換わることに
なる。これにより、変換後のオブジェクトコード22で
は、例えば、設定部31がコンピュータ装置のメモリ1
1内に設けられる所定のデータ領域33にプログラム状
態を示すデータを設定したり、参照部32がプログラム
動作を決定するためのデータを参照すべくそのデータ領
域33へのアクセスを行う必要がなくなる。
22は、CPU12が実行する都度、その参照部32が
プログラム状態を示すデータに応じて書き換わることに
なる。これにより、変換後のオブジェクトコード22で
は、例えば、設定部31がコンピュータ装置のメモリ1
1内に設けられる所定のデータ領域33にプログラム状
態を示すデータを設定したり、参照部32がプログラム
動作を決定するためのデータを参照すべくそのデータ領
域33へのアクセスを行う必要がなくなる。
【0014】ここで、このようなコンパイル方法につい
て、具体例を挙げつつ、さらに詳しく説明する。図4は
変換対象となるソースコードの一具体例を示す説明図で
あり、図5は本発明に係るコンパイル方法の手順の一例
を示すフローチャートであり、図6は変換後のオブジェ
クトコードの一具体例を示すフローチャートである。
て、具体例を挙げつつ、さらに詳しく説明する。図4は
変換対象となるソースコードの一具体例を示す説明図で
あり、図5は本発明に係るコンパイル方法の手順の一例
を示すフローチャートであり、図6は変換後のオブジェ
クトコードの一具体例を示すフローチャートである。
【0015】先ず、変換対象となるソースコードの具体
例について説明する。図4に示すように、この具体例に
おけるソースコードでは、チェンジレス(Changeless)
クラスで宣言された変数aが、仮想的な変数(以下「仮
想変数」という)となっている。この仮想変数aに値を
代入しているファンクション(以下「func」と略す)1
は、プログラム状態を示すデータの設定を行うデータ設
定命令としての機能を果たす。また、仮想変数aを参照
しているfunc2は、func1で設定されたデータに従いプ
ログラム動作を決定するデータ参照命令としての機能を
果たす。すなわち、このソースコードは、func1でプロ
グラム状態を設定し、func2でその状態に応じて値を変
数に設定し所定動作(予め定められたメッセージの出力
等)を行うものである。
例について説明する。図4に示すように、この具体例に
おけるソースコードでは、チェンジレス(Changeless)
クラスで宣言された変数aが、仮想的な変数(以下「仮
想変数」という)となっている。この仮想変数aに値を
代入しているファンクション(以下「func」と略す)1
は、プログラム状態を示すデータの設定を行うデータ設
定命令としての機能を果たす。また、仮想変数aを参照
しているfunc2は、func1で設定されたデータに従いプ
ログラム動作を決定するデータ参照命令としての機能を
果たす。すなわち、このソースコードは、func1でプロ
グラム状態を設定し、func2でその状態に応じて値を変
数に設定し所定動作(予め定められたメッセージの出力
等)を行うものである。
【0016】このような構成のソースコードに対して、
コンパイラ23は、図5に示すような手順でコンパイル
(オブジェクトコードへの変換)を行う。すなわち、コ
ンパイラ23は、コンパイルを行うのにあたって、先ず
変換対象となるソースコードの全体について字句解析を
行い(ステップ101、以下ステップをSと略す)、次
いでそのソースコードを構成する各部分について構文解
析を行って(S102)、各部分が仮想変数aを使用す
るか否かを判断する。なお、これら字句解析および構文
解析は、従来と同様の手法にて行うため、ここではその
詳細な説明を省く。
コンパイラ23は、図5に示すような手順でコンパイル
(オブジェクトコードへの変換)を行う。すなわち、コ
ンパイラ23は、コンパイルを行うのにあたって、先ず
変換対象となるソースコードの全体について字句解析を
行い(ステップ101、以下ステップをSと略す)、次
いでそのソースコードを構成する各部分について構文解
析を行って(S102)、各部分が仮想変数aを使用す
るか否かを判断する。なお、これら字句解析および構文
解析は、従来と同様の手法にて行うため、ここではその
詳細な説明を省く。
【0017】そして、仮想変数aを使用しない部分につ
いては、コンパイラ23が当該部分を従来と同様に通常
の方法でコンパイルしてオブジェクトコードの生成を行
う(S103)。
いては、コンパイラ23が当該部分を従来と同様に通常
の方法でコンパイルしてオブジェクトコードの生成を行
う(S103)。
【0018】これに対し、仮想変数aを使用する部分の
うち、その仮想変数aに値を代入する部分であるfunc1
については、コンパイラ23が以下のようにしてコード
生成を行う。先ず、コンパイラ23は、変換後のオブジ
ェクトコードにおける参照部32に相当する部分、すな
わちfunc1が設定したデータを使用する部分であるfunc
2における処理内容(具体的には数式の演算)を評価す
るコードを生成する(S104)。例えば、図4に示す
ソースコードのうち、「b=a*17」という部分につ
いては、コンパイラ23は「a*17」を計算するコー
ドを生成する。また、「if(a>10)」という部分に
ついては、コンパイラ23は「a>10」を計算するコ
ードを生成する。
うち、その仮想変数aに値を代入する部分であるfunc1
については、コンパイラ23が以下のようにしてコード
生成を行う。先ず、コンパイラ23は、変換後のオブジ
ェクトコードにおける参照部32に相当する部分、すな
わちfunc1が設定したデータを使用する部分であるfunc
2における処理内容(具体的には数式の演算)を評価す
るコードを生成する(S104)。例えば、図4に示す
ソースコードのうち、「b=a*17」という部分につ
いては、コンパイラ23は「a*17」を計算するコー
ドを生成する。また、「if(a>10)」という部分に
ついては、コンパイラ23は「a>10」を計算するコ
ードを生成する。
【0019】このような評価コードを生成すると、続い
て、コンパイラ23は、その評価の結果を基に、変換後
のオブジェクトコードにおける参照部32に相当する部
分を書き換えるためのコードを生成する(S105)。
具体的には、評価の結果を定数として使用して、これを
参照部32に書き込むためのコードを生成する。例え
ば、図4に示すソースコードのうち、「b=a*17」
という部分については、「a*17」の評価結果を定数
として変数bに設定するコードを、参照部32に書き込
むためのコードを生成する。また、「if(a>10)」
という部分については、aが10以下の場合はメッセー
ジを出力させないような分岐命令を書き込み、aが10
より大きな場合はこの分岐命令の個所に何もしないよう
な命令を書き込むためのコードを生成する。
て、コンパイラ23は、その評価の結果を基に、変換後
のオブジェクトコードにおける参照部32に相当する部
分を書き換えるためのコードを生成する(S105)。
具体的には、評価の結果を定数として使用して、これを
参照部32に書き込むためのコードを生成する。例え
ば、図4に示すソースコードのうち、「b=a*17」
という部分については、「a*17」の評価結果を定数
として変数bに設定するコードを、参照部32に書き込
むためのコードを生成する。また、「if(a>10)」
という部分については、aが10以下の場合はメッセー
ジを出力させないような分岐命令を書き込み、aが10
より大きな場合はこの分岐命令の個所に何もしないよう
な命令を書き込むためのコードを生成する。
【0020】一方、仮想変数aを使用する部分のうち、
その仮想変数aを参照する部分であるfunc2について
は、コンパイラ23が以下のようにしてコード生成を行
う。先ず、コンパイラ23は、仮想変数aに初期値があ
るか否かを判断する(S106)。ここでいう初期値と
は、仮想変数aに対して設定される値をいい、例えば上
述したような参照部32に書き込むためのコードがこれ
に相当する。
その仮想変数aを参照する部分であるfunc2について
は、コンパイラ23が以下のようにしてコード生成を行
う。先ず、コンパイラ23は、仮想変数aに初期値があ
るか否かを判断する(S106)。ここでいう初期値と
は、仮想変数aに対して設定される値をいい、例えば上
述したような参照部32に書き込むためのコードがこれ
に相当する。
【0021】この判断の結果、初期値があれば、コンパ
イラ23は、その仮想変数aの初期値を定数とみなし
て、コードを生成する(S107)。また、初期値がな
ければ、コンパイラ23は、例外を発生させるコードを
生成する(S108)。この例外を発生させるコードと
は、通常の処理状態ではない例外事象が発生したこと
を、例えば入出力装置13を通じてコンピュータ装置の
ユーザに伝えるためのものである。このようにすること
により、未設定の仮想変数を参照した場合には例外が発
生し、プログラムの誤りをコンピュータ装置のユーザに
伝えることができるようになる。
イラ23は、その仮想変数aの初期値を定数とみなし
て、コードを生成する(S107)。また、初期値がな
ければ、コンパイラ23は、例外を発生させるコードを
生成する(S108)。この例外を発生させるコードと
は、通常の処理状態ではない例外事象が発生したこと
を、例えば入出力装置13を通じてコンピュータ装置の
ユーザに伝えるためのものである。このようにすること
により、未設定の仮想変数を参照した場合には例外が発
生し、プログラムの誤りをコンピュータ装置のユーザに
伝えることができるようになる。
【0022】そして、コンパイラ23は、変換対象とな
るソースコードの全体について、これらの処理が終了し
たか否かを判断する(S109)。つまり、ソースコー
ド全体についての処理が終了するまで、上述した処理を
繰り返して行う(S102〜S109)。
るソースコードの全体について、これらの処理が終了し
たか否かを判断する(S109)。つまり、ソースコー
ド全体についての処理が終了するまで、上述した処理を
繰り返して行う(S102〜S109)。
【0023】以上のような手順のコンパイルの結果、図
4におけるソースコードは、func1が図6(a)に示す
ような構成のオブジェクトコードに変換され、func2が
図6(b)に示すような構成のオブジェクトコードに変
換されることになる。
4におけるソースコードは、func1が図6(a)に示す
ような構成のオブジェクトコードに変換され、func2が
図6(b)に示すような構成のオブジェクトコードに変
換されることになる。
【0024】すなわち、func1の変換結果に相当する設
定部31は、図6(a)に示すように、先ず「x*17
(xは外部から設定される値)」を計算し(S20
1)、その計算結果を変数bに代入するコードを後述す
る参照部32におけるS206に書き込むためのコード
を生成し(S202)、その後「a>10」であるか否
かを判断し(S203)、この判断の結果a>10であ
れば何もしないコードを後述する参照部32におけるS
207に書き込むためのコードを生成し(S204)、
a>10でなければ参照部32への分岐命令となるコー
ドを生成する(S205)ように構成される。
定部31は、図6(a)に示すように、先ず「x*17
(xは外部から設定される値)」を計算し(S20
1)、その計算結果を変数bに代入するコードを後述す
る参照部32におけるS206に書き込むためのコード
を生成し(S202)、その後「a>10」であるか否
かを判断し(S203)、この判断の結果a>10であ
れば何もしないコードを後述する参照部32におけるS
207に書き込むためのコードを生成し(S204)、
a>10でなければ参照部32への分岐命令となるコー
ドを生成する(S205)ように構成される。
【0025】また、func2の変換結果に相当する参照部
32は、図6(b)に示すように、先ず、設定部31か
らの書き込み(S202,S204,S205)に従い
つつ動作を決定した後(S206,S207)、「a i
s greater than 10」というメッセージを入出力装置
13等に出力する(S208)ように構成される。
32は、図6(b)に示すように、先ず、設定部31か
らの書き込み(S202,S204,S205)に従い
つつ動作を決定した後(S206,S207)、「a i
s greater than 10」というメッセージを入出力装置
13等に出力する(S208)ように構成される。
【0026】つまり、変換後のオブジェクトコードは、
設定部31が計算結果の変化等によりプログラム状態を
変更すると、それに対応して参照部32が書き換わるよ
うに構成されている。したがって、このオブジェクトコ
ード22をコンピュータ装置のCPU12が実行する
と、その都度、参照部32がプログラム状態を示すデー
タに応じて書き換わることになる。
設定部31が計算結果の変化等によりプログラム状態を
変更すると、それに対応して参照部32が書き換わるよ
うに構成されている。したがって、このオブジェクトコ
ード22をコンピュータ装置のCPU12が実行する
と、その都度、参照部32がプログラム状態を示すデー
タに応じて書き換わることになる。
【0027】ここで、このように変換され生成されたオ
ブジェクトコードをCPU12で実行した場合につい
て、具体例を挙げて説明する。図7および図8は、それ
ぞれ、実行時におけるオブジェクトコードの一具体例を
示すフローチャートである。
ブジェクトコードをCPU12で実行した場合につい
て、具体例を挙げて説明する。図7および図8は、それ
ぞれ、実行時におけるオブジェクトコードの一具体例を
示すフローチャートである。
【0028】例えば、func1(5)を実行した場合につ
いて考える。なお、(5)とは、xに設定すべき値が
「5」であることを示している。この場合、func2の変
換結果に相当する参照部32は、図7に示すように書き
換えられることになる。すなわち、参照部32は、「5
*17」の計算結果である「85」を変数bに代入する
コードが書き込まれるが(S301)、メッセージを出
力させないような分岐命令によって、「a is greater
than 10」というメッセージを出力しないように書き
換えられる。
いて考える。なお、(5)とは、xに設定すべき値が
「5」であることを示している。この場合、func2の変
換結果に相当する参照部32は、図7に示すように書き
換えられることになる。すなわち、参照部32は、「5
*17」の計算結果である「85」を変数bに代入する
コードが書き込まれるが(S301)、メッセージを出
力させないような分岐命令によって、「a is greater
than 10」というメッセージを出力しないように書き
換えられる。
【0029】また、これと同様に、例えば、func1(1
5)を実行した場合について考えると、func2の変換結
果に相当する参照部32は、図8に示すように書き換え
られることになる。すなわち、参照部32は、「15*
17」の計算結果である「255」を変数bに代入する
コードが書き込まれ(S401)、さらには分岐命令の
箇所に何もしないような命令を書き込むコードによっ
て、「a is greater than 10」というメッセージを
出力するように書き換えられる(S402)。
5)を実行した場合について考えると、func2の変換結
果に相当する参照部32は、図8に示すように書き換え
られることになる。すなわち、参照部32は、「15*
17」の計算結果である「255」を変数bに代入する
コードが書き込まれ(S401)、さらには分岐命令の
箇所に何もしないような命令を書き込むコードによっ
て、「a is greater than 10」というメッセージを
出力するように書き換えられる(S402)。
【0030】以上のように、本実施形態で説明したコン
ピュータプログラムのコンパイル方法では、設定部31
がプログラム状態を変更すると、それに応じて参照部3
2のプログラムコードが書き換わるように、ソースコー
ドからオブジェクトコードへの変換を行うようになって
いる。したがって、本実施形態のコンパイル方法により
変換したオブジェクトコードをコンピュータ装置で実行
すれば、その都度、参照部32がプログラム状態を示す
データに応じて書き換わるので、変換後のオブジェクト
コードをコンピュータ装置で実行するのにあたって、例
えばプログラム状態を示すデータを所定のデータ領域内
に設定したり、参照部32を実行する度にそのデータ領
域へのアクセスを行う必要がなくなる。
ピュータプログラムのコンパイル方法では、設定部31
がプログラム状態を変更すると、それに応じて参照部3
2のプログラムコードが書き換わるように、ソースコー
ドからオブジェクトコードへの変換を行うようになって
いる。したがって、本実施形態のコンパイル方法により
変換したオブジェクトコードをコンピュータ装置で実行
すれば、その都度、参照部32がプログラム状態を示す
データに応じて書き換わるので、変換後のオブジェクト
コードをコンピュータ装置で実行するのにあたって、例
えばプログラム状態を示すデータを所定のデータ領域内
に設定したり、参照部32を実行する度にそのデータ領
域へのアクセスを行う必要がなくなる。
【0031】つまり、本実施形態のコンパイル方法によ
る変換後のオブジェクトコードでは、参照部32を実行
する場合にデータ領域へのアクセスが不要となり、しか
も参照部32の書き換えによってその参照部32が行い
得る処理動作のうち不要なものが実行されなくなる。こ
れにより、設定部31の実行頻度が低く、参照部32の
実行頻度が高い場合であっても、そのオブジェクトコー
ドを実行するコンピュータ装置での処理速度が低下して
しまうことがなくなる。また、そのために、プログラム
構造を工夫等するとことも必要ないので、ソースコード
の作成時における効率低下等を招いてしまうこともなく
なる。
る変換後のオブジェクトコードでは、参照部32を実行
する場合にデータ領域へのアクセスが不要となり、しか
も参照部32の書き換えによってその参照部32が行い
得る処理動作のうち不要なものが実行されなくなる。こ
れにより、設定部31の実行頻度が低く、参照部32の
実行頻度が高い場合であっても、そのオブジェクトコー
ドを実行するコンピュータ装置での処理速度が低下して
しまうことがなくなる。また、そのために、プログラム
構造を工夫等するとことも必要ないので、ソースコード
の作成時における効率低下等を招いてしまうこともなく
なる。
【0032】なお、本実施形態では、ソースコード21
からオブジェクトコード22へのコンパイルと、変換後
のオブジェクトコード22の実行との双方を、同一のコ
ンピュータ装置が行う場合を例に挙げて説明したが、本
発明はこれに限定されるものではなく、それぞれを別個
のコンピュータ装置が行うクロスコンパイル環境下にお
いても適用可能であることはいうまでもない。
からオブジェクトコード22へのコンパイルと、変換後
のオブジェクトコード22の実行との双方を、同一のコ
ンピュータ装置が行う場合を例に挙げて説明したが、本
発明はこれに限定されるものではなく、それぞれを別個
のコンピュータ装置が行うクロスコンパイル環境下にお
いても適用可能であることはいうまでもない。
【0033】また、本実施形態では、参照部32におけ
る処理内容(数式の演算)の評価と、その参照部32の
書き換え処理との双方を、それぞれ設定部31が行う場
合を例に挙げて説明したが、それ以外にも、例えば、参
照部32の書き換え処理のみを設定部31が行い、処理
内容の評価については参照部32自身が行うようにする
ことも考えられる。
る処理内容(数式の演算)の評価と、その参照部32の
書き換え処理との双方を、それぞれ設定部31が行う場
合を例に挙げて説明したが、それ以外にも、例えば、参
照部32の書き換え処理のみを設定部31が行い、処理
内容の評価については参照部32自身が行うようにする
ことも考えられる。
【0034】また、本実施形態では、チェンジレスクラ
スで宣言された変数を仮想変数と認識してソースコード
に対するコンパイルを行う場合について説明したが、一
般の変数との違いが判断できるものであれば、他の記述
方法によるソースコードであっても同様にコンパイルを
行うことは可能である。しかも、このとき、一般の変数
と仮想変数との相違は、本実施形態のようにソースコー
ド上の記述により判断するのではなく、例えば設定部ま
たは参照部の数を基に判断したり、あるいは実際に実行
した際の実行頻度の計測結果から判断するようにしても
よい。
スで宣言された変数を仮想変数と認識してソースコード
に対するコンパイルを行う場合について説明したが、一
般の変数との違いが判断できるものであれば、他の記述
方法によるソースコードであっても同様にコンパイルを
行うことは可能である。しかも、このとき、一般の変数
と仮想変数との相違は、本実施形態のようにソースコー
ド上の記述により判断するのではなく、例えば設定部ま
たは参照部の数を基に判断したり、あるいは実際に実行
した際の実行頻度の計測結果から判断するようにしても
よい。
【0035】また、本実施形態では、仮想変数に初期値
を指定しない場合に、参照部に例外を発生させるコード
を生成する場合について説明したが、それ以外にも、例
えば適当な値が設定されているものとみなしたコードを
生成するようにしてもよい。
を指定しない場合に、参照部に例外を発生させるコード
を生成する場合について説明したが、それ以外にも、例
えば適当な値が設定されているものとみなしたコードを
生成するようにしてもよい。
【0036】また、本実施形態では、その変数毎にオブ
ジェクトコードの参照部を書き換えるか否か決定する場
合について説明したが、例えば参照部毎に書き換えをす
るか否かを、それが判断できるような記述により決定す
ることも考えられる。さらには、その書き換えにあたっ
て、本実施形態では、分岐命令と何もしない命令との置
き換えを行っていたが、条件成立時に実行する命令自身
と何もしない命令とを置き換えるようにすることもでき
る。
ジェクトコードの参照部を書き換えるか否か決定する場
合について説明したが、例えば参照部毎に書き換えをす
るか否かを、それが判断できるような記述により決定す
ることも考えられる。さらには、その書き換えにあたっ
て、本実施形態では、分岐命令と何もしない命令との置
き換えを行っていたが、条件成立時に実行する命令自身
と何もしない命令とを置き換えるようにすることもでき
る。
【0037】
【発明の効果】以上に説明したように、本発明に係るコ
ンピュータプログラムのコンパイル方法は、プログラム
状態を変更に応じてデータ参照命令相当部分である参照
部が書き換わるように、ソースコードからオブジェクト
コードへの変換を行うので、変換後のオブジェクトコー
ドをコンピュータ装置で実行する際に、例えばプログラ
ム状態を示すデータを所定のデータ領域内に設定した
り、参照部を実行する度にそのデータ領域へのアクセス
を行う必要がなくなる。したがって、本発明のコンパイ
ル方法を用いれば、コンピュータ装置がオブジェクトコ
ードを実行する都度、その参照部がプログラム状態を示
すデータに応じて書き換わるので、例えば設定部の実行
頻度が低く、参照部の実行頻度が高い場合であっても、
そのオブジェクトコードを実行するコンピュータ装置で
の処理速度が低下してしまうことがなくなる。
ンピュータプログラムのコンパイル方法は、プログラム
状態を変更に応じてデータ参照命令相当部分である参照
部が書き換わるように、ソースコードからオブジェクト
コードへの変換を行うので、変換後のオブジェクトコー
ドをコンピュータ装置で実行する際に、例えばプログラ
ム状態を示すデータを所定のデータ領域内に設定した
り、参照部を実行する度にそのデータ領域へのアクセス
を行う必要がなくなる。したがって、本発明のコンパイ
ル方法を用いれば、コンピュータ装置がオブジェクトコ
ードを実行する都度、その参照部がプログラム状態を示
すデータに応じて書き換わるので、例えば設定部の実行
頻度が低く、参照部の実行頻度が高い場合であっても、
そのオブジェクトコードを実行するコンピュータ装置で
の処理速度が低下してしまうことがなくなる。
【図1】本発明に係るコンピュータプログラムのコンパ
イル方法の一例の概要を示す説明図である。
イル方法の一例の概要を示す説明図である。
【図2】本発明のコンパイル方法を実行するハードウェ
ア構成の一例を示すブロック図である。
ア構成の一例を示すブロック図である。
【図3】本発明のコンパイル方法を実行するソフトウェ
ア構成の一例を示すブロック図である。
ア構成の一例を示すブロック図である。
【図4】変換対象となるソースコードの一具体例を示す
説明図である。
説明図である。
【図5】本発明に係るコンパイル方法の手順の一例を示
すフローチャートである。
すフローチャートである。
【図6】変換後のオブジェクトコードの一具体例を示す
フローチャートである。
フローチャートである。
【図7】コンピュータ装置での実行時における参照部の
一具体例を示フローチャート(その1)である。
一具体例を示フローチャート(その1)である。
【図8】コンピュータ装置での実行時における参照部の
一具体例を示フローチャート(その2)である。
一具体例を示フローチャート(その2)である。
【図9】従来におけるコンピュータプログラムのコンパ
イル方法の一例の概要を示す説明図である。
イル方法の一例の概要を示す説明図である。
21…コンパイラ、22…オブジェクトコード、23…
コンパイラ、31…設定部、32…参照部
コンパイラ、31…設定部、32…参照部
Claims (1)
- 【請求項1】 プログラミング言語で記述されたソース
コードをコンピュータ装置が直接解読できるオブジェク
トコードに変換するコンピュータプログラムのコンパイ
ル方法において、 変換対象となるソースコードがプログラム状態を示すデ
ータの設定を行うためのデータ設定命令と前記データに
従いプログラム動作を決定するためのデータ参照命令と
を含む場合に、前記コンピュータ装置が変換後のオブジ
ェクトコードを実行する都度、当該オブジェクトコード
のうち前記データ参照命令に相当する部分が前記データ
設定命令にて設定されるデータに応じて書き換わるよう
に当該オブジェクトコードを生成することを特徴とする
コンピュータプログラムのコンパイル方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP33372699A JP2001154850A (ja) | 1999-11-25 | 1999-11-25 | コンピュータプログラムのコンパイル方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP33372699A JP2001154850A (ja) | 1999-11-25 | 1999-11-25 | コンピュータプログラムのコンパイル方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
JP2001154850A true JP2001154850A (ja) | 2001-06-08 |
Family
ID=18269281
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP33372699A Pending JP2001154850A (ja) | 1999-11-25 | 1999-11-25 | コンピュータプログラムのコンパイル方法 |
Country Status (1)
Country | Link |
---|---|
JP (1) | JP2001154850A (ja) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110209591A (zh) * | 2019-06-05 | 2019-09-06 | 北京字节跳动网络技术有限公司 | 图片查找方法、装置、电子设备及存储介质 |
-
1999
- 1999-11-25 JP JP33372699A patent/JP2001154850A/ja active Pending
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110209591A (zh) * | 2019-06-05 | 2019-09-06 | 北京字节跳动网络技术有限公司 | 图片查找方法、装置、电子设备及存储介质 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP2749528B2 (ja) | エラー解析用のトレーサシステム | |
US9274923B2 (en) | System and method for stack crawl testing and caching | |
CN100405294C (zh) | 在运行时期间优化计算机程序的系统与方法 | |
JPH11259437A (ja) | 不要バリア命令の削減方式 | |
US20100095286A1 (en) | Register reduction and liveness analysis techniques for program code | |
JPH10111818A (ja) | バーストプロファイリング方法およびシステム | |
JPH05257709A (ja) | 並列化判別方法およびそれを用いた並列化支援方法 | |
KR20110070468A (ko) | 인스트루먼테이션 실행 장치 및 방법 | |
JP2000347872A (ja) | 例外を正規制御フローとして処理する方法及び装置 | |
KR19990037015A (ko) | 객체-지향 시스템에서 수신기 타입을 위한 인-라인데이터베이스 | |
JP2003050715A (ja) | コンパイラおよびデバッグ装置 | |
JP2004164554A (ja) | プログラム実行監視装置および方法 | |
US20080127118A1 (en) | Method and system for dynamic patching of software | |
JP2817786B2 (ja) | シミュレーション装置及びシミュレーション方法 | |
JP2001154850A (ja) | コンピュータプログラムのコンパイル方法 | |
JP2004192052A (ja) | ソフトウェア処理方法およびソフトウェア処理システム | |
JP2004038279A (ja) | コンパイラ、演算処理システム及び演算処理方法 | |
JP3327674B2 (ja) | プログラム翻訳装置及び方法 | |
EP1979810A1 (en) | Compile-time interpretable code error detection | |
US20080127072A1 (en) | Method and system for extending evaluation for intermediate representation interpretation | |
JP2007114934A (ja) | コンパイラシステム | |
JP2005301415A (ja) | コンパイル方式、シミュレータ、エミュレータおよびプログラム開発支援システム | |
JPH0962512A (ja) | 低級言語から高級言語への記述言語変換機能を有するプログラム変換装置及び方法 | |
JP3566602B2 (ja) | コンパイル方法、および、コンパイル用プログラムを記録した記録媒体 | |
JPH10207738A (ja) | 言語処理システム |