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

プログラム変換装置

Info

Publication number
JP2000259427A
JP2000259427A JP6566199A JP6566199A JP2000259427A JP 2000259427 A JP2000259427 A JP 2000259427A JP 6566199 A JP6566199 A JP 6566199A JP 6566199 A JP6566199 A JP 6566199A JP 2000259427 A JP2000259427 A JP 2000259427A
Authority
JP
Japan
Prior art keywords
replacement
program
subroutine
function
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.)
Pending
Application number
JP6566199A
Other languages
English (en)
Inventor
Toshiyuki Sakata
俊幸 坂田
Tsutomu Yoshida
力 吉田
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 Holdings Corp
Original Assignee
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 Matsushita Electric Industrial Co Ltd filed Critical Matsushita Electric Industrial Co Ltd
Priority to JP6566199A priority Critical patent/JP2000259427A/ja
Publication of JP2000259427A publication Critical patent/JP2000259427A/ja
Pending legal-status Critical Current

Links

Landscapes

  • Devices For Executing Special Programs (AREA)

Abstract

(57)【要約】 【課題】 小さいコードサイズの実行形式オブジェクト
プログラムの生成を行うためのプログラム変換装置を提
供する。 【解決手段】 置換候補記憶部104は、ライブラリ関
数x等の関数名とその関数xを構成する機械語命令列と
の組を記憶し、関数翻訳部106は、ソースプログラム
中の関数yの関数定義を機械語命令列に翻訳して、翻訳
結果が置換候補記憶部104に記憶された機械語命令列
と同一となった場合には、関数xを置換元関数として関
数yを置換先関数とした置換情報を作成し、関数yの関
数定義の翻訳結果の代わりに置換情報をファイルに出力
する。翻訳部103により出力されたファイルを参照し
て、関数アドレス置換部111は、置換情報に基づき、
置換元関数についてのアドレスを参照する全ての機械語
命令を置換先関数についてのアドレスを参照する機械語
命令に置換する。

Description

