JPH06301549A - プログラム翻訳装置 - Google Patents

プログラム翻訳装置

Info

Publication number
JPH06301549A
JPH06301549A JP5088705A JP8870593A JPH06301549A JP H06301549 A JPH06301549 A JP H06301549A JP 5088705 A JP5088705 A JP 5088705A JP 8870593 A JP8870593 A JP 8870593A JP H06301549 A JPH06301549 A JP H06301549A
Authority
JP
Japan
Prior art keywords
instruction
procedure
return value
program
address
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
JP5088705A
Other languages
English (en)
Inventor
Seiichi Urushibara
誠一 漆原
Akira Tanaka
旭 田中
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 JP5088705A priority Critical patent/JPH06301549A/ja
Publication of JPH06301549A publication Critical patent/JPH06301549A/ja
Pending legal-status Critical Current

Links

Landscapes

  • Executing Machine-Instructions (AREA)
  • Devices For Executing Special Programs (AREA)

Abstract

(57)【要約】 【目的】 手続きを呼び出す命令を含むプログラムから
生成されるオブジェクトコードのサイズを小さく抑え
る。 【構成】 戻り値解析部104は、上位の手続きに呼び
出される、メモリを介してブロック型戻り値を返す手続
(例えば関数)を検出し、戻り値参照命令解析部105
は、上記各関数について、上位の手続きにおける、同一
の関数の呼び出し命令を含む各文が、例えば関数の呼び
出し命令のみを各右辺とし、各左辺が同一の変数である
代入文であることを判定し、戻り値アドレス決定部10
6は、ブロック型戻り値が返されるメモリ上の領域のア
ドレスを上記左辺の変数の値が格納される領域のアドレ
スに決定し、手続きプロログ命令生成部107と一般命
令生成部108は、呼び出される関数に上記決定された
アドレスを渡す命令列を上位の手続きの入口部分に生成
する。

Description

