JPH0685151B2 - コンパイル処理方式 - Google Patents
コンパイル処理方式Info
- Publication number
- JPH0685151B2 JPH0685151B2 JP15292587A JP15292587A JPH0685151B2 JP H0685151 B2 JPH0685151 B2 JP H0685151B2 JP 15292587 A JP15292587 A JP 15292587A JP 15292587 A JP15292587 A JP 15292587A JP H0685151 B2 JPH0685151 B2 JP H0685151B2
- Authority
- JP
- Japan
- Prior art keywords
- internal branch
- block
- address
- internal
- memory
- 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
Links
Landscapes
- Devices For Executing Special Programs (AREA)
Description
【発明の詳細な説明】 〔概要〕 ソース・プログラムをコンパイルするコンパイル処理方
式に関し, 内部分岐番号と内部分岐定義とに対応するオブジェクト
のアドレスを効率よく決定しゆくようにすることを目的
とし, 或る内部分岐番号をもって新しく内部分岐が現れたと
き,当該内部分岐に対応するオブジェクトのメモリ上で
の格納位置を保持する使用中ブロックを設定し,次に同
じ内部分岐番号をもって内部分岐が現れた際に,上記使
用中ブロックの内容にもとづいて,先に現れた内部分岐
に対応するオブジェクトが格納されているメモリ上での
格納位置を調べ,内部分岐参照に対応するオブジェクト
であるジャンプ命令中の分岐先アドレスを決定するよう
に構成する。
式に関し, 内部分岐番号と内部分岐定義とに対応するオブジェクト
のアドレスを効率よく決定しゆくようにすることを目的
とし, 或る内部分岐番号をもって新しく内部分岐が現れたと
き,当該内部分岐に対応するオブジェクトのメモリ上で
の格納位置を保持する使用中ブロックを設定し,次に同
じ内部分岐番号をもって内部分岐が現れた際に,上記使
用中ブロックの内容にもとづいて,先に現れた内部分岐
に対応するオブジェクトが格納されているメモリ上での
格納位置を調べ,内部分岐参照に対応するオブジェクト
であるジャンプ命令中の分岐先アドレスを決定するよう
に構成する。
本発明は,ソース・プログラムをコンパイルするコンパ
イル処理方式に関する。
イル処理方式に関する。
内部分岐番号をもって対応づけられる内部分岐参照(IB
N)と内部分岐定義(DEFN)とが存在するソース・プロ
グラムを逐次コンパイルするに当たっては,上記内部分
岐参照に対応するオブジェクトであるジャンプ命令中
に,上記内部分岐定義に対応するオブジェクトが格納さ
れるメモリ上のアドレスを,分岐先アドレスとして記述
することが必要となる。
N)と内部分岐定義(DEFN)とが存在するソース・プロ
グラムを逐次コンパイルするに当たっては,上記内部分
岐参照に対応するオブジェクトであるジャンプ命令中
に,上記内部分岐定義に対応するオブジェクトが格納さ
れるメモリ上のアドレスを,分岐先アドレスとして記述
することが必要となる。
従来から,上記内部分岐参照(IBN)と内部分岐定義(D
EFN)とが存在するソース・プログラムを逐次コンパイ
ルしてゆくに当たっては,上述の如く,ジャンプ命令中
に分岐先アドレスを記述することが必要であり,次の如
く,即ち, (i)すべての内部分岐参照に対応するオブジェクト
(ジャンプ命令)を出力し, (ii)内部分岐定義に対応するすべての内部分岐参照の
ジャンプ命令の相対オフセット値を算出する ような処理を行っていた。
EFN)とが存在するソース・プログラムを逐次コンパイ
ルしてゆくに当たっては,上述の如く,ジャンプ命令中
に分岐先アドレスを記述することが必要であり,次の如
く,即ち, (i)すべての内部分岐参照に対応するオブジェクト
(ジャンプ命令)を出力し, (ii)内部分岐定義に対応するすべての内部分岐参照の
ジャンプ命令の相対オフセット値を算出する ような処理を行っていた。
上記従来の場合には,コンパイラ上の作業ファイルが圧
迫されることとなり,かつオブジェクト生成を2つのパ
スに分けて行う形となっていた。
迫されることとなり,かつオブジェクト生成を2つのパ
スに分けて行う形となっていた。
本発明は内部分岐参照と内部分岐定義とに対応するオブ
ジェクトのアドレスを効率よく1パスで決定してゆくよ
うにすることを目的としている。
ジェクトのアドレスを効率よく1パスで決定してゆくよ
うにすることを目的としている。
第1図は本発明の原理構成図である。図中の符号1はソ
ース・プログラム,2はコンパイラ,3はオブジェクトが格
納されるメモリ(オブジェクト・ファイル),4は内部分
岐管理域,5−1,…5−nは夫々使用中ブロック,6−1…
6−pは夫々未使用ブロックを表している。
ース・プログラム,2はコンパイラ,3はオブジェクトが格
納されるメモリ(オブジェクト・ファイル),4は内部分
岐管理域,5−1,…5−nは夫々使用中ブロック,6−1…
6−pは夫々未使用ブロックを表している。
ソース・プログラム1上に存在する内部分岐参照(IB
N)と内部分岐定義(DEFN)とは同一の内部分岐番号を
もつもの同士が対応づけられている。
N)と内部分岐定義(DEFN)とは同一の内部分岐番号を
もつもの同士が対応づけられている。
ソース・プログラム1を逐次コンパイルしてゆく際に,
或る内部分岐番号をもって新しく内部分岐参照(IBN)
または内部分岐定義(DEFN)が現れたとき言うまでもな
く対応するオブジェクトが生成されるが,そのとき,使
用中ブロック5を1つ作成し,次の情報を格納する。即
ち, (i)内部分岐番号:内部分岐を行うときに,同じ場所
の分岐するものを1つの単位としてまとめたものにつけ
た番号であり,したがって,定義と参照との個数は,下
方分岐のときには一般にn個の参照に対して1個の定義
が対応し,上方分岐のときには一般に1個の参照に対し
て1個の定義が対応する。
或る内部分岐番号をもって新しく内部分岐参照(IBN)
または内部分岐定義(DEFN)が現れたとき言うまでもな
く対応するオブジェクトが生成されるが,そのとき,使
用中ブロック5を1つ作成し,次の情報を格納する。即
ち, (i)内部分岐番号:内部分岐を行うときに,同じ場所
の分岐するものを1つの単位としてまとめたものにつけ
た番号であり,したがって,定義と参照との個数は,下
方分岐のときには一般にn個の参照に対して1個の定義
が対応し,上方分岐のときには一般に1個の参照に対し
て1個の定義が対応する。
(ii)オブジェクト・アドレス:実際にメモリ上に割り
当てられるときの機械語のアドレス, (iii)オブジェクト・ファイル・アドレス:コンパイ
ラのオブジェクト生成部が出力するファイルのアドレス
(コンパイラの最終的な出力であるオブジェクトとは形
式が異なっている), (iv)次ブロック・ポインタ:作業ファイル中の次のブ
ロックを指示するアドレスを指すものであって,次のブ
ロックが存在しない場合には最終マークが与えられる, を格納する。
当てられるときの機械語のアドレス, (iii)オブジェクト・ファイル・アドレス:コンパイ
ラのオブジェクト生成部が出力するファイルのアドレス
(コンパイラの最終的な出力であるオブジェクトとは形
式が異なっている), (iv)次ブロック・ポインタ:作業ファイル中の次のブ
ロックを指示するアドレスを指すものであって,次のブ
ロックが存在しない場合には最終マークが与えられる, を格納する。
本発明では,上述の如く,先に現れた内部分岐に対応す
るオブジェクトがメモリ上のどの位置に格納されている
かについて,上記オブジェクト・アドレスによって容易
に判明する。
るオブジェクトがメモリ上のどの位置に格納されている
かについて,上記オブジェクト・アドレスによって容易
に判明する。
この結果,上述の如く,ジャンプ命令中に分岐先アドレ
スを記述するに当たって,上記使用中ブロック5−i中
のオブジェクト・アドレスを見ることによって容易に分
岐先アドレスを決定することができる。また当該決定を
行った後に必要となった使用中ブロックについては,こ
れを未使用ブロックに取り込めばよいこととなる。
スを記述するに当たって,上記使用中ブロック5−i中
のオブジェクト・アドレスを見ることによって容易に分
岐先アドレスを決定することができる。また当該決定を
行った後に必要となった使用中ブロックについては,こ
れを未使用ブロックに取り込めばよいこととなる。
第2図(A)(B)(C)(D)(E)(F)(G)
(H)は本発明による一実施例処理が行われる態様を説
明する説明図である。
(H)は本発明による一実施例処理が行われる態様を説
明する説明図である。
第2図は,第2図(A)図示の如く,内部分岐番号「0
0」と「01」と「02」とを付された複数個の内部分岐参
照(IBN)と複数個の内部分岐定義(DEFN)とをもつソ
ース・プログラム1が存在する場合の処理を,第2図
(B)ないし第2図(H)に逐次示されている。図中の
符号1はソース・プログラム,3はオブジェクト・ファイ
ル,4は内部分岐管理域,5は使用中ブロックを表してい
る。以下,第2図(A)に示す,……の順にコン
パイルが行われていく状態を第2図(B)ないし(H)
において説明する。
0」と「01」と「02」とを付された複数個の内部分岐参
照(IBN)と複数個の内部分岐定義(DEFN)とをもつソ
ース・プログラム1が存在する場合の処理を,第2図
(B)ないし第2図(H)に逐次示されている。図中の
符号1はソース・プログラム,3はオブジェクト・ファイ
ル,4は内部分岐管理域,5は使用中ブロックを表してい
る。以下,第2図(A)に示す,……の順にコン
パイルが行われていく状態を第2図(B)ないし(H)
において説明する。
(1)IBN 00の処理前(第2図(B))。
作業ファイル中に使用中ブロックは存在せず,またオブ
ジェクト・ファイル3上にオブジェクトが存在しないも
のとする。この場合,内部分岐管理域4ですべて未使用
となっていることが判る。
ジェクト・ファイル3上にオブジェクトが存在しないも
のとする。この場合,内部分岐管理域4ですべて未使用
となっていることが判る。
(2)IBN 00の処理後(第2図(C))。
内部分岐番号「00」をもつ使用中ブロック5が存在して
いなかったことから,内部分岐番号「00」を記述された
使用中ブロック5−1が作成される。そして,内部分岐
参照(IBN)であることから、ジャンプ(JMP)命令がオ
ブジェクトとして,オブジェクト・ファイル3上に生成
される。このとき分岐先アドレスは未定であることから
「0000」を書き込んでおく。使用中ブロック5−1にお
けるオブジェクト・アドレスとしては,オブジェクト・
メモリ3中での次のアドレスが「0003」として記述さ
れ,上記JMPが記述されているアドレス(オブジェクト
・メモリ3上での)が「0000」と記述される。
いなかったことから,内部分岐番号「00」を記述された
使用中ブロック5−1が作成される。そして,内部分岐
参照(IBN)であることから、ジャンプ(JMP)命令がオ
ブジェクトとして,オブジェクト・ファイル3上に生成
される。このとき分岐先アドレスは未定であることから
「0000」を書き込んでおく。使用中ブロック5−1にお
けるオブジェクト・アドレスとしては,オブジェクト・
メモリ3中での次のアドレスが「0003」として記述さ
れ,上記JMPが記述されているアドレス(オブジェクト
・メモリ3上での)が「0000」と記述される。
(3)その後ソース・プログラム1上の命令についてオ
ブジェクトが生成されてゆき、図示の内部分岐参照(IB
N 01)が処理された状態(第2図(D))。
ブジェクトが生成されてゆき、図示の内部分岐参照(IB
N 01)が処理された状態(第2図(D))。
当該内部分岐参照(IBN 01)が現れるまでの間に次々
とオブジェクトが生成され、オブジェクト・メモリ3上
で図示斜線で示す所までオブジェクトが格納されていた
とし、当該内部分岐参照(IBN 01)に対応するオブジ
ェクトであるジャンプ(JMP)命令が,オブジェクト・
メモリ3上に格納されたとする。このとき,分岐先アド
レスは未定であるので「0000」を記述しておく。
とオブジェクトが生成され、オブジェクト・メモリ3上
で図示斜線で示す所までオブジェクトが格納されていた
とし、当該内部分岐参照(IBN 01)に対応するオブジ
ェクトであるジャンプ(JMP)命令が,オブジェクト・
メモリ3上に格納されたとする。このとき,分岐先アド
レスは未定であるので「0000」を記述しておく。
一方,内部分岐参照(IBN 01)に対応する内部分岐番
号「01」をもつ使用中ブロックが存在しないことから,
使用中ブロック5−2が作成される。JMPが記述されて
いるアドレス(オブジェクト・メモリ3上の)が「001
3」であり,次のアドレスが「0016」であることから,
これらが使用中ブロック5−2に記述される。
号「01」をもつ使用中ブロックが存在しないことから,
使用中ブロック5−2が作成される。JMPが記述されて
いるアドレス(オブジェクト・メモリ3上の)が「001
3」であり,次のアドレスが「0016」であることから,
これらが使用中ブロック5−2に記述される。
(4)その後ソース・プログラム1上の命令についてオ
ブジェクトが生成されてゆき,図示の内部分岐定義(DE
FN 01)が処理された状態(第2図(E))。
ブジェクトが生成されてゆき,図示の内部分岐定義(DE
FN 01)が処理された状態(第2図(E))。
当該内部分岐定義(DEFN 01)が現れるまでの間に次々
とオブジェクトが生成され,オブジェクト・メモリ3上
で図示斜線の末尾の3バイト分に,当該“DEFN 01"に
対応するオブジェクトが格納されたとする。
とオブジェクトが生成され,オブジェクト・メモリ3上
で図示斜線の末尾の3バイト分に,当該“DEFN 01"に
対応するオブジェクトが格納されたとする。
この場合,使用中ブロック5−2上に内部分岐番号「0
1」をもつものが存在していたことから,対応する内部
分岐参照(IBN 01)がコンパイルされたジャンプ命令
が,オブジェクト・メモリ3上のアドレス「0013」であ
ることを知り,当該ジャンプ命令中の分岐先アドレスと
して仮に「0000」と記述していたものに代えて,正しい
分岐先アドレス「0029」が記述される(内部分岐定義
(DEFN0 1)に対応するオブジェクトの機械語が格納
されている一が「0029」である)。そして,用済みとな
った使用中ブロック5−2は抹消される。
1」をもつものが存在していたことから,対応する内部
分岐参照(IBN 01)がコンパイルされたジャンプ命令
が,オブジェクト・メモリ3上のアドレス「0013」であ
ることを知り,当該ジャンプ命令中の分岐先アドレスと
して仮に「0000」と記述していたものに代えて,正しい
分岐先アドレス「0029」が記述される(内部分岐定義
(DEFN0 1)に対応するオブジェクトの機械語が格納
されている一が「0029」である)。そして,用済みとな
った使用中ブロック5−2は抹消される。
(5)同様にソース・プログラム1上の命令についてオ
ブジェクトが生成されてゆき,図示の内部分岐参照(IB
N 02)が処理された状態(第2図(F))。
ブジェクトが生成されてゆき,図示の内部分岐参照(IB
N 02)が処理された状態(第2図(F))。
同様に,対応するジャンプ命令がオブジェクト・メモリ
3上で図示の位置に格納されたとする。
3上で図示の位置に格納されたとする。
このとき,使用中ブロック5中には,内部分岐番号「0
2」をもつものが存在しないことから,使用中ブロック
5−2が作成される。
2」をもつものが存在しないことから,使用中ブロック
5−2が作成される。
(6)同様に図示の内部分岐定義(DEFN 00)が処理さ
れた状態(第2図(G))。
れた状態(第2図(G))。
当該内部分岐定義(DEFN 00)に対応するオブジェクト
が,図示のオブジェクト・メモリ3上で斜線で示した末
尾の3バイト分の位置に格納されたとする。
が,図示のオブジェクト・メモリ3上で斜線で示した末
尾の3バイト分の位置に格納されたとする。
このとき,使用中ブロック5−1中に内部分岐番号「0
0」が記述されていることから,対応する内部分岐参照
(IBN 00)のコンパイルされたジャンプ命令が,オブ
ジェクト・メモリ3上でアドレス「00」であることか
ら,当該ジャンプ命令中に分岐先アドレス「0049」を記
述し,使用中ブロック5−1が抹消される。
0」が記述されていることから,対応する内部分岐参照
(IBN 00)のコンパイルされたジャンプ命令が,オブ
ジェクト・メモリ3上でアドレス「00」であることか
ら,当該ジャンプ命令中に分岐先アドレス「0049」を記
述し,使用中ブロック5−1が抹消される。
(7)同様に,図示の内部分岐定義(DEFN 02)が処理
された状態(第2図(H))。
された状態(第2図(H))。
当該内部分岐定義(DEFN 02)に対応するオブジェクト
が,オブジェクト・メモリ3上の図示斜線で示した末尾
の3バイト分の位置に格納されたとする。
が,オブジェクト・メモリ3上の図示斜線で示した末尾
の3バイト分の位置に格納されたとする。
このとき,使用中ブロック5−2中に内部分岐番号「0
2」が記述されていることから,対応する内部分岐参照
(IBN 02)のコンパイルされたジャンプ命令が,オブ
ジェクト・メモリ3上でアドレス「0043」であることか
ら,当該ジャンプ命令中に分岐先アドレス「0069」を記
述し,使用中ブロック5−2が末梢される。
2」が記述されていることから,対応する内部分岐参照
(IBN 02)のコンパイルされたジャンプ命令が,オブ
ジェクト・メモリ3上でアドレス「0043」であることか
ら,当該ジャンプ命令中に分岐先アドレス「0069」を記
述し,使用中ブロック5−2が末梢される。
以上説明した如く,本発明によれば,対応する内部分岐
が現れたときに,いわば直ちに,分岐先アドレスを記述
することができる。このために,処理が簡単となり,か
つコンパイラ上の作業ファイルを有効に使用することが
できる。
が現れたときに,いわば直ちに,分岐先アドレスを記述
することができる。このために,処理が簡単となり,か
つコンパイラ上の作業ファイルを有効に使用することが
できる。
第1図は本発明の原理構成図,第2図(A)ないし
(H)は本発明による一実施例処理が行われる態様を説
明する説明図を示す。 図中,1はソース・プログラム,2はコンパイラ,3はメモリ
(オブジェクト・ファイル),4は内部分岐管理域,5は使
用中ブロックを表す。
(H)は本発明による一実施例処理が行われる態様を説
明する説明図を示す。 図中,1はソース・プログラム,2はコンパイラ,3はメモリ
(オブジェクト・ファイル),4は内部分岐管理域,5は使
用中ブロックを表す。
Claims (1)
- 【請求項1】内部分岐番号をもって対応づけられる内部
分岐参照(IBN)と内部分岐定義(DEFN)とが存在する
ソース・プログラム(1)をコンパイラ(2)によりコ
ンパイルする処理を行うコンパイル処理方式において, 使用中ブロックの管理を行う内部分岐管理域(4)と, 上記ソース・プログラム(1)を逐次コンパイルする処
理中に或る内部分岐番号をもって新しく現れた内部分岐
参照(IBN)または内部分岐定義(DEFN)に対応して,
内部分岐番号と,コンパイルする処理中に実際にメモリ
(3)上に割り当てられる機械語アドレスを与えるオブ
ジェクト・アドレスと,コンパイラ(2)のオブジェク
ト生成部が出力するファイルのアドレスを与えるオブジ
ェクト・ファイル・アドレスと,使用中ブロックの次の
ブロックをポイントする次ブロック・ポインタとを有す
る情報を格納する使用中ブロック(5)と, 上記ソース・プログラム(1)を逐次コンパイルする処
理に対応して,得られたオブジェクトを逐次格納する上
記メモリ(3)と を少なくともそなえ,上記ソース・プログラム(1)を
逐次コンパイルする処理中に,上記同一の内部分岐番号
をもつ上記使用中ブロック(5)が見出された際に,当
該使用中ブロック(5)中の少なくとも上記オブジェク
ト・アドレスを利用して上記メモリ(3)上の対応する
オブジェクトを見出し,当該オブジェクトに対応して分
岐先アドレスをセットするようにした ことを特徴とするコンパイル処理方式。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP15292587A JPH0685151B2 (ja) | 1987-06-19 | 1987-06-19 | コンパイル処理方式 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP15292587A JPH0685151B2 (ja) | 1987-06-19 | 1987-06-19 | コンパイル処理方式 |
Publications (2)
Publication Number | Publication Date |
---|---|
JPS63316234A JPS63316234A (ja) | 1988-12-23 |
JPH0685151B2 true JPH0685151B2 (ja) | 1994-10-26 |
Family
ID=15551141
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP15292587A Expired - Fee Related JPH0685151B2 (ja) | 1987-06-19 | 1987-06-19 | コンパイル処理方式 |
Country Status (1)
Country | Link |
---|---|
JP (1) | JPH0685151B2 (ja) |
-
1987
- 1987-06-19 JP JP15292587A patent/JPH0685151B2/ja not_active Expired - Fee Related
Also Published As
Publication number | Publication date |
---|---|
JPS63316234A (ja) | 1988-12-23 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP2810675B2 (ja) | デバック方式 | |
US5170465A (en) | Incremental-scanning compiler for source-code development system | |
KR900006008B1 (ko) | 스마트 메모리군을 갖는 정보 처리 시스템 | |
US6728954B1 (en) | Method for allowing execution management of optimized code | |
JPH0685151B2 (ja) | コンパイル処理方式 | |
JPH01118931A (ja) | プログラム変換方式 | |
Karjoth | XFSM: A formal model of communicating state machines for implementation specifications | |
JPH01310437A (ja) | ロードモジュール生成方式 | |
JPH0510692B2 (ja) | ||
JP2864955B2 (ja) | コンパイルドコードオブジェクトのパッチ処理方式 | |
JPH08320813A (ja) | プログラムシミュレータ装置及びプログラムデバッグ方法 | |
JPH09274570A (ja) | コンパイル方法及びコンパイラシステム | |
JPH0792757B2 (ja) | 最適データ割付け方式 | |
JPH0764800A (ja) | オブジェクトプログラム生成方法 | |
JPH0225927A (ja) | メモリ領域決定方式 | |
JPH01267731A (ja) | セグメントオーバレイプログラムの作成方式 | |
JPH0343840A (ja) | プログラムテスト方式 | |
JPS63104153A (ja) | アボ−トダンブデ−タ記号編集方式 | |
JPH04153737A (ja) | コンパイル更新情報出力方式 | |
JPH03262050A (ja) | パラメータパターンデータ作成装置 | |
JPH04145529A (ja) | ロボットプログラムの自動生成方法 | |
JPH0421028A (ja) | レジスタ管理方法 | |
JPH0373026A (ja) | コンパイル方式 | |
JPH07191873A (ja) | デバッガにおける変数の値の推移出力方式 | |
JPH0126091B2 (ja) |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
LAPS | Cancellation because of no payment of annual fees |