JP3672207B2 - プログラム変換装置 - Google Patents

プログラム変換装置 Download PDF

Info

Publication number
JP3672207B2
JP3672207B2 JP12560797A JP12560797A JP3672207B2 JP 3672207 B2 JP3672207 B2 JP 3672207B2 JP 12560797 A JP12560797 A JP 12560797A JP 12560797 A JP12560797 A JP 12560797A JP 3672207 B2 JP3672207 B2 JP 3672207B2
Authority
JP
Japan
Prior art keywords
override
class
instruction
instruction sequence
information
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.)
Expired - Fee Related
Application number
JP12560797A
Other languages
English (en)
Other versions
JPH10320204A (ja
Inventor
俊幸 坂田
秀一 高山
宣輝 富永
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.)
Panasonic Corp
Panasonic Holdings Corp
Original Assignee
Panasonic Corp
Matsushita Electric Industrial Co Ltd
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 Panasonic Corp, Matsushita Electric Industrial Co Ltd filed Critical Panasonic Corp
Priority to JP12560797A priority Critical patent/JP3672207B2/ja
Publication of JPH10320204A publication Critical patent/JPH10320204A/ja
Application granted granted Critical
Publication of JP3672207B2 publication Critical patent/JP3672207B2/ja
Anticipated expiration legal-status Critical
Expired - Fee Related legal-status Critical Current

Links

Images

Landscapes

  • Devices For Executing Special Programs (AREA)

Description