【発明の詳細な説明】
【0001】
【産業上の利用分野】本発明は、例えば高級プログラミ
ング言語で記述されたソースプログラムを機械語プログ
ラムなどに翻訳するコンパイラ装置等に適用され、特
に、戻り値を返すような手続きを呼び出す命令を含むプ
ログラムを翻訳するプログラム翻訳装置に関するもので
ある。
【0002】
【従来の技術】近年、高級プログラミング言語の普及に
より、高級プログラミング言語で記述されたソースプロ
グラムを機械語プログラムなどに翻訳するコンパイラが
広く利用されている。この種の多くの高級プログラミン
グ言語においては、上位の手続きが、関数などの他の手
続きを呼び出し、呼び出された手続きから返される戻り
値としてのデータを受け取る構文を有することにより、
いわゆるプログラムの構造化を容易に図り得るようにな
っている。
【0003】ところで、他の手続きを呼び出す上位の手
続きが戻り値としてデータを受け取る場合、プロセッサ
に備えられるレジスタを介して受け取る方法と、メモリ
の所定の領域を介して受け取る方法とがある。すなわ
ち、呼び出された手続きがレジスタまたはメモリに戻り
値を格納し、上位の手続きがそれを参照することにより
戻り値を受け取る。
【0004】上記メモリを介して上位の手続きが戻り値
を受け取る方法は、例えば複数のレコードを一括して取
り扱うブロック型の戻り値を受け取る場合などに用いら
れる。そこで、従来のプログラム翻訳装置としてのコン
パイラは、上位の手続きがメモリを介して戻り値を受け
取り得るようにするために、上位の手続きのオブジェク
トコードとして、あらかじめ、呼び出された手続きによ
って戻り値が格納されるべきメモリの領域を確保し、他
の手続きを呼び出すごとに、呼び出される手続きに上記
領域のアドレスを引き渡す命令コードを生成するように
なっていた。具体的には、手続きを呼び出す命令に先立
って、他の手続きを呼び出す手続きにとっての固定領域
に上記アドレスを格納する命令コードを生成する。
【0005】また、手続きを呼び出す上位の手続きは、
多くの場合、戻り値を代入文などによって一旦変数等に
コピーしてから、その戻り値を変数名等によって参照す
るようにプログラムされる。この場合、従来のコンパイ
ラは、呼び出された手続きによって上記領域に格納され
た戻り値を、変数名等によって特定される領域に転送す
るコードを生成する。
【0006】
【発明が解決しようとする課題】しかしながら、上記の
ような従来のプログラム翻訳装置では、他の手続きを呼
び出すごとに戻り値を格納する領域のアドレスを引き渡
す命令コードが生成されるうえ、上記領域に格納された
戻り値を他の領域に転送する命令コードが生成されるた
め、オブジェクトコードサイズが大きくなりがちである
という問題点を有していた。
【0007】本発明は上記の点に鑑み、手続きを呼び出
す命令を含むプログラムから生成されるオブジェクトコ
ードのサイズを小さく抑えることができるプログラム翻
訳装置の提供を目的としている。
【0008】
【課題を解決するための手段】上記目的を達成するた
め、本発明は、手続きを呼び出す命令を含む第1のプロ
グラムから、上記手続きから返される戻り値が格納され
るべきメモリの領域を示すアドレスを上記手続きに引き
渡す命令を含む第2のプログラムに変換するプログラム
翻訳装置において、第1のプログラムにおける、戻り値
を返す手続きを呼び出す命令を検出する呼び出し命令検
出手段と、第1のプログラムにおける、上記手続きを呼
び出す上位の手続き内で戻り値を参照する命令を検出す
る参照命令検出手段と、呼び出し命令検出手段によって
同一の手続きを呼び出す命令が複数検出されるととも
に、参照命令検出手段で検出された各命令が、上記戻り
値をメモリの同一の所定の領域に格納するコピー命令で
ある場合に、上記所定の領域のアドレスを、各命令によ
り呼び出された手続きによって戻り値が格納されるべき
共通の領域のアドレスとして決定する戻り値アドレス決
定手段と、第2のプログラムにおける、呼び出される手
続きに上記アドレスを引き渡す命令を、第1のプログラ
ムの何れの呼び出し命令に対応する第2のプログラムの
命令よりも先に実行されるように生成するアドレス引き
渡し命令生成手段とを備えたことを特徴としている。
【0009】
【作用】上記の構成により、呼び出し命令検出手段は、
第1のプログラムにおける、戻り値を返す手続きを呼び
出す命令を検出する。参照命令検出手段は、第1のプロ
グラムにおける、上記手続きを呼び出す上位の手続き内
で戻り値を参照する命令を検出する。
【0010】戻り値アドレス決定手段は、呼び出し命令
検出手段によって同一の手続きを呼び出す命令が複数検
出されるとともに、参照命令検出手段で検出された各命
令が、上記戻り値をメモリの同一の所定の領域に格納す
るコピー命令である場合に、上記所定の領域のアドレス
を、各命令により呼び出された手続きによって戻り値が
格納されるべき共通の領域のアドレスとして決定する。
【0011】アドレス引き渡し命令生成手段は、第2の
プログラムにおける、呼び出される手続きに上記アドレ
スを引き渡す命令を、第1のプログラムの何れの呼び出
し命令に対応する第2のプログラムの命令よりも先に実
行されるように生成する。
【0012】
【実施例】以下、本発明の一実施例として、C言語で記
述されたソースプログラムをコンパイルして機械語プロ
グラムを生成するコンパイル装置の例を図1ないし図4
に基づいて説明する。図1はコンパイル装置の構成を示
すブロック図である。
【0013】同図において、ソースプログラム記憶部1
01は、例えば図2に示すようなソースプログラムを記
憶するものである。構文解析部102は、ソースプログ
ラム記憶部101に記憶されたソースプログラムの構文
を解析し、キーワードや変数名の抽出などを行うもので
ある。手続き呼び出し命令検出部103は、構文解析部
102による解析結果に基づいて、ソースプログラムに
含まれる手続き呼び出し命令を走査し検出するものであ
る。
【0014】戻り値解析部104は、手続き呼び出し命
令検出部103で手続き呼び出し命令が検出されると、
その命令によって呼び出される手続が、メモリを介して
ブロック型戻り値を返す手続きかどうかを判定し、判定
結果を一時記憶部Xに保持させるとともに戻り値参照命
令解析部105に渡すものである。戻り値参照命令解析
部105は、戻り値解析部104によりブロック型戻り
値を返すと判定された各手続きについて、その手続きを
呼び出す上位の手続きにおける上記戻り値を参照する命
令を解析し、同一の手続きから返される戻り値を参照す
る命令が何れもコピー命令であって、かつ、そのコピー
先が同一であるかどうかを判定し、判定結果を一時記憶
部Yに保持させるものである。具体的には、例えば図3
(a)に示すように、上位手続きにおける同一の関数の
呼び出し命令を含む各文が、関数の呼び出し命令のみを
各右辺とし、各左辺が同一の変数である代入文である
か、または図3(b)(c)に示すように右辺が戻り値
を含む演算式であったり、各左辺が異なる変数であった
りするかどうかを判定する。
【0015】戻り値アドレス決定部106は、一時記憶
部Yの保持内容に基づいて、ブロック型戻り値を格納す
るメモリ上の領域のアドレスを決定するものである。詳
しくは、戻り値参照命令解析部105によって、同一の
手続きから返される戻り値を参照する命令が何れもコピ
ー命令であって、かつ、そのコピー先が同一であると判
定された場合には、ブロック型戻り値を格納する領域の
アドレスとして、上記コピー先のアドレス(例えば上記
変数の値が格納される領域のアドレス)を用いるように
決定する一方、その他の場合には、ブロック型戻り値を
格納するための所定の領域、例えば各手続き間で定めら
れた規約に基づいて決定される領域のアドレスを用いる
ように決定する。
【0016】手続きプロログ命令生成部107は、一時
記憶部Xを参照し、前記戻り値解析部104によりブロ
ック型戻り値を返すと判定された手続きがあれば、呼び
出される手続きに上記戻り値アドレス決定部106によ
って決定されたアドレスを渡す命令列を生成するもので
ある。一般命令生成部108は、ブロック型戻り値を返
す手続きに戻り値の格納アドレスを渡す命令列以外の命
令列を生成するとともに、手続きプロログ命令生成部1
07によって生成された命令列を、呼び出し側の手続き
の入口部分(実行開始部分)に合成してオブジェクトプ
ログラムを生成するものである。ただし、その際に前記
一時記憶部Yを参照し、同一の手続きから返される戻り
値を参照する命令が何れもコピー命令であって、かつ、
そのコピー先が同一である参照命令に対応する命令列の
生成は行わない。
【0017】オブジェクトプログラム記憶部109は、
一般命令生成部108によって生成されたオブジェクト
プログラムを格納するものである。上記の構成におい
て、図2に示すソースプログラムから図4に示すオブジ
ェクトプログラムが生成される場合の動作を説明する。
まず、図2のソースプログラムについて簡単に説明す
る。
【0018】1行目〜5行目では、データ型abcは、
3つの整数a、b、cを含むブロック型(構造体型)デ
ータであることが宣言されている。7行目以降は手続き
mainの処理内容を示す。9行目では、整数を引き数
とし、上記データ型abcの戻り値を返す関数sf1
が、以下の処理で呼び出され得ることが示されている。
【0019】また、10行目では、同様に、整数型を有
する関数f2が以下の処理で呼び出され得ることが示さ
れている。12行目、および13行目では、変数aut
ost1、および変数autost2がデータ型abc
を有することが示されている。15行目は、整数値“1
0”を引き数として関数sf1を呼び出し、戻り値をそ
のまま変数autost1に代入することを示してい
る。
【0020】16行目は、変数autost1の値を変
数autost2に代入(待避)することを示してい
る。18行目は、整数値“20”を引き数として、15
行目と同じく関数sf1を呼び出し、戻り値も同じく変
数autost1に代入することを示している。次に、
具体的なオブジェクトプログラムの生成動作を説明す
る。 (1)構文解析部102はソースプログラム記憶部10
1に格納されているソースプログラムの構文を解析し、
解析結果を手続き呼び出し命令検出部103、戻り値参
照命令解析部105、および一般命令生成部108に渡
す。 (2)手続き呼び出し命令検出部103は、手続きma
inにおいて、関数sf1が15行目と18行目とで呼
び出されていることを検出する。 (3)戻り値解析部104は、上記関数sf1が、デー
タ型abcの戻り値(ブロック型戻り値)を返すことを
検出し、その検出結果を一時記憶部Xに保持させるとと
もに戻り値参照命令解析部105に渡す。 (4)戻り値参照命令解析部105は、関数sf1を呼
び出す15行目、および18行目が、何れも、返される
戻り値の参照が値のコピー(代入)であって、かつ、そ
のコピー先が同一であること、すなわち、共に「=」の
右辺が関数のみであって、左辺が変数autost1で
あると解析し、その解析結果を一時記憶部Yに保持させ
る。 (5)戻り値アドレス決定部106は、一時記憶部Yの
保持内容に応じて、関数sf1が戻り値を格納すべき領
域のアドレスを変数autost1の値が格納される領
域のアドレスに決定する。なお、一時記憶部Yの保持内
容によって上記条件の満たされないことが示される場合
には、手続き間で定めた規約に基づいて定められたアド
レスに決定される。 (6)手続きプロログ命令生成部107は、一時記憶部
Xの保持内容によりブロック型戻り値を返す手続きの呼
び出されることが示されているので、図4に☆で示すよ
うな命令列を生成する。この命令列は、スタックポイン
タspによって示されるアドレスの領域に、変数aut
ost1の値が格納されるアドレスを転送することを示
し、これにより、手続きmainによって呼び出された
関数sf1は、常に戻り値を直接変数autost1の
値として格納する。 (7)一般命令生成部108は、図4に示す他の命令列
を生成するとともに、上記戻り値の格納アドレスを渡す
命令列を関数mainの入口部分に合成する。すなわ
ち、手続きmainが、関数sf1にブロック型戻り値
を格納するアドレスを引き渡すための命令列を1つだけ
含み、しかも、戻り値を変数autost1の値が格納
される領域に転送する命令を含まないオブジェクトプロ
グラムが生成される。生成されたオブジェクトプログラ
ムは、オブジェクトプログラム記憶部109に格納され
る。
【0021】なお、本実施例おいては、プログラミング
言語がC言語である例を示したが、本発明は他のプログ
ラミング言語に対しても同様に適用可能である。また、
ソースプログラムから機械語プログラムを生成するコン
パイラの例を示したが、ソースプログラムから中間言語
を生成するプログラム翻訳装置や、中間言語から機械語
を生成するプログラム翻訳装置に適用することもでき
る。
【0022】また、ブロック型戻り値を返す手続きに対
して、戻り値の格納アドレスを渡す命令列を1つだけ生
成する例を示したが、これに限るものではない。すなわ
ち、通常は、単一のデータである戻り値はレジスタを介
して返されることが多いが、上記のようにメモリを介し
て返される場合であれば、単一のデータであっても同様
の効果を得ることができる。
【0023】また、戻り値の格納アドレスを渡す命令列
を、他の手続きを呼び出す手続きの入口部分に生成する
例を示したが、これに限らず、原則として最初の手続き
が呼び出される前の部分であればよい。
【0024】
【発明の効果】以上説明したように、本発明によれば、
戻り値を返す複数の手続きに対して、各手続きから返さ
れる戻り値が格納されるべき領域のアドレスを引き渡す
命令が一組だけ生成されるうえ、返された戻り値を転送
する命令の生成が抑制されるので、手続きを呼び出す命
令を含むプログラムから生成されるオブジェクトコード
のサイズを小さく抑えることができるという効果を奏す
る。
【図面の簡単な説明】
【図1】本発明の一実施例に係るコンパイル装置の構成
を示すブロック図である。
【図2】コンパイル装置に与えられるソースプログラム
の例を示す説明図である。
【図3】ソースプログラムにおける関数の呼び出し命令
を含む文の例を示す説明図である。
【図4】コンパイル装置が生成するオブジェクトプログ
ラムの例を示す説明図である。
【符号の説明】
101 ソースプログラム記憶部 102 構文解析部 103 手続き呼び出し命令検出部 104 戻り値解析部 105 戻り値参照命令解析部 106 戻り値アドレス決定部 107 手続きプロログ命令生成部 108 一般命令生成部 109 オブジェクトプログラム記憶部