【発明の詳細な説明】
【0001】
【発明の属する技術分野】本発明は、高級言語で記述さ
れたソースプログラム等を基にして実行形式のオブジェ
クトプログラムを作成するためのプログラム変換装置に
関する。
【0002】
【従来の技術】従来、高級言語で記述されたソースプロ
グラムを、コンピュータ上で実行可能な機械語のプログ
ラムに変換するために、コンパイラ、リンカ等のプログ
ラム変換装置が用いられている。コンパイラは、高級言
語で記述されたソースプログラムを、相対形式のオブジ
ェクトプログラムに翻訳するものであり、リンカは、相
対形式のオブジェクトプログラムと、他の相対形式のオ
ブジェクトプログラム又は各種ライブラリとを連結し、
各プログラムの主メモリ中での格納アドレスを決定し、
また各プログラム間のアドレス参照を解決して、実行形
式のオブジェクトプログラム(ロードモジュール等とも
いう。)を生成するものである。
【0003】ここで、オブジェクトプログラムは、ソー
スプログラムから変換される機械語のプログラムであ
り、機械語命令列の他、実行に必要な付随的情報を含
む。また、相対形式のオブジェクトプログラムは、プロ
グラムが実行されるアドレス情報や、他に使用している
サブルーチンとの結合等の情報が未処理であるため、そ
のまま実行させることのできない状態のプログラムであ
り、実行形式のオブジェクトプログラムは、これらの未
処理の情報が全て処理され、そのまま実行可能な状態の
プログラムである。
【0004】ライブラリとは、再配置可能な相対形式オ
ブジェクトプログラムの集合であり、例えば、C言語に
おける標準入出力ライブラリ等がある。以下、コンパイ
ラ及びリンカとしての機能を備える従来のプログラム変
換装置の動作について簡単に説明する。図3及び図4
は、C言語で記述されたソースプログラムの例を示す図
である。
【0005】図3のソースプログラム中の関数f及び関
数gは、復帰のみを関数定義の内容としたサブルーチン
であり、図4のソースプログラム中の関数hは、関数f
と関数gとを呼び出すことを関数定義の内容としたもの
である。図3に示すソースプログラムを内容とするファ
イルAと、図4に示すソースプログラムを内容とするフ
ァイルBとが従来のプログラム変換装置に入力される
と、プログラム変換装置は、入力されたファイルを翻訳
することにより、ファイルA、ファイルBそれぞれに対
応する相対形式のオブジェクトプログラムを生成し、こ
れらの相対形式のオブジェクトプログラムを連結するこ
とにより、実行形式のオブジェクトプログラムを生成し
て実行ファイルとして出力する。
【0006】図11は、従来のプログラム変換装置が図
3及び図4に示すソースプログラムに基づいて生成した
実行形式のオブジェクトプログラムの内容を示す図であ
る。図中では、説明の便宜上、オブジェクトプログラム
については逆アセンブルしたイメージ、即ちアセンブリ
言語レベルのニーモニックでプログラム内容を表現して
いる。また、図中では、「//」の右に簡単な説明を付
している。
【0007】図11中、「f」、「g」、「h」は、そ
れぞれ関数f、関数g、関数hのアドレスを意味するラ
ベルであり、「rts」は、サブルーチンから復帰する
復帰命令であり、「jsr f」、「jsr g」は、
それぞれ関数fのアドレスに分岐するサブルーチンコー
ル命令、関数gのアドレスに分岐するサブルーチンコー
ル命令である。
【0008】このように、従来のプログラム変換装置
は、ソースプログラム中の関数f及び関数gのいずれの
関数定義をも復帰命令に変換して、即ち同一の機械語命
令に変換して、これらを含む実行ファイルを生成する。
なお、上述した実行ファイルの内容である機械語の実行
形式オブジェクトプログラムは、最終的にはコンピュー
タの主メモリに格納され実行されるものである。
【0009】
【発明が解決しようとする課題】実行形式オブジェクト
プログラムのコードサイズの縮小化を図ることは一般的
に望ましく、また特に、搭載するメモリの容量の小さ
い、マイコン組込型の家電機器の分野においては強く望
まれている。そこで、本発明は、従来にない新たな方法
により、小さいコードサイズの実行形式オブジェクトプ
ログラムの生成を行うためのプログラム変換装置を提供
することを目的とする。
【0010】
【課題を解決するための手段】本発明は、従来のプログ
ラム変換装置が、ソースプログラム中の関数定義を翻訳
して生成した機械語命令列と、ライブラリ内の機械語命
令列或いは既に翻訳されている関数定義の機械語命令列
と同一である場合であっても、同一でない場合と区別す
ることなく翻訳及び連結を行うため、最終的に生成され
る実行形式のオブジェクトプログラム中に関数単位で重
複した機械語命令列が含まれてしまう点に着目してこれ
を改善すべくなされたものである。
【0011】即ち、上述の課題を解決するために、本発
明に係るプログラム変換装置は、相対形式のオブジェク
トプログラムを自装置の内部又は外部から取得するオブ
ジェクトプログラム取得手段と、置換元サブルーチンの
識別情報と置換先サブルーチンの識別情報との組からな
る置換情報を自装置の内部又は外部から取得する置換情
報取得手段と、前記置換情報取得手段により取得された
置換情報に基づいて、前記オブジェクトプログラム取得
手段により取得された相対形式のオブジェクトプログラ
ム中の、前記置換元サブルーチンについてのアドレスを
参照する機械語命令を、前記置換先サブルーチンについ
てのアドレスを参照する機械語命令に変換する変換手段
とを備えることを特徴とする。
【0012】上記構成により、相対形式のオブジェクト
プログラムを格納するファイル内に、実体が含まれず、
未解決のアドレス情報が含まれているところの第1のサ
ブルーチンが、リンクの際に用いられるライブラリファ
イル或いは他のオブジェクトプログラムファイル内に含
まれる第2のサブルーチンと同等である場合において、
第1のサブルーチンを置換元サブルーチンとし第2のサ
ブルーチンを置換先サブルーチンとした置換情報を与え
れば、本発明に係るプログラム変換装置は当該置換情報
を取得して、相対形式のオブジェクトプログラムを変換
することにより結果的に第1のサブルーチンのアドレス
が参照されないオブジェクトプログラムを生成する。従
って、これにより、変換元となった相対形式のオブジェ
クトプログラムとリンクするものである他のオブジェク
トプログラム又はライブラリファイル中の第1のサブル
ーチンの実体である機械語命令列を削除することが可能
となり、このリンクによって作成される実行形式のオブ
ジェクトプログラムのサイズを縮小することが可能にな
る。
【0013】
【発明の実施の形態】以下、本発明の実施の形態につい
て、図面を用いて説明する。 <構成>図1は、本発明の実施の形態に係るプログラム
変換装置100の構成図である。
【0014】なお、便宜上、図1には入力ファイルA1
01、入力ファイルB102、出力ファイルA107、
出力ファイルB108、ライブラリファイル109及び
実行ファイル113をも併せて記載している。ここで、
入力ファイルA101及び入力ファイルB102は、C
言語で記述されたソースプログラムを内容とするファイ
ルである。
【0015】出力ファイルA107及び出力ファイルB
108は、それぞれ入力ファイルA101及び入力ファ
イルB102の内容であるソースプログラムを翻訳した
結果として生成される相対形式のオブジェクトプログラ
ムである機械語命令列を格納したファイルであり、ライ
ブラリファイル109は、ライブラリ関数の機械語命令
列、即ち、種々の再配置可能な汎用的サブルーチンを格
納したファイルである。
【0016】また、実行ファイル113は、出力ファイ
ルA107、出力ファイルB108及びライブラリファ
イル109の機械語命令列を、必要に応じて連結するこ
とにより生成された実行形式のオブジェクトプログラム
を格納したファイルである。プログラム変換装置100
は、コンピュータのメモリに格納された制御プログラム
がCPUにより実行されることにより、コンパイラとリ
ンカとの機能を実現する装置であり、機能的構成要素と
して、翻訳部103と、連結部110とを備える。
【0017】翻訳部103は、1ファイルを単位とし
て、C言語で記述されたソースプログラムを機械語命令
列からなる相対形式のオブジェクトプログラムに翻訳し
て、翻訳結果のオブジェクトプログラムを出力ファイル
として出力するものである。但し、翻訳部103は、従
来のコンパイラと異なり、必要に応じて、ソースプログ
ラム中の関数定義を翻訳した結果生成される機械語命令
列を出力ファイルの内容として出力する代わりに、置換
情報を生成して出力ファイルの内容として出力する。こ
こで、置換情報とは、関数毎に必要に応じて生成される
もので、関数を別の関数で置換することを示す情報であ
り、置換前の関数名と置換後の関数名とから構成され
る。ここで置換前の関数名は、置換元の関数の関数名、
即ち置換される側の関数の関数名を意味し、置換後の関
数名は、置換先の関数の関数名、即ち置換の結果となる
関数の関数名を意味する。
【0018】この翻訳部103は、置換候補記憶部10
4、置換候補検出部105及び関数翻訳部106を有す
る。置換候補記憶部104は、置換の候補となる関数に
ついての関数名とその関数の処理内容である機械語命令
列とを対にした置換候補情報を予め複数記憶しており、
置換候補検出部105により参照される。
【0019】図2は、置換候補記憶部104の記憶内容
の例を示す図である。同図に示すように、置換候補情報
は、例えば、_retfuncとrtsとの組であり、
これは、置換候補となる関数として、_retfunc
という関数名の関数があり、その関数の内容は、rt
s、即ち、関数呼び出しの呼び出し元に復帰する機械語
命令であることを意味する。なお、予め置換候補情報の
要素とされている置換候補となる関数についてのオブジ
ェクトプログラムは、予めライブラリファイル109に
格納されている。
【0020】置換候補検出部105は、関数翻訳部10
6によりソースプログラム中の関数定義を指定して呼び
出され、置換候補記憶部104を参照して、その関数定
義を翻訳した結果の機械語命令列が、いずれかの置換候
補情報の要素である機械語命令列と同一であるか否かを
判定し、同一である場合にのみ、その機械語命令列と対
をなす関数名を返却する。
【0021】関数翻訳部106は、入力ファイルの内容
であるソースプログラムを所定のメモリ領域に読み込み
機械語命令列に翻訳し、ソースプログラム中の関数定義
を翻訳した毎に、その関数定義を指定して置換候補検出
部105を呼び出し、置換候補検出部105が関数名を
返却した場合には、置換前の関数名と、返却された置換
後の関数名との組である置換情報を出力ファイルに出力
し、置換候補検出部105が関数名を返却しなかった場
合には、関数定義を翻訳した機械語命令列を出力ファイ
ルに出力する処理を行う。なお、ソースプログラムを読
み込んだメモリ領域は置換候補検出部105からも参照
可能である。また、関数翻訳部106は、翻訳結果の機
械語命令列をもメモリ領域に格納し、このメモリ領域も
置換候補検出部105から参照可能である。
【0022】また、連結部110は、出力ファイルA1
07、出力ファイルB108等の出力ファイルとライブ
ラリファイルとを入力として、実行形式のオブジェクト
プログラムを内容とする実行ファイルを出力するもので
ある。この連結部110は、関数アドレス置換部111
とファイル連結部112とを有する。
【0023】関数アドレス置換部111は、入力される
出力ファイルA107、出力ファイルB108等の出力
ファイルに置換情報が含まれる場合であって、置換情報
のうち置換前の関数名に対応する関数についての関数定
義の内容である機械語命令列が出力ファイル中に含まれ
ていないときには、置換前の関数のアドレスを参照する
全ての機械語命令を、置換後の関数のアドレスを参照す
る機械語命令に置換するものである。また、関数アドレ
ス置換部111は、最終的には、出力ファイル内から置
換情報を削除する。
【0024】ファイル連結部112は、従来のリンカと
同等のプログラム連結機能を実行するものであり、関数
アドレス置換部111の動作後に、出力ファイル及びラ
イブラリファイル内のプログラムを連結して実行形式の
オブジェクトプログラムを生成して実行ファイルとして
出力する。 <動作>以下、上述した構成を備えるプログラム変換装
置の動作について説明する。
【0025】ここでは、従来の技術の項の説明に用いた
図3及び図4のソースプログラムを入力した場合を例と
して説明する。入力ファイルA101の内容は、図3に
示すC言語のソースプログラムであり、上述したよう
に、復帰命令のみを関数定義の内容としたサブルーチン
である関数fと関数gとが記述されている。また、入力
ファイルB102の内容は、図4に示すC言語のソース
プログラムであり、上述したように、関数fと関数gと
を呼び出すことを関数定義の内容とした関数hが記述さ
れている。
【0026】まず、翻訳部103の動作について説明す
る。図5は、翻訳部103の動作を示すフローチャート
である。翻訳部103が入力ファイルA101の入力を
受け付けると(ステップS901)、関数翻訳部106
に、ソースプログラムの翻訳を開始させる。関数翻訳部
106は、入力ファイルA101のソースプログラム中
に、未だ着目していない関数定義がなくなれば(ステッ
プS902)、noの分岐に進んで処理を終了するが、
未だ着目していない関数定義がある限りステップS90
2においてyesの分岐に進み、1つの関数定義に着目
して、関数定義を機械語命令列に翻訳する(ステップS
903)。従って、関数翻訳部106は、関数fの関数
定義を翻訳して、翻訳結果の機械語命令列であるrts
を所定のメモリ領域に格納する。この関数定義を機械語
命令列に翻訳する処理は従来のコンパイラにおける翻訳
処理と同等である。
【0027】関数翻訳部106は、関数定義の翻訳後、
当該関数定義を指定して、置換候補検出部105に、当
該関数定義を翻訳した結果の機械語命令列が、置換候補
記憶部104に記憶されているいずれかの置換候補情報
の要素である機械語命令列と同じか判断させる(ステッ
プS904)。同じである場合には、置換候補検出部1
05は、置換候補情報の要素である関数名を関数翻訳部
106に返却し、同じでない場合には、置換候補検出部
105は、関数翻訳部106に何も返却しない。
【0028】本例においては、置換候補検出部105
は、関数fの翻訳結果であるrtsが、図2に示した置
換候補記憶部104に格納されているため、関数名であ
る_retfuncを関数翻訳部106に返却する。ス
テップS904の後、関数翻訳部106は、置換候補検
出部105から関数名を返却されたならば、着目してい
る関数定義に係る関数名を置換前の関数名とし、その返
却された関数名を置換後の関数名とした置換情報を、出
力ファイルに出力し(ステップS905)、また、置換
候補検出部105から関数名を返却されなかったなら
ば、所定のメモリ領域に格納してある機械語命令列を出
力ファイルに出力する(ステップS906)。
【0029】本例においては、関数翻訳部106は、s
ubst f,_retfuncという置換情報を出力
ファイルA107に出力する。関数翻訳部106は、ス
テップS905又はステップS906により1つの関数
定義についての処理を終了し、ステップS902に戻
り、別の関数定義に着目してステップS903〜S90
6の処理を行う。
【0030】本例においては、関数翻訳部106は、入
力ファイルA101中の関数gの関数定義に着目してr
tsに翻訳し(ステップS903)、置換候補検出部1
05に、置換候補情報の機械語命令列と同じか判断させ
(ステップS904)、同じと判断されて、関数名であ
る_retfuncが置換候補検出部105から返却さ
れると、subst g,_retfuncという置換
情報を出力ファイルA107に出力し(ステップS90
5)、入力ファイルA101中には未だ着目していない
関数定義が存在しないため入力ファイルA101につい
ての翻訳を終了する。
【0031】この結果、出力ファイルA107の内容
は、図6に示す様に2つの置換情報になる。ここで、s
ubst f,_retfuncは、関数fを関数_r
etfuncに置換することを示す置換情報であり、s
ubst g,_retfuncは、関数gを関数_r
etfuncに置換することを示す置換情報である。
【0032】また、翻訳部103が入力ファイルB10
2の入力を受け付けると(ステップS901)、関数翻
訳部106に、ソースプログラムの翻訳を開始させる。
関数翻訳部106は、入力ファイルB102中の関数h
の関数定義が存在するのでこれに着目し(ステップS9
02)、機械語命令列に翻訳し(ステップS903)、
この関数定義を指定して置換候補検出部105を呼び出
す。関数hの関数定義の翻訳結果である機械語命令列と
同一の機械語命令列は置換候補記憶部104に格納され
ていないため置換候補検出部105は、関数名を返却し
ない(ステップS904)。従って、関数翻訳部106
は、関数hの関数定義の翻訳結果である機械語命令列を
出力ファイルB108に出力する(ステップS90
6)。この後、入力ファイルB102中には、他の関数
定義が存在しないため(ステップS902)、関数翻訳
部106は翻訳処理を終了する。
【0033】この結果、出力ファイルB108の内容
は、図7に示す様になる。図7中、「h」は、関数hの
アドレスを意味するラベルであり、「jsr f」、
「jsr g」は、それぞれ関数fのアドレスに分岐す
るサブルーチンコール命令、関数gのアドレスに分岐す
るサブルーチンコール命令であり、「rts」は、復帰
命令である。なお、出力ファイルB108中には、関数
f及び関数gに関する未解決なアドレス情報が含まれる
ことになる。
【0034】次に、連結部110の動作について説明す
る。連結部110は、翻訳部103により作成された出
力ファイルA107及び出力ファイルB108と、ライ
ブラリファイル109とを参照して、実行ファイル11
3を生成する。図8は、連結部110の動作を示すフロ
ーチャートである。
【0035】まず、連結部110は、出力ファイルA1
07、出力ファイルB108及びライブラリファイル1
09を取得する(ステップS1001)。即ち、連結部
110は、これらのファイルにアクセスするための情報
を取得し、以後、これらのファイルを参照する。従っ
て、これらのファイル中に置換情報が含まれている場合
には、連結部110は、置換情報を取得することにな
る。
【0036】ここで、ライブラリファイル109の内容
は、図9に示すものであるとする。ライブラリファイル
109中にはライブラリ関数_retfunc等の機械
語命令列が含まれている。図9中、「_retfun
c」は、関数_retfuncのアドレスを意味するラ
ベルであり、「rts」は、復帰命令である。また、出
力ファイルA107及び出力ファイルB108の内容
は、上述したように図6及び図7に示すものであるとす
る。
【0037】次に、連結部110は、関数アドレス置換
部111に、置換情報に対応した処理を行わせる(ステ
ップS1002〜ステップS1005)。関数アドレス
置換部111は、出力ファイルA107及び出力ファイ
ルB108の中に未処理の置換情報が含まれているかど
うか否かを検査して、未処理の置換情報が含まれている
ならば(ステップS1002)、1つの未処理の置換情
報に着目し(ステップS1003)、この着目した置換
情報の要素である置換前の関数名で示される関数のラベ
ルを、置換後の関数名で示される関数のラベルに置換す
る(ステップS1004)。
【0038】即ち、その置換情報の要素である置換前の
関数名で示される関数についての未解決なアドレス情報
が、いずれかの出力ファイル中に存在すれば、それをそ
の置換情報の要素である置換後の関数名で示される関数
についての未解決なアドレス情報に置換する。このこと
は、結果的には、相対形式のオブジェクトプログラム中
の置換前の関数のアドレスを参照する機械語命令を、置
換後の関数のアドレスを参照する機械語命令に置換する
ことにつながる。従って、本明細書中では、未解決なア
ドレス情報の置換を、そのアドレス情報を参照する機械
語命令の置換とも表現している。
【0039】ステップS1004の処理の後に、関数ア
ドレス置換部111は、再度、未処理の置換情報が存在
するかの検査に戻り(ステップS1002)、出力ファ
イルA107及び出力ファイルB108の中に含まれる
置換情報の数だけ、ステップS1003及びステップS
1004の処理を行う。全ての置換情報についてステッ
プS1003及びステップS1004の処理をし終えた
場合には(ステップS1002)、関数アドレス置換部
111は、全ての置換情報を出力ファイルA107及び
出力ファイルB108の中から削除する(ステップS1
005)。なお、出力ファイルA107及び出力ファイ
ルB108の中に最初から置換情報がない場合には、削
除はできないので行わない。
【0040】従って、関数アドレス置換部111によ
り、出力ファイルA107に含まれる置換情報(sub
st f,_retfunc)が着目され、出力ファイ
ルB108に含まれる関数fについての未解決なアドレ
ス情報は、関数_retfuncについての未解決なア
ドレス情報に変更される。これにより、アセンブリ言語
レベルのニーモニックで表現すれば、「jsr f」は
「jsr _retfunc」に変換されることにな
る。続いて、出力ファイルA107に含まれる置換情報
(subst g,_retfunc)が着目され、出
力ファイルB108に含まれる関数gについての未解決
なアドレス情報は、関数_retfuncについての未
解決なアドレス情報に変更される。これにより、機械語
命令「jsrg」は機械語命令「jsr _retfu
nc」に置換されることになる。また、出力ファイルA
107に含まれる置換情報は全て削除される。
【0041】関数アドレス置換部111による、置換情
報に対応した処理(ステップS1002〜ステップS1
005)が終了した後に、連結部110は、ファイル連
結部112に従来のリンカと同等のプログラム連結機能
を実行させる(ステップS1006)。ファイル連結部
112によるプログラム連結機能により、出力ファイル
とライブラリファイル内のプログラムは連結され、即ち
アドレス情報が全て解決された実行形式のオブジェクト
プログラムが生成された後、ファイル連結部112は、
このオブジェクトプログラムを実行ファイル113とし
て出力する(ステップS1007)。
【0042】この結果、実行ファイル113の内容は、
図10に示すものとなる。この実行ファイル113の内
容である機械語の実行形式オブジェクトプログラムは、
最終的にはコンピュータの主メモリに格納され実行され
る。図10中、「_retfunc」、「h」は、それ
ぞれ関数_retfunc、関数hのアドレスを意味す
るラベルであり、「rts」は、サブルーチンから復帰
する復帰命令であり、「jsr _retfunc」
は、関数_retfuncのアドレスに分岐するサブル
ーチンコール命令である。
【0043】このように、プログラム変換装置100
は、関数f及び関数gについての機械語命令列の代わり
にライブラリ関数_retfuncの機械語命令列を含
む実行形式のオブジェクトプログラムを作成する。図3
及び図4に示すC言語のソースプログラムを基にして従
来のプログラム変換装置が生成した実行形式のオブジェ
クトプログラム(図11参照)と比較すると、プログラ
ム変換装置100は、同じソースプログラムを基にし
て、機械語命令の数が少なくコードサイズを削減した実
行形式のオブジェクトプログラム(図10参照)を生成
することができる。
【0044】以上、本発明に係るプログラム変換装置に
ついて実施形態に基づいて説明したが、本発明はこのよ
うな実施形態に限られないことは勿論である。即ち、 (1)本実施の形態では、置換候補記憶部104に格納
される置換候補情報は、関数名と機械語命令列との対か
らなるものとしたが、関数名は関数を識別するための情
報であれば何でもよく、また、機械語命令列の代わり
に、ソースプログラム中に記述される関数定義、又は中
間コードを関数名と対にしてもよい。本実施の形態で
は、ソースプログラムを翻訳した後の機械語命令列が置
換候補情報の要素である機械語命令列と同じであるか判
断することとしたが(ステップS904参照)、前述の
ようにソースプログラム中に記述される関数定義を置換
候補情報の要素とする場合には、翻訳前の高級言語で記
述されたソースプログラムのままの状態でステップS9
04の判断をすることとしてもよく、また、中間コード
を置換候補情報の要素とする場合には、ソースプログラ
ムを中間コードに置き換えた翻訳途中の状態でステップ
S904の判断をすることとしてもよい。
【0045】なお、本実施の形態では、C言語のソース
プログラムを例として用い、関数を置換することについ
て説明したが、本発明は、C言語及び関数に限定される
ことはなく、相対形式のオブジェクトプログラムにおけ
るサブルーチンを置換するものである。 (2)本実施の形態では、置換候補となる関数について
のオブジェクトプログラムが予めライブラリファイル1
09に格納されていることとし、置換候補記憶部104
には置換候補情報が予め記憶されていることとしたが、
翻訳部103において、ソースプログラム中の関数定義
を機械語命令列に翻訳したときに、その機械語命令列と
その関数の関数名を対にして置換候補情報として置換候
補記憶部104に追加登録することとしてもよい。 (3)本実施の形態では、置換候補検出部105は、関
数定義を与えられて、置換候補情報を参照することによ
り、与えられた関数定義についての機械語命令列と置換
候補情報の要素である機械語命令列とが同じであるかを
判断することとしたが(ステップS904参照)、置換
候補検出部105が、C++言語で記述されたソースプ
ログラムにおいてクラス定義内で定義され、かつ仮想関
数テーブルで参照される以外には、参照或いは使用され
ることのない仮想関数が、関数定義として与えられた場
合には、前記判断を行わず無条件に上述の復帰命令のみ
を行うライブラリ関数の関数名_retfuncを返却
することとした変形例も考えられる。この変形例によれ
ば、クラス定義内で定義され、かつ仮想関数テーブルで
参照される以外には使用されることのない仮想関数をa
funcとすると、翻訳部103により出力されるファ
イルには、subst afunc,_retfunc
という置換情報が含まれることになる。
【0046】ここで、関数アドレス置換部111は、参
照する出力ファイル中の相対形式のオブジェクトプログ
ラムのいずれかに、ステップS1003において着目し
た置換情報の置換前関数の機械語命令列が存在するか否
かを判断して、存在するならば、関数の置換(ステップ
S1004)の処理を行わないこととしてもよい。上述
した変形例により、仮想関数afuncについての機械
語命令列を含まず、その代わりに復帰命令のみのライブ
ラリ関数_retfuncを含むような実行形式のオブ
ジェクトプログラムがプログラム変換装置によって生成
されることになる。また、変形例において、関数名_r
etfuncの代わりに、機械語命令の存在しない擬似
的な関数の関数名を、例えば_dummyfunc等と
しておき、プログラム変換装置は、仮想関数afunc
については、subst afunc,_dummyf
uncという置換情報を生成し、最終的には、仮想関数
afuncについての機械語命令列が含まない実行形式
のオブジェクトプログラムを生成することとしてもよ
い。
【0047】なお、仮想関数については、「The A
nnotated C++ Reference Ma
nual」(M.A.エリス、B.ストラウストラップ
著、アジソン ウェスレイ・トッパン刊)に詳しく説明
されている。 (4)本実施の形態では、置換情報は翻訳部103によ
り生成されることとしたが、置換情報は、ユーザにより
直接的に記述されることとしてもよい。ユーザに記述さ
れた置換情報を連結部110内の関数アドレス置換部1
11が参照してその置換情報に対応する処理を行うこと
としてもよい。この場合、連結部110が参照する情
報、即ち連結部110への入力情報は、通常のコンパイ
ラにより作成された相対形式のオブジェクトプログラム
が格納された1又は複数のファイル、ライブラリファイ
ル及びユーザに記述された置換情報が格納されたファイ
ルとなる。なお、置換情報は、相対形式のオブジェクト
プログラムが格納されたファイルに付随的に格納されて
いてもよいし、独立したファイルに格納されていてもよ
い。
【0048】なお、本実施の形態における翻訳部103
と連結部110とは一体である必要はない。翻訳部10
3は、ソースプログラムが格納された入力ファイルのフ
ァイル名等のユーザによる入力を受付けて、ファイル名
等に基づいてソースプログラムを特定して取得するもの
であればよく、また、連結部110も同様に、相対形式
のオブジェクトプログラムが格納されたファイルやライ
ブラリファイルのファイル名等のユーザによる入力を受
付けて、これにより、相対形式のオブジェクトプログラ
ムを取得するものであればよい。即ち、翻訳部103及
び連結部110は、ファイルの入出力においては一般の
コンパイラ及びリンカと同様である。 (5)本実施の形態に示したプログラム変換装置による
処理手順(図5、図8に示したフローチャートの手順
等)を、汎用のコンピュータ又はプログラム実行機能を
有する家電機器に実行させるためのコンピュータプログ
ラムを、記録媒体に記録し又は各種通信路等を介して、
流通させ頒布することもできる。かかる記録媒体には、
ICカード、光ディスク、フレキシブルディスク、RO
M等がある。流通、頒布されたコンピュータプログラム
は、プログラム実行機能を有する家電機器やパーソナル
コンピュータ等にインストール等されることにより利用
に供され、家電機器やパーソナルコンピュータは、当該
コンピュータプログラムを実行して、本実施の形態に示
したようなプログラム変換装置の機能を実現する。
【0049】
【発明の効果】以上の説明から明らかなように、本発明
に係るプログラム変換装置は、相対形式のオブジェクト
プログラムを自装置の内部又は外部から取得するオブジ
ェクトプログラム取得手段と、置換元サブルーチンの識
別情報と置換先サブルーチンの識別情報との組からなる
置換情報を自装置の内部又は外部から取得する置換情報
取得手段と、前記置換情報取得手段により取得された置
換情報に基づいて、前記オブジェクトプログラム取得手
段により取得された相対形式のオブジェクトプログラム
中の、前記置換元サブルーチンについてのアドレスを参
照する機械語命令を、前記置換先サブルーチンについて
のアドレスを参照する機械語命令に変換する変換手段と
を備えることを特徴とする。
【0050】これにより、相対形式のオブジェクトプロ
グラムを格納するファイル内に、実体が含まれず、未解
決のアドレス情報が含まれているところの第1のサブル
ーチンが、リンクの際に用いられるライブラリファイル
或いは他のオブジェクトプログラムファイル内に含まれ
る第2のサブルーチンと同等である場合において、第1
のサブルーチンを置換元サブルーチンとし第2のサブル
ーチンを置換先サブルーチンとした置換情報を与えれ
ば、本発明に係るプログラム変換装置は当該置換情報を
取得して、相対形式のオブジェクトプログラムを変換す
ることにより結果的に第1のサブルーチンのアドレスが
参照されないオブジェクトプログラムを生成する。従っ
て、これにより、変換元となった相対形式のオブジェク
トプログラムとリンクするものである他のオブジェクト
プログラム又はライブラリファイル中の第1のサブルー
チンの実体である機械語命令列を削除することが可能と
なり、このリンクによって作成される実行形式のオブジ
ェクトプログラムのサイズを縮小することが可能にな
る。
【0051】ここで、前記プログラム変換装置はさら
に、前記変換手段により変換された前記相対形式のオブ
ジェクトプログラムと、ライブラリファイル中のサブル
ーチンとを連結して実行形式のオブジェクトプログラム
を生成するプログラム連結手段を備え、前記置換情報の
要素に係る前記置換先サブルーチンは、前記ライブラリ
ファイルに含まれるサブルーチンであることとすること
もできる。
【0052】これにより、相対形式のオブジェクトプロ
グラム内の未解決のアドレス情報が含まれているところ
の第1のサブルーチンが、ライブラリファイル中の第2
のサブルーチンと同等である場合において、本発明に係
るプログラム変換装置に対して、第1のサブルーチンを
置換元サブルーチンとし第2のサブルーチンを置換先サ
ブルーチンとした置換情報を与えれば、当該プログラム
変換装置は、第1のサブルーチンを含まない実行形式の
オブジェクトを生成することとなる。従って、ライブラ
リファイル中に含まれるサブルーチンと、重複した内容
のサブルーチンが相対形式のオブジェクトプログラム中
に含まれている場合に、置換情報を適切に作成して与え
ることにより、重複したサブルーチンのコードを含まな
いプログラムが作成できる。
【0053】また、前記プログラム変換装置はさらに、
サブルーチンの識別情報と当該サブルーチンを構成する
命令列との組からなる置換候補情報を記憶する置換候補
情報記憶手段と、ソースプログラムを取得するソースプ
ログラム取得手段と、前記ソースプログラム取得手段に
より取得されたソースプログラムを、機械語命令列に翻
訳して相対形式のオブジェクトプログラムを生成する翻
訳手段とを備え、前記翻訳手段は、前記置換候補情報記
憶手段に記憶されている前記置換候補情報を参照して、
前記置換候補情報の要素に係る前記命令列と前記ソース
プログラム中の一のサブルーチンを構成する命令列との
同一性の判断を行い、同一である場合には、前記ソース
プログラム中の前記一のサブルーチンを前記置換元サブ
ルーチンとし、かつ、前記置換候補情報の要素に係る前
記命令列で構成されるサブルーチンを前記置換先サブル
ーチンとした前記置換情報を生成する置換情報生成部を
有し、前記翻訳手段は、前記置換情報生成部により前記
置換情報が生成された場合には、前記一のサブルーチン
についての機械語命令列を含ない前記相対形式のオブジ
ェクトプログラムを生成し、前記オブジェクトプログラ
ム取得手段が取得する前記相対形式のオブジェクトプロ
グラムは、前記翻訳手段により生成されたものであり、
前記置換情報取得手段が取得する前記置換情報は、前記
置換情報生成部により生成されたものであることとする
こともできる。
【0054】これにより、サブルーチンを構成する命令
列についての同一性の判断により、内容が重複するサブ
ルーチンを検出して置換情報を作成するので、ユーザが
置換情報を適切に作成して与えなくても、重複したサブ
ルーチンのコードを含まないプログラムが作成される。
また、前記置換候補情報の要素に係る前記命令列は、機
械語命令列であり、前記置換情報生成部は、前記ソース
プログラムが機械語命令列に翻訳された後に、前記同一
性の判断を行うこととすることもできる。
【0055】これにより、サブルーチンの内容の重複の
判断は、機械語命令列の同一性によって、即ち、サブル
ーチンが機械語に翻訳された状態において同一性の判断
がなされることになるため、変数の指定その他において
比較的記述の自由度が高いソースプログラムの状態で同
一性の判断がなされるのと比較すると、実際に重複した
サブルーチンのコードが生成されるのを防止するのに適
した判断がなされることになる。
【0056】従って、例えば、C言語で記述されたソー
スプログラム中のある関数定義が、関数ライブラリに含
まれる関数の内容或いは他の関数定義の内容と、重複し
た内容である等の場合において、そのソースプログラム
中のそのある関数定義の翻訳結果を含まない実行形式の
オブジェクトプログラムを生成することができるように
なる。
【0057】また、前記翻訳手段はさらに、前記ソース
プログラム中のあるサブルーチンを翻訳した後に、当該
サブルーチンの識別情報と当該サブルーチンを構成する
機械語命令列とを組として前記置換候補情報を生成して
前記置換候補情報記憶手段に格納する置換候補情報登録
部を有することとすることもできる。これにより、翻訳
後に相対形式のオブジェクトプログラム中のサブルーチ
ンを置換候補情報として登録することができるため、登
録後は、そのサブルーチンと重複するコードを有する他
のサブルーチンについてのコードを含まないプログラム
の作成が可能になる。
【0058】また、前記ソースプログラムは、C++言
語で記述され、仮想関数を含むクラス定義を包含し、前
記サブルーチンは、C++言語における関数であり、前
記プログラム変換装置は、前記置換情報生成部に代え
て、前記ソースプログラム中の一の仮想関数がクラス定
義内に含まれていて、当該ソースプログラム内におい
て、仮想関数テーブルを除いてどの部分からも参照され
ていない場合には、前記ソースプログラム中の前記一の
仮想関数を前記置換元サブルーチンとし、かつ、復帰命
令のみから構成されるサブルーチンを前記置換先サブル
ーチンとした前記置換情報を生成する第2置換情報生成
部を備えることとすることもできる。
【0059】これにより、呼び出されることがない仮想
関数のコードを削除することができ、実行形式のオブジ
ェクトプログラム、即ち実行ファイルのコードサイズを
縮小することができる。また、前記置換情報の要素に係
る前記置換先サブルーチンは、サブルーチンからの復帰
のための復帰命令のみから構成されることとすることも
できる。
【0060】これにより、実質的な処理内容のない関数
が複数含まれるようなプログラムに有効に対応でき、復
帰命令のみの関数が複数重複して含まれることのない実
行ファイルを生成することが可能になる。また、前記オ
ブジェクトプログラム取得手段が取得する相対形式のオ
ブジェクトプログラムは複数であり、前記変換手段は、
前記置換元サブルーチンが前記複数の相対形式のオブジ
ェクトのいずれかに含まれているか否かを判断し、いず
れにも含まれていない場合に前記変換を行うこととする
こともできる。
【0061】これにより、いずれの相対形式のオブジェ
クトプログラムにも含まれないサブルーチンについての
み、復帰命令のみ等のサイズの小さいコードに置換する
ことが可能になる。このように、本発明は、重複した内
容のサブルーチンが含まれないような実行形式のオブジ
ェクトプログラムを作成することを可能にする有用な技
術であり、特に、搭載するメモリの容量の小さいマイコ
ン組込型の家電機器の分野において、当該家電機器内の
メモリに格納されるプログラムを作成するための技術と
して実用的効果の高いものである。
【図面の簡単な説明】
【図1】本発明の実施の形態に係るプログラム変換装置
100の構成図である。
【図2】置換候補記憶部104の記憶内容の例を示す図
である。
【図3】C言語で記述された関数f及び関数gの関数定
義を含むソースプログラムを示す図である。
【図4】C言語で記述された関数hの関数定義を含むソ
ースプログラムを示す図である。
【図5】翻訳部103の動作を示すフローチャートであ
る。
【図6】入力ファイルA101に基づいて翻訳部103
が作成した出力ファイルA107の内容を示す図であ
る。
【図7】入力ファイルB102に基づいて翻訳部103
が作成した出力ファイルB108の内容を示す図であ
る。
【図8】連結部110の動作を示すフローチャートであ
る。
【図9】ライブラリファイル109の内容を示す図であ
る。
【図10】連結部110が作成した実行ファイル113
の内容を示す図である。
【図11】従来のプログラム変換装置が図3及び図4に
示すソースプログラムに基づいて生成した実行形式のオ
ブジェクトプログラムの内容を示す図である。
【符号の説明】
100 プログラム変換装置 101 入力ファイルA 102 入力ファイルB 103 翻訳部 104 置換候補記憶部 105 置換候補検出部 106 関数翻訳部 107 出力ファイルA 108 出力ファイルB 109 ライブラリファイル 110 連結部 111 関数アドレス置換部 112 ファイル連結部 113 実行ファイル

