JPH02230333A - 変数領域割当て方式 - Google Patents
変数領域割当て方式Info
- Publication number
- JPH02230333A JPH02230333A JP5112189A JP5112189A JPH02230333A JP H02230333 A JPH02230333 A JP H02230333A JP 5112189 A JP5112189 A JP 5112189A JP 5112189 A JP5112189 A JP 5112189A JP H02230333 A JPH02230333 A JP H02230333A
- Authority
- JP
- Japan
- Prior art keywords
- temporary
- variable
- frame
- instruction
- variables
- 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
Links
- 238000000034 method Methods 0.000 claims description 28
- 238000010586 diagram Methods 0.000 description 12
- 101100369153 Saccharolobus solfataricus (strain ATCC 35092 / DSM 1617 / JCM 11322 / P2) tfbA gene Proteins 0.000 description 1
Landscapes
- Devices For Executing Special Programs (AREA)
Abstract
(57)【要約】本公報は電子出願前の出願データであるた
め要約のデータは記録されません。
め要約のデータは記録されません。
Description
【発明の詳細な説明】
〔産業上の利用分野〕
本発明は変数領域割当て方式に関し、特に論理型言語を
翻訳するプログラムの変数領域割当て方式に関する. 〔従来の技術〕 論理型言語であるプロログを翻訳して実行するためには
、ワレン氏の考案によるプロログ抽象マシンを用いるこ
とが一般的になりつつある.なお、ワレン氏の考案によ
るプロログ抽象マシンの参考文献としては、「アン・ア
ブストラクト・プロログ・インストラクション・セット
(An Abstract Prolog Instr
uction Set) Jディー・エイチ・ワレン(
D.l,Ilarren)著、エス・アール・アイ・
インタナショナル(SRIInternational
) . 1 9 8 3年がある.従来の変数領域割
当て方式であるワレン氏のプロログ抽象マシンは、述語
を構成する節を翻訳する場合に、述語の呼出しにまたが
って出現する変数である永久変数とそうでない変数であ
る一時変数とを区別し、前者に対しては、メモリ上のス
タックに永久変数の領域を割当てるとともに、後者に対
しては、一時変数レジスタを割当ててメモリアクセスを
減少させることにより高速化を計っている. 〔発明が解決しようとする課題〕 ところが、上述した従来の変数領域割当て方式は、一時
変数レジスタが固定個数の有限資源であり、複雑な手続
を有する節の翻訳をした場合に、一時変数を割当てるた
めの一時変数レジスタが不足する場合があるという欠点
を有している.このような問題を解決する最も簡単な方
法は、一時変数レジスタの固定個数を越えた一時変数を
必要とする節を禁止することであるが、禁止すればプロ
グラマに余分な負担を強いることになるという問題があ
る. また、処理系によって、一時変数の個数の制限が異なっ
た場合に、ある処理系で動いていたプログラムが、別の
処理系では効かない場合が生ずることとなるという欠点
もある. 一方、固定サイズのメモリ領域を拡張した一時変数レジ
スタの領域として使用する手段も考えられるが、この方
式でも、基本的に一時変数レジスタの数に制限が加わる
ことには変りがない.なお、十分な大きさの拡張した一
時変数レジスタの領域を確保することも考えられるが、
この方式では、例えば、何らかの理由によりプログラム
の実行途中で、現在の状態を保存した上で、別のルーチ
ンを起動する場合に、現在の一時変数レジスタの値を退
避する必要があり、拡張した一時変数レジスタの領域を
大きく取ると、それだけ退避する情報が増えて、システ
ムのパフォーマンスを低下させるという問題点を有して
いる.本発明の目的は、固定個数の一時変数レジスタを
有する論理型言語の実行装置に対して、論理型言語を翻
訳する場合に、翻訳する節に必要な一時変数の個数が一
時変数レジスタの個数を越えても、越えた個数の一時変
数をスタックの領域に割当てた適切な命令列に翻訳して
能率良く実行することができる変数領域割当て方式を提
供することにある. 〔課題を解決するための手段〕 本発明の変数領域割当て方式は、N個の一時変数レジス
タを持ち、前記一時変数レジスタおよびスタック上の領
域の二つに保持する情報のユニフィケーションを行う命
令を備えた論理型言語の実行装置に対して、論理型言語
を翻訳するプログラムの変数領域割当て方式において、 論理型言語の節を翻訳してN個の前記一時変数レジスタ
に割付ける一時変数の最大番号であるMがNより大きい
場合に、前記一時変数レジスタの数Nによる一時変数の
数の制限を回避するために、 (A)翻訳している節が、E個の永久変数を含む環境フ
レームの領域を前記スタックに割当てることを必要とす
る場合には、まず前記環境フレームを割当てる命令で指
定する変数の個数をE+M−Nに変更し、次に、一時変
数の最大番号が、前記一時変数レジスタの数Nを越えな
いときに前記環境フレームが永久変数のために必要とな
るか、有効な一時変数の最大の番号がNより大きくなる
か、どちらか一方の条件が成立する前に、前記環境フレ
ームを前記スタックに割当てる命令を生成し、さらに、
N個の前記一時変数レジスタの割当てを受けることがで
きない一時変数に対して、前記環境フレームのE+1番
目からE+M−N番目までの領域を使用する命令を生成
する、 (B)翻訳している節が、前記環境フレームを必要とし
ない場合には、まず、有効な一時変数の最大の番号がN
より大きくなる前に、M−N個の一時変数の領域を持つ
一時変数フレームを前記スタックに割当てる命令を生成
するとともに、翻訳している節の命令列の最後の命令の
直前に、前記一時変数フレームを廃棄する命令を生成し
、次に、N個の前記一時変数レジスタの割当てを受ける
ことができない一時変数に対して、前記一時変数フレー
ムの領域を使用する命令を生成する、 ことにより構成されている. 〔作用〕 以下に、説明を簡単にするために、二つだけの一時変数
レジスタを有する論理型言語実行装置の例について、本
発明の変数領域割当て方式の作用を説明する。
翻訳するプログラムの変数領域割当て方式に関する. 〔従来の技術〕 論理型言語であるプロログを翻訳して実行するためには
、ワレン氏の考案によるプロログ抽象マシンを用いるこ
とが一般的になりつつある.なお、ワレン氏の考案によ
るプロログ抽象マシンの参考文献としては、「アン・ア
ブストラクト・プロログ・インストラクション・セット
(An Abstract Prolog Instr
uction Set) Jディー・エイチ・ワレン(
D.l,Ilarren)著、エス・アール・アイ・
インタナショナル(SRIInternational
) . 1 9 8 3年がある.従来の変数領域割
当て方式であるワレン氏のプロログ抽象マシンは、述語
を構成する節を翻訳する場合に、述語の呼出しにまたが
って出現する変数である永久変数とそうでない変数であ
る一時変数とを区別し、前者に対しては、メモリ上のス
タックに永久変数の領域を割当てるとともに、後者に対
しては、一時変数レジスタを割当ててメモリアクセスを
減少させることにより高速化を計っている. 〔発明が解決しようとする課題〕 ところが、上述した従来の変数領域割当て方式は、一時
変数レジスタが固定個数の有限資源であり、複雑な手続
を有する節の翻訳をした場合に、一時変数を割当てるた
めの一時変数レジスタが不足する場合があるという欠点
を有している.このような問題を解決する最も簡単な方
法は、一時変数レジスタの固定個数を越えた一時変数を
必要とする節を禁止することであるが、禁止すればプロ
グラマに余分な負担を強いることになるという問題があ
る. また、処理系によって、一時変数の個数の制限が異なっ
た場合に、ある処理系で動いていたプログラムが、別の
処理系では効かない場合が生ずることとなるという欠点
もある. 一方、固定サイズのメモリ領域を拡張した一時変数レジ
スタの領域として使用する手段も考えられるが、この方
式でも、基本的に一時変数レジスタの数に制限が加わる
ことには変りがない.なお、十分な大きさの拡張した一
時変数レジスタの領域を確保することも考えられるが、
この方式では、例えば、何らかの理由によりプログラム
の実行途中で、現在の状態を保存した上で、別のルーチ
ンを起動する場合に、現在の一時変数レジスタの値を退
避する必要があり、拡張した一時変数レジスタの領域を
大きく取ると、それだけ退避する情報が増えて、システ
ムのパフォーマンスを低下させるという問題点を有して
いる.本発明の目的は、固定個数の一時変数レジスタを
有する論理型言語の実行装置に対して、論理型言語を翻
訳する場合に、翻訳する節に必要な一時変数の個数が一
時変数レジスタの個数を越えても、越えた個数の一時変
数をスタックの領域に割当てた適切な命令列に翻訳して
能率良く実行することができる変数領域割当て方式を提
供することにある. 〔課題を解決するための手段〕 本発明の変数領域割当て方式は、N個の一時変数レジス
タを持ち、前記一時変数レジスタおよびスタック上の領
域の二つに保持する情報のユニフィケーションを行う命
令を備えた論理型言語の実行装置に対して、論理型言語
を翻訳するプログラムの変数領域割当て方式において、 論理型言語の節を翻訳してN個の前記一時変数レジスタ
に割付ける一時変数の最大番号であるMがNより大きい
場合に、前記一時変数レジスタの数Nによる一時変数の
数の制限を回避するために、 (A)翻訳している節が、E個の永久変数を含む環境フ
レームの領域を前記スタックに割当てることを必要とす
る場合には、まず前記環境フレームを割当てる命令で指
定する変数の個数をE+M−Nに変更し、次に、一時変
数の最大番号が、前記一時変数レジスタの数Nを越えな
いときに前記環境フレームが永久変数のために必要とな
るか、有効な一時変数の最大の番号がNより大きくなる
か、どちらか一方の条件が成立する前に、前記環境フレ
ームを前記スタックに割当てる命令を生成し、さらに、
N個の前記一時変数レジスタの割当てを受けることがで
きない一時変数に対して、前記環境フレームのE+1番
目からE+M−N番目までの領域を使用する命令を生成
する、 (B)翻訳している節が、前記環境フレームを必要とし
ない場合には、まず、有効な一時変数の最大の番号がN
より大きくなる前に、M−N個の一時変数の領域を持つ
一時変数フレームを前記スタックに割当てる命令を生成
するとともに、翻訳している節の命令列の最後の命令の
直前に、前記一時変数フレームを廃棄する命令を生成し
、次に、N個の前記一時変数レジスタの割当てを受ける
ことができない一時変数に対して、前記一時変数フレー
ムの領域を使用する命令を生成する、 ことにより構成されている. 〔作用〕 以下に、説明を簡単にするために、二つだけの一時変数
レジスタを有する論理型言語実行装置の例について、本
発明の変数領域割当て方式の作用を説明する。
最初に、f(s(X)):−g( (] .s(X))
,h−という節を翻訳する場合について述べる。
,h−という節を翻訳する場合について述べる。
まず、翻訳プログラムは、変数Xを一時変数に分類し、
一時変数レジスタの個数に制限がないものとして、仮に
第1表の命名列を生成する。
一時変数レジスタの個数に制限がないものとして、仮に
第1表の命名列を生成する。
なお、このときには、環境フレームを生成したり廃棄し
たりする命令は生成していない.そして、翻訳プログラ
ムは、生成した命令列を辿り、使用される一時変数レジ
スタの最大の番号M(−3)を求め、これが一時変数レ
ジスタの個数N(=2)を越えているので、生成した命
令列を次の手順で修正する. 第1表 N(−2)を越えないけれども、この節の永久変数E(
一〇)個の何れかのために環境フレームが必要となるか
、何れかの条件が満たされる直前(この例では前者の場
合で、unify シemporaryvariabb
le命令の前)に、環境フレームを生成するalloc
ate命令を生成するとともに、最後の命令の直前に、
環境フレームを廃棄するdeallocate命令を生
成する。
たりする命令は生成していない.そして、翻訳プログラ
ムは、生成した命令列を辿り、使用される一時変数レジ
スタの最大の番号M(−3)を求め、これが一時変数レ
ジスタの個数N(=2)を越えているので、生成した命
令列を次の手順で修正する. 第1表 N(−2)を越えないけれども、この節の永久変数E(
一〇)個の何れかのために環境フレームが必要となるか
、何れかの条件が満たされる直前(この例では前者の場
合で、unify シemporaryvariabb
le命令の前)に、環境フレームを生成するalloc
ate命令を生成するとともに、最後の命令の直前に、
環境フレームを廃棄するdeallocate命令を生
成する。
第2表
すなわち、この節の永久変数E(=O)個に、一時変数
レジスタの個数N(=2)を越えた個数M−N(=1)
を加えて、この節に割当てる環境フレームの大きさE+
M−N(=1)を計算する. そして、一時変数の最大の番号が一時変数レジスタの個
数N(−2)を越えるか、あるいは一時変数の最大の番
号が一時変数レジスタの個数そして、生成した命令列を
辿り、存在しない一時変゛数レジスタI(I>Nとする
)を使用する命令を、E+ I −N番目の変数を使用
する命令に置き変えて、第2表の命名列を生成すること
となる. 次に、f(s(X)) : −g( 0 .s(X))
.という節を翻訳する場合について述べる. まず、同様に、翻訳プログラムは、一時変数レジスタの
個数に制限がないものとして、仮に第3表の命名列を生
成する. 第3表 すなわち、この節に割当てる一時変数フレームの大きさ
M−N(=1)を計算する. 第4表 そして、翻訳プログラムは、生成した命令列を辿り、命
令実行直後に有効となる一時変数レジスタの最大の個数
M(=3)を求め、これが一時変数レジスタの個数N(
=2)を越えているので、生成した命令列を次の手順で
修正する.そして、生成した命令列を辿り、存在しない
一時変数レジスタI(I>Nとする)を使用する命令を
、一時変数フレームの変数領域のI−N番目の要素を使
用する命令に置き変えて、先に計算した変数領域に対し
て、大きさM−N(=1)を持つ一時変数フレームを、
有効な一時変数の最大番号がNを越える直前に生成し、
最後の命令の直前に、この一時変数フレームを廃棄する
命令を生成する. この結果、第4表の命令列を生成することとなる. 〔実施例〕 次に本発明の実施例について図面を参照して説明する。
レジスタの個数N(=2)を越えた個数M−N(=1)
を加えて、この節に割当てる環境フレームの大きさE+
M−N(=1)を計算する. そして、一時変数の最大の番号が一時変数レジスタの個
数N(−2)を越えるか、あるいは一時変数の最大の番
号が一時変数レジスタの個数そして、生成した命令列を
辿り、存在しない一時変゛数レジスタI(I>Nとする
)を使用する命令を、E+ I −N番目の変数を使用
する命令に置き変えて、第2表の命名列を生成すること
となる. 次に、f(s(X)) : −g( 0 .s(X))
.という節を翻訳する場合について述べる. まず、同様に、翻訳プログラムは、一時変数レジスタの
個数に制限がないものとして、仮に第3表の命名列を生
成する. 第3表 すなわち、この節に割当てる一時変数フレームの大きさ
M−N(=1)を計算する. 第4表 そして、翻訳プログラムは、生成した命令列を辿り、命
令実行直後に有効となる一時変数レジスタの最大の個数
M(=3)を求め、これが一時変数レジスタの個数N(
=2)を越えているので、生成した命令列を次の手順で
修正する.そして、生成した命令列を辿り、存在しない
一時変数レジスタI(I>Nとする)を使用する命令を
、一時変数フレームの変数領域のI−N番目の要素を使
用する命令に置き変えて、先に計算した変数領域に対し
て、大きさM−N(=1)を持つ一時変数フレームを、
有効な一時変数の最大番号がNを越える直前に生成し、
最後の命令の直前に、この一時変数フレームを廃棄する
命令を生成する. この結果、第4表の命令列を生成することとなる. 〔実施例〕 次に本発明の実施例について図面を参照して説明する。
第1図は本発明の変数領域割当て方式の一実施例を示す
流れ図である. 第2図は本実施例の変数領域割当て方式を適用した論理
型言語の実行装置の一例を示すブロック図である。
流れ図である. 第2図は本実施例の変数領域割当て方式を適用した論理
型言語の実行装置の一例を示すブロック図である。
第2図に示す論理型言語の実行装置は、プロセッサ21
とメモリ22とを有しており、メモリ22は、環境フレ
ームや一時変数フレームを格納するスタックSを持ち、
プロセッサ21は、N個の一時変数レジスタTR−1,
・・・・・・・・・TR−Nと、メモリ22の中に生成
されるスタックSの利用可能な先頭番地を指すポインタ
レジスタPR−1,最新の環境フレームや一時変数フレ
ームを指すポインタレジスタPR−2などを持つている
. そして、第2図の論理型言語の実行装置は、時変数レジ
スタTR−1,・・・・・・・・・TR−Nおよびスタ
ックS上の任意の領域の二つに保持する情報に対するユ
ニフィケーションを行う命令を備えている. そこで、本実施例の変数領域割当て方式は、第2図の論
理型言語の実行装置に対して、論理型言語を翻訳するプ
ログラムで、節毎に第1図に示す変数領域の割当て動作
を行っている. まず、第1図のステップ1で、翻訳する節を仮に翻訳し
、その節について、一時変数の個数M,永久変数の個数
E.仮に翻訳した命令列の命令数Lを設定するとともに
、一時変数レジスタの個数をNに、動作フラグの値Aを
“0″に、動作カウンタの値■を“1゜′に設定してい
る.次に、ステップ2で、動作カウンタの値Iが仮に翻
訳した命令列の命令数Lを越えたかどうがのI>Lを調
べて、終了を検出している。
とメモリ22とを有しており、メモリ22は、環境フレ
ームや一時変数フレームを格納するスタックSを持ち、
プロセッサ21は、N個の一時変数レジスタTR−1,
・・・・・・・・・TR−Nと、メモリ22の中に生成
されるスタックSの利用可能な先頭番地を指すポインタ
レジスタPR−1,最新の環境フレームや一時変数フレ
ームを指すポインタレジスタPR−2などを持つている
. そして、第2図の論理型言語の実行装置は、時変数レジ
スタTR−1,・・・・・・・・・TR−Nおよびスタ
ックS上の任意の領域の二つに保持する情報に対するユ
ニフィケーションを行う命令を備えている. そこで、本実施例の変数領域割当て方式は、第2図の論
理型言語の実行装置に対して、論理型言語を翻訳するプ
ログラムで、節毎に第1図に示す変数領域の割当て動作
を行っている. まず、第1図のステップ1で、翻訳する節を仮に翻訳し
、その節について、一時変数の個数M,永久変数の個数
E.仮に翻訳した命令列の命令数Lを設定するとともに
、一時変数レジスタの個数をNに、動作フラグの値Aを
“0″に、動作カウンタの値■を“1゜′に設定してい
る.次に、ステップ2で、動作カウンタの値Iが仮に翻
訳した命令列の命令数Lを越えたかどうがのI>Lを調
べて、終了を検出している。
I>Lではない(NO》ときには、次のステップ3で、
翻訳している節は、永久変数の有無など種々の条件で環
境フレームの領域を必要とするかどうかを判断している
. 翻訳している節が、E個の永久変数を含む環境フレーム
の領域をスタックSに必要とする(YES)ときには、
次のステップ4へ移行している。
翻訳している節は、永久変数の有無など種々の条件で環
境フレームの領域を必要とするかどうかを判断している
. 翻訳している節が、E個の永久変数を含む環境フレーム
の領域をスタックSに必要とする(YES)ときには、
次のステップ4へ移行している。
ステップ4で、動作フラグの値Aが1でない(NO》と
きにだけ、次のステップ5で、仮に翻訳した命令列の■
番目の命令を調べて、その命令は永久変数などを使用す
るため、環境フレームを必要とするかどうかを判断して
いる. ■番目の命令が環境フレームを必要とする(YES)と
きにだけ、次のステップ6で、命令列の■番目の命令の
直前に、E+M−N個の変数の環境フレームを割当てる
ためのal locate命令を挿入して、動作フラグ
の値Aを“1″にして、ステップ8へ移行している。
きにだけ、次のステップ5で、仮に翻訳した命令列の■
番目の命令を調べて、その命令は永久変数などを使用す
るため、環境フレームを必要とするかどうかを判断して
いる. ■番目の命令が環境フレームを必要とする(YES)と
きにだけ、次のステップ6で、命令列の■番目の命令の
直前に、E+M−N個の変数の環境フレームを割当てる
ためのal locate命令を挿入して、動作フラグ
の値Aを“1″にして、ステップ8へ移行している。
第3図は本実施例で翻訳する節によりスタック中に生成
される環境フレームの一例を示す領域構成図である. ステップ6にて挿入されたallocate命令を実行
することにより、メモリ22のスタックS中に、第3図
に示すように、一つ前の環境フレームまたは一時変数フ
レームである前フレームへのポインタKF−1,翻訳実
行中の節からの戻り番地を示すポインタKF−2,E+
M−N個の永久変数および一時変数を割当てる領域KF
−3を有する環境フレームKFを割当てている.そして
、プロセッサ21の最新の環境フレームや一時変数フレ
ームを指すポインタPR−2が、永久変数および一時変
数を割当てる領域KF−3の最初の番地を示している.
(なお、処理系によっては、PR−2が、KF−1など
別の基準番地を指すようにすることもできる.) また、ステップ5で、■番目の命令は、環境フレームを
必要としない(NO》ときには、次のステップ7で、■
番目の命令は、X>Nである番号Xの一時変数を使用す
るかどうかを判断し、使用する(YES)ときには、次
のステップ8へ移行し、使用しない(No)ときには、
ステップ11へ移行している。
される環境フレームの一例を示す領域構成図である. ステップ6にて挿入されたallocate命令を実行
することにより、メモリ22のスタックS中に、第3図
に示すように、一つ前の環境フレームまたは一時変数フ
レームである前フレームへのポインタKF−1,翻訳実
行中の節からの戻り番地を示すポインタKF−2,E+
M−N個の永久変数および一時変数を割当てる領域KF
−3を有する環境フレームKFを割当てている.そして
、プロセッサ21の最新の環境フレームや一時変数フレ
ームを指すポインタPR−2が、永久変数および一時変
数を割当てる領域KF−3の最初の番地を示している.
(なお、処理系によっては、PR−2が、KF−1など
別の基準番地を指すようにすることもできる.) また、ステップ5で、■番目の命令は、環境フレームを
必要としない(NO》ときには、次のステップ7で、■
番目の命令は、X>Nである番号Xの一時変数を使用す
るかどうかを判断し、使用する(YES)ときには、次
のステップ8へ移行し、使用しない(No)ときには、
ステップ11へ移行している。
ステップ8で、動作フラグの値Aが1でない(No)と
きにだけ、次のステップ9で、命令列の1番目の命令の
直前に、E−1−M−N個の変数の環境フレームを割当
てるためのallocate命令を挿入して、動作フラ
グの値Aを“1”にして、次のステップ10へ移行して
いる。
きにだけ、次のステップ9で、命令列の1番目の命令の
直前に、E−1−M−N個の変数の環境フレームを割当
てるためのallocate命令を挿入して、動作フラ
グの値Aを“1”にして、次のステップ10へ移行して
いる。
ステップ10で、番号Xの一時変数を使用している命令
列の1番目の命令を環境フレームのE+X−N番目の領
域を使用する命令に変更している。
列の1番目の命令を環境フレームのE+X−N番目の領
域を使用する命令に変更している。
また、ステップ11で、動作カウンタの値■に“1”を
加えている. そして、次のステップ12で、動作カウンタの値■が仮
に翻訳した命令列の命令数Lになったかどうかを調べて
、■がLてある(YES)ときにだけ、次のステップ1
3で、環境フレームのE+1からE+M−Nの領域を廃
棄するdeal locate命令を挿入して、ステッ
プ2に戻っている。
加えている. そして、次のステップ12で、動作カウンタの値■が仮
に翻訳した命令列の命令数Lになったかどうかを調べて
、■がLてある(YES)ときにだけ、次のステップ1
3で、環境フレームのE+1からE+M−Nの領域を廃
棄するdeal locate命令を挿入して、ステッ
プ2に戻っている。
一方、ステップ3で、翻訳している節が、環境フレーム
を必要としない(No)ときには、ステップ14へ移行
している. ステップ14で、1番目の命令は、X>Nである番号X
の一時変数を使用するかどうかを判断し、使用する(Y
ES)ときには、次のステップ15へ移行し、使用しな
い(No)ときには、ステップ18へ移行している. ステップ15で、動作フラグの値Aが1でない(No)
ときにだけ、次のステップ16で、命令列の1番目の命
令の直前に、M−N個の変数の一時変数フレームを割当
てるためのallocate命令を挿入して、動作フラ
グの値Aを“1”にして、次のステップ17へ移行して
いる. 第4図は本実施例で翻訳する節によりスタック中に生成
される一時変数フレームの第1の例を示す領域構成図で
ある. ステップ16にて挿入されたal locate命令を
実行することにより、メモリ22のスタックS中に、第
4図に示すように、一つ前の環境フレームまたは一時変
数フレームである前フレームへのポインタTFa−1,
翻訳実行中の節からの戻り番地を示すポインタTFa−
2,M−N個の一時変数を割当てる領域TFa−3を有
する一時変数フレームT F aを割当てている.そし
て、プロセッサ21の最新の環境フレームや一時変数フ
レームを指すポインタPR−2が、一時変数を割当てる
領域TFa−3の最初の番地を示している. また、第5図は本実施例で翻訳する節によりスタック中
に生成される一時変数フレームの第2の例を示す領域構
成図である. ステップ16にて挿入されたallocate命令を実
行することにより、メモリ22のスタックS中に、第5
図に示すように、一つ前の環境フレームまたは一時変数
フレームである前フレームへのポインタTFb−1,M
−N個の一時・変数を割当てる領域TFb−3を有する
一時変数フレームTFbを割当てている。
を必要としない(No)ときには、ステップ14へ移行
している. ステップ14で、1番目の命令は、X>Nである番号X
の一時変数を使用するかどうかを判断し、使用する(Y
ES)ときには、次のステップ15へ移行し、使用しな
い(No)ときには、ステップ18へ移行している. ステップ15で、動作フラグの値Aが1でない(No)
ときにだけ、次のステップ16で、命令列の1番目の命
令の直前に、M−N個の変数の一時変数フレームを割当
てるためのallocate命令を挿入して、動作フラ
グの値Aを“1”にして、次のステップ17へ移行して
いる. 第4図は本実施例で翻訳する節によりスタック中に生成
される一時変数フレームの第1の例を示す領域構成図で
ある. ステップ16にて挿入されたal locate命令を
実行することにより、メモリ22のスタックS中に、第
4図に示すように、一つ前の環境フレームまたは一時変
数フレームである前フレームへのポインタTFa−1,
翻訳実行中の節からの戻り番地を示すポインタTFa−
2,M−N個の一時変数を割当てる領域TFa−3を有
する一時変数フレームT F aを割当てている.そし
て、プロセッサ21の最新の環境フレームや一時変数フ
レームを指すポインタPR−2が、一時変数を割当てる
領域TFa−3の最初の番地を示している. また、第5図は本実施例で翻訳する節によりスタック中
に生成される一時変数フレームの第2の例を示す領域構
成図である. ステップ16にて挿入されたallocate命令を実
行することにより、メモリ22のスタックS中に、第5
図に示すように、一つ前の環境フレームまたは一時変数
フレームである前フレームへのポインタTFb−1,M
−N個の一時・変数を割当てる領域TFb−3を有する
一時変数フレームTFbを割当てている。
そして、プロセッサ21の最新の環境フレームや一時変
数フレームを指すポインタPR.−2が、一時変数を割
当てる領域TFb−3の最初の番地を示している。
数フレームを指すポインタPR.−2が、一時変数を割
当てる領域TFb−3の最初の番地を示している。
なお、この場合には、翻訳実行中の節からの戻り番地を
示すポインタを省略しているので、プロセッサ21に、
一時変数フレームを割当てる命令および一時変数フレー
ムを廃棄する命令を、環境フレームに対する命令とは別
に加える必要がある。
示すポインタを省略しているので、プロセッサ21に、
一時変数フレームを割当てる命令および一時変数フレー
ムを廃棄する命令を、環境フレームに対する命令とは別
に加える必要がある。
さらに、第6図は本実施例で翻訳する節によりスタック
中に生成される一時変数フレームの第3の例を示す領域
構成図である。
中に生成される一時変数フレームの第3の例を示す領域
構成図である。
ステップ16にて挿入されたal locate命令を
実行することにより、メモリ22のスタックS中に、第
6図に示すように、M−N個の一時変数を割当てる領域
TFc−3を有する一時変数フレームTFcを割当てて
いる。
実行することにより、メモリ22のスタックS中に、第
6図に示すように、M−N個の一時変数を割当てる領域
TFc−3を有する一時変数フレームTFcを割当てて
いる。
そして、プロセッサ21の一時変数フレームを指すポイ
ンタPR−3が、一時変数を割当てる領域TFc−3の
最初の番地を示している。
ンタPR−3が、一時変数を割当てる領域TFc−3の
最初の番地を示している。
なお、この場合には、翻訳実行中の節からの戻り番地を
示すポインタおよび一つ前の環境フレームまたは一時変
数フレームである前フレームへのポインタを省略してい
るので、プロセッサ21に、一時変数フレームを割当て
る命令および一時変数フレームを廃棄する命令並びに一
時変数フレーム内の変数要素のアクセスを行う命令を、
環境フレームに対する命令とは別に加える必要がある。
示すポインタおよび一つ前の環境フレームまたは一時変
数フレームである前フレームへのポインタを省略してい
るので、プロセッサ21に、一時変数フレームを割当て
る命令および一時変数フレームを廃棄する命令並びに一
時変数フレーム内の変数要素のアクセスを行う命令を、
環境フレームに対する命令とは別に加える必要がある。
次のステップ17で、番号Xの一時変数を使用している
命令列の1番目の命令を一時変数フレームのX−N番目
の領域を使用する命令に変更している。
命令列の1番目の命令を一時変数フレームのX−N番目
の領域を使用する命令に変更している。
また、ステップ18で、動作カウンタの値Iに゛1”を
加えている。
加えている。
そして、次のステップ19で、動作カウンタの値Iが仮
に翻訳した命令列の命令数Lになったかどうかを調べて
、IがLである(YES)ときにだけ、次のステップ2
0で、一時変数フレームの領域を廃棄するdeal l
ocate命令を挿入して、ステップ2に戻っている。
に翻訳した命令列の命令数Lになったかどうかを調べて
、IがLである(YES)ときにだけ、次のステップ2
0で、一時変数フレームの領域を廃棄するdeal l
ocate命令を挿入して、ステップ2に戻っている。
以上述べたように、本実施例の変数領域割当て方式は、
固定個数の一時変数レジスタを有する論理型言語の実行
装置に対して、論理型言語を翻訳する場合に、翻訳する
節に必要な一時変数の個数が一時変数レジスタの個数を
越えても、越えた個数の一時変数をスタックの領域に割
当てた適切な命令列に翻訳して能率良く実行することが
できる。
固定個数の一時変数レジスタを有する論理型言語の実行
装置に対して、論理型言語を翻訳する場合に、翻訳する
節に必要な一時変数の個数が一時変数レジスタの個数を
越えても、越えた個数の一時変数をスタックの領域に割
当てた適切な命令列に翻訳して能率良く実行することが
できる。
以上説明したように、本発明の変数領域割当て方式は、
固定個数の一時変数レジスタを有する論理型言語の実行
装置に対して、論理型言語を翻訳する場合に、翻訳する
節に必要な一時変数の個数が一時変数レジスタの個数を
越えても、越えた個数の一時変数をスタックの領域に割
当てた適切な命令列に翻訳して能率良く実行することが
できるという効果を有している.
固定個数の一時変数レジスタを有する論理型言語の実行
装置に対して、論理型言語を翻訳する場合に、翻訳する
節に必要な一時変数の個数が一時変数レジスタの個数を
越えても、越えた個数の一時変数をスタックの領域に割
当てた適切な命令列に翻訳して能率良く実行することが
できるという効果を有している.
第1図は本発明の変数領域割当て方式の一実施例を示す
流れ図、第2図は本実施例の変数領域割当て方式を適用
した論理型言語の実行装置の一例を示すブロック図、第
3図は本実施例で翻訳する節によりスタック中に生成さ
れる環境フレームの一例を示す領域構成図、第4図は本
実施例で翻訳する節によりスタック中に生成される一時
変数フレームの第1の例を示す領域構成図、第5図は本
実施例で翻訳する節によりスタック中に生成される一時
変数フレームの第2の例を示す領域構成図、第6図は本
実施例で翻訳する節によりスタック中に生成される一時
変数フレームの第3の例を示す領域構成図である.
流れ図、第2図は本実施例の変数領域割当て方式を適用
した論理型言語の実行装置の一例を示すブロック図、第
3図は本実施例で翻訳する節によりスタック中に生成さ
れる環境フレームの一例を示す領域構成図、第4図は本
実施例で翻訳する節によりスタック中に生成される一時
変数フレームの第1の例を示す領域構成図、第5図は本
実施例で翻訳する節によりスタック中に生成される一時
変数フレームの第2の例を示す領域構成図、第6図は本
実施例で翻訳する節によりスタック中に生成される一時
変数フレームの第3の例を示す領域構成図である.
Claims (1)
- 【特許請求の範囲】 N個の一時変数レジスタを持ち、前記一時変数レジスタ
およびスタック上の領域の二つに保持する情報のユニフ
ィケーションを行う命令を備えた論理型言語の実行装置
に対して、論理型言語を翻訳するプログラムの変数領域
割当て方式において、 論理型言語の節を翻訳してN個の前記一時変数レジスタ
に割付ける一時変数の最大番号であるMがNより大きい
場合に、前記一時変数レジスタの個数Nによる一時変数
の個数の制限を回避するために、 (A)翻訳している節が、E個の永久変数を含む環境フ
レームの領域を前記スタックに割当てることを必要とす
る場合には、まず前記環境フレームを割当てる命令で指
定する変数の個数をE+M−Nに変更し、次に、一時変
数の最大番号が、前記一時変数レジスタの個数Nを越え
ないときに前記環境フレームが永久 変数のために必要となるか、有効な一時変数の最大の番
号がNより大きくなるか、どち らか一方の条件が成立する前に、前記環境 フレームを前記スタックに割当てる命令を生成し、さら
に、N個の前記一時変数レジスタの割当てを受けること
ができない一時変数に対して、前記環境フレームのE+
1番目からE+M−N番目までの領域を使用する命令を
生成する、 (B)翻訳している節が、前記環境フレームを必要とし
ない場合には、まず、有効な一時 変数の最大の番号がNより大きくなる前に、M−N個の
一時変数の領域を持つ一時変数フレームを前記スタック
に割当てる命令を生成するとともに、翻訳している節の
命令列の最後の命令の直前に、前記一時変数フレームを
廃棄する命令を生成し、次に、N個の前記一時変数レジ
スタの割当てを受けることができない一時変数に対して
、前記一時変数フレームの領域を使用する命令を生成す
る、 ことを特徴とする変数領域割当て方式。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP5112189A JPH02230333A (ja) | 1989-03-02 | 1989-03-02 | 変数領域割当て方式 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP5112189A JPH02230333A (ja) | 1989-03-02 | 1989-03-02 | 変数領域割当て方式 |
Publications (1)
Publication Number | Publication Date |
---|---|
JPH02230333A true JPH02230333A (ja) | 1990-09-12 |
Family
ID=12877972
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP5112189A Pending JPH02230333A (ja) | 1989-03-02 | 1989-03-02 | 変数領域割当て方式 |
Country Status (1)
Country | Link |
---|---|
JP (1) | JPH02230333A (ja) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2014121378A (ja) * | 2012-12-20 | 2014-07-03 | Sophia Co Ltd | 遊技機 |
-
1989
- 1989-03-02 JP JP5112189A patent/JPH02230333A/ja active Pending
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2014121378A (ja) * | 2012-12-20 | 2014-07-03 | Sophia Co Ltd | 遊技機 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US4833594A (en) | Method of tailoring an operating system | |
EP0777177B1 (en) | A method for object-oriented programming using dynamic interfaces | |
US5790979A (en) | Translation method in which page-table progression is dynamically determined by guard-bit sequences | |
US8635627B2 (en) | Method, medium and apparatus storing and restoring register context for fast context switching between tasks | |
JPH09237202A (ja) | デバッグ処理実行方法 | |
US7849470B2 (en) | System and method for extending a programming language to include multiple dissimilar object systems | |
JP2752094B2 (ja) | 論理型言語におけるバックトラック処理方式 | |
JPH02230333A (ja) | 変数領域割当て方式 | |
JP5822848B2 (ja) | 例外の制御方法、システムおよびプログラム | |
KR20230086248A (ko) | Plc를 위한 사용자 지정 어드레스 변수의 처리 방법 | |
Hutchison et al. | Program execution in the SYMBOL 2R computer | |
JPH05297911A (ja) | シーケンスコントローラ用シーケンス制御回路 | |
JPH03164835A (ja) | インタプリタ型言語処理系における大域変数処理のコンパイル方法 | |
KR0170706B1 (ko) | 마이크로프로세서의 외부 메모리 사용 방법 | |
JPH01131937A (ja) | アドレス変換方式 | |
JP2591818B2 (ja) | 補助機能の選択制御方法 | |
JPS6362053A (ja) | ガ−ベジコレクシヨン処理方式 | |
JPS5918787B2 (ja) | Tlbパ−テイシヨン方式 | |
JPH0283623A (ja) | マイクロプロセッサ | |
JPH05204636A (ja) | ロードアドレス設定方法 | |
JPH0553827A (ja) | ダイナミツクリンク最適化方式 | |
JPH07175656A (ja) | 代入用アドレス保持装置 | |
JPS61100836A (ja) | 移動命令論理比較命令処理方式 | |
JPH02130637A (ja) | ソースコード翻訳方式 | |
JPH04170643A (ja) | 最適セグメンテーション決定システム |