【0001】
【発明の属する技術分野】
本発明はプログラムを翻訳するプログラム変換装置等に関し、特に、オブジェクト指向言語のオーバーライドメソッド呼び出し命令のコードサイズを縮小し、実行速度を向上させるプログラム変換装置等に関する。
【0002】
【従来の技術】
オブジェクト指向言語には、多様性を構築する特別なメソッドとしてオーバーライドメソッドがある。オーバーライドメソッドとは、例えば、クラスAとクラスAを継承するクラスBがそれぞれ同じ型のメソッドfを持ちクラスBのオブジェクトに対してメソッドfを呼び出すと、その呼び出しがクラスAへのポインタやリファレンスを経由していてもクラスBのメソッドfが呼び出されるような機能を持つメソッドを言う。また、このような機能をオーバーライド機能と言う。
【0003】
オブジェクト指向言語C++(以下「C++言語」と言う)ではオーバーライドメソッドは仮想関数と呼ばれ、関数の先頭にvirtual指定子を付加することにより指定できる。また、C++言語ではメソッドは関数であり、関数fをクラスAで仮想関数に指定すればそのクラスAを継承するクラスBでもその関数fは自動的に仮想関数となる。
【0004】
また、オブジェクト指向言語Java(以下「Java言語」と言う)ではメソッドはデフォルトでオーバーライドメソッドとなる。
従来のオブジェクト指向言語のオーバーライドメソッド呼び出しの実現方法について、「注釈C++リファレンスマニュアル」(B.ストラウストラップ著トッパンISBN4−8101−8027−110.7c)の例を用いて説明する。
【0005】
図12はC++言語の仮想関数を含むクラス定義を示す図である。図中のvirtual指定子が先頭についている関数及びそれを継承した関数が仮想関数である。したがって、クラスAの関数f,g及びh、クラスBの関数f、g及びh並びにクラスCの関数f,g及びhが仮想関数である。
図13は、図12に示したクラスの継承関係を表す図である。クラスAはクラスBに継承され、さらにクラスBはクラスCに継承されている。
【0006】
図14は、図12に示したクラスで作成したオブジェクトのメモリ配置をクラス別に示す図である。クラスAを例にとると、一般に、メソッドアドレステーブル「A_vtbl」をオブジェクト外に配置し、このメソッドアドレステーブルのアドレス「A_vptr」のみをオブジェクト内に配置する。オブジェクト毎にメソッドアドレステーブルを配置しないので、同じクラスのオブジェクトを複数作成した場合にメモリのサイズがそれらの重複分だけ節約できる。ここで、「&A::f」はクラスAで定義された仮想関数fのアドレスを表す。仮想関数fを呼び出す場合は、まずオブジェクト内のメソッドアドレステーブル「A_vtbl」のアドレス「A_vptr」に基づいてこのメソッドアドレステーブル内の仮想関数のアドレス「&A::f」を読み出し、その後にこのアドレスを呼び出す事になる。
【0007】
図15はクラスCの仮想関数hの呼び出しを含む関数iをC++言語で記述した例を示す図である。ここで、iの引数はクラスCのオブジェクトへのポインタである。
図16は、図15の関数iを従来のプログラム変換装置で機械語命令列に 変換した例を示す図である。関数iは引数であるオブジェクトへのポインタをレジスタr0上に保持した状態で呼び出される。
【0008】
まず、クラスCのオブジェクトの中の仮想関数hへのポインタを命令「mov(r0+4),r1」でr1レジスタに転送する。次にこれを用いてメソッドアドレステーブル内のオフセット8を加算したところにある仮想関数hの実アドレス「&C::h」を命令「mov(r1+8),r1」でr1レジスタに転送し、命令「jsr r1」でr1のアドレスへ分岐している。ここで、命令「mov(r0+d),r1」はr0のアドレスにdを加算したアドレスで示されるメモリの内容をr1に読み出す命令を表し、命令「jsr r1」はr1のアドレスに分岐するサブルーチンコール命令を表し、命令「rts」は関数iからの復帰命令を表す。
【0009】
図17は、上記の関数hが仮想関数でない関数(以下「非仮想関数」と言う)として定義されていたと仮定した場合に、関数hの呼び出しを含む関数iを機械語命令列に変換した例を示す図である。
図16と図17を比較すると、仮想関数の呼び出しは4命令、非仮想関数の呼び出しは2命令である。
【0010】
【発明が解決しようとする課題】
しかしながら、上記のような従来のオブジェクト指向言語のオーバーライドメソッド呼び出しの実現方法は、オーバーライドメソッドに指定されたものは全て同様に処理するので、オーバーライド機能を使わないメソッドをオーバーライドメソッドに指定すると機械語命令列のコードサイズが大きくなり実行速度が遅くなるという問題点がある。
【0011】
また、プログラマがオーバーライド機能を使わないメソッドの全てをオーバーライドメソッドでないメソッド(以下「非オーバーライドメソッド」と言う)に指定するのは、いちいちオーバーライド機能を使うかどうかを考慮したり、設計段階でオーバーライド機能を使うかどうかを確定できないメソッドを後で非オーバーライドメソッドに指定したりしなければならず、プログラマの負担が大きくなる。
【0012】
さらに、java言語ではメソッドがオーバーライドメソッドでないことを表すfinal指定子が用意されているが、C++言語ではオーバーライドメソッドでないことを表す指定子が無いので、あるメソッドをクラスAでオーバーライドメソッドに指定すると、そのクラスAを継承するクラスBでそのメソッドを非オーバーライドメソッドに指定することができない。
【0013】
そこで、本発明はかかる問題点に鑑み、オブジェクト指向言語のオーバーライドメソッド呼び出し命令のコードサイズを縮小し、実行速度を向上させるプログラム変換装置を提供することを目的とする。
【0014】
【課題を解決するための手段】
本発明に係るプログラム変換装置は、オーバーライドメソッドを含むクラスの定義とオーバーライドメソッド呼び出し命令が含まれるオブジェクト指向言語のプログラムを機械語命令列に翻訳して実行ファイルを生成するプログラム変換装置であって、前記クラスの定義に基づいて全てのクラスの継承関係を継承関係情報として抽出する抽出手段と、全ての前記継承関係情報に基づいて前記オーバーライドメソッド呼び出し命令によって呼び出されるメソッドが属するクラスが継承されるか否かを判断する判断手段と、前記判断手段で継承されないと判断された場合に前記オーバーライドメソッド呼び出し命令をオーバーライドメソッドでない場合の機械語命令列に翻訳するメソッド翻訳手段を備えることを特徴とする。
【0015】
本発明は,1つの入力ファイルにプログラムの実行に必要な全てのクラス定義が含まれている場合に、全てのクラスの継承関係に基づいてオーバーライドメソッド呼び出し命令をオーバーライドメソッドでない場合もしくはオーバーライドメソッドである場合のどちらかに翻訳するという方法をとる。
これによって、あるクラスが他のクラスに全く継承されない場合にそのクラスで定義されるオーバーライドメソッドがオーバーライド機能を使うことができないという性質を利用して、オーバーライドメソッド呼び出し命令をオーバーライドメソッドでない場合の命令列に翻訳することができる。即ち、間接呼び出しを直接呼び出しにすることができる。
【0016】
また、本発明に係るプログラム変換装置は、オーバーライドメソッドを含むクラスの定義とオーバーライドメソッド呼び出し命令が含まれるオブジェクト指向言語のプログラムをファイル単位で機械語命令列に翻訳し出力ファイルとして出力する翻訳装置と、前記翻訳装置で翻訳された出力ファイルを連結して実行ファイルを生成する連結装置とを備えるプログラム変換装置であって、前記オブジェクト指向言語のプログラムにはオーバーライドメソッドを含むクラスの定義とオーバーライドメソッド呼び出し命令が含まれ、前記翻訳装置は、前記クラスの定義に基づいてファイル単位のクラスの継承関係を継承関係情報に翻訳する継承関係翻訳手段と、前記オーバーライドメソッド呼び出し命令をこの命令によって呼び出されるメソッドが属するクラスを表すメソッドクラス情報とこの命令によって呼び出されるメソッドがオーバーライドメソッドでない場合の機械語命令列を表す非オーバーライド情報とオーバーライドメソッドである場合の機械語命令列を表すオーバーライド情報とを含むメソッド命令列に翻訳するメソッド翻訳手段とを備え、前記連結装置は、前記翻訳装置で翻訳された全ての出力ファイルの中の全ての前記継承関係情報に基づいて前記オーバーライドメソッド呼び出し命令によって呼び出されるメソッドが属するクラスが継承されるか否かを判断する判断手段と、前記メソッド命令列を前記判断手段で継承されないと判断された場合にはオーバーライドメソッドでない場合の機械語命令列だけに置換し、一方、継承されると判断された場合にはオーバーライドメソッドである場合の機械語命令列だけに置換する置換手段とを備えることを特徴とする。
【0017】
入力ファイルが複数の場合、翻訳装置ではファイル単位のクラスの継承関係が判るだけで全てのクラスの継承関係は判らない。また、従来の連結装置ではクラスの継承関係は全く判らない。
本発明は、翻訳装置でファイル単位のクラスの継承関係を継承関係情報に翻訳し、連結装置で全ての前記継承関係情報を参照するので、連結装置において全てのクラスの継承関係が判る。さらに、翻訳装置でオーバーライドメソッド呼び出し命令を、オーバーライドメソッドでない場合とオーバーライドメソッドである場合の両方の命令列に翻訳し、連結装置でどちらかを選択するという方法をとる。
【0018】
これによって、あるクラスが他のクラスに全く継承されない場合にそのクラスで定義されるオーバーライドメソッドがオーバーライド機能を使うことができないという性質を利用して、オーバーライドメソッド呼び出し命令をオーバーライドメソッドでない場合の命令列に翻訳することができる。即ち、間接呼び出しを直接呼び出しにすることができる。
【0019】
【発明の実施の形態】
以下、本発明の実施の形態について、図面を用いて説明する。
図1は本発明のプログラム変換装置の構成を示す図である。便宜上、図1には入力ファイルA101、B102、出力ファイルA108、B109及び実行ファイル115も併せて記載している。ここで、この入力ファイルA101及びB102は高級言語で書かれたソースプログラムである。また、この出力ファイルA108及びB109は各入力ファイルを翻訳した機械語命令列である。さらに、この実行ファイル115はこの2つの出力ファイルを連結し、生成した機械語命令列である。なお、ここで言うファイルとは、入出力の単位となるソースプログラムや機械語命令列の集まりを指す。
【0020】
本装置は大別すると、翻訳部103及び連結部110で構成されている。
翻訳部103はファイル単位で実施され、クラス定義毎にクラスの継承関係を継承関係疑似命令に翻訳し、オーバーライドメソッド呼び出し命令を、この命令によって呼び出されるメソッドが属するクラスを表すメソッドクラス疑似命令、この命令によって呼び出されるメソッドがオーバーライドメソッドでない場合の機械語命令列及びオーバーライドメソッドである場合の機械語命令列に翻訳し、その他の翻訳しなかった命令を機械語命令列に翻訳し、出力ファイルとして出力する。
【0021】
ここでは、入力ファイルA101の入力により出力ファイルA108を、入力ファイルB102の入力により出力ファイルB109を出力する。
翻訳部103は、継承関係翻訳部104、メソッド呼び出し検出部105、メソッド翻訳部106及び命令翻訳部107を備えている。
継承関係翻訳部104はクラス定義毎に、クラスの継承関係を継承関係疑似命令に翻訳する。
【0022】
メソッド呼び出し検出部105は入力ファイル内のオーバーライドメソッド呼び出し命令を検出する。
メソッド翻訳部106は、メソッド呼び出し検出部105で検出されたオーバーライドメソッド呼び出し命令をメソッド命令列に翻訳する。ここでメソッド命令列は、この命令によって呼び出されるメソッドが属するクラスを表すメソッドクラス疑似命令、この命令によって呼び出されるメソッドがオーバーライドメソッドでない場合の機械語命令列、オーバーライドメソッドである場合の機械語命令列及びこれらを識別する疑似命令の総称とする。
【0023】
命令翻訳部107は、前記メソッド翻訳部106で翻訳しなかった命令を機械語命令列に翻訳する。
連結部110は翻訳部103で翻訳された出力ファイルの全てを、置換し連結して実行ファイルを生成する。ここでは、出力ファイルA108及びB109の入力により実行ファイル115を出力する。
【0024】
連結部110は、メソッド命令列検出部111、継承クラス判定部112、メソッド置換部113及びファイル連結部114を備えている。
メソッド命令列検出部111は入力された全ての出力ファイルの中から、メソッド翻訳部106により翻訳されたメソッド命令列を検出する。
継承クラス判定部112は、メソッド命令列検出部111で検出されたメソッド命令列中のメソッドクラス疑似命令からそのメソッドの属するクラスを認識し、そのクラスが他のクラスに継承されるかどうかを、全ての出力ファイル中の全ての継承関係疑似命令に基づいて判定する。
【0025】
メソッド置換部113は、メソッド命令列検出部111で検出されたメソッド命令列を、継承クラス判定部112によってメソッド命令列の属するクラスが継承されないクラスであると判定された場合にはオーバーライドメソッドでない場合の機械語命令列だけに置換し、逆に、継承されるクラスと判定された場合にはオーバーライドメソッドである場合の機械語命令列だけに置換し、全ての置換後全ての継承関係疑似命令を消去する。
【0026】
ファイル連結部114は、メソッド置換部113で置換されたファイルの全てを連結して実行ファイルを生成する。
図1のように構成したプログラム作成装置の動作をC++言語のプログラムを用いて説明する。
図2はC++言語の仮想関数を含むクラスXの定義、クラスXを継承するクラスYの定義、クラスXを継承するクラスZの定義、関数void i(Y*)の定義及び関数void j(Z*)の定義を示す図である。ここでは、図1中の入力ファイルA101に納められる。
【0027】
図3は、図2に示したクラスの継承関係を表す図である。クラスXはクラスY及びクラスZに継承されている。
図4はC++言語の仮想関数を含むクラスXの定義、クラスXを継承するクラスYの定義、クラスXを継承するクラスZの定義、クラスZを継承するクラスWの定義及び関数void k(W*)の定義を示す図である。ここでは、図1中の入力ファイルB102に納められる。なお、簡単のために説明に関係しないメソッドの定義、プログラム及び以後の処理内容の表記は省略する。ただし、プログラムの実行に必要なクラスの定義はすべて表記されているものとする。
【0028】
図5は、図4に示したクラスの継承関係を表す図である。クラスXはクラスY及びクラスZに、クラスZはクラスWに継承されている。
入力ファイルA101には図2に示したC++言語のソースプログラムが、入力ファイルB102には図4に示したC++言語のソースプログラムが納められている。
【0029】
翻訳部103は図2に示した入力ファイルA101の入力により、図6で示した出力ファイルA108を出力する。
同様にして、翻訳部103は図4に示した入力ファイルB102の入力により、図7で示した出力ファイルB109を出力する。
連結部110は、図6に示した出力ファイルA108及び図7に示した出力ファイルB109の入力により、図8で示した実行ファイル115を出力する。
【0030】
また、ここで用いられている機械語命令列等の意味は以下のとうりである。
.BASE name : nameで表されるクラスが、別のクラスから継承されていることを表す継承関係疑似命令である。
_i_FP1Y : 関数void i(Y*)のアドレスを表すラベルである。
【0031】
.METHOD S : メソッド命令列の先頭を表す疑似命令である。
.CLASS name : メソッドの属するクラスを表すメソッドクラス疑似命令である。
jsr Label : Labelで表されるアドレスに分岐するサブルーチンコール命令である。
【0032】
_h_1Y : クラスYの仮想関数void h(void)のアドレスを表すラベルである。
.METHOD M : オーバーライドメソッドでない場合の命令列とオーバーライドメソッドである場合の命令列を区切る疑似命令である。
mov(r0+4),r1: r0+4をアドレスとするメモリの内容をr1にロードする転送命令である。
【0033】
mov(r1+0),r1: r1をアドレスとするメモリの内容をr1にロードする転送命令である。
jsr r1 : レジスタr1に格納されたアドレスに分岐するサブルーチンコール命令である。
.METHOD E : メソッド命令列の終端を表す疑似命令である。
【0034】
rts : 関数からの復帰命令である。
_j_FP1Z : 関数void j(Z*)のアドレスを表すラベルである。
_h_1Z : クラスZの仮想関数void h(void)のアドレスを表すラベルである。
【0035】
_k_FP1W : 関数void k(W*)のアドレスを表すラベルである。
_h_1W : クラスWの仮想関数void h(void)のアドレスを表すラベルである。
ここから、翻訳部103の詳細な動作について説明する。
【0036】
図9は翻訳部103の動作フローチャートを示す図である。
まず、入力ファイルA101が入力される。ここでは、図2に示したC++言語のプログラムが入力された場合を考える(ステップ901)。
次に、継承関係翻訳部104の処理が終了したかどうかを判定する。終了してなければクラス情報を取得しに行き、終了していたらメソッド呼び出し検出部105の処理へ行く。ここでは、クラスX、クラスY及びクラスZの定義毎に順次クラス情報を取得しに行き、その後メソッド呼び出し検出部105の処理へ行く(ステップ902)。
【0037】
未処理のクラス定義がある場合は、クラス定義毎にクラス情報を取得する。ここでは、クラスX、クラスY及びクラスZの定義毎に順次クラス情報を取得する(ステップ903)。
次に、取得したクラス定義毎のクラス情報からこのクラスが他のクラスを継承しているかどうかを判定する。Yesなら継承関係を翻訳しに行き、Noなら終了判定へ戻る。ここでは、クラスXの場合は他のクラスを継承していないので終了判定へ戻り、クラスY及びクラスZの場合はクラスXを継承しているので順次継承関係を翻訳しに行く(ステップ904)。
【0038】
このクラスが他のクラスを継承している場合は、クラスの継承関係を継承関係疑似命令に翻訳する。ここでは、クラスY及びクラスZがクラスXを継承しているので継承しているクラス名を継承関係疑似命令「.BASE 1X」に翻訳し、終了判定へ戻る(ステップ905)。なお、継承関係疑似命令は、継承されるクラスのクラス名と継承するクラスのクラス名とをペアで表すものであってもよい。この様にすると、全てのクラスの継承関係を連結装置で完全に再現できるので、全てのクラスの継承関係はもとより、オーバーライドメソッド呼び出し命令をオーバーライドメソッドでない場合の命令列に翻訳した場合にその根拠となった情報等を参照用に出力することもできる。
【0039】
継承関係翻訳部104の処理が終了すると、次に、メソッド呼び出し検出部105の処理が終了したかどうかを判定する。終了してなければオーバーライドメソッド呼び出し命令を検出しに行き、終了していたら従来の翻訳処理へ行く。ここでは、関数「void i(Y*)」の仮想関数呼び出し命令及び関数「void j(Z*)」の仮想関数呼び出し命令について順次命令を検出しに行き、その後従来の翻訳処理へ行く(ステップ906)。
【0040】
未処理のオーバーライドメソッド呼び出し命令がある場合は、これを検出する。ここでは、関数「void i(Y*)」及び関数「void j(Z*)」の仮想関数呼び出し命令を順次検出し、メソッド命令列に翻訳しに行く(ステップ907)。
次に、検出されたオーバーライドメソッド呼び出し命令をメソッド翻訳部106がメソッド命令列に翻訳する。ここでは、関数「void i(Y*)」及び関数「void j(Z*)」の仮想関数呼び出し命令をメソッド命令列に順次翻訳し、終了判定へ戻る(ステップ908)。ここで、関数「void i(Y*)」のメソッド命令列は、図6で示される出力ファイルA108前半の「.METHOD S」で始まり「.METHOD E」で終了する部分である。このメソッド命令列に含まれている「.CLASS 1Y」はこの命令によって呼び出されるメソッドがクラスYに属することを表すメソッドクラス疑似命令であり、「.CLASS 1Y」と「.METHOD M」の間にある機械語命令列はこの命令によって呼び出されるメソッドがオーバーライドメソッドでない場合の機械語命令列であり、「.METHOD M」と「.METHOD E」の間にある機械語命令列はオーバーライドメソッドである場合の機械語命令列である。なお、機械語命令列を生成する方法は従来と同様なので説明を省略する。また、関数「void j(Z*)」のメソッド命令列は関数「void i(Y*)」と同様なので説明を省略する。
【0041】
図10はメソッド命令列を示す図である。
なお、メソッド命令列は常に同じ形式となるので図10(a)に示すメソッド命令列を、図10(b)に示すようにメソッドクラス疑似命令及び1つのマクロ命令で表してもよいし、図10(c)に示すようにメソッドクラス疑似命令の情報も含め1つのマクロ命令で表してもよい。ここで、図10(b)でマクロ名「jsrv」の後ろに順に出力しているのは、オーバーライドメソッド呼び出し命令によって呼び出されるメソッドがオーバーライドメソッドでない場合に呼び出すラベル名、オーバーライドメソッドである場合に使用するオブジェクトの先頭からのオフセット値、オーバーライドメソッドである場合に使用するメソッドアドレス格納テーブルの先頭からのオフセット値及びオーバーライドメソッドである場合に使用するレジスタ名であり、図10(c)でマクロ名「jsrw」の後ろに順に出力しているのは、オーバーライドメソッド呼び出し命令によって呼び出されるメソッドの属するクラス名、このオーバーライドメソッド呼び出し命令によって呼び出されるメソッドがオーバーライドメソッドでない場合に呼び出すラベル名、オーバーライドメソッドである場合に使用するオブジェクトの先頭からのオフセット値、オーバーライドメソッドである場合に使用するメソッドアドレス格納テーブルの先頭からのオフセット値及びオーバーライドメソッドである場合に使用するレジスタ名である。なお、オーバーライドメソッドである場合に使用するレジスタ名は固定しておけば必ずしも必要ではない。
【0042】
メソッド呼び出し検出部105の処理が終了すると、次に、メソッド翻訳部106で翻訳しなかった命令を命令翻訳部107が機械語命令列に翻訳する。なお、この処理は従来の翻訳装置が行なう処理と異ならないので詳しい説明を省略する(ステップ909)。
次に、出力ファイルA108を出力する。ここでは、図6に示した出力ファイルを出力する(ステップ910)。
【0043】
続いて、入力ファイルB102が入力される。ここでは、図4に示したC++言語のプログラムが入力された場合を考える(ステップ901)。
次に、クラスX、クラスY、クラスZ及びクラスWの定義毎に順次クラス情報を取得しに行き、その後メソッド呼び出し検出部105の処理へ行く(ステップ902)。
【0044】
未処理のクラス定義がある場合は、クラスX、クラスY、クラスZ及びクラスWの定義毎に順次クラス情報を取得する(ステップ903)。
次に、クラスXの場合は他のクラスを継承していないので終了判定へ戻り、クラスY及びクラスZの場合はクラスXを継承し、クラスWの場合はクラスZを継承しているので順次継承関係を翻訳しに行く(ステップ904)。
【0045】
クラスY及びクラスZがクラスXを継承しているので継承しているクラス名を継承関係疑似命令「.BASE 1X」に翻訳し、クラスWがクラスZを継承しているので継承しているクラス名を継承関係疑似命令「.BASE 1Z」に翻訳し、順次終了判定へ戻る(ステップ905)。
継承関係翻訳部104の処理が終了すると、次に、関数「void k(W*)」の仮想関数呼び出し命令について命令を検出しに行き、その後従来の翻訳処理へ行く(ステップ906)。
【0046】
未処理のオーバーライドメソッド呼び出し命令がある場合は、関数「voidk(W*)」の仮想関数呼び出し命令を検出し、メソッド命令列に翻訳しに行く(ステップ907)。
次に、関数「void k(W*)」の仮想関数呼び出し命令をメソッド命令列に翻訳し、終了判定へ戻る(ステップ908)。関数「void k(Z*)」のメソッド命令列は関数「void i(Y*)」と同様なので説明を省略する。
【0047】
メソッド呼び出し検出部105の処理が終了すると、次に、メソッド翻訳部106で翻訳しなかった命令を命令翻訳部107が機械語命令列に翻訳する。なお、この処理は従来の翻訳装置が行なう処理と異ならないので詳しい説明を省略する(ステップ909)。
次に、出力ファイルB109を出力する。ここでは、図7に示した出力ファイルを出力する(ステップ910)。
【0048】
続いて、連結部110の詳細な動作について説明する。
図11は連結部110の動作フローチャートを示す図である。
まず、出力ファイルA108及び出力ファイルB109が入力される。ここでは、図6に示した出力ファイル及び図4に示した出力ファイルが入力された場合を考える(ステップ1101)。
【0049】
次に、メソッド命令列検出部111の処理が終了したかどうかを判定する。終了してなければ命令列を検出しに行き、終了していたら承継関係疑似命令を消去しに行く。ここでは、関数「void i(Y*)」のメソッド命令列、関数「void j(Z*)」のメソッド命令列及び関数「void k(W*)」のメソッド命令列について順次命令列を検出しに行き、その後承継関係疑似命令を消去しに行く(ステップ1102)。
【0050】
未処理のメソッド命令列がある場合は、入力された全ての出力ファイルの中からメソッド命令列を検出する。ここでは、関数「void i(Y*)」、関数「void j(Z*)」及び関数「void k(W*)」のメソッド命令列を順次検出し、そのクラスが継承されるかを判定に行く(ステップ1103)。次に、検出されたメソッド命令列中のメソッドクラス疑似命令からそのメソッドの属するクラスを認識し、そのクラスが他のクラスに継承されるかどうかを、全ての出力ファイル中の全ての継承関係疑似命令に基づいて判定する。ここでは、まず、関数「void i(Y*)」のメソッド命令列中のメソッドクラス疑似命令「.CLASS 1Y」からクラスYを認識し、全ての出力ファイル中の全ての継承関係疑似命令「.BASE 1X」及び「.BASE 1Z」に基づいてクラスYが他のクラスに継承されないことを判定し、オーバーライドメソッドでない場合の命令列に置換しに行き、次に、関数「void j(Z*)」のメソッドクラス疑似命令「.CLASS 1Z」からクラスZを認識し、出力ファイルB109中の継承関係疑似命令「.BASE 1Z」に基づいてクラスZが他のクラスに継承されることを判定し、オーバーライドメソッドである場合の命令列に置換しに行き、次に、関数「void k(W*)」のメソッド命令列中のメソッドクラス疑似命令「.CLASS 1W」からクラスWを認識し、全ての出力ファイル中の全ての継承関係疑似命令「.BASE 1X」及び「.BASE 1Z」に基づいてクラスWが他のクラスに継承されないことを判定し、オーバーライドメソッドでない場合の命令列に置換しに行く(ステップ1104)。
【0051】
そのメソッドの属するクラスが他のクラスに継承されないと判定された場合には、メソッド命令列検出部111で検出されたメソッド命令列をメソッド置換部113が、オーバーライドメソッドでない場合の機械語命令列だけに置換する。ここでは、関数「void i(Y*)」のメソッド命令列を命令「jsr _h_1Y」に、関数「void j(W*)」のメソッド命令列を命令「jsr _h_1W」に順次置換し終了判定へ戻る(ステップ1105)。
【0052】
そのメソッドの属するクラスが他のクラスに継承されると判定された場合には、メソッド命令列検出部111で検出されたメソッド命令列をメソッド置換部113が、オーバーライドメソッドである場合の機械語命令列だけに置換する。ここでは、関数「void j(Z*)」のメソッド命令列を命令「mov (r0+4),r1」、「mov (r1+0),r1」及び「jsr r1」に置換し終了判定へ戻る(ステップ1106)。
【0053】
メソッド命令列検出部111の処理が終了すると、次に、全ての継承関係疑似命令を、メソッド置換部113が消去する。ここでは、継承関係疑似命令「.BASE 1X」及び「.BASE 1Z」を消去する(ステップ1107)。
次に、メソッド置換部113で置換されたファイルの全てを、ファイル連結部114が連結して実行ファイルを生成する。なお、上記のファイルを連結する処理は従来の連結装置が行なう処理と異ならないので詳しい説明を省略する(ステップ1108)。
【0054】
次に、実行ファイル115を出力する。ここでは、図8に示した実行ファイルを出力する(ステップ1109)。
なお、本実施例でメソッド置換部113が行う処理は、図10(a)に示すようにメソッド命令列がオーバーライドメソッドでない場合の命令列とオーバーライドメソッドである場合の命令列の両方をそのままの形で含んでいる場合にはこのメソッド命令列から不必要な部分を除くだけの処理となり、メソッド命令列が図10(b)(c)に示すようなマクロ命令の場合にはこのマクロ命令に基づいて必要な命令列を生成する処理となる。
【0055】
また、本実施例では翻訳装置と連結装置とを備えるとしたが、連結装置は必ずしも必要ではない。1つの入力ファイルにプログラムの実行に必要な全てのクラス定義が含まれている場合には、この入力ファイルを翻訳するだけのプログラム変換装置であってもよく、この入力ファイルは複数の入力ファイルからあらかじめ連結されて生成されたものであってもよい。この場合には、プログラム変換装置は、クラス定義で継承しているクラス名を疑似命令に翻訳したり、オーバーライドメソッド呼び出し命令をメソッド命令列に翻訳したり、メソッド命令列を置換したりする必要がなく、クラスの定義に基づいて全てのクラスの継承関係を抽出し、オーバーライドメソッド呼び出し命令をオーバーライドメソッドでない場合もしくはオーバーライドメソッドである場合のどちらかに翻訳するものであればよい。
【0056】
また、本実施例のプログラム変換装置は本実施例を実現するプログラムを汎用のコンピュータに読み取らせることで実現可能である。従って、このプログラムを記録したコンピュータ読み取り可能な記憶媒体のみの移動により容易に譲渡される。
【0057】
【発明の効果】
(イ)以上の説明から明かなように、本発明に係るプログラム変換装置は、オブジェクト指向言語のプログラムを機械語命令列に翻訳して実行ファイルを生成するプログラム変換装置であって、前記オブジェクト指向言語のプログラムにはオーバーライドメソッドを含むクラスの定義とオーバーライドメソッド呼び出し命令が含まれ、前記クラスの定義に基づいて全てのクラスの継承関係を継承関係情報として抽出する抽出手段と、全ての前記継承関係情報に基づいて前記オーバーライドメソッド呼び出し命令によって呼び出されるメソッドが属するクラスが継承されるか否かを判断する判断手段と、前記判断手段で継承されないと判断された場合に前記オーバーライドメソッド呼び出し命令をオーバーライドメソッドでない場合の機械語命令列に翻訳するメソッド翻訳手段を備えることを特徴とする。
【0058】
本発明は,1つの入力ファイルにプログラムの実行に必要な全てのクラス定義が含まれている場合に、全てのクラスの継承関係に基づいてオーバーライドメソッド呼び出し命令をオーバーライドメソッドでない場合もしくはオーバーライドメソッドである場合のどちらかに翻訳するという方法をとる。
これによって、あるクラスが他のクラスに全く継承されない場合にそのクラスで定義されるオーバーライドメソッドがオーバーライド機能を使うことができないという性質を利用して、オーバーライドメソッド呼び出し命令をオーバーライドメソッドでない場合の命令列に翻訳することができる。即ち、間接呼び出しを直接呼び出しにすることができる。
【0059】
従って、この分だけオーバーライドメソッド呼び出し命令のコードサイズが縮小でき、実行速度が向上する。
(ロ)また、本発明に係るプログラム変換装置は、オブジェクト指向言語のプログラムをファイル単位で機械語命令列に翻訳し出力ファイルとして出力する翻訳装置と、前記翻訳装置で翻訳された出力ファイルを連結して実行ファイルを生成する連結装置とを備えるプログラム変換装置であって、前記オブジェクト指向言語のプログラムにはオーバーライドメソッドを含むクラスの定義とオーバーライドメソッド呼び出し命令が含まれ、前記翻訳装置は、前記クラスの定義に基づいてファイル単位のクラスの継承関係を継承関係情報に翻訳する継承関係翻訳手段と、前記オーバーライドメソッド呼び出し命令をこの命令によって呼び出されるメソッドが属するクラスを表すメソッドクラス情報とこの命令によって呼び出されるメソッドがオーバーライドメソッドでない場合の機械語命令列を表す非オーバーライド情報とオーバーライドメソッドである場合の機械語命令列を表すオーバーライド情報とを含むメソッド命令列に翻訳するメソッド翻訳手段とを備え、前記連結装置は、前記翻訳装置で翻訳された全ての出力ファイルの中の全ての前記継承関係情報に基づいて前記オーバーライドメソッド呼び出し命令によって呼び出されるメソッドが属するクラスが継承されるか否かを判断する判断手段と、前記メソッド命令列を前記判断手段で継承されないと判断された場合にはオーバーライドメソッドでない場合の機械語命令列だけに置換し、一方、継承されると判断された場合にはオーバーライドメソッドである場合の機械語命令列だけに置換する置換手段とを備えることを特徴とする。
【0060】
入力ファイルが複数の場合、翻訳装置ではファイル単位のクラスの継承関係が判るだけで全てのクラスの継承関係は判らない。また、従来の連結装置ではクラスの継承関係は全く判らない。
本発明は、翻訳装置でファイル単位のクラスの継承関係を継承関係情報に翻訳し、連結装置で全ての前記継承関係情報を参照するので、連結装置において全てのクラスの継承関係が判る。さらに、翻訳装置でオーバーライドメソッド呼び出し命令を、オーバーライドメソッドでない場合とオーバーライドメソッドである場合の両方の命令列に翻訳し、連結装置でどちらかを選択するという方法をとる。
【0061】
これによって、あるクラスが他のクラスに全く継承されない場合にそのクラスで定義されるオーバーライドメソッドがオーバーライド機能を使うことができないという性質を利用して、オーバーライドメソッド呼び出し命令をオーバーライドメソッドでない場合の命令列に翻訳することができる。即ち、間接呼び出しを直接呼び出しにすることができる。
【0062】
従って、この分だけオーバーライドメソッド呼び出し命令のコードサイズが縮小でき、実行速度が向上する。
(ハ)また、本発明に係るプログラム変換装置は前記(ロ)のプログラム変換装置において、前記メソッド翻訳手段は、前記非オーバーライド命令と、前記オーバーライド命令とを1つのマクロ命令で表すことを特徴とする。
【0063】
これによって、命令数が減少する。
従って、翻訳装置から出力される出力ファイルのファイルサイズが縮小でき、前記連結装置の実行速度が向上する。
(ニ)また、本発明に係るプログラム変換装置は前記(ロ)のプログラム変換装置において、前記メソッド翻訳手段は、前記メソッドクラス情報と、前記非オーバーライド命令と、前記オーバーライド命令とを1つのマクロ命令で表すことを特徴とする。
【0064】
これによって、前記メソッドクラス情報の命令も不要となり、命令数が減少する。また、マクロ命令が1行なので従来の連結装置が行う命令の書式と類似している。
従って、翻訳装置から出力される出力ファイルのファイルサイズが縮小でき、前記連結装置の実行速度が向上し、また、前記連結装置の追加変更を少なくすることができる。
【0065】
(ホ)また、本発明に係るプログラム変換装置は前記(ニ)のプログラム変換装置において、前記マクロ命令は、マクロ名と、前記メソッドクラス情報と、オーバーライドメソッドでない場合に呼び出すラベル名と、オーバーライドメソッドである場合に使用するオブジェクトの先頭からのオフセット値と、オーバーライドメソッドである場合に使用するメソッドアドレス格納テーブルの先頭からのオフセット値で構成されることを特徴とする。
【0066】
これによって、このマクロ命令の書式は従来の連結装置が行う命令の書式と類似する。
従って、前記連結装置の追加変更を少なくすることができる。
(ヘ)また、本発明に係るプログラム変換装置は前記(イ)、(ロ)、(ハ)、(ニ)又は(ホ)のプログラム変換装置において、前記継承関係情報は、クラスの定義において他のクラスに継承されているクラス名を表す情報であることを特徴とする。
【0067】
これによって、複数のクラスが同じクラスを継承している場合に、前記継承関係情報は複数必要なく、1つを共用することができる。
従って、翻訳装置から出力される出力ファイルのファイルサイズが縮小でき、前記連結装置の実行速度が向上する。
(ト)また、本発明に係るプログラムを記録したコンピュータ読み取り可能な記憶媒体は、オブジェクト指向言語のプログラムを機械語命令列に翻訳して実行ファイルを生成するプログラムを記録したコンピュータ読み取り可能な記憶媒体であって、前記オブジェクト指向言語のプログラムにはオーバーライドメソッドを含むクラスの定義とオーバーライドメソッド呼び出し命令が含まれ、前記クラスの定義に基づいて全てのクラスの継承関係を継承関係情報として抽出する抽出手順と、全ての前記継承関係情報に基づいて前記オーバーライドメソッド呼び出し命令によって呼び出されるメソッドが属するクラスが継承されるか否かを判断する判断手順と、前記判断手順で継承されないと判断された場合に前記オーバーライドメソッド呼び出し命令をオーバーライドメソッドでない場合の機械語命令列に翻訳するメソッド翻訳手順を備えることを特徴とする。
【0068】
本発明は,1つの入力ファイルにプログラムの実行に必要な全てのクラス定義が含まれている場合に、全てのクラスの継承関係に基づいてオーバーライドメソッド呼び出し命令をオーバーライドメソッドでない場合もしくはオーバーライドメソッドである場合のどちらかに翻訳するという方法をとる。
これによって、あるクラスが他のクラスに全く継承されない場合にそのクラスで定義されるオーバーライドメソッドがオーバーライド機能を使うことができないという性質を利用して、オーバーライドメソッド呼び出し命令をオーバーライドメソッドでない場合の命令列に翻訳することができる。即ち、間接呼び出しを直接呼び出しにすることができる。
【0069】
従って、この分だけオーバーライドメソッド呼び出し命令のコードサイズが縮小でき、実行速度が向上する。
(チ)また、本発明に係るプログラムを記録したコンピュータ読み取り可能な記憶媒体は、オブジェクト指向言語のプログラムをファイル単位で機械語命令列に翻訳し出力ファイルとして出力する翻訳手順と前記翻訳手順で翻訳された出力ファイルを連結して実行ファイルを生成する連結手順とを備えるプログラムを記録したコンピュータ読み取り可能な記憶媒体であって、前記オブジェクト指向言語のプログラムにはオーバーライドメソッドを含むクラスの定義とオーバーライドメソッド呼び出し命令が含まれ、前記翻訳手順は、前記クラスの定義に基づいてファイル単位のクラスの継承関係を継承関係情報に翻訳する継承関係翻訳手順と、前記オーバーライドメソッド呼び出し命令をこの命令によって呼び出されるメソッドが属するクラスを表すメソッドクラス情報とこの命令によって呼び出されるメソッドがオーバーライドメソッドでない場合の機械語命令列を表す非オーバーライド情報とオーバーライドメソッドである場合の機械語命令列を表すオーバーライド情報とを含むメソッド命令列に翻訳するメソッド翻訳手順とを備え、前記連結手順は、前記翻訳手順で翻訳された全ての出力ファイルの中の全ての前記継承関係情報に基づいて前記オーバーライドメソッド呼び出し命令によって呼び出されるメソッドが属するクラスが継承されるか否かを判断する判断手順と、前記メソッド命令列を前記判断手順で継承されないと判断された場合にはオーバーライドメソッドでない場合の機械語命令列だけに置換し、一方、継承されると判断された場合にはオーバーライドメソッドである場合の機械語命令列だけに置換する置換手順とを備えることを特徴とする。
【0070】
入力ファイルが複数の場合、翻訳手順ではファイル単位のクラスの継承関係が判るだけで全てのクラスの継承関係は判らない。また、従来の連結手順ではクラスの継承関係は全く判らない。
本発明は、翻訳手順でファイル単位のクラスの継承関係を継承関係情報に翻訳し、連結手順で全ての前記継承関係情報を参照するので、連結手順において全てのクラスの継承関係が判る。さらに、翻訳手順でオーバーライドメソッド呼び出し命令を、オーバーライドメソッドでない場合とオーバーライドメソッドである場合の両方の命令列に翻訳し、連結手順でどちらかを選択するという方法をとる。
【0071】
これによって、あるクラスが他のクラスに全く継承されない場合にそのクラスで定義されるオーバーライドメソッドがオーバーライド機能を使うことができないという性質を利用して、オーバーライドメソッド呼び出し命令をオーバーライドメソッドでない場合の命令列に翻訳することができる。即ち、間接呼び出しを直接呼び出しにすることができる。
【0072】
従って、この分だけオーバーライドメソッド呼び出し命令のコードサイズが縮小でき、実行速度が向上する。
【図面の簡単な説明】
【図1】本発明のプログラム変換装置の構成を示す図である
【図2】入力ファイルA101に納められる、C++言語の仮想関数を含むクラスXの定義、クラスXを継承するクラスYの定義、クラスXを継承するクラスZの定義、関数void i(Y*)の定義及び関数void j(Z*)の定義を示す図である。
【図3】図2に示したクラスの継承関係を表す図である。
【図4】入力ファイルB102に納められる、C++言語の仮想関数を含むクラスXの定義、クラスXを継承するクラスYの定義、クラスXを継承するクラスZの定義、クラスZを継承するクラスWの定義及び関数void k(W*)の定義を示す図である。
【図5】図4に示したクラスの継承関係を表す図である。
【図6】図2に示した入力ファイルA101の入力により、翻訳部103が出力する出力ファイルA108を示す図である。
【図7】図4に示した入力ファイルB102の入力により、翻訳部103が出力する出力ファイルB109を示す図である。
【図8】図6に示した出力ファイルA108及び図7に示した出力ファイルB109の入力により、連結部110が出力する実行ファイル115を示す図である。
【図9】翻訳部103の動作フローチャートを示す図である。
【図10】図10(a)はメソッド命令列を示す図である。図10(b)はメソッド命令列をメソッドクラス疑似命令及び1つのマクロ命令で表した図である。図10(c)はメソッド命令列をメソッドクラス疑似命令の情報も含め1つのマクロ命令で表した図である。
【図11】連結部110の動作フローチャートを示す図である。
【図12】C++言語の仮想関数を含むクラス定義を示す図である。
【図13】図12に示したクラスの継承関係を表す図である。
【図14】図12に示したクラスで作成したオブジェクトのメモリ配置をクラス別に示す図である。
【図15】クラスCの仮想関数hの呼び出しを含む関数iをC++言語で記述した例を示す図である。
【図16】図15の関数iを従来のプログラム変換装置で機械語命令列に 変換した例を示す図である。
【図17】上記の関数hが非仮想関数として定義されていたと仮定した場合に、関数hの呼び出しを含む関数iを機械語命令列に変換した例を示す図である。
【符号の説明】
101 入力ファイルA
102 入力ファイルB
103 翻訳部
104 継承関係翻訳部
105 メソッド呼び出し検出部
106 メソッド翻訳部
107 命令翻訳部
108 出力ファイルA
109 出力ファイルB
110 連結部
111 メソッド命令列検出部
112 継承クラス判定部
113 メソッド置換部
114 ファイル連結部
115 実行ファイル