Claims (4)

    【特許請求の範囲】
  1. 【請求項1】 手続きを呼び出す命令を含む第1のプロ
    グラムから、上記手続きから返される戻り値が格納され
    るべきメモリの領域を示すアドレスを上記手続きに引き
    渡す命令を含む第2のプログラムに変換するプログラム
    翻訳装置において、 第1のプログラムにおける、戻り値を返す手続きを呼び
    出す命令を検出する呼び出し命令検出手段と、 呼び出し命令検出手段によって同一の手続きを呼び出す
    命令が複数検出された場合に、各命令により呼び出され
    た手続きによって戻り値が格納されるべき共通の領域の
    アドレスを決定する戻り値アドレス決定手段と、 第2のプログラムにおける、呼び出される手続きに上記
    アドレスを引き渡す命令を、第1のプログラムの何れの
    呼び出し命令に対応する第2のプログラムの命令よりも
    先に実行されるように生成するアドレス引き渡し命令生
    成手段と、 を備えたことを特徴とするプログラム翻訳装置。
  2. 【請求項2】 手続きを呼び出す命令を含む第1のプロ
    グラムから、上記手続きから返される戻り値が格納され
    るべきメモリの領域を示すアドレスを上記手続きに引き
    渡す命令を含む第2のプログラムに変換するプログラム
    翻訳装置において、 第1のプログラムにおける、戻り値を返す手続きを呼び
    出す命令を検出する呼び出し命令検出手段と、 第1のプログラムにおける、上記手続きを呼び出す上位
    の手続き内で戻り値を参照する命令を検出する参照命令
    検出手段と、 参照命令検出手段で検出された命令が、上記戻り値をそ
    のままメモリの所定の領域に格納するコピー命令である
    場合に、上記所定の領域のアドレスを、呼び出された手
    続きによって戻り値が格納されるべき領域のアドレスと
    して決定する戻り値アドレス決定手段と、 呼び出される手続きに上記戻り値アドレスを引き渡す命
    令を生成するアドレス引き渡し命令生成手段と、 を備えたことを特徴とするプログラム翻訳装置。
  3. 【請求項3】 上記命令検出手段は、複数の所定の単位
    のデータを含むブロック型の戻り値を返す手続きを呼び
    出す命令を検出することを特徴とする請求項1または請
    求項2に記載のプログラム翻訳装置。
  4. 【請求項4】 手続きを呼び出す命令を含む第1のプロ
    グラムから、上記手続きから返される戻り値が格納され
    るべきメモリの領域を示すアドレスを上記手続きに引き
    渡す命令を含む第2のプログラムに変換するプログラム
    翻訳装置において、 第1のプログラムにおける、戻り値を返す手続きを呼び
    出す命令を検出する呼び出し命令検出手段と、 第1のプログラムにおける、上記手続きを呼び出す上位
    の手続き内で戻り値を参照する命令を検出する参照命令
    検出手段と、 呼び出し命令検出手段によって同一の手続きを呼び出す
    命令が複数検出されるとともに、参照命令検出手段で検
    出された各命令が、上記戻り値をメモリの同一の所定の
    領域に格納するコピー命令である場合に、上記所定の領
    域のアドレスを、各命令により呼び出された手続きによ
    って戻り値が格納されるべき共通の領域のアドレスとし
    て決定する戻り値アドレス決定手段と、 第2のプログラムにおける、呼び出される手続きに上記
    アドレスを引き渡す命令を、第1のプログラムの何れの
    呼び出し命令に対応する第2のプログラムの命令よりも
    先に実行されるように生成するアドレス引き渡し命令生
    成手段と、 を備えたことを特徴とするプログラム翻訳装置。