Claims (9)

    【特許請求の範囲】
  1. 【請求項1】 相対形式のオブジェクトプログラムを自
    装置の内部又は外部から取得するオブジェクトプログラ
    ム取得手段と、 置換元サブルーチンの識別情報と置換先サブルーチンの
    識別情報との組からなる置換情報を自装置の内部又は外
    部から取得する置換情報取得手段と、 前記置換情報取得手段により取得された置換情報に基づ
    いて、前記オブジェクトプログラム取得手段により取得
    された相対形式のオブジェクトプログラム中の、前記置
    換元サブルーチンについてのアドレスを参照する機械語
    命令を、前記置換先サブルーチンについてのアドレスを
    参照する機械語命令に変換する変換手段とを備えること
    を特徴とするプログラム変換装置。
  2. 【請求項2】 前記プログラム変換装置はさらに、 前記変換手段により変換された前記相対形式のオブジェ
    クトプログラムと、ライブラリファイル中のサブルーチ
    ンとを連結して実行形式のオブジェクトプログラムを生
    成するプログラム連結手段を備え、 前記置換情報の要素に係る前記置換先サブルーチンは、
    前記ライブラリファイルに含まれるサブルーチンであ
    り、 前記相対形式のオブジェクトプログラムは、前記置換情
    報の要素に係る前記置換元サブルーチンについてのアド
    レスを参照する機械語命令を含むものであることを特徴
    とする請求項1記載のプログラム変換装置。
  3. 【請求項3】 前記プログラム変換装置はさらに、 サブルーチンの識別情報と当該サブルーチンを構成する
    命令列との組からなる置換候補情報を記憶する置換候補
    情報記憶手段と、 ソースプログラムを取得するソースプログラム取得手段
    と、 前記ソースプログラム取得手段により取得されたソース
    プログラムを、機械語命令列に翻訳して相対形式のオブ
    ジェクトプログラムを生成する翻訳手段とを備え、 前記翻訳手段は、前記置換候補情報記憶手段に記憶され
    ている前記置換候補情報を参照して、前記置換候補情報
    の要素に係る前記命令列と前記ソースプログラム中の一
    のサブルーチンを構成する命令列との同一性の判断を行
    い、同一である場合には、前記ソースプログラム中の前
    記一のサブルーチンを前記置換元サブルーチンとし、か
    つ、前記置換候補情報の要素に係る前記命令列で構成さ
    れるサブルーチンを前記置換先サブルーチンとした前記
    置換情報を生成する置換情報生成部を有し、 前記翻訳手段は、前記置換情報生成部により前記置換情
    報が生成された場合には、前記一のサブルーチンについ
    ての機械語命令列を含ない前記相対形式のオブジェクト
    プログラムを生成し、 前記オブジェクトプログラム取得手段が取得する前記相
    対形式のオブジェクトプログラムは、前記翻訳手段によ
    り生成されたものであり、 前記置換情報取得手段が取得する前記置換情報は、前記
    置換情報生成部により生成されたものであることを特徴
    とする請求項1又は2記載のプログラム変換装置。
  4. 【請求項4】 前記置換候補情報の要素に係る前記命令
    列は、機械語命令列であり、 前記置換情報生成部は、前記ソースプログラムが機械語
    命令列に翻訳された後に、前記同一性の判断を行うこと
    を特徴とする請求項3記載のプログラム変換装置。
  5. 【請求項5】 前記翻訳手段はさらに、前記ソースプロ
    グラム中のあるサブルーチンを翻訳した後に、当該サブ
    ルーチンの識別情報と当該サブルーチンを構成する機械
    語命令列とを組として前記置換候補情報を生成して前記
    置換候補情報記憶手段に格納する置換候補情報登録部を
    有することを特徴とする請求項4記載のプログラム変換
    装置。
  6. 【請求項6】 前記ソースプログラムは、C++言語で
    記述され、仮想関数を含むクラス定義を包含し、 前記サブルーチンは、C++言語における関数であり、 前記プログラム変換装置は、前記置換情報生成部に代え
    て、前記ソースプログラム中の一の仮想関数がクラス定
    義内に含まれていて、当該ソースプログラム内におい
    て、仮想関数テーブルを除いてどの部分からも参照され
    ていない場合には、前記ソースプログラム中の前記一の
    仮想関数を前記置換元サブルーチンとし、かつ、復帰命
    令のみから構成されるサブルーチンを前記置換先サブル
    ーチンとした前記置換情報を生成する第2置換情報生成
    部を備えることを特徴とする請求項3記載のプログラム
    変換装置。
  7. 【請求項7】 前記置換情報の要素に係る前記置換先サ
    ブルーチンは、サブルーチンからの復帰のための復帰命
    令のみから構成されることを特徴とする請求項1〜5の
    いずれか1項に記載のプログラム変換装置。
  8. 【請求項8】 前記オブジェクトプログラム取得手段が
    取得する相対形式のオブジェクトプログラムは複数であ
    り、 前記変換手段は、前記置換元サブルーチンが前記複数の
    相対形式のオブジェクトのいずれかに含まれているか否
    かを判断し、いずれにも含まれていない場合に前記変換
    を行うことを特徴とする請求項1〜7のいずれか1項に
    記載のプログラム変換装置。
  9. 【請求項9】 コンピュータにプログラム変換処理を実
    行させるための制御プログラムを記録した記録媒体であ
    って、 前記プログラム変換処理は、 相対形式のオブジェクトプログラムを取得するオブジェ
    クトプログラム取得ステップと、 置換元サブルーチンの識別情報と置換先サブルーチンの
    識別情報との組からなる置換情報を取得する置換情報取
    得ステップと、 前記置換情報取得ステップにより取得された置換情報に
    基づいて、前記オブジェクトプログラム取得ステップに
    より取得された相対形式のオブジェクトプログラム中
    の、前記置換元サブルーチンについてのアドレスを参照
    する機械語命令を、前記置換先サブルーチンについての
    アドレスを参照する機械語命令に変換する変換ステップ
    とを含むことを特徴とする記録媒体。
