JPH06266562A - オブジェクト指向言語処理システムにおける目的コードサイズ最適化方式 - Google Patents
オブジェクト指向言語処理システムにおける目的コードサイズ最適化方式Info
- Publication number
- JPH06266562A JPH06266562A JP5080164A JP8016493A JPH06266562A JP H06266562 A JPH06266562 A JP H06266562A JP 5080164 A JP5080164 A JP 5080164A JP 8016493 A JP8016493 A JP 8016493A JP H06266562 A JPH06266562 A JP H06266562A
- Authority
- JP
- Japan
- Prior art keywords
- input file
- class
- declaration
- code
- name
- 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)【要約】
【目的】 目的コード内にメソッドアドレス格納テーブ
ルの実体を1つのみ生成し、目的コードの大きさを削減
する。 【構成】 入力ファイル群11の各入力ファイルに対し
て出力コード15を生成し、かつオブジェクト指向言語
のメソッドの実行時決定を目的コード17内に静的に生
成されるメソッドアドレス格納テーブルを使用すること
によって実現するオブジェクト指向言語処理システムに
おいて、構文意味解析部13は、クラス宣言の意味解析
処理時にメソッドの所属するクラス名と入力ファイル名
とを比較し、一致すればメソッドアドレス格納テーブル
の実体および宣言を出力コード15内に生成し、一致し
なければメソッドアドレス格納テーブルの宣言のみを出
力コード15内に生成する。リンカ16は、複数の出力
コード15間の参照関係を解決して1つの目的コード1
7を生成する。
ルの実体を1つのみ生成し、目的コードの大きさを削減
する。 【構成】 入力ファイル群11の各入力ファイルに対し
て出力コード15を生成し、かつオブジェクト指向言語
のメソッドの実行時決定を目的コード17内に静的に生
成されるメソッドアドレス格納テーブルを使用すること
によって実現するオブジェクト指向言語処理システムに
おいて、構文意味解析部13は、クラス宣言の意味解析
処理時にメソッドの所属するクラス名と入力ファイル名
とを比較し、一致すればメソッドアドレス格納テーブル
の実体および宣言を出力コード15内に生成し、一致し
なければメソッドアドレス格納テーブルの宣言のみを出
力コード15内に生成する。リンカ16は、複数の出力
コード15間の参照関係を解決して1つの目的コード1
7を生成する。
Description
【0001】
【産業上の利用分野】本発明はオブジェクト指向言語
(例えば、プログラミング言語C++,LOOPS,T
AO等)を用いた情報処理システムに関し、特に複数の
入力ファイルに対して各々に対応する出力コードを生成
した後に複数の出力コード間の参照関係を解決して1つ
の目的コードを生成し、かつオブジェクト指向言語のメ
ソッドの実行時決定を目的コード内に静的に生成される
メソッドアドレス格納テーブルを使用することによって
実現するオブジェクト指向言語処理システムにおける目
的コードサイズ最適化方式に関する。
(例えば、プログラミング言語C++,LOOPS,T
AO等)を用いた情報処理システムに関し、特に複数の
入力ファイルに対して各々に対応する出力コードを生成
した後に複数の出力コード間の参照関係を解決して1つ
の目的コードを生成し、かつオブジェクト指向言語のメ
ソッドの実行時決定を目的コード内に静的に生成される
メソッドアドレス格納テーブルを使用することによって
実現するオブジェクト指向言語処理システムにおける目
的コードサイズ最適化方式に関する。
【0002】
【従来の技術】オブジェクト指向言語にはメソッドの実
行時決定という機能がある。これは異なるクラスに属す
るオブジェクトを統括して扱うために、オブジェクトに
与えられたメッセージに対して起動されるメソッドをオ
ブジェクトの所属するクラスに基づいて実行時に決定す
る機能である。
行時決定という機能がある。これは異なるクラスに属す
るオブジェクトを統括して扱うために、オブジェクトに
与えられたメッセージに対して起動されるメソッドをオ
ブジェクトの所属するクラスに基づいて実行時に決定す
る機能である。
【0003】ある種のオブジェクト指向言語処理システ
ムでは、この機能を目的コード内に静的に生成されるメ
ソッドアドレス格納テーブルを使用することによって実
現している。実際に実行されるメソッドはオブジェクト
の所属するクラスに基づいて決定されるから、メソッド
アドレス格納テーブルの内容はクラスごとに(正確には
クラスとクラスの継承関係ごとに)異なるものである。
ムでは、この機能を目的コード内に静的に生成されるメ
ソッドアドレス格納テーブルを使用することによって実
現している。実際に実行されるメソッドはオブジェクト
の所属するクラスに基づいて決定されるから、メソッド
アドレス格納テーブルの内容はクラスごとに(正確には
クラスとクラスの継承関係ごとに)異なるものである。
【0004】従来は、実行時に決定されるメソッドの属
するクラスの宣言が入力ソースプログラムファイル(以
下、単に入力ファイルという)に含まれていると、オブ
ジェクト指向言語処理システムのユーザが特に指定しな
い場合は出力コード内にメソッドアドレス格納テーブル
の実体が必ず生成されていた。
するクラスの宣言が入力ソースプログラムファイル(以
下、単に入力ファイルという)に含まれていると、オブ
ジェクト指向言語処理システムのユーザが特に指定しな
い場合は出力コード内にメソッドアドレス格納テーブル
の実体が必ず生成されていた。
【0005】以下、オブジェクト指向言語の1つである
C++の場合について従来技術を説明する。C++に
は、仮想関数というメソッドの実行時決定のための機構
がある。仮想関数であることを指定するためには、vi
rtualというキーワードを用いる。
C++の場合について従来技術を説明する。C++に
は、仮想関数というメソッドの実行時決定のための機構
がある。仮想関数であることを指定するためには、vi
rtualというキーワードを用いる。
【0006】仮想関数を実現するためには、与えられた
メッセージ呼出しに対して、実行時(プログラム動作
時)に呼び出されるメソッドを決定する必要がある。仮
想関数の呼出しが正しく行われるためには、実行される
メソッドが各オブジェクトのもつ情報をもとにプログラ
ム動作時に決定されなければならない。
メッセージ呼出しに対して、実行時(プログラム動作
時)に呼び出されるメソッドを決定する必要がある。仮
想関数の呼出しが正しく行われるためには、実行される
メソッドが各オブジェクトのもつ情報をもとにプログラ
ム動作時に決定されなければならない。
【0007】これを実現する方法として自然に考えられ
る方法は、C++処理系がクラスの属性を表す情報を出
力コード中に埋め込み、各オブジェクトはその情報への
ポインタを保持するという方法である。当然のことなが
ら、クラスの属性を表す情報には実行されるメソッドの
情報も含まれている。プログラム動作時には、オブジェ
クトからポインタをたどってこの情報をアクセスし、実
行されるべきメソッドを決定することになる。
る方法は、C++処理系がクラスの属性を表す情報を出
力コード中に埋め込み、各オブジェクトはその情報への
ポインタを保持するという方法である。当然のことなが
ら、クラスの属性を表す情報には実行されるメソッドの
情報も含まれている。プログラム動作時には、オブジェ
クトからポインタをたどってこの情報をアクセスし、実
行されるべきメソッドを決定することになる。
【0008】仮想関数テーブルは、C++処理系が仮想
関数機能を実現するために出力コード中に埋め込むメソ
ッドアドレス格納テーブルである。仮想関数テーブル
は、「クラスの属性を表す情報」を簡略化したものと考
えてよい。すなわち、クラスに関する全ての情報をもつ
のではなく、実行されるべきメソッドの決定を行うため
に必要最低限の情報をもっているテーブルである。ここ
では、仮想関数テーブルは、実行されるべきメソッドの
アドレス(位置)を情報としてもっていると考えてよ
い。
関数機能を実現するために出力コード中に埋め込むメソ
ッドアドレス格納テーブルである。仮想関数テーブル
は、「クラスの属性を表す情報」を簡略化したものと考
えてよい。すなわち、クラスに関する全ての情報をもつ
のではなく、実行されるべきメソッドの決定を行うため
に必要最低限の情報をもっているテーブルである。ここ
では、仮想関数テーブルは、実行されるべきメソッドの
アドレス(位置)を情報としてもっていると考えてよ
い。
【0009】仮想関数テーブルが必要なのは、仮想関数
(virtual付きの関数)がクラス宣言中に用いら
れた場合である。仮想関数が書き換えられるごとに、言
い換えれば仮想関数が書き換えられるようなクラスが宣
言されるごとに仮想関数テーブルを生成しなければなら
ない。
(virtual付きの関数)がクラス宣言中に用いら
れた場合である。仮想関数が書き換えられるごとに、言
い換えれば仮想関数が書き換えられるようなクラスが宣
言されるごとに仮想関数テーブルを生成しなければなら
ない。
【0010】また、入力ファイル中でオブジェクトを使
用するには、そのオブジェクトが所属するクラスの宣言
が入力ファイル中に含まれていなければならない。ある
クラスのオブジェクトを複数の入力ファイルで使用する
場合、複数の入力ファイルにクラスの宣言が含まれてい
なければならない。このために、通常、クラスの宣言を
ヘッダファイル(ファイル名末尾を.hとすることが多
い)に入れ、オブジェクトを使用する入力ファイルでヘ
ッダファイルをインクルードする(C++の言語仕様
で、#includeを用いて指定する)ことが多い。
ヘッダファイルのインクルードを指定すると、C++処
理系は、#includeが指定された部分をインクル
ードされるヘッダファイルの内容で置き換える。
用するには、そのオブジェクトが所属するクラスの宣言
が入力ファイル中に含まれていなければならない。ある
クラスのオブジェクトを複数の入力ファイルで使用する
場合、複数の入力ファイルにクラスの宣言が含まれてい
なければならない。このために、通常、クラスの宣言を
ヘッダファイル(ファイル名末尾を.hとすることが多
い)に入れ、オブジェクトを使用する入力ファイルでヘ
ッダファイルをインクルードする(C++の言語仕様
で、#includeを用いて指定する)ことが多い。
ヘッダファイルのインクルードを指定すると、C++処
理系は、#includeが指定された部分をインクル
ードされるヘッダファイルの内容で置き換える。
【0011】C++処理系が出力コード中に仮想関数テ
ーブルを埋め込むとき、仮想関数テーブルは、ソースプ
ログラム中の外部変数と同じ形態で埋め込まれるが、外
部変数と同じ形態で埋め込まれるためには、外部変数と
同様に、仮想関数テーブルに名前(変数名と同様)が与
えられる必要がある。このように名前が与えられるか
ら、オブジェクトが仮想関数テーブルへのポインタを保
持することが可能なのである(名前を使って参照するこ
とができる)。逆にいうと、仮想関数テーブルの名前さ
えわかっていれば、仮想関数テーブルの実体(先に述べ
た外部変数と同様な形態で出力コード中に確保される領
域)は必要でない。
ーブルを埋め込むとき、仮想関数テーブルは、ソースプ
ログラム中の外部変数と同じ形態で埋め込まれるが、外
部変数と同じ形態で埋め込まれるためには、外部変数と
同様に、仮想関数テーブルに名前(変数名と同様)が与
えられる必要がある。このように名前が与えられるか
ら、オブジェクトが仮想関数テーブルへのポインタを保
持することが可能なのである(名前を使って参照するこ
とができる)。逆にいうと、仮想関数テーブルの名前さ
えわかっていれば、仮想関数テーブルの実体(先に述べ
た外部変数と同様な形態で出力コード中に確保される領
域)は必要でない。
【0012】ただし、重要なことは、単一または複数の
入力ファイルで構成される全体のプログラムに対して生
成される目的コード中に最低1個の仮想関数テーブルの
実体が必要なことである。そうしないと、プログラムの
実行中に、オブジェクトは実際に仮想関数テーブルが作
成されていない位置のアドレスを保持することになって
しまう。
入力ファイルで構成される全体のプログラムに対して生
成される目的コード中に最低1個の仮想関数テーブルの
実体が必要なことである。そうしないと、プログラムの
実行中に、オブジェクトは実際に仮想関数テーブルが作
成されていない位置のアドレスを保持することになって
しまう。
【0013】そこで、C++処理系が全てのプログラム
を同時に調べて目的コード中に仮想関数テーブルの実体
を1個だけ生成するという処理を行えればよいが、しか
し全てのプログラムを同時に調べるということは処理時
間,消費メモリ量等の問題から現実的ではない。このた
め、多くのC++処理系では、入力ファイルごとに出力
コードを生成し、後で名前の結合(ある出力コードでは
変数の名前だけを用いて参照し、別の出力コード中にそ
の変数の領域があるという場合に、参照された部分の名
前を実際の領域のアドレスに書き換える処理)を行うと
いう方法をとっている。
を同時に調べて目的コード中に仮想関数テーブルの実体
を1個だけ生成するという処理を行えればよいが、しか
し全てのプログラムを同時に調べるということは処理時
間,消費メモリ量等の問題から現実的ではない。このた
め、多くのC++処理系では、入力ファイルごとに出力
コードを生成し、後で名前の結合(ある出力コードでは
変数の名前だけを用いて参照し、別の出力コード中にそ
の変数の領域があるという場合に、参照された部分の名
前を実際の領域のアドレスに書き換える処理)を行うと
いう方法をとっている。
【0014】したがって、通常のC++処理系では、各
出力コードにおいてすべて仮想関数テーブルの実体を生
成せざるを得ない。なぜならば、単一の入力ファイルを
対象としている限り、他の入力ファイルに対する出力コ
ードで仮想関数テーブルの実体が生成されているかどう
かはわからないからである。
出力コードにおいてすべて仮想関数テーブルの実体を生
成せざるを得ない。なぜならば、単一の入力ファイルを
対象としている限り、他の入力ファイルに対する出力コ
ードで仮想関数テーブルの実体が生成されているかどう
かはわからないからである。
【0015】
【発明が解決しようとする課題】上述した従来のオブジ
ェクト指向言語処理システムでは、メソッドアドレス格
納テーブルに関しては、実行時に決定されるメソッドの
属するクラスの宣言が入力ファイルに含まれていると、
オブジェクト指向言語処理システムのユーザが特に指定
しない場合は出力コード内にメソッドアドレス格納テー
ブルの実体が必ず生成されていたので、本来、目的コー
ド内に実体がクラス毎に1つ生成されれば十分であるメ
ソッドアドレス格納テーブルがクラスの宣言が取り込ま
れた入力ファイルの数だけ生成され、目的コードのサイ
ズが不必要に大きくなるという問題点があった。
ェクト指向言語処理システムでは、メソッドアドレス格
納テーブルに関しては、実行時に決定されるメソッドの
属するクラスの宣言が入力ファイルに含まれていると、
オブジェクト指向言語処理システムのユーザが特に指定
しない場合は出力コード内にメソッドアドレス格納テー
ブルの実体が必ず生成されていたので、本来、目的コー
ド内に実体がクラス毎に1つ生成されれば十分であるメ
ソッドアドレス格納テーブルがクラスの宣言が取り込ま
れた入力ファイルの数だけ生成され、目的コードのサイ
ズが不必要に大きくなるという問題点があった。
【0016】この問題点に対処するために、オブジェク
ト指向言語処理システムのユーザが、入力ファイルごと
に出力コード内にメソッドアドレス格納テーブルの実体
および宣言を生成するか、あるいはメソッドアドレス格
納テーブルの宣言のみを生成するかを指定し、複数の出
力コード間の参照関係が解決されることにより目的コー
ド内に生成されるメソッドアドレス格納テーブルの実体
の数を減少させるという方法も存在する(AT&T,
“AT&T C++ LANGUAGE SYSTEM
RELEASE 2.1 Release Note
s”,pp.4−16〜4−18)。しかし、クラスの
宣言が入力ファイルに含まれているかどうかを、オブジ
ェクト指向言語処理システムのユーザが判定するのは困
難であるという問題点があった。
ト指向言語処理システムのユーザが、入力ファイルごと
に出力コード内にメソッドアドレス格納テーブルの実体
および宣言を生成するか、あるいはメソッドアドレス格
納テーブルの宣言のみを生成するかを指定し、複数の出
力コード間の参照関係が解決されることにより目的コー
ド内に生成されるメソッドアドレス格納テーブルの実体
の数を減少させるという方法も存在する(AT&T,
“AT&T C++ LANGUAGE SYSTEM
RELEASE 2.1 Release Note
s”,pp.4−16〜4−18)。しかし、クラスの
宣言が入力ファイルに含まれているかどうかを、オブジ
ェクト指向言語処理システムのユーザが判定するのは困
難であるという問題点があった。
【0017】目的コードのサイズを不必要に大きくしな
いためには、メソッドの実行時決定に用いられるメソッ
ドアドレス格納テーブルの数を入力コードの意味が変わ
らない限り少なくすべきである。また、メソッドアドレ
ス格納テーブルの数を減少させる処理は、オブジェクト
指向言語処理システムのユーザの判断によることなく自
動的に行うべきである。
いためには、メソッドの実行時決定に用いられるメソッ
ドアドレス格納テーブルの数を入力コードの意味が変わ
らない限り少なくすべきである。また、メソッドアドレ
ス格納テーブルの数を減少させる処理は、オブジェクト
指向言語処理システムのユーザの判断によることなく自
動的に行うべきである。
【0018】本発明の目的は、上述の点に鑑み、オブジ
ェクト指向言語処理システムが出力コードへのメソッド
アドレス格納テーブルの実体および/または宣言の生成
を制御することにより、目的コード内にメソッドアドレ
ス格納テーブルの実体を1つのみ生成し、目的コードの
大きさを削減するようにしたオブジェクト指向言語処理
システムにおける目的コードサイズ最適化方式を提供す
ることにある。
ェクト指向言語処理システムが出力コードへのメソッド
アドレス格納テーブルの実体および/または宣言の生成
を制御することにより、目的コード内にメソッドアドレ
ス格納テーブルの実体を1つのみ生成し、目的コードの
大きさを削減するようにしたオブジェクト指向言語処理
システムにおける目的コードサイズ最適化方式を提供す
ることにある。
【0019】
【課題を解決するための手段】本発明のオブジェクト指
向言語処理システムにおける目的コードサイズ最適化方
式は、複数の入力ファイルに対して各々に対応する出力
コードを生成した後に複数の出力コード間の参照関係を
解決して1つの目的コードを生成し、かつオブジェクト
指向言語のメソッドの実行時決定を目的コード内に静的
に生成されるメソッドアドレス格納テーブルを使用する
ことによって実現するオブジェクト指向言語処理システ
ムにおいて、クラス宣言の意味解析処理時にメソッドの
所属するクラス名と入力ファイル名とを比較し、一致す
ればメソッドアドレス格納テーブルの実体および宣言を
出力コード内に生成し、一致しなければメソッドアドレ
ス格納テーブルの宣言のみを出力コード内に生成する構
文意味解析部を設けたことを特徴とする。
向言語処理システムにおける目的コードサイズ最適化方
式は、複数の入力ファイルに対して各々に対応する出力
コードを生成した後に複数の出力コード間の参照関係を
解決して1つの目的コードを生成し、かつオブジェクト
指向言語のメソッドの実行時決定を目的コード内に静的
に生成されるメソッドアドレス格納テーブルを使用する
ことによって実現するオブジェクト指向言語処理システ
ムにおいて、クラス宣言の意味解析処理時にメソッドの
所属するクラス名と入力ファイル名とを比較し、一致す
ればメソッドアドレス格納テーブルの実体および宣言を
出力コード内に生成し、一致しなければメソッドアドレ
ス格納テーブルの宣言のみを出力コード内に生成する構
文意味解析部を設けたことを特徴とする。
【0020】
【実施例】次に、本発明について図面を参照して詳細に
説明する。
説明する。
【0021】本発明の一実施例として、オブジェクト指
向言語で記述されたソースプログラムを入力とし、構文
意味解析部においてこれを中間言語形式に変換し、さら
にコード生成部でこれを出力コードに変換してファイル
に出力する、コンパイル方式のオブジェクト指向言語処
理システムの例を挙げる。
向言語で記述されたソースプログラムを入力とし、構文
意味解析部においてこれを中間言語形式に変換し、さら
にコード生成部でこれを出力コードに変換してファイル
に出力する、コンパイル方式のオブジェクト指向言語処
理システムの例を挙げる。
【0022】図1は、本発明の一実施例に係るオブジェ
クト指向言語処理システムにおける目的コードサイズ最
適化方式の構成を示すブロック図である。本実施例のオ
ブジェクト指向言語処理システムにおける目的コードサ
イズ最適化方式は、入力ファイル群11と、構文意味解
析部13およびコード生成部14を含むコンパイラ12
と、出力コード15と、リンカ16と、目的コード17
とから構成されている。
クト指向言語処理システムにおける目的コードサイズ最
適化方式の構成を示すブロック図である。本実施例のオ
ブジェクト指向言語処理システムにおける目的コードサ
イズ最適化方式は、入力ファイル群11と、構文意味解
析部13およびコード生成部14を含むコンパイラ12
と、出力コード15と、リンカ16と、目的コード17
とから構成されている。
【0023】図2を参照すると、構文意味解析部13の
目的コードサイズ最適化処理は、クラス宣言意味解析処
理ステップS1と、メソッドアドレス格納テーブル要否
判定ステップS2と、入力ファイル名/クラス名比較ス
テップS3と、メソッドアドレス格納テーブル実体およ
び宣言生成ステップS4と、メソッドアドレス格納テー
ブル宣言生成ステップS5と、同名入力ファイル存在判
定ステップS6と、クラス宣言存在判定ステップS7
と、クラス宣言包含ステップS8と、コンパイル済判定
ステップS9と、コンパイル未処理設定ステップS10
と、同名入力ファイル作成ステップS11と、クラス宣
言包含ステップS12と、コンパイル未処理設定ステッ
プS13とからなる。
目的コードサイズ最適化処理は、クラス宣言意味解析処
理ステップS1と、メソッドアドレス格納テーブル要否
判定ステップS2と、入力ファイル名/クラス名比較ス
テップS3と、メソッドアドレス格納テーブル実体およ
び宣言生成ステップS4と、メソッドアドレス格納テー
ブル宣言生成ステップS5と、同名入力ファイル存在判
定ステップS6と、クラス宣言存在判定ステップS7
と、クラス宣言包含ステップS8と、コンパイル済判定
ステップS9と、コンパイル未処理設定ステップS10
と、同名入力ファイル作成ステップS11と、クラス宣
言包含ステップS12と、コンパイル未処理設定ステッ
プS13とからなる。
【0024】次に、このように構成された本実施例のオ
ブジェクト指向言語処理システムにおける目的コードサ
イズ最適化方式の動作について説明する。
ブジェクト指向言語処理システムにおける目的コードサ
イズ最適化方式の動作について説明する。
【0025】コンパイラ12は、入力ファイル群11と
して複数の入力ファイルを受け付ける。コンパイラ12
は、入力ファイル群11を構成するすべての入力ファイ
ルについて、1つずつコンパイル処理を行うために構文
意味解析部13およびコード生成部14を起動する。
して複数の入力ファイルを受け付ける。コンパイラ12
は、入力ファイル群11を構成するすべての入力ファイ
ルについて、1つずつコンパイル処理を行うために構文
意味解析部13およびコード生成部14を起動する。
【0026】コンパイラ12において、目的コードサイ
ズ最適化処理は、構文意味解析部13によって行われ
る。
ズ最適化処理は、構文意味解析部13によって行われ
る。
【0027】最初に、構文意味解析部13は、入力ファ
イル内のクラス宣言の意味解析処理を行う(ステップS
1)。詳しくは、クラス宣言のメンバのシンボルテーブ
ルへの登録等を行う。
イル内のクラス宣言の意味解析処理を行う(ステップS
1)。詳しくは、クラス宣言のメンバのシンボルテーブ
ルへの登録等を行う。
【0028】次に、構文意味解析部13は、入力ファイ
ル内のクラス宣言がメソッドアドレス格納テーブルを必
要とするかどうかを調べる(ステップS2)。これは、
入力ファイルに記述されているプログラミング言語の仕
様に基づき、現在処理対象としているクラスがメソッド
の実行時決定を必要とするかどうかにより決定される。
C++処理系の場合、virtualの宣言があるか
(#includeされる場合を含める)どうかに基づ
いて決定する。メソッドアドレス格納テーブルを必要と
しないならば、このクラスに対してこれ以上の処理は行
わない。
ル内のクラス宣言がメソッドアドレス格納テーブルを必
要とするかどうかを調べる(ステップS2)。これは、
入力ファイルに記述されているプログラミング言語の仕
様に基づき、現在処理対象としているクラスがメソッド
の実行時決定を必要とするかどうかにより決定される。
C++処理系の場合、virtualの宣言があるか
(#includeされる場合を含める)どうかに基づ
いて決定する。メソッドアドレス格納テーブルを必要と
しないならば、このクラスに対してこれ以上の処理は行
わない。
【0029】現在処理対象としているクラスがメソッド
アドレス格納テーブルを必要とする場合、構文意味解析
部13は、クラス名と入力ファイル名とが等しいかどう
かを調べる(ステップS3)。ただし、入力ファイル名
にオブジェクト指向言語処理システム自体またはオブジ
ェクト指向言語処理システムがその上で動作する情報処
理システムが定めた付加部分(拡張子)が含まれている
場合は、その付加部分を除いた部分をクラス名と比較す
る。以後、クラス名と入力ファイル名とを比較するとき
はこの処理を行うものとする。
アドレス格納テーブルを必要とする場合、構文意味解析
部13は、クラス名と入力ファイル名とが等しいかどう
かを調べる(ステップS3)。ただし、入力ファイル名
にオブジェクト指向言語処理システム自体またはオブジ
ェクト指向言語処理システムがその上で動作する情報処
理システムが定めた付加部分(拡張子)が含まれている
場合は、その付加部分を除いた部分をクラス名と比較す
る。以後、クラス名と入力ファイル名とを比較するとき
はこの処理を行うものとする。
【0030】クラス名と入力ファイル名とが等しいなら
ば、構文意味解析部13は、出力コード内にメソッドア
ドレス格納テーブルの実体および宣言を生成して(ステ
ップS4)、このクラスに対してこれ以上の処理は行わ
ない。この結果、メソッドアドレス格納テーブルの実体
および宣言は、クラス名と入力ファイル名とが一致する
場合のみ出力コード内に生成されることになる。C++
処理系の場合、出力コード15中のデータセクションに
仮想関数テーブルを生成するとともに、シンボルテーブ
ルにクラスの仮想関数テーブルの属性を生成する(図3
参照)。
ば、構文意味解析部13は、出力コード内にメソッドア
ドレス格納テーブルの実体および宣言を生成して(ステ
ップS4)、このクラスに対してこれ以上の処理は行わ
ない。この結果、メソッドアドレス格納テーブルの実体
および宣言は、クラス名と入力ファイル名とが一致する
場合のみ出力コード内に生成されることになる。C++
処理系の場合、出力コード15中のデータセクションに
仮想関数テーブルを生成するとともに、シンボルテーブ
ルにクラスの仮想関数テーブルの属性を生成する(図3
参照)。
【0031】クラス名と入力ファイル名とが等しくない
場合、構文意味解析部13は、出力コード内にメソッド
アドレス格納テーブルの宣言のみを生成して(ステップ
S5)、クラス名と同名の入力ファイルがコンパイラ1
2に与えられた入力ファイル群11中に存在するかどう
かを調べる(ステップS6)。
場合、構文意味解析部13は、出力コード内にメソッド
アドレス格納テーブルの宣言のみを生成して(ステップ
S5)、クラス名と同名の入力ファイルがコンパイラ1
2に与えられた入力ファイル群11中に存在するかどう
かを調べる(ステップS6)。
【0032】入力ファイル群11中にクラス名と同名の
入力ファイルが存在する場合は、構文意味解析部13
は、クラス名と同名の入力ファイルの内容を調べ、現在
対象としているクラスの宣言が含まれていれるかどうか
を調べる(ステップS7)。クラスの宣言が含まれてい
れば、このクラスに対してこれ以上の処理を行わない。
入力ファイルが存在する場合は、構文意味解析部13
は、クラス名と同名の入力ファイルの内容を調べ、現在
対象としているクラスの宣言が含まれていれるかどうか
を調べる(ステップS7)。クラスの宣言が含まれてい
れば、このクラスに対してこれ以上の処理を行わない。
【0033】クラスの宣言が含まれていなければ、構文
意味解析部13は、クラス名と同名の入力ファイルの内
容を変更して現在対象としているクラスの宣言を含める
(ステップS8)。C++処理系の場合、シンボルテー
ブルにクラスの仮想関数テーブルの属性を生成する(図
3参照)。さらに、すでにコンパイル処理が終了してい
る場合には(ステップS9でイエス)、コンパイラ12
が記録しているコンパイル未処理の入力ファイル群11
に含める(ステップS10)。
意味解析部13は、クラス名と同名の入力ファイルの内
容を変更して現在対象としているクラスの宣言を含める
(ステップS8)。C++処理系の場合、シンボルテー
ブルにクラスの仮想関数テーブルの属性を生成する(図
3参照)。さらに、すでにコンパイル処理が終了してい
る場合には(ステップS9でイエス)、コンパイラ12
が記録しているコンパイル未処理の入力ファイル群11
に含める(ステップS10)。
【0034】ステップS6で、クラス名と同名の入力フ
ァイルがコンパイラ12に与えられた入力ファイル群1
1の中に存在しない場合は、構文意味解析部13は、新
たにクラス名と同名の入力ファイルを作成して(ステッ
プS11)、オブジェクト指向言語処理システムで動作
している情報処理システムの適当な位置に置き、この入
力ファイル内にクラスの宣言を含め(ステップS1
2)、さらにこの入力ファイルをコンパイラ12が記録
しているコンパイル未処理の入力ファイル群11に含め
る(ステップS13)。この場合、新たに作成した入力
ファイルについてコンパイル処理が施される時点で、出
力コード15中にメソッドアドレス格納テーブルの実体
および宣言が生成される。
ァイルがコンパイラ12に与えられた入力ファイル群1
1の中に存在しない場合は、構文意味解析部13は、新
たにクラス名と同名の入力ファイルを作成して(ステッ
プS11)、オブジェクト指向言語処理システムで動作
している情報処理システムの適当な位置に置き、この入
力ファイル内にクラスの宣言を含め(ステップS1
2)、さらにこの入力ファイルをコンパイラ12が記録
しているコンパイル未処理の入力ファイル群11に含め
る(ステップS13)。この場合、新たに作成した入力
ファイルについてコンパイル処理が施される時点で、出
力コード15中にメソッドアドレス格納テーブルの実体
および宣言が生成される。
【0035】コンパイラ12により複数の出力コード1
5が出力された後、リンカ16は、複数の出力コード1
5間の参照関係を解決して1つの目的コード17を生成
する。
5が出力された後、リンカ16は、複数の出力コード1
5間の参照関係を解決して1つの目的コード17を生成
する。
【0036】図3は、入力ファイルX.h,X.Cおよ
びa.Cと出力コードX.oおよびa.oの一例を示す
図である。入力ファイルX.Cおよびa.Cにおいてヘ
ッダファイルX.hがインクルードされている。クラス
名Xと入力ファイル名X.Cの付加部分を除いたものと
が一致するので、出力コードX.oにはクラスXの仮想
関数テーブルの実体および宣言が生成されている。ま
た、クラス名Xと入力ファイル名a.Cの付加部分を除
いたものとが一致しないので、出力コードa.oにはク
ラスXの仮想関数テーブルの宣言のみが生成されてい
る。
びa.Cと出力コードX.oおよびa.oの一例を示す
図である。入力ファイルX.Cおよびa.Cにおいてヘ
ッダファイルX.hがインクルードされている。クラス
名Xと入力ファイル名X.Cの付加部分を除いたものと
が一致するので、出力コードX.oにはクラスXの仮想
関数テーブルの実体および宣言が生成されている。ま
た、クラス名Xと入力ファイル名a.Cの付加部分を除
いたものとが一致しないので、出力コードa.oにはク
ラスXの仮想関数テーブルの宣言のみが生成されてい
る。
【0037】
【発明の効果】以上説明したように本発明は、オブジェ
クト指向言語処理システムの構文意味解析部に出力コー
ド内へのメソッドアドレス格納テーブルの実体および/
または宣言の生成の選択をオブジェクト指向言語処理シ
ステム自体が行う機能を設け、目的コード内にメソッド
アドレス格納テーブルの実体を1つのみ生成するように
したことにより、オブジェクト指向言語処理システムの
ユーザが困難な解析を行うことなく、目的コードのサイ
ズを削減することができるという効果がある。
クト指向言語処理システムの構文意味解析部に出力コー
ド内へのメソッドアドレス格納テーブルの実体および/
または宣言の生成の選択をオブジェクト指向言語処理シ
ステム自体が行う機能を設け、目的コード内にメソッド
アドレス格納テーブルの実体を1つのみ生成するように
したことにより、オブジェクト指向言語処理システムの
ユーザが困難な解析を行うことなく、目的コードのサイ
ズを削減することができるという効果がある。
【図1】本発明の一実施例に係るオブジェクト指向言語
処理システムにおける目的コードサイズ最適化方式の構
成を示すブロック図である。
処理システムにおける目的コードサイズ最適化方式の構
成を示すブロック図である。
【図2】図1中の構文意味解析部における目的コードサ
イズ最適化処理を示す流れ図である。
イズ最適化処理を示す流れ図である。
【図3】図1中の入力ファイルおよび出力コードの一例
を示す図である。
を示す図である。
11 入力ファイル群 12 コンパイラ 13 構文意味解析部 14 コード生成部 15 出力コード 16 リンカ 17 目的コード
Claims (3)
- 【請求項1】 複数の入力ファイルに対して各々に対応
する出力コードを生成した後に複数の出力コード間の参
照関係を解決して1つの目的コードを生成し、かつオブ
ジェクト指向言語のメソッドの実行時決定を目的コード
内に静的に生成されるメソッドアドレス格納テーブルを
使用することによって実現するオブジェクト指向言語処
理システムにおいて、 クラス宣言の意味解析処理時にメソッドの所属するクラ
ス名と入力ファイル名とを比較し、一致すればメソッド
アドレス格納テーブルの実体および宣言を出力コード内
に生成し、一致しなければメソッドアドレス格納テーブ
ルの宣言のみを出力コード内に生成する構文意味解析部
を設けたことを特徴とするオブジェクト指向言語処理シ
ステムにおける目的コードサイズ最適化方式。 - 【請求項2】 前記クラス名と入力ファイル名とが一致
しない場合は、オブジェクト指向言語処理システムが処
理対象としているすべての入力ファイル名を調べ、入力
ファイル名がクラス名と一致する入力ファイルがあれば
その入力ファイルの内容を走査し、現在対象としている
クラスの宣言が含まれていなければその入力ファイル内
にクラスの宣言を含め、入力ファイル名がクラス名と一
致する入力ファイルがなければクラス名と同名の入力フ
ァイルを作成し、この入力ファイルにクラスの宣言を含
めるとともにこの入力ファイルを入力ファイル群に含め
る請求項1記載の目的コードサイズ最適化方式。 - 【請求項3】 前記オブジェクト指向言語がC++でな
り、前記メソッドアドレス格納テーブルが仮想関数テー
ブルでなる請求項1または2記載のオブジェクト指向言
語処理システムにおける目的コードサイズ最適化方式。
Priority Applications (1)
| Application Number | Priority Date | Filing Date | Title |
|---|---|---|---|
| JP5080164A JPH06266562A (ja) | 1993-03-15 | 1993-03-15 | オブジェクト指向言語処理システムにおける目的コードサイズ最適化方式 |
Applications Claiming Priority (1)
| Application Number | Priority Date | Filing Date | Title |
|---|---|---|---|
| JP5080164A JPH06266562A (ja) | 1993-03-15 | 1993-03-15 | オブジェクト指向言語処理システムにおける目的コードサイズ最適化方式 |
Publications (1)
| Publication Number | Publication Date |
|---|---|
| JPH06266562A true JPH06266562A (ja) | 1994-09-22 |
Family
ID=13710685
Family Applications (1)
| Application Number | Title | Priority Date | Filing Date |
|---|---|---|---|
| JP5080164A Pending JPH06266562A (ja) | 1993-03-15 | 1993-03-15 | オブジェクト指向言語処理システムにおける目的コードサイズ最適化方式 |
Country Status (1)
| Country | Link |
|---|---|
| JP (1) | JPH06266562A (ja) |
Cited By (2)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| US6851106B1 (en) | 1998-02-20 | 2005-02-01 | Hitachi, Ltd. | Object oriented optimizing code generator with user selection of use or do not use for dynamic generation of functions |
| JP2006163686A (ja) * | 2004-12-06 | 2006-06-22 | Matsushita Electric Ind Co Ltd | コンパイル方法、コンパイルプログラム、コンパイル装置およびコンパイル用の記録媒体 |
-
1993
- 1993-03-15 JP JP5080164A patent/JPH06266562A/ja active Pending
Cited By (3)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| US6851106B1 (en) | 1998-02-20 | 2005-02-01 | Hitachi, Ltd. | Object oriented optimizing code generator with user selection of use or do not use for dynamic generation of functions |
| JP2006163686A (ja) * | 2004-12-06 | 2006-06-22 | Matsushita Electric Ind Co Ltd | コンパイル方法、コンパイルプログラム、コンパイル装置およびコンパイル用の記録媒体 |
| US7624390B2 (en) | 2004-12-06 | 2009-11-24 | Panasonic Corporation | Optimizing compiling of object oriented source code |
Similar Documents
| Publication | Publication Date | Title |
|---|---|---|
| CN100385399C (zh) | 用于多个异常处理模型的中间表示的方法和系统 | |
| US6901579B1 (en) | Generation of source code from classes and maintaining the comment that indicates the role of the class in the generated source code | |
| US6662354B1 (en) | Determining destinations of a dynamic branch | |
| EP0664027B1 (en) | Program modeling system | |
| US5361357A (en) | Method and apparatus for optimizing computer file compilation | |
| US5832273A (en) | System for deleting redundant instructions from high level language source code containing in-line assembly instructions | |
| US7028291B2 (en) | Debugging method and debugging device | |
| US7386843B2 (en) | Method and system for register allocation | |
| US7624390B2 (en) | Optimizing compiling of object oriented source code | |
| EP0790555A2 (en) | Compile apparatus and method | |
| JPH06266562A (ja) | オブジェクト指向言語処理システムにおける目的コードサイズ最適化方式 | |
| JP3266097B2 (ja) | 非リエントラントプログラムの自動リエントラント化方法及びシステム | |
| JPH09218789A (ja) | 分割コンパイル方式 | |
| US6954926B1 (en) | Label address translating device | |
| JP3018783B2 (ja) | コンパイル方式 | |
| JPH0695890A (ja) | コンパイラにおける名前置換方式 | |
| JP2000112770A (ja) | プログラム翻訳装置 | |
| JP2002055852A (ja) | オブジェクトの生成・消滅情報管理方式 | |
| JPH03186933A (ja) | 言語処理システムのシンボル処理方式 | |
| JP2001290674A (ja) | プログラム中断点設定装置および方法 | |
| JP2005242879A (ja) | 性能情報取得装置および方法ならびに制御プログラム | |
| JPH04250530A (ja) | プログラム変換/翻訳装置 | |
| JPH07105014A (ja) | 言語処理システムのシンボル処理方式 | |
| JPH0566949A (ja) | 関数定義コンパイルドコード呼出し方式 | |
| JP2002091778A (ja) | プログラム変換装置、プログラム変換方法及び記録媒体 |