Claims (5)

  1. オブジェクト指向言語のプログラムをファイル単位で機械語命令列に翻訳し出力ファイルとして出力する翻訳装置と、前記翻訳装置で翻訳された出力ファイルを連結して実行ファイルを生成する連結装置とを備えるプログラム変換装置であって、
    前記オブジェクト指向言語のプログラムには、オーバーライドメソッドを含むクラスの定義とオーバーライドメソッド呼び出し命令が含まれ、
    前記翻訳装置は、
    前記クラスの定義に基づいてファイル単位のクラスの継承関係を、継承関係情報に翻訳する継承関係翻訳手段と、
    前記オーバーライドメソッド呼び出し命令を、この命令によって呼び出されるメソッドが属するクラスを表すメソッドクラス情報と、この命令によって呼び出されるメソッドがオーバーライドメソッドでない場合の機械語命令列を表す非オーバーライド情報と、オーバーライドメソッドである場合の機械語命令列を表すオーバーライド情報とを含むメソッド命令列に翻訳するメソッド翻訳手段とを備え、
    前記連結装置は、
    前記翻訳装置で翻訳された全ての出力ファイルの中の全ての前記継承関係情報に基づいて、前記オーバーライドメソッド呼び出し命令によって呼び出されるメソッドが属するクラスが、継承されるか否かを判断する判断手段と、
    記判断手段で継承されないと判断された場合には、前記メソッド命令列に含まれる前記オーバーライド情報は用いず、当該メソッド命令列に含まれる前記非オーバーライド情報を用いることにより、オーバーライドメソッドでない場合の機械語命令列を生成し、一方、前記判断手段で継承されると判断された場合には、当該メソッド命令列に含まれる前記非オーバーライド情報は用いず、当該メソッド命令列に含まれる前記オーバーライド情報を用いることにより、オーバーライドメソッドである場合の機械語命令列を生成し、前記メソッド命令列を、生成した機械語命令列に置換する置換手段と
    を備えることを特徴とするプログラム変換装置。
  2. 前記メソッド翻訳手段は、
    前記オーバーライドメソッド呼び出し命令を翻訳するにあたり、前記非オーバーライド情報と、前記オーバーライド情報の両方を含む1つのマクロ命令と、前記メソッドクラス情報を含む1つの疑似命令とで表されるメソッド命令列に翻訳すること
    を特徴とする請求項1に記載のプログラム変換装置。
  3. 前記メソッド翻訳手段は、
    前記オーバーライドメソッド呼び出し命令を翻訳するにあたり、前記メソッドクラス情報と、前記非オーバーライド情報と、前記オーバーライド情報の全てを含む1つのマクロ命令で表されるメソッド命令列に翻訳すること
    を特徴とする請求項1に記載のプログラム変換装置。
  4. 前記マクロ命令は、
    マクロ名と、前記メソッドクラス情報と、非オーバーライド情報としてオーバーライドメソッドでない場合に呼び出すラベル名と、オーバーライド情報の一部としてオーバーライドメソッドである場合に使用するオブジェクトの先頭からのオフセット値と、オーバーライド情報の一部としてオーバーライドメソッドである場合に使用するメソッドアドレス格納テーブルの先頭からのオフセット値で構成されること
    を特徴とする請求項3に記載のプログラム変換装置。
  5. 前記メソッド翻訳手段は、
    前記オーバーライドメソッド呼び出し命令を翻訳するにあたり、前記非オーバーライド 情報の代わりにオーバーライドメソッドでない場合の機械語命令列である非オーバーライド命令を含み、前記オーバーライド情報の代わりにオーバーライドメソッドである場合の機械語命令列であるオーバーライド命令を含むメソッド命令列に翻訳し、
    前記置換手段は、
    前記メソッド命令列をオーバーライドメソッドでない場合の機械語命令列に置換する際には、メソッド命令列から非オーバーライド命令以外の不必要な部分を除くだけの処理をおこない、前記メソッド命令列をオーバーライドメソッドである場合の機械語命令列に置換する際には、メソッド命令列からオーバーライド命令以外の不必要な部分を除くだけの処理をおこなうこと
    を特徴とする請求項1に記載のプログラム変換装置。