JP6566199A 1999-03-11 1999-03-11 プログラム変換装置 Pending JP2000259427A (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP6566199A JP2000259427A (ja) 1999-03-11 1999-03-11 プログラム変換装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP6566199A JP2000259427A (ja) 1999-03-11 1999-03-11 プログラム変換装置

Publications (1)

Publication Number Publication Date
JP2000259427A true JP2000259427A (ja) 2000-09-22

Family

ID=13293413

Family Applications (1)

Application Number Title Priority Date Filing Date
JP6566199A Pending JP2000259427A (ja) 1999-03-11 1999-03-11 プログラム変換装置

Country Status (1)

Country Link
JP (1) JP2000259427A (ja)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2009169864A (ja) * 2008-01-18 2009-07-30 Panasonic Corp コンパイル方法およびコンパイルプログラム

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2009169864A (ja) * 2008-01-18 2009-07-30 Panasonic Corp コンパイル方法およびコンパイルプログラム

Similar Documents

Publication Publication Date Title
JP4130713B2 (ja) プログラム変換装置
CN107066291A (zh) 软件开发工具包的打包方法、装置及设备、可读介质
CN102200911B (zh) 变量闭包
US20070079299A1 (en) Method, apparatus and program storage device for representing eclipse modeling framework (EMF) ecore models in textual form
US20150169320A1 (en) Verification of backward compatibility of software components
JP6162733B2 (ja) コンピュータ環境における式の変換
CN105446704A (zh) 一种着色器的解析方法和装置
CN107526679A (zh) 自动化测试框架、基于其上的自动化测试方法、存储介质和计算机设备
CN107092474B (zh) 程序开发方法、etl处理方法及装置
JP2005018425A (ja) プログラム変換方法、プログラムおよび記憶媒体
JP2000216854A (ja) 通信システム用のコンフィグレ―ションデ―タを検証するための、方法、検証モジュ―ル、サ―バ、制御モジュ―ル、および記憶手段
JP2014225256A (ja) プログラム生成装置、プログラム生成装置の制御方法、およびプログラム
JP2000259427A (ja) プログラム変換装置
CN117149156A (zh) 一种低代码平台自定义组件的系统和方法
JP3672207B2 (ja) プログラム変換装置
KR100846203B1 (ko) 모바일 어플리케이션의 생성 방법 및 이를 구현하기 위한프로그램을 기록한 기록매체
Jantsch et al. Verifying the LTL to Büchi Automata Translation via Very Weak Alternating Automata
CN114579135B (zh) 一种安装包生成方法及装置
JP2010191598A (ja) 情報処理装置及び情報処理方法及びプログラム
CN116360779A (zh) 基于qiankun在Vue CLI应用构建微前端基座的方法
CN117492747A (zh) 编译器后端复用方法、装置、编译器及存储介质
JP2001273150A (ja) プログラム変換装置
JP2001014172A (ja) プログラム変換装置
Jörges et al. The Genesys Framework
JP2001142719A (ja) コンパイラ装置及びコンパイラプログラムを記録した記録媒体