(57)【特許請求の範囲】
【請求項１】
第１のプラットフォーム上で動作可能な外部プログラムモジュールである変換元ライブラリを呼び出す変換元ライブラリ呼出命令を含み当該プラットフォーム上で動作する第１のオブジェクトプログラムを、前記第１のオブジェクトプログラムに含まれる命令およびデータの内容を抽出した中間表現へ変換した後、第２のプラットフォーム上で動作する第２のオブジェクトプログラムに変換するプログラム変換装置であって、
変換元ライブラリと、当該変換元ライブラリと同一機能を実現可能であり第２のプラットフォーム上で動作可能な外部プログラムモジュールである変換先ライブラリとを対応づけたライブラリ対応関係情報であって、前記変換先ライブラリの引数である変換先引数それぞれのデータ型が何であるかという情報と、当該変換先ライブラリに対応する変換元ライブラリの引数である変換元引数それぞれのデータ型が何であるかという情報と、前記変換元ライブラリの何番目の変換元引数が前記変換先ライブラリの何番目の変換先引数に対応するのかという対応関係とを示す引数対応関係情報を含む、ライブラリ対応関係情報を記憶するライブラリ対応表記憶手段と、
前記第１のオブジェクトプログラムを読み込み、中間表現に変換する読込・中間表現化手段と、
前記読込・中間表現化手段により前記中間表現に変換された第１のオブジェクトプログラムを格納する中間表現記憶手段と、
前記中間表現に変換された第１のオブジェクトプログラム中の変換元ライブラリ呼出命令を検出するライブラリ呼出命令検出手段と、
前記ライブラリ呼出命令検出手段により検出された変換元ライブラリ呼出命令を、前記ライブラリ対応関係情報を参照することにより、当該変換元ライブラリ呼出命令が呼び出す変換元ライブラリに対応する変換先ライブラリを呼び出す変換先ライブラリ呼出命令に変換する命令変換手段と、
前記ライブラリ呼出命令検出手段により検出された前記ライブラリ呼出命令が呼び出す変換元ライブラリへの引数の値を設定する引数設定命令を、前記中間表現に変換された第１のオブジェクトプログラム中から検出する引数設定命令検出手段と、
前記引数設定命令検出手段により検出された引数設定命令を、前記引数対応関係情報を参照することにより、当該引数設定命令が設定する前記値を、前記変換元引数に対応する変換先引数のデータ型となるように型変換して、前記変換先ライブラリへの引数として設定する変換先引数設定命令に、変換する引数設定命令変換手段とを備える
ことを特徴とするプログラム変換装置。
【請求項２】
前記ライブラリ対応関係情報はさらに、前記変換元ライブラリの戻り値である変換元戻り値それぞれのデータ型が何であるかという情報と、当該変換元ライブラリに対応する変換先ライブラリの戻り値である変換先戻り値それぞれのデータ型が何であるかという情報と、前記変換元ライブラリの何番目の変換元戻り値が前記変換先ライブラリの何番目の変換先戻り値に対応するのかという対応関係とを示す戻り値対応関係情報を含み、
前記プログラム変換装置はさらに、
前記ライブラリ呼出命令検出手段により検出された前記ライブラリ呼出命令が呼び出す変換元ライブラリが返却する戻り値を利用する戻り値利用命令を、第１のオブジェクトプログラム中から検出する戻り値利用命令検出手段と、
前記戻り値利用命令検出手段により検出された戻り値利用命令を、前記戻り値対応関係情報を参照することにより、前記変換先ライブラリが返却する戻り値を前記変換元戻り値のデータ型となるように型変換して利用する変換先戻り値利用命令に、変換する戻り値利用命令変換手段とを備える
ことを特徴とする請求項１記載のプログラム変換装置。
【請求項３】
コンピュータを請求項１又は２記載のプログラム変換装置として機能させるためのプログラムを記録したコンピュータ読み取り可能な記録媒体。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、あるプラットフォーム、即ちある実行環境（ＯＳ、プロセッサ、仮想マシン等を含む）上で動作するオブジェクトプログラムを、別のプラットフォーム上で動作するオブジェクトプログラムに変換するいわゆるバイナリトランスレータに関する。
【０００２】
【従来の技術】
バイナリトランスレータは、入力されたオブジェクトプログラムを、当該オブジェクトプログラムが動作するプラットフォームとは別なプラットフォーム上で動作するオブジェクトプログラムに変換して出力する。なお、ここでいう変換は、入力されたオブジェクトプログラムに基づいて別のオブジェクトプログラムを生成することである。
【０００３】
ここで、オブジェクトプログラムとは、あるプラットフォーム上で実行可能な形式のプログラムであり、例えば高水準言語で記述されたソースプログラムをコンパイルすることにより得られた機械語命令列からなるプログラム等をいう。また、プラットフォームとは、オブジェクトプログラムを実行するための基本環境をいい、現実のプロセッサ及びＯＳの基本機能部分や仮想マシン等のことである。どのようなプラットフォームを採用するかは、コンピュータシステムや家電機器の設計において重要な事項であり、プラットフォームが定まれば、その上で動作するオブジェクトプログラムが満たすべき命令形式等の条件が定まる。この条件に合わせて、例えば、コンパイラは、高水準言語で記述されたソースプログラムを中間表現に置き換えた後に目的とするプラットフォームに適合するオブジェクトプログラムに変換する。
【０００４】
従来のバイナリトランスレータは、目的とするプラットフォームへの適合という面では、上述のコンパイラと同様な技術を用いるものであり、あるオブジェクトプログラムを、命令やデータの意味内容を抽出した中間表現に置き換え、その中間表現に基づいて、目的とするプラットフォームに適合するオブジェクトプログラムを生成する。
【０００５】
ところが、近年のプログラム開発環境の進展等に伴い、オブジェクトプログラムはライブラリを呼び出す構造のものが多くなっており、オブジェクトプログラムはそれ単体で、あるプラットフォーム上で実行可能なものではなくなってきている。ここで、ライブラリとは、オブジェクトプログラムの外部にあって、オブジェクトプログラムから呼び出され得る外部プログラムモジュールの総称であり、ＯＳの一部に相当するものや、その他、例えば、Ｃ言語における標準入出力関数の関数ライブラリ等がある。つまり、近年、オブジェクトプログラムの実行環境は、従来いうところのプラットフォームに加えてライブラリを含んだものとなってきている。
【０００６】
このようなライブラリを呼び出すオブジェクトプログラムは、引数を渡してライブラリを呼び出し、ライブラリから実行結果である戻り値を受け取って利用する。このためオブジェクトプログラムは、呼び出すべきライブラリの引数及び戻り値に関する条件仕様に適合するように作成されている。
【０００７】
【発明が解決しようとする課題】
しかしながら、バイナリトランスレータに入力されるオブジェクトプログラムの実行環境と変換後のオブジェクトプログラムの実行環境とには、同一のライブラリが存在しない場合がある。ここで同一のライブラリとは、プラットフォームの相違を除いて同一のことをいう。この場合、プラットフォーム間の差異を吸収するのを目的としていた従来のバイナリトランスレータでは、ライブラリを呼び出す構造のオブジェクトプログラムを、別のプラットフォームに対応するオブジェクトプログラムに変換しても、呼び出すライブラリが存在しないため、その変換結果のオブジェクトプログラムは実行できないものとなる。
【０００８】
そこで、本発明はかかる問題点に鑑み、ライブラリを呼び出す構造のオブジェクトプログラムを、当該ライブラリと同一のものを有しない実行環境で動作するオブジェクトプログラムに変換することができるプログラム変換装置（バイナリトランスレータ）を提供することを目的とする。
【０００９】
【課題を解決するための手段】
上記課題を解決するために、本発明に係るプログラム変換装置は、第１のプラットフォーム上で動作可能な外部プログラムモジュールである変換元ライブラリを呼び出す変換元ライブラリ呼出命令を含み当該プラットフォーム上で動作する第１のオブジェクトプログラムを、前記第１のオブジェクトプログラムに含まれる命令およびデータの内容を抽出した中間表現へ変換した後、第２のプラットフォーム上で動作する第２のオブジェクトプログラムに変換するプログラム変換装置であって、変換元ライブラリと、当該変換元ライブラリと同一機能を実現可能であり第２のプラットフォーム上で動作可能な外部プログラムモジュールである変換先ライブラリとを対応づけたライブラリ対応関係情報であって、前記変換先ライブラリの引数である変換先引数それぞれのデータ型が何であるかという情報と、当該変換先ライブラリに対応する変換元ライブラリの引数である変換元引数それぞれのデータ型が何であるかという情報と、前記変換元ライブラリの何番目の変換元引数が前記変換先ライブラリの何番目の変換先引数に対応するのかという対応関係とを示す引数対応関係情報を含む、ライブラリ対応関係情報を記憶するライブラリ対応表記憶手段と、前記第１のオブジェクトプログラムを読み込み、中間表現に変換する読込・中間表現化手段と、前記読込・中間表現化手段により前記中間表現に変換された第１のオブジェクトプログラムを格納する中間表現記憶手段と、前記中間表現に変換された第１のオブジェクトプログラム中の変換元ライブラリ呼出命令を検出するライブラリ呼出命令検出手段と、前記ライブラリ呼出命令検出手段により検出された変換元ライブラリ呼出命令を、前記ライブラリ対応関係情報を参照することにより、当該変換元ライブラリ呼出命令が呼び出す変換元ライブラリに対応する変換先ライブラリを呼び出す変換先ライブラリ呼出命令に変換する命令変換手段と、前記ライブラリ呼出命令検出手段により検出された前記ライブラリ呼出命令が呼び出す変換元ライブラリへの引数の値を設定する引数設定命令を、前記中間表現に変換された第１のオブジェクトプログラム中から検出する引数設定命令検出手段と、前記引数設定命令検出手段により検出された引数設定命令を、前記引数対応関係情報を参照することにより、当該引数設定命令が設定する前記値を、前記変換元引数に対応する変換先引数のデータ型となるように型変換して、前記変換先ライブラリへの引数として設定する変換先引数設定命令に、変換する引数設定命令変換手段とを備えることを特徴とする。
【００１０】
以下、上記構成により、課題が解決される理由について説明する。
プログラム変換装置が出力する第２のオブジェクトプログラムの動作する第２のプラットフォーム上には、プログラム変換装置に入力される第１のオブジェクトプログラムが呼び出す変換元ライブラリと同一のライブラリは存在しないとしても、第２のプラットフォーム上には、前記変換元ライブラリと同一機能を実現可能である変換先ライブラリが存在する場合がある。第１のオブジェクトプログラムの実行環境と第２のオブジェクトプログラムの実行環境が似ているような場合であり、一例を示すと、文字列を画面に出力するという一般的な機能を実現するために、変換元ライブラリは、第１引数として文字列を格納しているメモリ領域のポインタを要求するとともに第２引数として文字列のバイト数を１バイトのデータで要求し、変換先ライブラリは、第１引数として文字列のバイト数を２バイトのデータで要求するとともに第２引数として文字列を格納しているメモリ領域のポインタを要求するような場合である。
【００１１】
このような場合、オブジェクトプログラムとライブラリとの間のインタフェースが異なり、引数の数の相違、対応する引数同士の引数番号の相異、対応する引数同士のデータ型の相違がある。本発明に係るプログラム変換装置は、これらの相違を吸収するものであるため上記課題を解決する。
なお、第２のプラットフォーム上に、前記変換元ライブラリと同一機能を実現可能である変換先ライブラリが存在しない場合には、そのような変換先ライブラリを作成して第２のプラットフォーム上に存在させるか、又は当該変換先ライブラリを第２のオブジェクトプログラムの内部モジュールとして組み込めばよいが、この場合においても、類似した複数の変換元ライブラリの機能をまとめて包括的な高機能の１つの変換先ライブラリを作成する等のメモリの効率的利用の面からの要請や、プラットフォームとなるプロセッサにより扱えるデータ型が性能面等から制約されること等により、前記変換元ライブラリと完全同一のライブラリを作成すべきでないときがあり、上述のように、オブジェクトプログラムとライブラリとの間のインタフェースの相違を吸収する必要が生じる。
【００１２】
【発明の実施の形態】
以下、本発明の実施の形態に係るプログラム変換装置について、図面を用いて説明する。
＜構成＞
図１は、本発明の実施の形態に係るプログラム変換装置の構成を示す図である。
【００１３】
プログラム変換装置１００は、入力オブジェクトプログラム１０１を参照し、出力オブジェクトプログラム１０２を生成するバイナリトランスレータであり、ハードウェア的にはＣＰＵ及びメモリで構成され、当該メモリに格納された制御プログラムが当該ＣＰＵにより実行されることにより、オブジェクトプログラムの変換機能を実現するものである。
【００１４】
プログラム変換装置１００は、機能的には、読込・中間表現化部１１０と、コード化・出力部１２０と、中間表現記憶部１３０と、ライブラリ呼出命令検出部１４０と、ライブラリ・関数呼出命令生成部１５０と、ライブラリ対応表記憶部１６０と、関数定義付加部１７０と、関数付加状態情報記憶部１８０と、関数定義記憶部１９０とを備える。
【００１５】
中間表現記憶部１３０は、中間表現を記憶するためのメモリ中の一領域である。ここで、中間表現は、プログラム変換装置１００内において、オブジェクトプログラムを表す内部表現である。
読込・中間表現化部１１０は、入力オブジェクトプログラム１０１中の命令を解読して中間表現に変換し、中間表現記憶部１３０に格納するものである。ここで、読込・中間表現化部１１０が生成した中間表現は、従来のバイナリトランスレータにおいて生成される中間表現と同等のものである。中間表現の詳細に関しては、ＡｌｆｅｒｄＶ．Ａｈｏ，ＲａｖｉＳｅｔｈｉ，ＪｅｆｆｒｅｙＤ．Ｕｌｌｍａｎ，”Ｃｏｍｐｉｌｅｒ  Ｐｒｉｎｃｉｐｌｅｓ，Ｔｅｃｈｎｉｑｕｅｓ，ａｎｄ  Ｔｏｏｌｓ”，Ａｄｄｉｓｏｎ−Ｗｅｓｌｅｙ，１９８６，に詳しく説明されている。
【００１６】
コード化・出力部１２０は、中間表現記憶部１３０に格納されている中間表現を、機械語命令列に変換して、出力オブジェクトプログラム１０２として出力するものである。
ライブラリ呼出命令検出部１４０は、中間表現記憶部１３０に格納されている中間表現の中からライブラリ呼出命令を検出するものである。ここで、ライブラリ呼出命令とは、入力オブジェクトプログラム１０１から外部のプログラムモジュールであるライブラリ関数を呼び出すための命令をいう。ここでは、このライブラリ関数を、ライブラリと表現する。
【００１７】
なお、読込・中間表現化部１１０、コード化・出力部１２０、中間表現記憶部１３０は、従来のプログラム変換装置を構成するものと同様である。
ライブラリ対応表記憶部１６０は、変換前のプラットフォームで動作する複数のライブラリ（以下、変換元ライブラリという。）それぞれについての識別情報等から構成される変換元ライブラリテーブルと、変換元ライブラリに対応し変換後のプラットフォームで動作可能であり当該変換元ライブラリと同等機能を実現し得るライブラリ（以下、変換先ライブラリという。）それぞれについての識別情報等から構成される変換先ライブラリ・関数テーブルとを記憶する。変換元ライブラリテーブルと変換先ライブラリ・関数テーブルとを合わせてライブラリ対応表という。ライブラリ対応表については、後に詳細に説明する。なお、変換先ライブラリのうち、変換後のプラットフォーム上に存在しないもの、即ち、オブジェクトプログラムの実行環境に含まれていないものを、特に変換先関数という。
【００１８】
ライブラリ・関数呼出命令生成部１５０は、ライブラリ対応表記憶部１６０に記憶されているライブラリ対応表を参照することにより、ライブラリ呼出命令検出部１４０により検出された中間表現中のライブラリ呼出命令を、当該ライブラリ呼出命令が呼び出す変換元ライブラリと対応する変換先ライブラリを呼び出す命令に変換するものであり、変換元ライブラリの引数の設定命令を、変換先ライブラリの引数の設定命令に変換する引数整合処理部１５１と、変換元ライブラリからの戻り値を利用する命令を、変換先ライブラリからの戻り値を利用する命令に変換する戻り値整合処理部１５２とを有する。
【００１９】
関数定義記憶部１９０は、変換元ライブラリと同等機能を実現し得る変換先関数を記憶しているメモリの一領域である。関数定義記憶部１９０内では、変換先関数は中間表現の形で記憶されている。
関数付加状態情報記憶部１８０は、関数定義記憶部１９０内に記憶されている変換先関数を、中間表現記憶部１３０内のオブジェクトプログラムの中間表現に付加したか否かを示す関数付加状態情報を保持するものである。
【００２０】
関数定義付加部１７０は、ライブラリ・関数呼出命令生成部１５０がライブラリ呼出命令を、変換先関数を呼び出す命令に変換する場合に、オブジェクトプログラムに変換先関数の定義を付加する。但し、関数付加状態情報記憶部１８０を参照することにより、同一の変換先関数の定義を複数付加しないようにする。
＜ライブラリ対応表＞
以下、ライブラリ対応表の構成について説明する。ライブラリ対応表は、変換元ライブラリテーブル４００と変換先ライブラリテーブル５００とで構成される。
【００２１】
図２は、変換元ライブラリテーブル４００の構成を示す図である。
変換元ライブラリテーブル４００は、複数の変換元ライブラリそれぞれについて、識別情報４１０と、引数情報４２０と、引数変換情報４３０と、戻り値情報４４０と、戻り値変換情報４５０と、変換先ライブラリ・関数情報へのポインタ４６０とから構成される変換元ライブラリ情報を有する。同図中のＮ、Ｎ１、Ｎ２、Ｎ３、Ｎ４は複数個存在することを意味する。
【００２２】
識別情報４１０は、複数の変換元ライブラリそれぞれを識別するための識別番号である。
引数情報４２０は、引数番号４２１とデータ型４２２とのＮ１個の組からなり、Ｎ１個は、引数の数である。ここで、引数についていう場合のデータ型とは、ライブラリが引数をどのようなサイズのデータとして扱うかを示すもので、１バイト型、２バイト型、４バイト型等のデータ型がある。スタックポインタがライブラリへの全ての引数を格納したメモリ領域のアドレスを指す場合において、例えば、引数番号とデータ型との組が、（１番、２バイト型）、（２番、４バイト型）、（３番、１バイト型）であったとすると、そのライブラリは、スタックポインタが指すアドレスから２バイトを第１の引数として扱い、次の４バイトを第２の引数として扱い、次の１バイトを第３の引数として扱うことになる。
【００２３】
引数変換情報４３０は、変換先番号４３１と引数番号／定数４３２とのＮ２個の組からなり、Ｎ２個は、対応する変換先ライブラリの引数の数である。ここで、引数番号／定数４３２は、変換先ライブラリの引数として用いることができるものを示す情報であり、変換元ライブラリの引数の番号又は、定数値をとる。例えば、変換先番号と引数番号／定数との組が、（１番、２番）、（２番、「０」）、（３番、１番）であったならば、変換先ライブラリの第１の引数として、変換元ライブラリの第２の引数に設定されていた値を用いることができ、変換先ライブラリの第２の引数には０という定数値を用いることができ、変換先ライブラリの第３の引数として、変換元ライブラリの第１の引数に設定されていた値を用いることができることになる。
【００２４】
戻り値情報４４０は、戻り値番号４４１とデータ型４４２とのＮ３個の組からなり、Ｎ３個は、戻り値の数である。ここで、戻り値についていう場合のデータ型とは、ライブラリが戻り値をどのようなサイズのデータとして格納するかを示すもので、引数についていう場合のデータ型と同様に、１バイト型、２バイト型、４バイト型等のデータ型がある。
【００２５】
戻り値変換情報４５０は、戻り値番号４５１と変換先番号４５２とのＮ４個の組からなり、Ｎ４個は、変換元ライブラリの戻り値の数である。これは、必要な戻り値が、変換先ライブラリの何番目の戻り値であるかを示している。例えば、戻り値番号と変換先番号との組が、（１番、２番）であったとすると、これは、変換元ライブラリの第１の戻り値を利用するような命令は、変換先ライブラリの第２の戻り値を利用するように変換すればよいことを示している。
【００２６】
変換先ライブラリ・関数情報へのポインタ４６０は、変換先ライブラリテーブル５００中の１つの変換先ライブラリについての変換先ライブラリ・関数情報のメモリ中での格納位置を示すポインタである。
図３は、変換先ライブラリテーブル５００の構成を示す図である。
変換先ライブラリテーブル５００は、複数の変換先ライブラリそれぞれについて、識別情報５１０と、引数情報５２０と、戻り値情報５３０と、関数フラグ５４０とから構成される変換先ライブラリ・関数情報を有する。同図中のＭ、Ｍ１、Ｍ２は複数個存在することを意味する。
【００２７】
識別情報５１０は、複数の変換先ライブラリそれぞれを識別するための識別番号である。
引数情報５２０は、引数番号５２１とデータ型５２２とのＭ１個の組からなり、Ｍ１個は、引数の数である。また、戻り値情報５３０は、戻り値番号５３１とデータ型５３２とのＭ２個の組からなり、Ｍ２個は、戻り値の数である。
【００２８】
関数フラグ５４０は、変換先ライブラリが変換先関数であるか否かを示す情報である。変換先ライブラリが変換先関数であるということは、そのライブラリ、即ち外部プログラムモジュールは、変換後のプラットフォームにおけるプログラム実行環境に含まれていないものであるため、プログラム変換装置１００によって必要に応じてオブジェクトプログラムの内部に内部モジュールとして含ませるものであることを示す。これに対して、変換先関数でない変換先ライブラリは、変換後のプラットフォームにおけるプログラム実行環境に含まれているものであるためオブジェクトプログラムに含ませる必要がない。
【００２９】
図４は、変換元ライブラリ情報と変換先ライブラリ・関数情報との例を示す図である。
同図には、２１番という識別番号をもつ変換元ライブラリについての変換元ライブラリ情報４０１と、この変換元ライブラリの機能を包含した機能を有する変換先ライブラリについての変換先ライブラリ・関数情報５０１とを示している。この例に示す変換先ライブラリは、変換後のプラットフォームにおける実行環境を構成するものであり、変換先関数ではない。従って、この例は、変換後のプラットフォームにおいて、変換元ライブラリの機能を包含したような変換先ライブラリが存在することを示している。
【００３０】
なお、同図中、ｃｈａｒは１バイト型を、ｓｈｏｒｔは２バイト型を、ｌｏｎｇは４バイト型を表している。
このように、ライブラリ対応表は、変換元ライブラリと変換先ライブラリとにより要求される引数の条件の対応関係と、変換元ライブラリと変換先ライブラリとから返却される戻り値の属性の対応関係とを示す。ここで、引数の条件とは、引数の数や引数１つ１つについてのデータ型をいい、戻り値の属性とは、戻り値の数や戻り値１つ１つについてのデータ型をいう。
【００３１】
＜関数付加状態情報＞
図５は、関数付加状態情報記憶部１８０に保持される関数付加状態情報の例を示す図である。
関数付加状態情報は、変換先関数の識別情報と、付加状態との組からなり、各変換先関数について、オブジェクトプログラムの中間表現に付加したか否かを示す。この情報は、関数定義付加部１７０により参照及び更新されるものである。
＜動作＞
以下、上述の構成を備えるプログラム変換装置１００の動作について説明する。
【００３２】
図６は、プログラム変換装置１００の動作を示すフローチャートである。
読込・中間表現化部１１０が、入力オブジェクトプログラム１０１を読み込み（ステップＳ２０１）、中間表現にして中間表現記憶部１３０に格納した後（ステップＳ２０２）、ライブラリ呼出命令検出部１４０は、中間表現の中からライブラリ呼出命令を検出する（ステップＳ２０３）。
【００３３】
ライブラリ呼出命令検出部１４０が、ライブラリ呼出命令を検出しなければ（ステップＳ２０４）、コード化・出力部１２０が、中間表現記憶部１３０に格納されている中間表現をコード化して（ステップＳ２０９）、出力オブジェクトプログラム１０２を出力する（ステップＳ２１０）。
ライブラリ呼出命令検出部１４０が、ライブラリ呼出命令を検出した場合は（ステップＳ２０４）、ライブラリ・関数呼出命令生成部１５０は、後述するライブラリ・関数呼出命令生成処理を行い（ステップＳ２０５）、ライブラリ呼出命令により呼び出されるライブラリが変換先関数となる場合には（ステップＳ２０６）、関数定義付加部１７０は、関数付加状態情報記憶部１８０に保持されている関数付加状態情報を参照して、当該変換先関数が未だ中間表現記憶部１３０内に付加されていなければ（ステップＳ２０７）、関数定義記憶部１９０に記憶されている当該変換先関数を中間表現記憶部１３０内に付加し（ステップＳ２０８）、他のライブラリ呼出命令の検出のためステップＳ２０３に戻る。
【００３４】
関数定義付加部１７０は、変換先関数を中間表現記憶部１３０内に格納した場合には、関数付加状態情報記憶部１８０に保持されている関数付加状態情報を更新し、当該変換先関数について既付加である旨を示すようにする。
図７は、ライブラリ・関数呼出命令生成部１５０より行われるライブラリ・関数呼出命令生成処理を示すフローチャートである。
【００３５】
ライブラリ・関数呼出命令生成部１５０は、ライブラリ呼出命令検出部１４０により検出されたライブラリ呼出命令が示す変換元ライブラリの識別番号に基づいて、ライブラリ対応表を参照することにより、当該変換元ライブラリに対応する変換先ライブラリの識別番号を得て、当該識別番号のライブラリを呼び出す新たなライブラリ呼出命令を生成する（ステップＳ３０１）。この新たなライブラリ呼出命令の生成とは、元のライブラリ呼出命令についての呼び出すべきライブラリの識別番号を変換先ライブラリの識別番号となるように変換することをいう。
【００３６】
新たなライブラリ呼出命令を生成した後、引数整合処理部１５１が、引数を設定する命令の変換処理（ステップＳ３０２〜Ｓ３０８）を行い、戻り値整合処理部１５２が、戻り値を利用する命令の変換処理（ステップＳ３０９〜Ｓ３１３）を行う。
即ち、引数整合処理部１５１は、変換先引数番号を示す変数であるｎを１にし（ステップＳ３０２）、ライブラリ対応表記憶部１６０に格納されている変換元ライブラリ情報中の引数変換情報を参照して、変換先ライブラリに必要な第ｎ番目の引数が存在するか判断し（ステップＳ３０３）、存在するならば、その変換先ライブラリの第ｎ番目の引数に対応する変換元番号が指定されているか、即ち、対応するものは変換元ライブラリの引数であるかを判断し（ステップＳ３０４）、変換元引数番号が指定されている場合には、その変換元引数番号に該当する引数を定義している箇所、即ち変換元引数に値を設定している箇所を、中間表現からサーチする（ステップＳ３０５）。このサーチは、中間表現についてのＵＤ情報を参照することによって行われる。
【００３７】
図８は、ＵＤ情報を用いて引数の定義箇所をサーチするイメージを示す図である。
ライブラリ呼出記述６０１を参照すれば引数が特定され（矢印６０２）、これに基づきＵＤ情報により引数の定義箇所が特定される（矢印６０３）。即ち、引数として用いられる中間表現における変数に値が設定される箇所が特定される。
【００３８】
変換元引数の定義箇所のサーチ後、変換元ライブラリ情報及び変換先ライブラリ・関数情報の双方から引数情報を参照することにより、変換元引数の定義箇所における変換元引数に設定している値を型変換して第ｎ番目の変換先引数として設定する命令を生成する（ステップＳ３０６）。
また、ステップＳ３０４において、変換先ライブラリに必要な第ｎ番目の引数に対応する変換先引数番号が指定されておらず、定数値が指定されている場合には、その定数を第ｎ番目の変換先引数として設定する命令を生成する（ステップＳ３０７）。ステップＳ３０６又はステップＳ３０７の実行後に変数ｎの値を１増加し、ステップＳ３０３に戻る（ステップＳ３０８）。
【００３９】
また、ステップＳ３０３において、変換先ライブラリに必要な第ｎ番目の引数が存在しない場合には、引数整合処理部１５１における変換先引数を設定する命令の処理を終了する。
戻り値整合処理部１５２は、変換元戻り値番号を示す変数であるｍを１にし（ステップＳ３０９）、ライブラリ対応表記憶部１６０に格納されている変換元ライブラリ情報中の戻り値変換情報を参照して、変換元ライブラリの処理結果としての第ｍ番目の戻り値が存在するか判断し（ステップＳ３１０）、存在するならば、その変換元ライブラリの第ｍ番目の戻り値の使用箇所、即ち変換元戻り値の使用箇所を、中間表現からサーチする（ステップＳ３１１）。このサーチは、中間表現についてのＤＵ情報を参照することによって行われる。
【００４０】
図９は、ＤＵ情報を用いて戻り値の使用箇所をサーチするイメージを示す図である。
ライブラリ呼出記述６０４を参照すれば戻り値が特定され（矢印６０５）、これに基づきＤＵ情報により戻り値の使用箇所が特定される（矢印６０６）。即ち、戻り値を、中間表現における変数に設定する箇所が特定される。
【００４１】
変換元戻り値の使用箇所のサーチ後、変換元ライブラリ情報及び変換先ライブラリ・関数情報の双方から戻り値情報を参照することにより、戻り値を型変換して第ｍ番目の変換元戻り値を使用する変数に設定する命令を生成し（ステップＳ３１２）、変数ｍの値を１増加し、ステップＳ３１０に戻る（ステップＳ３１３）。
【００４２】
ステップＳ３１０において、変換元ライブラリの処理結果としての第ｍ番目の戻り値が存在しない場合には、戻り値整合処理部１５２における変換元戻り値を設定する命令の処理を終了する。
以下、上述したライブラリ・関数呼出命令生成処理を具体例に即して説明する。
【００４３】
図１０は、ライブラリ・関数呼出命令生成処理の前後における中間表現のイメージを示す図である。
中間表現の状態７０１が、ライブラリ・関数呼出命令生成処理の実行後は、状態７０２のようになる。この過程について説明する。
まず、ライブラリ呼出命令検出部１４０から検出したライブラリ呼出命令が示すものが状態７０１中のｌｉｂｃａｌｌ＃２１（ｘ，ｙ）であるとすると、ライブラリ・関数呼出命令生成部１５０は、ライブラリ対応表を参照して、識別情報が２１番である変換元ライブラリ情報に着目し、この中の変換先ライブラリ・関数情報へのポインタにより特定される変換先ライブラリ・関数情報にも着目する。ここで、ライブラリ呼出命令検出部１４０が着目する情報は、図４に示すものであったとする。
【００４４】
これによれば、変換先ライブラリ・関数情報５０１中の識別情報は、１０番を示しているため、ライブラリ・関数呼出命令生成部１５０は、中間表現中の２１番のライブラリを呼び出す命令を、１０番のライブラリを呼び出す命令、即ち状態７０２に示したｌｉｂｃａｌｌ＃１０に変換する（ステップＳ３０１）。ここで、状態７０２に示した中間表現（Ｕ，Ｖ）←ｌｏｂｃａｌｌ＃１０（Ｘ，Ｙ，Ｚ）は、変換先ライブラリ・関数情報５０１の引数情報及び戻り値情報に基づいて表された中間表現であり、３つの４バイトの引数を受けて２つの４バイトの戻り値を返却する１０番のライブラリを呼び出す旨の記述を意味する。なお、この中間表現は、コード化・出力部１２０により機械語命令列にされる段階では、例えば、３つの４バイトの引数は連続したスタック領域に割り付けるようにし、スタック領域を指し示すようにスタックポインタを設定する命令と、１０番という識別番号のライブラリをメモリにロードしそのライブラリに制御移行する命令とに変換される。
【００４５】
次に引数整合処理部１５１は、変換元ライブラリ情報４０１の引数変換情報を参照して、（＃１，＃１）であるので、第１の変換先引数が存在しそれに対応する引数番号が記憶されているので（ステップＳ３０２〜Ｓ３０４）、１番目の引数であるｘの定義をＵＤ情報に基づいてサーチし（ステップＳ３０５）、ｘ＝ａという定義を得て、変数ａを型変換して、変換後の第１番目の引数に設定する命令を生成する（ステップＳ３０６）。ここで、型変換については、変換元ライブラリ情報４０１の引数情報と、変換先ライブラリ・関数情報５０１の引数情報とを参照することによりｓｈｏｒｔをｌｏｎｇに変換すればよいことを知ってなされるものであり、引数整合処理部１５１はこれに従い２バイトの変数ａを、４バイト変数Ｘの下位２バイトに設定する命令、即ちＸ＝（ｌｏｎｇ）ａを生成する。
【００４６】
続いて、引数整合処理部１５１は、変換元ライブラリ情報４０１の引数変換情報の２番目のものを参照して、（＃２，０）であるので、第２の変換先引数が存在しそれに対応するのは定数０であるので（ステップＳ３０８、Ｓ３０３、Ｓ３０４）、定数０を、４バイト変数Ｙに設定する命令を生成する（ステップＳ３０７）。続いて、引数変換情報の３番目のものを参照して、（＃３，＃２）であるので、第３の変換先引数が存在しそれに対応する変換元における引数は２番目のものであるので（ステップＳ３０８、Ｓ３０３、Ｓ３０４）、２番目の引数であるｙの定義をＵＤ情報に基づいてサーチし（ステップＳ３０５）、ｙ＝２という定義を得て、２バイト定数２を、４バイト変数Ｚの下位２バイトに設定する命令、即ちＺ＝（ｌｏｎｇ）ａを生成する。これ以上は変換先引数は存在しないので（ステップＳ３０８、ステップＳ３０３）、戻り値についての処理に移る。
【００４７】
戻り値整合処理部１５２は、変換元ライブラリ情報４０１の戻り値変換情報を参照して、（＃１，＃２）であるので、１番目の戻り値は変換元の状態において存在しており変換先ライブラリの２番目の戻り値により置き換えることができるため（ステップＳ３１０）、その戻り値ｕの使用箇所をＤＵ情報に基づいてサーチし（ステップＳ３１１）、ｃ＝ｕ及びｄ＝ｕを得て、変換先ライブラリの２番目の戻り値であるＶを型変換してｃ及びｄに設定する命令を生成する（ステップＳ３１２）。ここで、型変換については、変換元ライブラリ情報４０１の戻り値情報と変換先ライブラリ・関数情報５０１の戻り値情報とを参照することによりｌｏｎｇをｃｈａｒに変換すればよいことを知ってなされるものであり、戻り値整合処理部１５２はこれに従い４バイトの戻り値であるＶの下位１バイトを１バイト変数ｃ及びｄに設定する命令、即ちｃ＝（ｃｈａｒ）Ｖ及びｄ＝（ｃｈａｒ）Ｖを生成する。なお、この中間表現は、コード化・出力部１２０により機械語命令列にされる段階では、例えば、スタックポインタで示されたスタック領域に連続して格納された４バイトの２つの戻り値のうちの１つの下位１バイトを、１バイトの変数ｃ及びｄに割り付けられているデータ領域に転送する命令に変換される。
【００４８】
この例では、変換元のライブラリには２番目の戻り値はないので（ステップＳ３１３、Ｓ３１０）、以上でライブラリ・関数呼出命令生成処理は終了し、状態７０１で示した中間表現は、状態７０２のように変換される。なお、上述のライブラリ・関数呼出命令生成処理については、変換先ライブラリが変換先関数であっても同様の処理となる。
【００４９】
以上、本発明に係るプログラム変換装置について、実施の形態に基づいて説明したが、本発明はこれらの実施の形態に限られないことは勿論である。即ち、
（１）本実施の形態では、ライブラリ対応表記憶部１６０に格納されているライブラリ対応表は、変換元ライブラリテーブルと変換先ライブラリテーブルとからなることとしたが、これは、変換先ライブラリが、複数の変換元ライブラリに対応し得ることに適した形態としたものであり、ライブラリ対応表はこれに限定されることはなく、変換前のオブジェクトプログラムから呼び出され得るライブラリと、変換後のオブジェクトプログラムから呼び出され得るライブラリとの間の引数及び戻り値の対応関係を示す情報であればその構造はいかなるものであってもよい。
（２）本実施の形態では、ライブラリ呼出命令は識別番号によりライブラリを特定するものとしたが、これに限定されることはなく、他の形式の識別情報によってライブラリを特定するものであってもよく、この場合、ライブラリ対応表内の識別情報は番号でなく、前記形式のものとなる。
（３）本実施の形態では、変換元ライブラリと変換先ライブラリとの引数及び戻り値についての、個々の要素の相違、即ち、引数の数の相違、対応する引数同士の引数番号の相違、対応する引数同士のデータ型の相違や、戻り値の数の相違、対応する戻り値同士の番号の相違、対応する戻り値同士のデータ型の相違に対応することができるようにしたが、これら全ての相違に対応するのではなくてもよく、データ型の相違が生じ得ない場合には、データ型の型変換に関連する構成要素は不要である。
（４）本実施の形態では、データ型は１バイト型、２バイト型、４バイト型等があるとしたが、これに限定されることはなく、整数型、正負の符号付き型、浮動小数点型等でもよく、２バイトのデータを４つ並列に演算対象とするような型であってもよい。
（５）本実施の形態では、関数定義付加部１７０が、関数定義記憶部１９０に記憶されている中間表現で表された変換先関数を、中間表現記憶部１３０内に付加することとしたが（ステップＳ２０８）、関数定義記憶部１９０内に記憶されている変換先関数は中間表現でなくて変換後のプラットフォームで動作可能な機械語命令列であってもよく、この場合は、ステップＳ２０８に代えて、コード化段階で呼出のためのアドレス解決等を行い付加することとなる。また、ステップＳ２０７のようにライブラリ呼出命令を検出する毎に、変換先関数を付加すべきか否かを判断するのではなく、付加すべき変換先関数の識別番号を登録しておいて、まとめて中間表現記憶部１３０内に付加することとしてもよい。
【００５０】
なお、ライブラリ呼出命令が、変換後のプラットフォームの関係により、呼出対象が内部モジュールか外部プログラムモジュールかによって異なる命令にしなければならない場合には、変換先関数を内部モジュールとして付加した際に当該変換先関数を呼び出すライブラリ呼出命令を内部モジュールを呼出対象とする命令になるように変換すればよい。
（６）本実施の形態では、ＵＤ情報に基づいて特定した引数の定義箇所を参照して、引数の型変換を行うこととしたが、引数をレジスタによりライブラリに渡すようなものであれば、ライブラリ呼出命令の直前で、引数が格納されるべきレジスタの内容を型変換してもよい。例えば、変換前の中間表現において、引数が２バイトのレジスタに格納された後にライブラリを呼び出す命令が置かれており、変換後は、変換先ライブラリに４バイトのレジスタで引数を渡すべき場合には、前記２バイトのレジスタの内容を４バイトの下位２バイトに格納するように型変換して、引数格納用の４バイトのレジスタに格納するような命令をライブラリ呼出命令の直前に置けばよい。
（７）本実施の形態おけるプログラム変換装置の処理手順（図６、図７のフローチャートの手順等）を機械語プログラムにより実現し、これを記録媒体に記録して流通・販売の対象にしても良い。このような記録媒体には、ＩＣカード、光ディスク、フレキシブルディスク、ＲＯＭ等があるが、これらに記録された機械語プログラムは、汎用のコンピュータ又はプログラム実行機能を有する家電機器にインストールされることにより利用に供される。即ち、汎用のコンピュータ又は家電機器は、インストールした上記機械語プログラムを逐次実行して、実施の形態に示したようなプログラム変換装置を実現する。
【００５１】
また、汎用のコンピュータ又は家電機器に上述のプログラム変換装置の処理手順を実行させるためのコンピュータプログラムは、ハードディスク等の記録媒体及び各種通信路等を介して流通させ頒布することもできる。
【００５２】
【発明の効果】
以上の説明から明らかなように、本発明に係るプログラム変換装置は、第１のプラットフォーム上で動作可能な外部プログラムモジュールである変換元ライブラリを呼び出す変換元ライブラリ呼出命令を含み当該プラットフォーム上で動作する第１のオブジェクトプログラムを、前記第１のオブジェクトプログラムに含まれる命令およびデータの内容を抽出した中間表現へ変換した後、第２のプラットフォーム上で動作する第２のオブジェクトプログラムに変換するプログラム変換装置であって、変換元ライブラリと、当該変換元ライブラリと同一機能を実現可能であり第２のプラットフォーム上で動作可能な外部プログラムモジュールである変換先ライブラリとを対応づけたライブラリ対応関係情報であって、前記変換先ライブラリの引数である変換先引数それぞれのデータ型が何であるかという情報と、当該変換先ライブラリに対応する変換元ライブラリの引数である変換元引数それぞれのデータ型が何であるかという情報と、前記変換元ライブラリの何番目の変換元引数が前記変換先ライブラリの何番目の変換先引数に対応するのかという対応関係とを示す引数対応関係情報を含む、ライブラリ対応関係情報を記憶するライブラリ対応表記憶手段と、前記第１のオブジェクトプログラムを読み込み、中間表現に変換する読込・中間表現化手段と、前記読込・中間表現化手段により前記中間表現に変換された第１のオブジェクトプログラムを格納する中間表現記憶手段と、前記中間表現に変換された第１のオブジェクトプログラム中の変換元ライブラリ呼出命令を検出するライブラリ呼出命令検出手段と、前記ライブラリ呼出命令検出手段により検出された変換元ライブラリ呼出命令を、前記ライブラリ対応関係情報を参照することにより、当該変換元ライブラリ呼出命令が呼び出す変換元ライブラリに対応する変換先ライブラリを呼び出す変換先ライブラリ呼出命令に変換する命令変換手段と、前記ライブラリ呼出命令検出手段により検出された前記ライブラリ呼出命令が呼び出す変換元ライブラリへの引数の値を設定する引数設定命令を、前記中間表現に変換された第１のオブジェクトプログラム中から検出する引数設定命令検出手段と、前記引数設定命令検出手段により検出された引数設定命令を、前記引数対応関係情報を参照することにより、当該引数設定命令が設定する前記値を、前記変換元引数に対応する変換先引数のデータ型となるように型変換して、前記変換先ライブラリへの引数として設定する変換先引数設定命令に、変換する引数設定命令変換手段とを備えることを特徴とする。
【００５３】
これにより、本発明に係るプログラム変換装置に入力されるオブジェクトプログラム中の変換元ライブラリを呼び出すライブラリ呼出命令は、変換先ライブラリを呼び出すライブラリ呼出命令に変換され、変換元ライブラリに渡す引数を設定する命令は、変換元ライブラリと変換先ライブラリとの引数に要求される条件の相違を吸収して、変換先ライブラリに渡す引数を設定する命令に変換されるので、前記プログラム変換装置に出力されるオブジェクトプログラムは、第２のプラットフォーム上で動作可能なものとなる。
【００５５】
即ち、変換元ライブラリの引数のデータ型と変換先ライブラリの引数のデータ型とが相違している場合においても、型変換によりこの相違を吸収するので、変換元ライブラリを呼び出すライブラリ呼出命令を含むオブジェクトプログラムは、正常に変換先ライブラリを呼び出すオブジェクトプログラムに変換される。
【００５６】
また、前記ライブラリ対応関係情報はさらに、前記変換元ライブラリの戻り値である変換元戻り値それぞれのデータ型が何であるかという情報と、当該変換元ライブラリに対応する変換先ライブラリの戻り値である変換先戻り値それぞれのデータ型が何であるかという情報と、前記変換元ライブラリの何番目の変換元戻り値が前記変換先ライブラリの何番目の変換先戻り値に対応するのかという対応関係とを示す戻り値対応関係情報を含み、前記プログラム変換装置はさらに、前記ライブラリ呼出命令検出手段により検出された前記ライブラリ呼出命令が呼び出す変換元ライブラリが返却する戻り値を利用する戻り値利用命令を、第１のオブジェクトプログラム中から検出する戻り値利用命令検出手段と、前記戻り値利用命令検出手段により検出された戻り値利用命令を、前記戻り値対応関係情報を参照することにより、前記変換先ライブラリが返却する戻り値を前記変換元戻り値のデータ型となるように型変換して利用する変換先戻り値利用命令に、変換する戻り値利用命令変換手段とを備えることとすることもできる。
【００５８】
これにより、たとえ、変換元ライブラリが戻り値を返却するようなものであって、変換元ライブラリの戻り値のデータ型と変換先ライブラリの戻り値のデータ型とが相違している場合においても、型変換によりこの相違を吸収するので、変換元ライブラリを呼び出すライブラリ呼出命令を含むオブジェクトプログラムは、正常に変換先ライブラリを呼び出すオブジェクトプログラムに変換される。
【００５９】
また、前記プログラム変換装置はさらに、前記第２のオブジェクトプログラムに前記変換先ライブラリを内部モジュールとして結合する内部モジュール結合手段を備えることとすることもできる。
これにより、第２のプラットフォーム上には、変換元ライブラリと同一機能を実現することができるライブラリが存在しない場合であっても、出力されるオブジェクトプログラムには、そのようなライブラリが内部モジュールとして結合されるため、そのオブジェクトプログラムは第２のプラットフォーム上で動作可能となる。
【００６０】
このように、本発明は、プラットフォームの相違に加えて、実行環境の相違、即ちオブジェクトプログラムから実行時に呼び出される外部プログラムモジュールに関しての相違までをも吸収して、オブジェクトプログラムを別の実行環境で動作するように変換する有用な技術であり、その実用的効果は多大である。
【図面の簡単な説明】
【図１】本発明の実施の形態に係るプログラム変換装置の構成を示す図である。
【図２】変換元ライブラリテーブル４００の構成を示す図である。
【図３】変換先ライブラリテーブル５００の構成を示す図である。
【図４】変換元ライブラリ情報と変換先ライブラリ・関数情報との例を示す図である。
【図５】関数付加状態情報記憶部１８０に保持される関数付加状態情報の例を示す図である。
【図６】プログラム変換装置１００の動作を示すフローチャートである。
【図７】ライブラリ・関数呼出命令生成部１５０より行われるライブラリ・関数呼出命令生成処理を示すフローチャートである。
【図８】ＵＤ情報を用いて引数の定義箇所をサーチするイメージを示す図である。
【図９】ＤＵ情報を用いて戻り値の使用箇所をサーチするイメージを示す図である。
【図１０】ライブラリ関数呼出命令生成処理の前後における中間表現のイメージを示す図である。
【符号の説明】
１００    プログラム変換装置
１０１    入力オブジェクトプログラム
１０２    出力オブジェクトプログラム
１１０    読込・中間表現化部
１２０    コード化・出力部
１３０    中間表現記憶部
１４０    ライブラリ呼出命令検出部
１５０    ライブラリ・関数呼出命令生成部
１５１    引数整合処理部
１５２    戻り値整合処理部
１６０    ライブラリ対応表記憶部
１７０    関数定義付加部
１８０    関数付加状態情報記憶部
１９０    関数定義記憶部
４００    変換元ライブラリテーブル
４０１    変換元ライブラリ情報
５００    変換先ライブラリテーブル
５０１    変換先ライブラリ・関数情報
【図１】
0004130713.tif 000002
【図２】
0004130713.tif 000003
【図３】
0004130713.tif 000004
【図４】
0004130713.tif 000005
【図５】
0004130713.tif 000006
【図６】
0004130713.tif 000007
【図７】
0004130713.tif 000008
【図８】
0004130713.tif 000009
【図９】
0004130713.tif 000010
【図１０】
0004130713.tif 000011