JP12560797A 1997-05-15 1997-05-15 プログラム変換装置 Expired - Fee Related JP3672207B2 (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP12560797A JP3672207B2 (ja) 1997-05-15 1997-05-15 プログラム変換装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP12560797A JP3672207B2 (ja) 1997-05-15 1997-05-15 プログラム変換装置

Publications (2)

Publication Number Publication Date
JPH10320204A JPH10320204A (ja) 1998-12-04
JP3672207B2 true JP3672207B2 (ja) 2005-07-20

Family

ID=14914307

Family Applications (1)

Application Number Title Priority Date Filing Date
JP12560797A Expired - Fee Related JP3672207B2 (ja) 1997-05-15 1997-05-15 プログラム変換装置

Country Status (1)

Country Link
JP (1) JP3672207B2 (ja)

Families Citing this family (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6526571B1 (en) * 1999-03-16 2003-02-25 International Business Machines Corporation Method for identifying calls in java packages whose targets are guaranteed to belong to the same package
US6675377B1 (en) 1999-09-13 2004-01-06 Matsushita Electric Industrial Co., Ltd. Program conversion apparatus
JP2006146613A (ja) * 2004-11-19 2006-06-08 Matsushita Electric Ind Co Ltd プログラム変換方法

Also Published As

Publication number Publication date
JPH10320204A (ja) 1998-12-04

Similar Documents

Publication Publication Date Title
JP4130713B2 (ja) プログラム変換装置
DK1174791T3 (en) Total data type system and method
CN105723341B (zh) 用于布局引擎和脚本引擎的存储器模型的实现方法及系统
JPH05508503A (ja) 後方記号実行による分岐分析
JPH05508504A (ja) プログラム翻訳方法
JPH0762827B2 (ja) プログラムコードの交差像参照方法
JP4638484B2 (ja) データ処理装置におけるデータ整合性
JP2001526421A (ja) 異なるフレームワークバージョンで作成されたオブジェクト指向プログラムが通信することを可能にする装置および方法
US7216332B2 (en) Software object library selection
JP4026940B2 (ja) プログラム変換装置
JP2005018425A (ja) プログラム変換方法、プログラムおよび記憶媒体
JP3672207B2 (ja) プログラム変換装置
NO329240B1 (no) System og fremgangsmate for forklarende definering og bruk av undergrupper innenfor dokumentkoding
JP2006301989A (ja) 計算機言語によるプログラムをブロック図から自動生成する方法と装置とプログラム
JP2006146613A (ja) プログラム変換方法
US6763516B2 (en) Convention checking apparatus, convention checking system, convention checking method, and storage medium on which is recorded a convention checking program
JP2000122876A (ja) 情報処理装置
JP4626032B2 (ja) プログラム変換装置,プログラム変換方法及び記録媒体
JP2021184246A (ja) 命令変換支援プログラム、命令変換支援方法および情報処理装置
KR100846203B1 (ko) 모바일 어플리케이션의 생성 방법 및 이를 구현하기 위한프로그램을 기록한 기록매체
Kicinski et al. Xdp hardware offload: Current work, debugging and edge cases
JP2000305790A (ja) ラベルアドレス変換装置、ラベルアドレス変換方法及びコンピュータ可読媒体
CN112835563A (zh) 一种代码克隆方法、装置、可读存储介质以及计算机
KR100546672B1 (ko) 프로그램에서의 형식 문자열을 이용한 문자 출력 내용의 기록 및 번역 방법
JP2000259427A (ja) プログラム変換装置

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20040513

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20050104

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20050303

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20050412

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20050415

R150 Certificate of patent or registration of utility model

Free format text: JAPANESE INTERMEDIATE CODE: R150

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20080428

Year of fee payment: 3

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20090428

Year of fee payment: 4

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20100428

Year of fee payment: 5

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20110428

Year of fee payment: 6

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20120428

Year of fee payment: 7

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20130428

Year of fee payment: 8

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20130428

Year of fee payment: 8

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20140428

Year of fee payment: 9

LAPS Cancellation because of no payment of annual fees