JP2501394B2 - 手続き呼び出し翻訳装置 - Google Patents

手続き呼び出し翻訳装置

Info

Publication number
JP2501394B2
JP2501394B2 JP4092739A JP9273992A JP2501394B2 JP 2501394 B2 JP2501394 B2 JP 2501394B2 JP 4092739 A JP4092739 A JP 4092739A JP 9273992 A JP9273992 A JP 9273992A JP 2501394 B2 JP2501394 B2 JP 2501394B2
Authority
JP
Japan
Prior art keywords
argument
evaluation
sequence
area
unit
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
JP4092739A
Other languages
English (en)
Other versions
JPH0644083A (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 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 JP4092739A priority Critical patent/JP2501394B2/ja
Publication of JPH0644083A publication Critical patent/JPH0644083A/ja
Application granted granted Critical
Publication of JP2501394B2 publication Critical patent/JP2501394B2/ja
Anticipated expiration legal-status Critical
Expired - Fee Related legal-status Critical Current

Links

Landscapes

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

Description

【発明の詳細な説明】
【0001】
【産業上の利用分野】本発明は、C言語、FORTRA
N等の高級プログラミング言語を機械言語に翻訳するコ
ンパイラの手続き呼び出し翻訳装置に関する。
【0002】
【従来の技術】高級プログラミング言語で記述されたプ
ログラムを、計算機上で実行するためには、コンパイラ
によって機械語に翻訳しなければならない。さて、高級
プログラミング言語は、機械語とは異なり、データ構造
や制御装置を持つので、コンパイラが機械語に翻訳する
ためには、いくつかの処理を行う必要があるが、その中
で手続き呼び出しに関する制御構造を翻訳するのが手続
き翻訳装置である。ところで、手続きは、ある一定の処
理をまとめたものであり、その手続きを呼び出すという
ことにより、まとめた処理を実行することになるが、こ
の際、実行させた処理に何か入力を与えたり、何か結果
を受けとったりことがなされる。一般にこの入力として
渡す値を引数(Parameter)、出力として手続きから受け
取る値を戻り値(Return value)と呼ぶ。このため、手続
き呼びだしでは、手続きを呼びだした側と呼び出された
側との間で引数と戻り値の受渡しを行う必要がある。一
般に引数の受渡しは、プログラムの実行時に使用する記
憶域(引数領域と呼ぶ)を介して行われる。つまり、呼
びだし側と呼び出された側で引数の受渡しに使用する記
憶域の取決めをし、呼びだし側では引数の値を対応する
記憶域に格納し、呼び出された側では対応する記憶域か
ら値を参照することにより受渡しを行う。手続きの呼び
だし側と呼び出された側での引数領域として使用する記
憶域の取決めの方法にはさまざまなものがあるが、その
1つとして、1つの手続きの処理の中で呼び出す手続き
に対して共通の引数領域を使用し、該領域で引数の受渡
しを行う方法がある。このような場合の引数領域として
は、全てメモリ上にとる場合や、ある一定の個数はレジ
スタ上で、その個数以上はメモリ上に割り当てる方法が
あるが、本明細書ではレジスタであるかメモリであるか
の区別は考えないこととする。
【0003】次に手続き翻訳装置を説明する前に、手続
き呼び出しに関する用語について多少説明する。手続き
呼びだし文において、実引数(プログラム上呼び呼び出
し文に記述されている引数、argument)となっている式
を、計算し(これを引数計算と呼ぶ。具体的には、実引
数として記述されている演算式を計算したり、手続き呼
び出しを行う。)、計算の結果得られた値(これを引数
評価値と呼ぶ)を適切な引数の格納領域に格納する(こ
れを引数格納と呼ぶ)ことを引数評価と呼ぶ。引数評価
列のうち、引数計算を行う部分を引数計算列と呼び、引
数評価列と手続き呼び出し命令を合わせて、手続き呼び
出し命令列という。また、手続き呼び出し文において、
すべての実引数の引数評価を行なった後で呼び出す手続
きへの分岐を表わす中間コードを手続き呼び出し命令と
いう。手続き呼び出し文の全ての引数評価列と手続き呼
び出し命令を合わせて、手続き呼び出し命令列という。
【0004】次に、基本となるコンパイラの動作、原理
について若干説明する。既述のことく、コンパイラは、
高級プログラミング言語を機械語に翻訳する装置である
が、一般にいくつかのフェーズにわかれて構成されてい
る。各フェーズは、機能に応じて、高級プログラミング
言語又はそれを表現する中間表現を他のある表現に変換
する処理を行うことにより、翻訳処理を行う。手続き呼
びだし翻訳装置は、コンパイラの1つのフェーズであ
り、上流のフェーズで変換した(解析木、3番地コード
形式等)中間表現のうち、手続き呼びだし文に対する中
間表現に関して引数の評価順序を決定し、中間表現の並
びの順に実行して矛盾のないような(3番地コード形式
等の)中間表現に変換する。なお、一般的な手続き呼び
出しに関する中間コードの生成に関しては、佐々政孝著
岩波書店 1989年刊「岩波講座 ソフトウェア科
学 プログラミング言語処理系」の384頁の「7.5
呼びだしの中間コード」に記載されているいわゆる周知
の技術であるためその説明は省略する。
【0005】以下手続き呼び出しの呼びだし側と呼び出
された側での引数の受渡しに、1つの手続きの中で呼び
だし手続きに対して、共通の引数領域を使用して受渡し
を行うような手続き翻訳装置に関して、従来の技術を具
体的に説明する。図4は、この手続き呼びだし翻訳装置
の構成図である。本図において、401は引数評価制御
部であり、入力された手続き呼びだしの中間コード列の
各引数評価列に対して、中間コード列の先頭から順に、
次に説明する引数退避判定部402を起動する。
【0006】402は引数退避判定部であり、引数計算
列の中で引数領域を使用する際に(つまり、引数計算列
の中に引数を持つ手続き呼びだし命令列が存在する場合
に)、引数計算に使用する引数領域の値を退避する必要
があるか否かを判定する。つまり、中間コードの先頭か
ら処理対象の引数評価列までの中間コードの並びの中
で、引数計算に使用する引数領域と同じ領域に値を格納
する引数格納命令が存在し、なおかつ、格納されたその
値を引数とする手続き呼びだし命令が存在しないことを
判定する。なお、その手法は、中間コードの並びを先頭
から順に終端までを調べ、同じ引数領域に格納する引数
格納列がその引数評価列より前に存在し、その引数格納
領域を引数として呼び出す手続き呼び出し命令がその引
数評価列より後ろに存在しているか否か調べることによ
りなされる。
【0007】403は退避命令列生成部であり、引数退
避判定部402により、引数領域を退避する必要がある
と判定された場合に起動され、引数領域上の値を別の領
域(これを退避領域と呼ぶ)に退避する命令列を生成
し、現在までに401の引数評価制御部で処理の終了し
ている中間コードの後ろに挿入する。更に図示していな
いが、退避した引数領域と退避である退避領域の情報を
退避情報保持部に保持する。
【0008】404は引数評価列生成部であり、引数退
避判定部401により引数領域を退避する必要がないと
判定された場合、又は、引数領域を退避する必要がある
と判定され、退避命令生成部403の起動が終了した後
に起動される。引数評価制御部401より渡された引数
評価列に対して、そのままの形で、引数の値を計算する
引数計算列、引数評価値を引数領域に格納する引数格納
命令列を生成し、引数評価制御部401の中で処理の終
了している中間コードの後ろに挿入する。
【0009】405は復元命令列生成部であり、図示し
ていないが、引数領域退避情報保持部から退避されてい
る引数領域と退避領域の情報を得、引数領域の値を元の
実引数領域に復元する命令列を生成し、引数評価制御部
401で現在までに処理が終了している中間コードの後
ろに挿入する。 (1)引数評価制御部401は、中間コード表現された
手続き呼び出し命令列の各引数評価列に対して、順に引
数退避判定部402を起動させる。 (2)引数退避判定部402は、現在処理対象の引数評
価列が使用する引数領域の現在の値を退避する必要があ
るか否かを判定する。
【0010】(3)引数退避判定部402により、引数
領域の値を退避する必要があると判定された場合には、
(4)に進む。反対に、引数領域の値を退避する必要が
ないと判定された場合には、(5)に進む。 (4)退避命令列生成部403は、引数評価列が使用す
る引数領域を退避領域に退避する命令を生成し、現在ま
でに401の引数評価制御部で処理の終了している中間
コードの後ろに挿入する。更に、図示していないが、退
避した引数領域と退避である退避領域の情報を退避情報
保持部に保持する。次に(5)に進む。
【0011】(5)引数評価列生成部404は、引数評
価制御部401より渡された引数評価列に対して、その
ままの形で、引数の値を計算する引数計算列、引数評価
値を引数領域に格納する引数格納命令列を生成し、引数
評価制御部401の中で処理の終了している中間コード
の後ろに挿入する。 (6)全ての引数に対して、引数評価列が終了すると、
次に引数評価制御部401は、復元命令列生成部405
を起動させる。復元命令生成部405は、退避情報保持
部から、退避された引数領域と退避先である退避領域の
情報を得、退避領域に退避されている引数領域値を元の
引数領域に復元する命令を生成し、現在までに処理が終
了している中間コードの後ろに挿入する。次に、以上の
ように動作する従来の手続き呼び出し命令列翻訳装置に
おける動作の内容を、その具体例を基に説明する。
【0012】図5は、この手続き呼び出し命令列翻訳装
置における手続き呼び出し命令列への変換の過程を示す
模式図である。本図において、(a)はc言語で記述し
た手続き呼び出し文である。c言語では、手続き呼びだ
しは以下のように記述する。手続き(引数、引
数、...);各引数を区別するために、呼び出し文で
記述されている左から順に引数1、引数2と番号をつけ
て呼ぶ。
【0013】g1、g2、g3は手続き呼び出しを表
し、また、g2、g3は各々3つの引数を有している。
更に、引数には計算式がなく、引数となる変数しか記述
されておらず、このため引数計算の命令列はなく、引数
評価値を引数領域に格納する命令列のみが引数評価列と
なっている。中間コード表現として、引数1から順に引
数nまでの各引数の値を手続き側に受渡しするために、
各々に対して割り当てられる引数領域をarg1〜argnとし
て表現することとする。
【0014】手続きg1に対する引数評価として左の引
数1から順に引数4までを引数評価を行う手続き呼びだ
し命令列が手続き翻訳装置に入力されているものとす
る。まず、引数1まで引数評価列の処理が終了してお
り、引数領域arg1に引数x1の値を格納する引数格納列が
生成されているものとする。
【0015】次に、引数2の手続きg2の手続き呼び出
しにおいては、手続きg2の呼び出しのために引数領域
arg1からarg3までを使用するが、すでに引数領域arg1に
は引数x1に値を格納する引数格納命令が生成されている
ので、記述のごとく、命令列を調べてこれを検知した引
数退避判定部402が、退避命令生成部403を起動す
る。起動された退避命令生成部は、引数領域arg1に格納
されている値を退避領域に退避させる命令を生成する。
【0016】同様に、引数4の評価において使用する引
数領域arg2,arg3には、既に引数評価値が格納
されているので、退避命令を生成する。このようにし
て、生成した命令列は図5(b)のようになる。なお、
本図では退避領域をt1,t2,t3と表している。
【0017】次に、以上のコンパイラやその手続き翻訳
についての技術は、例えば、A.V.エイホ他二名著,
原田賢一訳 「コンパイラ」 サイエンス社刊 199
0年10月 等に詳しい。その他、情報処理学会編
「情報処理ハンドブック」 オーム社刊 1989年1
1月。このため、これ以上の説明は省略する。また、同
じく、手続き翻訳に関連した高級プログラミング言語に
ついても、例えばアンソニー・チャンダー他著 坂井利
之訳「コンピュータ用語辞典」 講談社刊 1982年
3月刊,Les Hancock他著 アスキー出版監
訳 「C言語入門」 アスキー出版刊 1984年 等
に詳しい。このため、これらについても、説明は省略す
る。
【0018】
【発明が解決しようとする課題】従来の手続き呼び出し
命令列翻訳装置においては引数に対して共通の引数領域
を単純に若しくは効率を考えずに発生若しくは計算に使
用する順に割り当てるため、前述の具体例で説明したよ
うに、手続き呼び出し文の引数の計算式の中に手続き呼
び出しがある場合、他の引数評価値が格納された引数領
域を使用して引数を評価するときには、図5の(b)に
示すように引数領域に格納されている引数評価値を退避
する命令列(t1:=arg1,t2:=arg2,t
3=arg3)及び退避された値を退避された領域から
復元する命令列(arg1:=t1,arg2:=t
2,arg3:=t3)を多数若しくは必ず生成する必
要があった。このため、計算資源、消費電力、計算時
間、計算機の小型化等の面から種々不都合が生じてい
た。なお、BGNFCALL,ENDFCALLにより
手続き呼び出しを認識すること、高級プログラミング言
語を中間コード命令列に変換することの内容などについ
ても前述の「ソフトウェア科学」の「コンパイラのあら
まし」等に記載されている周知技術であるため、これ以
上の説明は省略する。
【0019】本発明は、従来の手続き呼び出し翻訳装置
が有していた以上の問題点に鑑み、引数評価列を解析
し、引数の退避、復元が少なくなるような変換を行なう
手続き呼び出し命令列翻訳装置を提供することを目的と
するものである。
【0020】
【課題を解決するための手段】本発明は、前記の目的を
達成するために、請求項1の発明においては、予め割り
当てられた領域を使用して手続き呼び出し時の引数の受
け渡しを行うようなコンパイラにおいて、手続き呼び出
し命令列の各引数毎に引数を評価する例えば三番地コー
ドからなる命令列を抽出する、すなわち入力された命令
列のうち、手続きの各引数の計算列と格納列がどこから
どこまでかを解析する、引数評価列抽出部と、前記引数
評価列抽出部で抽出された引数評価列に対して引数評価
に使用する引数領域情報、具体的にはどの領域を使用し
て引数の評価結果を計算するか、また評価結果を引数領
域のどの領域に格納するかを所定の手順で解析する評価
情報解析部と、前記評価情報解析部により解析された評
価情報を元に各引数評価列の評価順序を決定する評価順
序決定部と、前後の命令列についての並びを入れ換えす
ることにより前記評価順序決定部で決定された評価順序
に入れ換える評価順序変換部とを有する手続き呼び出し
翻訳装置としていることを特徴としている。
【0021】請求項2の発明においては、前記評価情報
解析部が引数の評価に使用する引数領域を求める使用領
域解析部と、前記使用領域解析部で求めた使用領域を元
に引数の評価に引数領域を使用するか否かを判定する領
域使用判定部と、前記領域使用判定部で引数領域を使用
しないと判定された引数評価列の評価順序を入れ換える
領域未使用評価順序変換部とを有していることを特徴と
する請求項1記載の手続き呼び出し翻訳装置としてい
る。
【0022】請求項3の発明においては、前記引数評価
列抽出部で抽出した引数評価列に対して引数の結果を格
納する引数領域を求める格納領域解析部と、前記格納領
域解析部で求めた格納領域が使用領域解析部で求めた他
の引数評価列の使用領域と重なるか否かを判定する重複
判定部と、前記重複判定部により他の使用領域と重なら
ないと判定された引数評価列の評価順序を入れ換える非
重複評価順序変換部と、前記非重複評価順序変換部によ
り評価順序を変換された引数評価列以外の引数評価列に
対して変換する引数評価列がなくなるまで評価列変換を
繰り返す引数変換制御部とを有することを特徴とする請
求項2記載の手続き呼び出し翻訳装置としている。
【0023】請求項4に係る発明においては、前記重複
判定部により引数格納領域が他の引数評価列の使用領域
と重なる判定された引数評価列の内、前記領域使用判定
部と前記重複判定部とからの情報を元に所定の基準で評
価順序を入れ換える引数評価列を選択する重複引数評価
列選択部と、前記重複引数評価列選択部により選択され
た引数評価列を引数の結果を計算する引数計算列と、評
価された結果を引数領域上の対応する領域に格納する引
数格納列とに分解する引数評価列分解部と、前記引数評
価列分解部により分解された引数評価列の引数計算列と
引数格納列の評価順序を入れ換える重複引数評価順序変
換部とを有していることを特徴とする請求項3記載の手
続き呼び出し翻訳装置としている。
【0024】
【作用】上記構成により請求項1の発明においては、予
め割り当てられた領域を使用して、手続き呼び出し時の
引数の受渡しを行うコンパイラにおいて、引数評価列抽
出部が、手続き呼び出し文の各引数毎に引数を評価する
命令列を抽出する。次に、評価情報解析部が、引数評価
列抽出部で抽出された引数評価列に対して引数評価に使
用する引数領域情報を所定の手順で解析する。
【0025】次に評価順序決定部が評価情報解析部によ
り解析された評価情報を元に各引数評価列の評価順序
を、例えば、 (a)引数領域を使用しない引数評価列 引数領域を使用しない引数評価列の評価順序は使用する
引数評価列の後ろにする。 (b)格納領域が他の引数領域と重複しない引数評価列 重複しない引数評価列の評価順序は重複する引数評価列
の前にする。 (c)格納領域が他の引数評価列と重複する引数評価列 重複する引数評価列の内、使用領域が大きく評価格納領
域の使用率が高い引数評価列を選択する。選択された引
数評価列に対して、引数の値を計算する計算命令列と、
引数の値を格納領域に格納する格納命令列に分割し、評
価順序の計算命令列は他の評価順序列の前に、格納命令
列は評価順序列の最後尾にする。という規則で決定す
る。次に評価順序変換部が、前後の命令列の順序を変更
することにより、評価順序決定部で決定された評価順序
に引数評価列を入れ換える。請求項2の発明において
は、前記評価情報解析部内の使用領域解析部が評価情報
として引数の値を計算するのに引数領域を求める。
【0026】次に領域使用判定部が使用領域解析部で求
めた使用領域を元に引数の評価に引数領域を使用するか
否かを判定する。次に領域未使用評価順序変換部が領域
使用判定部で引数領域を使用しないと判定された引数評
価列の評価順序を入れ換える。請求項3の発明において
は、格納領域解析部が引数評価列抽出部で抽出した引数
評価列に対して引数の結果を格納する引数領域を求め
る。
【0027】次に重複判定部が格納領域解析部で求めた
格納領域が使用領域解析部で求めた他の引数評価列の使
用領域と重なるか否かを判定する。次に非重複評価順序
変換部が重複判定部により他の使用領域と重ならないと
判定された引数評価列の評価順序を入れ換える。次に引
数変換制御部が非重複評価順序変換部により評価順序を
変換された引数評価列以外の引数評価列に対して評価順
序を入れ換える引数評価列がなくなるまで評価列変換を
繰り返す。
【0028】請求項4の発明においては、重複引数評価
列選択部が重複判定部により引数格納領域が他の引数評
価列の使用領域と重なると判定された引数評価列の内領
域使用判定部と重複判定部からの情報を元に所定の基準
で評価順序を入れ換える引数評価列を選択する。次に、
引数評価列分解部が重複引数評価列選択部により選択さ
れた引数評価列を引数の結果を計算する引数計算列と評
価された結果を引数領域上の対応する領域に格納する引
数格納列とに分解する。
【0029】次に、重複引数評価順序変換部が引数評価
列分解部により分解された引数評価列の引数計算列と引
数格納列の評価順序を入れ換える。
【0030】
【実施例】以下、本発明の手続き呼び出し翻訳装置の一
実施例を図面を用いて説明する。図1は本発明に係る手
続き呼び出し翻訳装置の一実施例の構成図である。本図
において、110は引数評価列抽出部であり、手続き呼
び出し文中の引数を評価する命令列を、各引数毎に抽出
する。なお、プログラム中から引数を評価する部分のみ
を抽出した命令列を引数評価列と呼ぶ。
【0031】120は評価情報解析部であり、使用領域
解析部121と格納領域解析部122と評価情報保持部
123を内蔵する。使用領域解析部121は、引数評価
列抽出部110で抽出された引数評価列が引数の評価結
果を計算するのに使用する引数領域(使用領域と呼ぶ)
を解析(具体的には手続きに沿って判断、確認)する。
【0032】格納領域解析部122は、引数評価列抽出
部110で抽出された引数評価列の評価結果を格納する
引数領域(格納領域と呼ぶ)を解析する。評価情報保持
部123は、使用領域解析部121と格納領域解析部1
22で解析された使用領域と格納領域の情報を保持する
ものであり、高速半導体メモリにて製造されている。
【0033】130は引数評価列変換部であり、評価順
序決定部131と評価順序変換部132を内蔵する。評
価順序決定部131、評価順序変換部132は、後述す
るが、各々いくつかの構成要素を持ち、評価順序決定決
定部と評価順序変換部は直接やりとりすることはなく、
内蔵する構成要素間でやりとりを行う。評価順序決定部
131は、後に説明する領域使用判定部133、重複判
定部141及び重複引数評価列選択部143を構成要素
に含め評価情報解析部120で解析した情報を元に評価
順序を決定の上評価順序を入れ換える引数評価列をつく
る。
【0034】評価順序変換部132は、後に説明する領
域未使用評価順序変換部134、非重複評価順序変換部
142、引数評価列分解部144及び重複引数評価順序
変換部145を構成要素に含め、評価順序決定部131
で決定された評価順序に引数評価列を入れ換える。領域
使用判定部133は、引数評価列抽出部110で抽出さ
れた各引数評価の命令列に対して、使用領域解析部12
1で解析された使用領域を元に引数の評価の際の引数領
域の使用の有無を判定する。
【0035】領域未使用領域順序変換部134は、領域
使用判定部133で引数領域を使用しないと判定された
場合に起動され、引数評価列の評価順序を当該評価列の
最後尾に入れ換える。140は領域使用評価順序変換部
であり、重複判定部141と重複引数評価列選択部14
3とを順序決定部131と共用し、非重複評価順序変換
部142、引数評価列分解部144及び重複引数評価順
序変換部145を評価順序変換部132と共用し、更に
図示しない引数変換制御部をも内蔵するものである。そ
して、その作用は、領域未使用評価順序変換部134で
評価順序を入れ換えられた引数評価列を除いた命令列を
処理対象の命令列として、引数評価列の各々に対して内
蔵する重複判定部141を引数評価列がなくなるまで繰
り返し作動させるものである。
【0036】重複判定部141は、格納領域が他の引数
評価列の使用領域と重なるか否かを判定する。非重複評
価順序変換部142は、重複判定部141で引数領域を
重複しないと判定された場合に起動され、引数評価列の
評価順序を当該命令列の先頭に入れ換える。重複引数評
価列選択部143は、格納領域が他の引数評価列の使用
領域と重なると判定された引数評価列の中で、使用領域
が大きく評価格納領域の使用率が高い引数評価列を選択
する。すなわち、引数評価列の評価順序を入れ換えるこ
とによって、引数領域が重複する引数評価列の数が最小
になるような引数評価列を選択する。
【0037】引数評価列分解部144は、前述の重複引
数評価列選択部143で選択された引数評価列を入力と
して、重複引数評価列選択部143から起動される。選
択された引数評価列を引数評価値を計算する計算命令列
と格納領域に格納する格納命令列に分解する。重複引数
評価順序変換部145は、前述の引数評価列分解部14
4から起動され、分解された引数評価値を計算する計算
列を当該命令列の先頭に、格納命令列の評価順序を当該
命令列の最後尾に入れ換える。
【0038】次に、これらの場合の評価、解析の手法の
基本となるコンパイラの動作、原理について若干説明す
る。前述したように、手続き翻訳装置は上流部に中間コ
ード生成部を持つため、プログラム上の手続き呼びだし
文に関して、各引数の引数評価列と手続き呼びだし命令
の中間コードはすでに生成している。つまり、各引数に
対して、引数評価値を計算する命令列の生成、格納先で
ある引数領域の決定、引数領域への引数評価値を格納す
る命令の生成はすべて終了している。また、すでに各引
数は一定の規則にのっとって(例えば、引数の並びの先
頭から順に終わりまで)評価順序は決まっている。評価
順序が決められた手続き呼びだし命令列は、評価順序の
先頭から終わりの順に従って、中間コード上で先頭から
順に評価順序列が表現されている。
【0039】手続き呼び出しの中間コードの生成に関し
ては、本発明の趣旨に直接関係はなく、例えば前掲の文
献 「ソフトウェア科学」の384頁の「7.5手続き
呼び出しの中間コード」に記載されているいわゆる周知
の事実であるため、その説明は省略する。また、コンパ
イラは手続き呼び出しに限らず、プログラム上の式を3
つ組や4つ組といった中間コードに変換し、この式をを
機械命令に翻訳する。また、各中間コードを機械命令に
翻訳するための動作に関しても、本発明の手段は直接関
係なく、例えば前掲の文献 「ソフトウェア科学」の中
に記載されているいわゆる周知の事実であるため、その
説明は省略する。
【0040】以上の構成、原理のもとで本実施例の動作
を以下に説明する。なお、ここでは手続き呼び出しにお
いて、渡される引数以外の領域は呼び出した手続き内で
破壊されないものとする。 (1)引数評価列抽出部110が、手続き呼び出し命令
列に対して動作する。 (2)引数評価列抽出部110が、各引数毎に対応する
手続き呼び出し命令列から引数評価列を抽出する。
【0041】(3)評価情報解析部120が起動する。 (4)評価情報解析部120は、使用領域解析部121
と格納領域解析部122を起動させ、各引数評価列に対
して使用領域と格納領域の解析、すなわち各引数、その
使用、格納の有無等の分析を行ない、その結果を評価情
報保持部123に格納する。
【0042】(5)ついで、引数評価列変換部130が
起動する。 (6)引数評価列変換部130は、領域使用判定部13
3を起動させ、引数評価列に対して引数領域を使用する
か否かを判定させる。 (7)ついで、領域使用判定部133で引数領域を使用
しないと判定された引数評価列に対して、領域使用判定
部133から領域未使用引数評価列変換部134が起動
され、引数評価列の評価順序を最後尾にする。
【0043】(8)次に評価順序変換部130は、前述
の操作で移動された引数評価列を除いた命令列を引数評
価列として、領域使用評価順序変換部140を起動させ
る。 (9)領域使用評価順序変換部140は、引数評価列抽
出部110で抽出された各引数評価列に対して、重複判
定部141を作動させる。重複判定部141は、格納結
果の場所が他の引数評価列の使用領域と重なるか否かを
判定する。
【0044】(10)判定結果に基づき、重複判定部1
41は、格納領域が他の引数評価列の使用領域と重なら
ないと判定された引数評価列(非重複引数評価列と呼
ぶ)に対して、非重複評価順序変換部142を作動させ
る。一方、全ての引数評価列に対して引数評価列の格納
領域が他の引数評価列の使用領域と重なると判定された
場合には、すなわち1度も非重複評価順序変換部142
が起動されなかった場合には、重複引数評価列選択部1
43を作動させる。
【0045】(11)非重複評価順序変換部142は、
非重複引数評価列の評価順序を当該命令列の先頭にす
る。 (12)重複引数評価列選択部143は、当該命令列内
の引数評価列のうち他の引数評価列との重複可能性の高
い引数評価列を選択する。ここでは、使用領域が大きい
上に、格納領域の使用率が高い引数評価列を選択する。
選択された引数評価列に対して、引数評価列分解部14
4を作動させる。
【0046】(13)引数評価列分解部144では、結
果を計算する計算命令列と、格納領域に評価結果を格納
する格納命令列に分解し、重複引数評価順序変換部14
5を起動させる。 (14)重複引数評価順序変換部145は、引数評価列
分解部144で分解された計算命令列の評価順序を当該
命令列の先頭に、格納命令列の評価順序を当該命令列の
最後尾に入れ換える。
【0047】(15)領域使用評価順序変換部140
は、前述の(9)〜(14)の処理で移動された引数評
価列以外の引数評価列を入れ換え対象の命令列として、
引数評価列がなくなるまで、(9)〜(14)の動作を
繰り返し行う。(動作の説明おわり) 次に、以上のように動作する本手続き呼び出し翻訳装置
のより具体的な動作の過程を図を参照しつつ説明する。
【0048】図2、図3は本実施例の手続き呼び出し翻
訳装置により、手続き呼び出し命令列の評価順序を変換
する過程の一例を示す摸式図である。図2は従来例で述
べた課題を解決する過程を示すものであり、図3は重複
引数評価順序変換部145を用いる場合の動作を示すも
のである。なお、両図においては、従来技術に係る図5
と同じく、引数領域をargで表し、手続き呼び出しの
戻り値をretで表す。argには、arg1、arg
2、arg3、arg4、arg5の5領域がある。
【0049】図2(a)は、手続き呼び出し命令列を示
す。本文は、図5の(a)に示す文と同じである。図2
(b)はそれに対応する手続き呼び出し命令列を示す。
なお図中、命令列は A=B+C のごとく3種の基本
的コードからなる3番地コード形式で表現している。図
2(c)は、引数評価列抽出部110により引数評価列
が抽出された結果を示すものである。引数評価列は引数
毎に存在するので、手続きg2,g3の引数評価列はそ
れぞれ共に3つ存在し、手続きg2の引数1、引数2、
引数3に対応する引数評価列はそれぞれ、 arg1=x2 引数1の引数評価列 arg2=y2 引数2の引数評価列 arg3=z2 引数3の引数評価列 である。また、手続きg3の引数1、引数2、引数3に
対応する引数評価列はそれぞれ、 arg1=x4 引数1の引数評価列 arg2=y4 引数2の引数評価列 arg3=z4 引数3の引数評価列 である。次に、手続きg1の引数は、図2の(a)で下
線つきで表示してあるが、 x1、 g2(x2,y2,z2)の戻り値、 z3、 g3(x4,y4,z4)の戻り値 の4つであり、引数評価列はもう少し複雑になり、各々
図2の(c)で罫線で囲んで表示してあるような命令列
の並びになる。
【0050】何故ならば、引数1と引数3に関しては、
手続きg2やg3の引数と同様に引数計算はなく、引数
格納の命令列しかない。また、引数2は、手続きg2の
戻り値が引数2となるので、戻り値を計算するための命
令列 arg1:=x2、arg2:=y2、arg3:=z2、call g2 が引数計算のための命令列となり、引数評価値がret
であり、引数格納の命令が arg2=ret とな
る。手続きg2にとっては、arg1:=x2や、ar
g2:=y2は引数格納の命令であり、手続きg1にと
っては引数計算の命令になる。引数4も同様で、手続き
g3の戻り値が引数4となるので、戻り値を計算するた
めの命令列 arg1:=x4、arg2:=y4、arg3:=z4、call g3 が引数計算のための命令列となり、引数評価値がret
であり、引数格納の命令が arg4=ret とな
る。
【0051】図2(d)は、評価情報解析部120が抽
出された引数評価列に対して引数の評価に使用する引数
領域の有無を判断し、その結果得られた評価情報を示す
ものである。図2(e)は、引数評価列1と引数評価列
3は使用領域がないため、領域未使用引数評価順序変換
部134により評価順序を最後尾に入れ換えた結果を示
すものである。その順序の変更の手段であるが、手続き
呼びだし翻訳装置はその処理対象が中間コードであるた
め、図6の(a)に矢線及び点線の矢線で示すように、
中間コード命令列は前後の中間コードの情報を有してい
る。このため、この情報を図6の(b)に示すように変
更することによりなされる。次に、本実施例の他の作用
の例を示す。図3(a)は、手続き呼び出し文を示す。
本図における「h」は、図2における「g」と同じく手
続きを表わす。また、a,b,c,dは変数である。
【0052】図3(b)は、それに対する手続き呼び出
し命令列の引数評価列を抽出し、引数領域を使用しない
引数評価列の評価順序を入れ換えた状態である。図3
(c)はそれぞれの引数評価列に対する評価情報を示す
ものである。図3(d)は、領域未使用評価順序変換部
134により評価順序を入れ換えた引数評価列4を除
く、引数評価列1、2、3、5を引数評価列として重複
判定を行い、その結果格納領域arg5を使用していな
いため非重複引数評価列と判定された引数評価列5に対
して、非重複評価順序変換部142が評価順序を入れ換
え対象とする命令列(同(d)点線内)の先頭にした結
果を示すものである。
【0053】図3(e)は、以上の処理結果を示すもの
である。図3(d)に示す状態に引き続いて、引数評価
列5以外の引数評価列1、2、3を入れ換え対象の命令
列として、重複判定を行なう。各々引数評価列の格納領
域が他の引数評価列の使用領域と重なっているため、重
複判定部141は重複引数評価列選択部143を起動さ
せる。重複引数評価列選択部143では、これら引数評
価列の中で、まず使用領域の大きい引数評価列を選択す
る。これにより、引数評価列2と3の2つの引数評価列
が選択される。次にこれら2つの引数評価列の内、評価
格納領域の使用率が高い引数評価列を選択する。これに
より、引数評価列2が選択される。選択された引数評価
列2を、引数評価列分割部144が計算命令列と格納命
令列とに分解し、重複順序変換部145が各々を入れ換
えの対象とする命令列(本図3(e)の点線内)の先
頭、最後尾に移動する。
【0054】図3(f)は、重複判定部141が引数評
価列2以外の引数評価列1、3に対して重複判定を行
い、その結果、格納領域が引数1の使用領域と重なって
いない引数評価列3を非重複集合と判定し、次いで重複
評価順序変換部145が評価順序を当該命令列(本図5
(f)の点線内)引数評価列の先頭にした状態を示す。
以上、本発明を実施例に基づき説明したが、本発明はそ
の趣旨に基づいて種々の変形が可能であり、何も上記実
施例に限定されず例えば以下のようなものも包含される
のは勿論である。
【0055】(1)本発明では引数領域を使用していな
い引数評価列に対する評価順序を入れ換えたが、引数領
域を使用する引数評価列の評価順序を入れ換える。 (2)また、本実施例では評価情報として、引数の使用
領域と格納領域を解析し、評価順序を決定したが、評価
情報として使用領域や格納領域への代入や各領域からの
参照にかかるコスト等をも反映する。
【0056】(3)更に、重複引数評価列選択部の選択
基準として、使用領域が大きいことと格納領域の使用率
が高いことを採用しているが、その他各々の引数評価列
の退避復元にかかるコストをあらかじめ定められた基準
により作成された表を参照の上計算し、最小のコストに
なるということを採用する。 (4)更にまた、入れ換えの対象とする形式は命令列3
番地形式の中間言語や高級プログラミング言語等の形式
である。等である。
【0057】
【発明の効果】以上説明したように、本発明に係る手続
き呼び出し翻訳装置においては、手続き呼び出しにおけ
る引数領域の使用と定義の依存関係を解析した上で、評
価順序の入れ換えを行なうことにより、手続き呼び出し
時の引数の評価における退避、復元のコードを削減を図
る。このため、計算資源、消費電力、計算時間が向上
し、また計算機自体の小型化も一層図れる。
【図面の簡単な説明】
【図1】本発明に係る手続き呼び出し翻訳装置の一実施
例の構成図である。
【図2】上記実施例による引数評価列の評価順序を入れ
換える過程を示す摸式図である。
【図3】上記実施例による引数評価列の評価順序を入れ
換える過程を示す摸式図である。
【図4】従来技術に係る手続き呼び出し命令列翻訳装置
の構成図である。
【図5】従来技術に係る手続き呼び出し命令列翻訳装置
により、手続き呼び出し命令列を生成する過程を示す摸
式図である。
【図6】図2に示す評価順序の入れ換えの手法を模式的
に示した図である。
【符号の説明】
110 引数評価列抽出部 120 評価情報解析部 121 使用領域解析部 122 格納領域解析部 123 評価情報保持手段 130 引数評価列変換部 131 評価順序決定部 132 評価順序変換部 133 領域使用判定部 134 領域未使用評価順序変換部 140 領域使用評価順序変換部 141 重複判定部 142 非重複評価順序変換部 143 重複引数評価列選択部 144 引数評価列分解部 145 重複引数評価順序変換部

Claims (4)

    (57)【特許請求の範囲】
  1. 【請求項1】 予め割り当てられた領域を使用して手続
    き呼び出し時の引数の受渡しを行なうコンパイラにおい
    て、手続き呼び出し文の各引数毎に引数を評価する命令
    列を抽出する引数評価列抽出部と、 前記引数評価列抽出部で抽出された引数評価列に対して
    引数評価に使用する引数領域情報を所定の手順で解析す
    る評価情報解析部と、 前記評価情報解析部により解析された評価情報を元に各
    引数評価列の評価順序を決定する評価順序決定部と、 前記評価順序決定部で決定された評価順序に引数評価列
    を入れ換える評価順序変換部とを有することを特徴とす
    る手続き呼び出し翻訳装置。
  2. 【請求項2】 前記評価情報解析部が引数の値を計算す
    るのに引数領域を求める使用領域解析部と、 前記使用領域解析部で求めた使用領域を元に引数の評価
    に引数領域を使用するか否かを判定する領域使用判定部
    と、 前記領域使用判定部で引数領域を使用しないと判定され
    た引数評価列の評価順序を入れ換える領域未使用評価順
    序変換部とを有していることを特徴とする請求項1記載
    の手続き呼び出し翻訳装置。
  3. 【請求項3】 前記引数評価列抽出部で抽出した引数評
    価列に対して引数の結果を格納する引数領域を求める格
    納領域解析部と、 前記格納領域解析部で求めた格納領域が使用領域解析部
    で求めた他の引数評価列の使用領域と重なるか否かを判
    定する重複判定部と、 前記重複判定部により他の使用領域と重ならないと判定
    された引数評価列の評価順序を入れ換える非重複評価順
    序変換部と、 前記非重複評価順序変換部により評価順序を変換された
    引数評価列以外の引数評価列に対して評価順序を入れ換
    える引数評価列がなくなるまで評価列変換を繰り返す引
    数変換制御部とを有することを特徴とする請求項2記載
    の手続き呼び出し翻訳装置。
  4. 【請求項4】 前記重複判定部により引数格納領域が他
    の引数評価列の使用領域と重なると判定された引数評価
    列の内、前記領域使用判定部と前記重複判定部とからの
    情報を元に所定の基準で評価順序を入れ換える引数評価
    列を選択する重複引数評価列選択部と、 前記重複引数評価列選択部により選択された引数評価列
    を引数の結果を計算する引数計算列と、評価された結果
    を引数領域上の対応する領域に格納する引数格納列とに
    分解する引数評価列分解部と、 前記引数評価列分解部により分解された引数評価列の引
    数計算列と引数格納列の評価順序を入れ換える重複引数
    評価順序変換部とを有していることを特徴とする請求項
    3記載の手続き呼び出し翻訳装置。
JP4092739A 1992-04-13 1992-04-13 手続き呼び出し翻訳装置 Expired - Fee Related JP2501394B2 (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP4092739A JP2501394B2 (ja) 1992-04-13 1992-04-13 手続き呼び出し翻訳装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP4092739A JP2501394B2 (ja) 1992-04-13 1992-04-13 手続き呼び出し翻訳装置

Publications (2)

Publication Number Publication Date
JPH0644083A JPH0644083A (ja) 1994-02-18
JP2501394B2 true JP2501394B2 (ja) 1996-05-29

Family

ID=14062791

Family Applications (1)

Application Number Title Priority Date Filing Date
JP4092739A Expired - Fee Related JP2501394B2 (ja) 1992-04-13 1992-04-13 手続き呼び出し翻訳装置

Country Status (1)

Country Link
JP (1) JP2501394B2 (ja)

Also Published As

Publication number Publication date
JPH0644083A (ja) 1994-02-18

Similar Documents

Publication Publication Date Title
US6243864B1 (en) Compiler for optimizing memory instruction sequences by marking instructions not having multiple memory address paths
US5142681A (en) APL-to-Fortran translators
EP1681626A2 (en) Software tool with modeling of asynchronous program flow
JP2501394B2 (ja) 手続き呼び出し翻訳装置
JP2008305337A (ja) プログラム変換装置、プログラム変換方法、プログラム、記憶媒体、デバッグ装置、デバッグ方法及びプログラム開発システム
JP3328056B2 (ja) 構文解析木からの情報抽出装置
JPS5922140A (ja) 対話型コンパイル方式
JP2585793B2 (ja) コンパイラシステム
JP3003459B2 (ja) プログラム作成支援装置
EP0252229B1 (en) Apl-to-fortran translator
JPH0695890A (ja) コンパイラにおける名前置換方式
JP2001265605A (ja) コンパイラの命令列最適化方法、コンパイラ装置、記録媒体、及びプログラム
JP2827724B2 (ja) プログラムデバッグ処理方法
JPH05204705A (ja) 未定義変数検出処理方法
JP2720643B2 (ja) プログラムジェネレータ生成装置
JPS6015772A (ja) ル−プ内配列処理ベクトル化処理方式
JPH0438528A (ja) ソースプログラムのインライン展開方式
JPH05120025A (ja) ソースプログラムのインライン展開方法
JPS62235643A (ja) プログラム言語トランスレ−タ
JPH06301549A (ja) プログラム翻訳装置
Peck et al. Code compaction for minicomputers with INTCODE and MINICODE
JP2000132405A (ja) インライン展開処理装置及び方法
JP2001034482A (ja) コンパイル装置、プログラム最適化装置、コンパイル処理方法及び記録媒体
JPH06274351A (ja) コンパイラの最適化方式
JPH0950429A (ja) コンパイラにおけるポインタベクトル化システム

Legal Events

Date Code Title Description
LAPS Cancellation because of no payment of annual fees