JPH0367336A - コンパイル装置 - Google Patents
コンパイル装置Info
- Publication number
- JPH0367336A JPH0367336A JP20299289A JP20299289A JPH0367336A JP H0367336 A JPH0367336 A JP H0367336A JP 20299289 A JP20299289 A JP 20299289A JP 20299289 A JP20299289 A JP 20299289A JP H0367336 A JPH0367336 A JP H0367336A
- Authority
- JP
- Japan
- Prior art keywords
- optimization
- necessary
- intermediate code
- program
- processes
- 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
Landscapes
- Devices For Executing Special Programs (AREA)
Abstract
(57)【要約】本公報は電子出願前の出願データであるた
め要約のデータは記録されません。
め要約のデータは記録されません。
Description
【発明の詳細な説明】
[41!!要]
ソースプログラムを翻訳してオブジェクトプログラムを
生成するコンパイル装置に関し、必要な最適化処理を自
動的に行いかつコンパイル時間を短縮することを目的と
し、 ソースプログラムの字句を解析してトークンを生成する
字句解析手段と、該トークンを解析して中間コードを生
成する構文解析手段と、プログラムサイズを小さくしか
つプログラム実行時間を短縮するために、該中間コード
に最適化処理を行なう最適化手段と、該中間コードをオ
ブジェクトコ−ドに変換するオブジェクトコード生成手
段とを有するコンパイル装置において、各種最適化処理
の各々について該最適化処理が必要であるかどうかを記
憶するための最適化要/不要記憶手段を付設し、少なく
とも該構文解析手段は、該中間コードを生成する際に、
該各種最適化処理の各々が必要であるかどうかを判定し
てその判定結果を該最適化要/不要記憶手段に書き込み
、該最適化手段は、該最適化要/不要記憶手段を参照し
て必要な最適化処理のみを行なうをように構成する。
生成するコンパイル装置に関し、必要な最適化処理を自
動的に行いかつコンパイル時間を短縮することを目的と
し、 ソースプログラムの字句を解析してトークンを生成する
字句解析手段と、該トークンを解析して中間コードを生
成する構文解析手段と、プログラムサイズを小さくしか
つプログラム実行時間を短縮するために、該中間コード
に最適化処理を行なう最適化手段と、該中間コードをオ
ブジェクトコ−ドに変換するオブジェクトコード生成手
段とを有するコンパイル装置において、各種最適化処理
の各々について該最適化処理が必要であるかどうかを記
憶するための最適化要/不要記憶手段を付設し、少なく
とも該構文解析手段は、該中間コードを生成する際に、
該各種最適化処理の各々が必要であるかどうかを判定し
てその判定結果を該最適化要/不要記憶手段に書き込み
、該最適化手段は、該最適化要/不要記憶手段を参照し
て必要な最適化処理のみを行なうをように構成する。
[産業上の利用分野]
本発明はソースプログラムを翻訳してオブジェクトプロ
グラムを生成するコンパイル装置に関する。
グラムを生成するコンパイル装置に関する。
[従来の技術]
プログラム開発においては、処理対象に応じた高級言語
を用いることにより、開発期間を大幅に短縮することが
できる。しかし、その反面、ソースプログラムをコンパ
イラにかけてオブジェクトプログラムを生成すると、そ
のサイズはアセンブラの場合よりも相当大きくなり、か
つ、プログラム実行速度も遅くなる。そこで、コンパイ
ラでは一般に、プログラムサイズを小さくしかつプログ
ラム実行時間を短縮するための最適化処理を行なってい
る。
を用いることにより、開発期間を大幅に短縮することが
できる。しかし、その反面、ソースプログラムをコンパ
イラにかけてオブジェクトプログラムを生成すると、そ
のサイズはアセンブラの場合よりも相当大きくなり、か
つ、プログラム実行速度も遅くなる。そこで、コンパイ
ラでは一般に、プログラムサイズを小さくしかつプログ
ラム実行時間を短縮するための最適化処理を行なってい
る。
従来では、実行すべき最適化処理を予め決めていたので
、ソースプログラムによっては必要でない最適化処理も
行なわれ、コンパイル時間がいたずらに長くなっていた
。そこで、コンパイル実行前に、コンパイラに対し最適
化実行/不実行を一括指定する方法を採って対処してい
た。
、ソースプログラムによっては必要でない最適化処理も
行なわれ、コンパイル時間がいたずらに長くなっていた
。そこで、コンパイル実行前に、コンパイラに対し最適
化実行/不実行を一括指定する方法を採って対処してい
た。
[発明が解決しようとする課題]
しかし、最適化処理を全く行なわないと当然オブジェク
トサイズが長くなり過ぎ、かつ、実行時間が長くなり過
ぎる。このような問題点を解決するために、コンパイラ
に対し、各種最適化処理の各々について、最適化実行/
不実行の指定を細かく行ない、ソースプログラムに応じ
て必要な最適化処理のみを行なわせるようにすることも
可能であるが、ユーザにとって煩雑な作業となる。
トサイズが長くなり過ぎ、かつ、実行時間が長くなり過
ぎる。このような問題点を解決するために、コンパイラ
に対し、各種最適化処理の各々について、最適化実行/
不実行の指定を細かく行ない、ソースプログラムに応じ
て必要な最適化処理のみを行なわせるようにすることも
可能であるが、ユーザにとって煩雑な作業となる。
本発明の目的は、上記問題点に鑑み、必要な最適化処理
を自動的に行いかつコンパイル時間を短縮することがで
きるコンパイル装置を提供することにある。
を自動的に行いかつコンパイル時間を短縮することがで
きるコンパイル装置を提供することにある。
[課題を解決するための手段]
第1図は本発明の原理構成を示す。
図中、■は字句解析手段であり、ソースプログラムの字
句を解析してトークンを生成する。
句を解析してトークンを生成する。
2は最適化要/不要記憶手段であり、各種最適化処理の
各々について該最適化処理が必要であるかどうかを記憶
するためのものである。
各々について該最適化処理が必要であるかどうかを記憶
するためのものである。
3は構文解析手段であり、該トークンを解析して中間コ
ードを生成する。少なくともこの構文解析手段3は、該
中間コードを生成する際に、該各種最適化処理の各々が
必要であるかどうかを判定してその判定結果を最適花便
/不要記憶手段2に書き込む。
ードを生成する。少なくともこの構文解析手段3は、該
中間コードを生成する際に、該各種最適化処理の各々が
必要であるかどうかを判定してその判定結果を最適花便
/不要記憶手段2に書き込む。
4は最適化手段であり、プログラムサイズを小さくしか
つプログラム実行時間を短縮するために、最適花便/不
要記憶手段2を参照して、該中間コードに必要な最適化
処理のみを行なう 5はオブジェクトコード生成手段であり、該中間コード
をオブジェクトコードに変換する。
つプログラム実行時間を短縮するために、最適花便/不
要記憶手段2を参照して、該中間コードに必要な最適化
処理のみを行なう 5はオブジェクトコード生成手段であり、該中間コード
をオブジェクトコードに変換する。
なお、字句解析手段1においても、該トークンを生成す
る際に、ある最適化処理の必要性を判定してその判定結
果を最適化要/不要記憶手役2に書き込むようにしても
よい。
る際に、ある最適化処理の必要性を判定してその判定結
果を最適化要/不要記憶手役2に書き込むようにしても
よい。
[作用]
構文解析手段3又はこれと字句解析手段1において、各
種最適化処理の各々が必要であるかどうかを判定してそ
の判定結果を最適花便/不要記憶手段2に書き込み、最
適化手段4において、判定結果が格納されている最適花
便/不要記憶手段2を参照して必要な最適化処理のみを
行なうので、ユーザの判断を介することなく、プログラ
ムに応じた必要な最適化処理が自動的に行われ、必要性
の有無にかかわらず全最適化処理を行なう従来装置より
もコンパイル時間が短縮される。
種最適化処理の各々が必要であるかどうかを判定してそ
の判定結果を最適花便/不要記憶手段2に書き込み、最
適化手段4において、判定結果が格納されている最適花
便/不要記憶手段2を参照して必要な最適化処理のみを
行なうので、ユーザの判断を介することなく、プログラ
ムに応じた必要な最適化処理が自動的に行われ、必要性
の有無にかかわらず全最適化処理を行なう従来装置より
もコンパイル時間が短縮される。
[実施例]
以下、図面に基づいて本発明の一実施例を説明する。
第2図乃至第5図はコンパイル装置のソフトウェア構成
を示す。ハードウェア構成は周知の計算機である。
を示す。ハードウェア構成は周知の計算機である。
第2図はコンパイラのジェネラルフローチャートである
。同図において、50は各種最適花便/不要リストであ
り、読み書き可能なメモリにその領域が確保されている
。この各種最適花便/不要リスト50は、FO〜Fil
からなり、フラグF(i =O〜11)が1であれば第
i最適化処理が必要であることを示し、フラグPiが0
であれば第i最適化処理が不必要であることを示す。す
なわち、プログラムサイズを小さくしかつプログラム実
行時間を短縮するための最適化処理には各種のものがあ
り、これを第0〜1工最適化処理に区分している。フラ
グFO〜Filは全て0に初期設定されている。
。同図において、50は各種最適花便/不要リストであ
り、読み書き可能なメモリにその領域が確保されている
。この各種最適花便/不要リスト50は、FO〜Fil
からなり、フラグF(i =O〜11)が1であれば第
i最適化処理が必要であることを示し、フラグPiが0
であれば第i最適化処理が不必要であることを示す。す
なわち、プログラムサイズを小さくしかつプログラム実
行時間を短縮するための最適化処理には各種のものがあ
り、これを第0〜1工最適化処理に区分している。フラ
グFO〜Filは全て0に初期設定されている。
(100)最初に、高級言語(本実施例ではC言語とす
る)で記述されたソースプログラムの字句を解析してト
ークンを生成する。このトークン生成の際に、トークン
の種類から、ある種の最適化処理が必要であるかどうか
を判定し、必要であれば該当フラグをセットする。
る)で記述されたソースプログラムの字句を解析してト
ークンを生成する。このトークン生成の際に、トークン
の種類から、ある種の最適化処理が必要であるかどうか
を判定し、必要であれば該当フラグをセットする。
具体的には、第3図に示す如く、
(102>)−クンを生成し、
(104)そのトークンに相当する字句がループ処理を
示すwhile、for又はdoであれば、 (106)フラグFOをセットする。
示すwhile、for又はdoであれば、 (106)フラグFOをセットする。
(108)ソースプログラムの全字句についてトークン
生成処理が終了していなければ、ステップ102へ戻り
、次の字句についてトークンを生成する。以下、上記処
理を繰り返す。
生成処理が終了していなければ、ステップ102へ戻り
、次の字句についてトークンを生成する。以下、上記処
理を繰り返す。
(200>次に、生成したトークンを解析して中間コー
ドを生成する。また、この中間コード生成の際に、各種
最適化処理の各々が必要であるかどうかを判定し、必要
であれば該当フラグをセットする。
ドを生成する。また、この中間コード生成の際に、各種
最適化処理の各々が必要であるかどうかを判定し、必要
であれば該当フラグをセットする。
具体的には、第4図に示す如く、
(202))−クンの1文を中間コードに変換し、
(204>その中間コードの各々の種類を判定し、
中間コードが関数呼出しであれば
(206)フラグFlをセットし、
中間コードがポインタの定義又はポインタの使用であれ
ば (208>フラグF2をセットし、 中間コードが分岐命令であれば (210) フラグF3〜F5をセットし、中間コード
が変数の定義又は変数の使用であれば (212)フラグF6〜F8をセットし、中間コードが
定数代入であれば、 (214) フラグF9をセットし、 中間コードが後述するような複写文であれば、(216
>フラグPLOをセットし、 中間コードが四則演算であれば、 (218)フラグFilをセットする。
ば (208>フラグF2をセットし、 中間コードが分岐命令であれば (210) フラグF3〜F5をセットし、中間コード
が変数の定義又は変数の使用であれば (212)フラグF6〜F8をセットし、中間コードが
定数代入であれば、 (214) フラグF9をセットし、 中間コードが後述するような複写文であれば、(216
>フラグPLOをセットし、 中間コードが四則演算であれば、 (218)フラグFilをセットする。
(220)プログラムの全文について中間コードの生成
が終了していなければ、ステップ202へ戻り、次の文
について中間コードを生成する。
が終了していなければ、ステップ202へ戻り、次の文
について中間コードを生成する。
以下、上記処理を繰り返す。
(300)次に、上記ステップ100及び200で作成
された各種最適花便/不要リスト50を参照して、中間
コードに対し最適化処理を行う。
された各種最適花便/不要リスト50を参照して、中間
コードに対し最適化処理を行う。
すなわち、プログラムの実質的内容を変えずにプログラ
ムサイズを小さくしかつプログラムの実行時間を短縮す
る。
ムサイズを小さくしかつプログラムの実行時間を短縮す
る。
具体的には、第5図に示す如く、
(302)iをOに初期設定し、
(304)フラグPiがセットされているときのみ、
(306)後述する第i最適化処理を行う。
(308)iの値をインクリメントし、(310)iの
値が12でなければステップ304へ戻って上記処理を
繰り返す。
値が12でなければステップ304へ戻って上記処理を
繰り返す。
上記第0最適化処理の具体的内容は次の通りである。
(Q)第0最適化処理
ループの最適化を行う。例えば、ループ内で変化しない
式をループの外に出して、ループ内のコード量を減らす
。
式をループの外に出して、ループ内のコード量を減らす
。
(1)第1最適化処理
手続間のデータフロー解析を行う。これは、手続き呼び
出しによって変化する可能性がある変数の集合を求める
ものであり、第6及び7最適化処理の前処理である。
出しによって変化する可能性がある変数の集合を求める
ものであり、第6及び7最適化処理の前処理である。
(II)第2最適化処理
別名解析を行う。これは、ポインタが指し示す可能性が
ある変数の集合を求めるものであり、第6及び7最適化
処理の前処理である。
ある変数の集合を求めるものであり、第6及び7最適化
処理の前処理である。
(In[)第3最適化処理
コントロールフロー解析を行う。これは、プログラムを
入口、出口が共に1つのブロックに分割して、プログラ
ムの制御構造をグラフ化するものであり、第4及び5最
適化の前処理である。
入口、出口が共に1つのブロックに分割して、プログラ
ムの制御構造をグラフ化するものであり、第4及び5最
適化の前処理である。
(IV)第4最適化処理
分岐命令の最適化を行う。例えば、ステップ八からステ
ップBヘジャンプした後直ちにステップCヘジャンプす
るような場合、ステップBへのジャンプを省略してステ
ップAからステップCへ直接ジャンプするようにする。
ップBヘジャンプした後直ちにステップCヘジャンプす
るような場合、ステップBへのジャンプを省略してステ
ップAからステップCへ直接ジャンプするようにする。
(V)第5最適化処理
実行されない文の削除を行う。例えば、無条件分岐命令
の後のラベルでない文は、実行されることがないので、
これを削除する。
の後のラベルでない文は、実行されることがないので、
これを削除する。
(Vl)第6最適化処理
データフロー解析を行う。これは、変数の参照と定義の
関係の集合を求めるもので、参照される値がどこで定義
されているかを解析するものであり、第7〜11最適化
処理の前処理である。もし、第1.2最適化処理のいず
れかまたは両方が行われていた場合には、そこで集めた
情報を参照して解析を行う。
関係の集合を求めるもので、参照される値がどこで定義
されているかを解析するものであり、第7〜11最適化
処理の前処理である。もし、第1.2最適化処理のいず
れかまたは両方が行われていた場合には、そこで集めた
情報を参照して解析を行う。
(■)第7最適化処理
生きている変数の解析を行う。これは、変数の定義と参
照の関係の集合を求めるもので、変数の定義がそれ以降
の点で参照されるかどうかを解析するものであり、第8
最適化処理の前処理である。
照の関係の集合を求めるもので、変数の定義がそれ以降
の点で参照されるかどうかを解析するものであり、第8
最適化処理の前処理である。
もし、第1.2最適化のいずれかまたは両方が行われて
いた場合のは、そこで集めた情報を参照して解析を行う
。
いた場合のは、そこで集めた情報を参照して解析を行う
。
(■)第8最適化処理
可能であれば、メモリの代わりにレジスタを割り当てる
。
。
(]X)第9最適化処理
定数のたたみ込みにより最適化を行う。例えば、i=0
、j=i+2とあった場合に、1とjの定義の間でjが
再定義されていなければ、i−0、J−=2とする。
、j=i+2とあった場合に、1とjの定義の間でjが
再定義されていなければ、i−0、J−=2とする。
(X)第10最適化処理
複写の伝播により最適化を行う。例えば、ABという形
の複写文があった場合に、この定義以降にA及びBの再
定義がなけれは、Aの使用をBに置き換えて、文A=B
を削除する。
の複写文があった場合に、この定義以降にA及びBの再
定義がなけれは、Aの使用をBに置き換えて、文A=B
を削除する。
(xI)第11最適化処理
共通部分式を削除することにより最適化を行う。
例えば、A=i+j、B= (j+j)*にとあった場
合に、AとBの定義の間でA%l及びjが再定義されて
いなければ、A=i+jSB=A*にとする。
合に、AとBの定義の間でA%l及びjが再定義されて
いなければ、A=i+jSB=A*にとする。
(400)次に、第2図において、最適化された中間コ
ードをオブジェクトコードに変換する。
ードをオブジェクトコードに変換する。
以上の処理によりコンパイルが終了する。
なお、ステップ104〜106の処理は、ステップ20
0で行ってもよい。
0で行ってもよい。
[発明の効果]
以上説明した如く、本発明に係るコンパイル装置によれ
ば、ユーザの判断を介することなく、プログラムに応じ
た必要な最適化処理を自動的に行うことができ、必要性
の有無にかかわらず全最適化処理を行なう従来装置より
もコンパイル時間を短縮することができるという優れた
効果を奏し、全ユーザのプログラム開発期間の短縮化に
寄与するところが大きい。
ば、ユーザの判断を介することなく、プログラムに応じ
た必要な最適化処理を自動的に行うことができ、必要性
の有無にかかわらず全最適化処理を行なう従来装置より
もコンパイル時間を短縮することができるという優れた
効果を奏し、全ユーザのプログラム開発期間の短縮化に
寄与するところが大きい。
第1図は本発明に係るコンパイル装置の原理構成を示す
ブロック図である。 第2図乃至第5図は本発明の一実施例に係り、第2図は
コンパイラのジェネラルフローチャート、 第3図は第2図ステップ100の詳細を示す字句解析フ
ローチャート、 第4図は第2図ステップ200の詳細を示す構文解析フ
ローチャート、 第5図は第2図ステップ300の詳細を示す最適化フロ
ーチャートである。 コンパイラのジェネラルフローチャート第2図 第1図 字句解析フローチャート 第3図 第 5図
ブロック図である。 第2図乃至第5図は本発明の一実施例に係り、第2図は
コンパイラのジェネラルフローチャート、 第3図は第2図ステップ100の詳細を示す字句解析フ
ローチャート、 第4図は第2図ステップ200の詳細を示す構文解析フ
ローチャート、 第5図は第2図ステップ300の詳細を示す最適化フロ
ーチャートである。 コンパイラのジェネラルフローチャート第2図 第1図 字句解析フローチャート 第3図 第 5図
Claims (1)
- 【特許請求の範囲】 ソースプログラムの字句を解析してトークンを生成する
字句解析手段(1)と、 該トークンを解析して中間コードを生成する構文解析手
段(3)と、 プログラムサイズを小さくしかつプログラム実行時間を
短縮するために、該中間コードに最適化処理を行なう最
適化手段(4)と、 該中間コードをオブジェクトコードに変換するオブジェ
クトコード生成手段(5)とを有するコンパイル装置に
おいて、 各種最適化処理の各々について該最適化処理が必要であ
るかどうかを記憶するための最適化要/不要記憶手段(
2)を付設し、 少なくとも該構文解析手段(3)は、該中間コードを生
成する際に、該各種最適化処理の各々が必要であるかど
うかを判定してその判定結果を該最適化要/不要記憶手
段(2)に書き込み、該最適化手段(4)は、該最適化
要/不要記憶手段(2)を参照して必要な最適化処理の
みを行なう ことを特徴とするコンパイル装置。
Priority Applications (1)
| Application Number | Priority Date | Filing Date | Title |
|---|---|---|---|
| JP20299289A JPH0367336A (ja) | 1989-08-04 | 1989-08-04 | コンパイル装置 |
Applications Claiming Priority (1)
| Application Number | Priority Date | Filing Date | Title |
|---|---|---|---|
| JP20299289A JPH0367336A (ja) | 1989-08-04 | 1989-08-04 | コンパイル装置 |
Publications (1)
| Publication Number | Publication Date |
|---|---|
| JPH0367336A true JPH0367336A (ja) | 1991-03-22 |
Family
ID=16466539
Family Applications (1)
| Application Number | Title | Priority Date | Filing Date |
|---|---|---|---|
| JP20299289A Pending JPH0367336A (ja) | 1989-08-04 | 1989-08-04 | コンパイル装置 |
Country Status (1)
| Country | Link |
|---|---|
| JP (1) | JPH0367336A (ja) |
-
1989
- 1989-08-04 JP JP20299289A patent/JPH0367336A/ja active Pending
Similar Documents
| Publication | Publication Date | Title |
|---|---|---|
| US5586328A (en) | Module dependency based incremental compiler and method | |
| US5778212A (en) | Interprocedural analysis user interface | |
| JP4640684B2 (ja) | プログラムコード変換方法 | |
| US7120898B2 (en) | Intermediate representation for multiple exception handling models | |
| US5812855A (en) | System and method for constaint propagation cloning for unknown edges in IPA | |
| US5838980A (en) | Compilation and virtual machine arrangement and process for source code including pre-runtime executable language structure constructs | |
| CN111796831A (zh) | 一种多芯片兼容的编译方法和装置 | |
| JP4833206B2 (ja) | 最適化されたプログラムのためのアンワインド情報の生成 | |
| CN100409187C (zh) | 程序转换装置及程序转换方法 | |
| JP2005141380A (ja) | テンプレートコンパイル方法 | |
| CN102360306A (zh) | 高级语言代码中循环数据流图提取优化信息处理方法 | |
| Saraiva et al. | Functional incremental attribute evaluation | |
| JP4768984B2 (ja) | コンパイル方法、コンパイルプログラムおよびコンパイル装置 | |
| US5778232A (en) | Automatic compiler restructuring of COBOL programs into a proc per paragraph model | |
| US5560010A (en) | Method for automatically generating object declarations | |
| CN107408054B (zh) | 设备中的流控制的方法和计算机可读介质 | |
| CN112579088A (zh) | 面向异构混合编程的一站式程序编译方法 | |
| Sah et al. | An introduction to the Rush language | |
| KR970049508A (ko) | 병렬 컴파일러 및 그 제어 병렬화 설계방법 | |
| Boyland et al. | Attributed transformational code generation for dynamic compilers | |
| US20090112568A1 (en) | Method for Generating a Simulation Program Which Can Be Executed On a Host Computer | |
| Ganapathi | Semantic predicates in parser generators | |
| JPH10154079A (ja) | プログラム変換装置および記憶媒体 | |
| Canedo et al. | Compiling for reduced bit-width queue processors | |
| JP3018783B2 (ja) | コンパイル方式 |