JP5088705A 1993-04-15 1993-04-15 プログラム翻訳装置 Pending JPH06301549A (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP5088705A JPH06301549A (ja) 1993-04-15 1993-04-15 プログラム翻訳装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP5088705A JPH06301549A (ja) 1993-04-15 1993-04-15 プログラム翻訳装置

Publications (1)

Publication Number Publication Date
JPH06301549A true JPH06301549A (ja) 1994-10-28

Family

ID=13950306

Family Applications (1)

Application Number Title Priority Date Filing Date
JP5088705A Pending JPH06301549A (ja) 1993-04-15 1993-04-15 プログラム翻訳装置

Country Status (1)

Country Link
JP (1) JPH06301549A (ja)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2011186948A (ja) * 2010-03-10 2011-09-22 Nec Corp コンパイル装置、コンパイル方法、及びコンパイルプログラム

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2011186948A (ja) * 2010-03-10 2011-09-22 Nec Corp コンパイル装置、コンパイル方法、及びコンパイルプログラム

Similar Documents

Publication Publication Date Title
US5361351A (en) System and method for supporting run-time data type identification of objects within a computer program
US6412109B1 (en) Method for optimizing java bytecodes in the presence of try-catch blocks
JP4130713B2 (ja) プログラム変換装置
US6363522B1 (en) Method and apparatus for handling exceptions as normal control flow
JP2666847B2 (ja) 異種言語間連絡方式
EP0806725A2 (en) Method and apparatus for easy insertion of assembler code for optimization
JPH11259437A (ja) 不要バリア命令の削減方式
JP2000347874A (ja) レジスタ割当器を用いた呼出規則プロローグ・エピローグコード構築方法及び装置
KR960035260A (ko) 소프트웨어 매크로 호출내에 검출된 에러의 위치를 표시하기 위한 방법 및 장치
JPH07141201A (ja) 2パスコンパイラのための改良された方法
US6330714B1 (en) Method and computer program product for implementing redundant lock avoidance
US7086044B2 (en) Method, article of manufacture and apparatus for performing automatic intermodule call linkage optimization
JP3062266B2 (ja) 支援装置
EP0875825A2 (en) High speed assemble processing system
US5150474A (en) Method for transferring arguments between object programs by switching address modes according to mode identifying flag
US20010044930A1 (en) Loop optimization method and a compiler
US5826087A (en) Method and apparatus for cross calling programs of different lexical scoping methodology
US7080370B1 (en) Method and apparatus for compiling source programs using one or more libraries
JP3049814B2 (ja) マイクロコンピュータの言語処理装置
JPH06301549A (ja) プログラム翻訳装置
Wiedmann A performance comparison between an APL interpreter and compiler
JP3241214B2 (ja) 分散処理装置及びプロセス実行方法
JP2000122876A (ja) 情報処理装置
JPH0520093A (ja) モジユールのコンパイル方法およびコンパイル装置
JPH06110702A (ja) 手続き呼出し翻訳装置