JPH0351007B2 - - Google Patents
Info
- Publication number
- JPH0351007B2 JPH0351007B2 JP57172113A JP17211382A JPH0351007B2 JP H0351007 B2 JPH0351007 B2 JP H0351007B2 JP 57172113 A JP57172113 A JP 57172113A JP 17211382 A JP17211382 A JP 17211382A JP H0351007 B2 JPH0351007 B2 JP H0351007B2
- Authority
- JP
- Japan
- Prior art keywords
- call
- procedure
- level
- called
- list
- 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 - Lifetime
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/448—Execution paradigms, e.g. implementations of programming paradigms
- G06F9/4482—Procedural
- G06F9/4484—Executing subprograms
- G06F9/4486—Formation of subprogram jump address
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Devices For Executing Special Programs (AREA)
- Debugging And Monitoring (AREA)
Description
【発明の詳細な説明】
〔発明の技術分野〕
本発明は、翻訳中に呼出し関係リストを作成
し、再帰呼出しされる手続きや呼出されることの
ない手続きを検出できるようにしたコンパイラに
おける呼出し関係解析方法に関するものである。
し、再帰呼出しされる手続きや呼出されることの
ない手続きを検出できるようにしたコンパイラに
おける呼出し関係解析方法に関するものである。
従来のコンパイラにおいては、入力されるプロ
グラムの構分チエツクなどを行つているが、呼出
し関係のチエツクを行つていない。例えば A:PROC; CALL B; CALL C; CALL D; RETURN; B:PROC; CALL C; END B; C:PROC; END C; D:PROC; END D; E:PROC; ENDE; ENDA; というプログラムにおいては、手続きEは呼出さ
れていないので、不用である。また、再帰呼出し
される手続きについては、入口コードおよび出口
コードを付加することが必要である。しかし、従
来のコンパイラは、上記のようなチエツクを行つ
ていない。また、上記のプログラムにおいては、
手続きBとDは同一タイミングで行われることは
ないので、データ域を共用できるが、従来のコン
パイラにおいては、このようなチエツクを行つて
いない。
グラムの構分チエツクなどを行つているが、呼出
し関係のチエツクを行つていない。例えば A:PROC; CALL B; CALL C; CALL D; RETURN; B:PROC; CALL C; END B; C:PROC; END C; D:PROC; END D; E:PROC; ENDE; ENDA; というプログラムにおいては、手続きEは呼出さ
れていないので、不用である。また、再帰呼出し
される手続きについては、入口コードおよび出口
コードを付加することが必要である。しかし、従
来のコンパイラは、上記のようなチエツクを行つ
ていない。また、上記のプログラムにおいては、
手続きBとDは同一タイミングで行われることは
ないので、データ域を共用できるが、従来のコン
パイラにおいては、このようなチエツクを行つて
いない。
本発明は、上記の考察に基づくものであつて、
手続きの呼出し関係のチエツクを行い、効率的で
エラーのない実行プログラムを作成できるように
したコンパイラにおける手続きの呼出し関係解析
方法を提供することを目的としている。
手続きの呼出し関係のチエツクを行い、効率的で
エラーのない実行プログラムを作成できるように
したコンパイラにおける手続きの呼出し関係解析
方法を提供することを目的としている。
そしてそのため、本発明の呼出し関係解析方法
は、 入力プログラムをオブジエクト・プログラムに
変換するコンパイラにおける呼出し関係解析方法
であつて、 入力プログラムに関して、手続き毎に呼出して
いる手続きを表すビツト列形式の呼出ベクトルを
作成すると共に、 手続き毎の呼出レベルが記入される呼出レベ
ル・リストを作成し、呼出レベル・リストにおけ
るメイン・ルーチンの手続き及び外部から直接呼
ばれるサブルーチンに対応するレベルを予め1と
し、 呼出ベクトルおよび呼出レベル・リストを参照
して、レベル1の手続きから呼ばれる手続きを求
め、当該呼ばれる手続きのレベルを2とし、2の
レベル値を呼出レベル・リストの該当する位置に
書き込み、 呼出ベクトルおよび呼出レベル・リストを参照
して、レベルnの手続きから呼ばれる手続きを求
め、当該呼ばれる手続きのレベルをn+1とし、
n+1のレベル値を呼出レベル・リストの該当す
る位置に書き込み、 レベルmの手続きから呼ばれる手続きがなくな
つた場合、または呼出レベル・リストの最大レベ
ル値が全体の手続きの数を越えた場合には、レベ
ル付け処理を終わりとし、 レベル付け処理終了後の呼出レベル・リストの
中に、レベル0の手続きがあつた場合には、当該
手続きを何処からも呼出されない手続きとし、 もし、mが手続きの数を越えた場合には、再帰
的呼出しがあると判断し、呼出し関係を解析する
手続きの集合における一つ一つの手続きについ
て、呼出し関係が自分自身に戻つてくるか否かを
調べることにより、再帰呼出しになつている手続
きを見つける ことを特徴とするものである。
は、 入力プログラムをオブジエクト・プログラムに
変換するコンパイラにおける呼出し関係解析方法
であつて、 入力プログラムに関して、手続き毎に呼出して
いる手続きを表すビツト列形式の呼出ベクトルを
作成すると共に、 手続き毎の呼出レベルが記入される呼出レベ
ル・リストを作成し、呼出レベル・リストにおけ
るメイン・ルーチンの手続き及び外部から直接呼
ばれるサブルーチンに対応するレベルを予め1と
し、 呼出ベクトルおよび呼出レベル・リストを参照
して、レベル1の手続きから呼ばれる手続きを求
め、当該呼ばれる手続きのレベルを2とし、2の
レベル値を呼出レベル・リストの該当する位置に
書き込み、 呼出ベクトルおよび呼出レベル・リストを参照
して、レベルnの手続きから呼ばれる手続きを求
め、当該呼ばれる手続きのレベルをn+1とし、
n+1のレベル値を呼出レベル・リストの該当す
る位置に書き込み、 レベルmの手続きから呼ばれる手続きがなくな
つた場合、または呼出レベル・リストの最大レベ
ル値が全体の手続きの数を越えた場合には、レベ
ル付け処理を終わりとし、 レベル付け処理終了後の呼出レベル・リストの
中に、レベル0の手続きがあつた場合には、当該
手続きを何処からも呼出されない手続きとし、 もし、mが手続きの数を越えた場合には、再帰
的呼出しがあると判断し、呼出し関係を解析する
手続きの集合における一つ一つの手続きについ
て、呼出し関係が自分自身に戻つてくるか否かを
調べることにより、再帰呼出しになつている手続
きを見つける ことを特徴とするものである。
以下、本発明を具体的に説明する。本発明の呼
出し関係解析方法は、前処理として下記の処理を
行う。
出し関係解析方法は、前処理として下記の処理を
行う。
手続き(メイン・ルーチンとサブルーチン)
毎に、呼出している手続きを表わすビツト・ベ
クトルを作成する。
毎に、呼出している手続きを表わすビツト・ベ
クトルを作成する。
手続きの呼出しのレベルを表わすリストを作
成する。ただし、メイン・ルーチンと外部から
直接呼ばれるサブ・ルーチンは、予めレベル1
に設定しておく。
成する。ただし、メイン・ルーチンと外部から
直接呼ばれるサブ・ルーチンは、予めレベル1
に設定しておく。
上記の前処理を行つた後、下記の処理を行う。
レベル1の手続きから呼ばれる手続きのレベル
を2とし、レベルnの手続きから呼ばれる手続き
のレベルをn+1とする。レベルmの手続きから
呼ばれる手続きがなくなつたら終りとする。この
とき、レベル0のまゝで残つている手続きは、ど
こからも呼出されない手続きである。もし、mが
手続きの数よりも大きい時は再帰呼出しがあるの
で、次のようにして再帰呼出しをしている手続き
を検出する。n番目(nは1,2,…,N:Nは
手続きの数)の手続きが呼出す手続きのベクトル
を初期値とする。呼出された手続きが呼出す手続
きもベクトルに加える。ベクトルの値が変化しな
くなつたら終りとする。もし、そのベクトルの中
にn番目の手続きが含まれているならば、n番目
の手続きは再帰的に呼出されている。
を2とし、レベルnの手続きから呼ばれる手続き
のレベルをn+1とする。レベルmの手続きから
呼ばれる手続きがなくなつたら終りとする。この
とき、レベル0のまゝで残つている手続きは、ど
こからも呼出されない手続きである。もし、mが
手続きの数よりも大きい時は再帰呼出しがあるの
で、次のようにして再帰呼出しをしている手続き
を検出する。n番目(nは1,2,…,N:Nは
手続きの数)の手続きが呼出す手続きのベクトル
を初期値とする。呼出された手続きが呼出す手続
きもベクトルに加える。ベクトルの値が変化しな
くなつたら終りとする。もし、そのベクトルの中
にn番目の手続きが含まれているならば、n番目
の手続きは再帰的に呼出されている。
以下、本発明を具体例で説明する。いま、下記
のようなプログラムがあつたとする。
のようなプログラムがあつたとする。
M:PROC;
CALL S1;
RETURN
S1:PROC;
CALLS2;
CALLS3;
RETURN;
S2:PROC;
CALLS3
ENDS2;
S3:PROC;
ENDS3;
ENDS1;
ENDM;
第1図はこのようなプログラムの呼出し関係解
析方法を説明するものである。手続きMは手続き
S1のみを呼出しているので、その呼出ベクトル
(ビツト・ベクトル)は、「0100」となる。手続き
S1は手続きS2とS3を呼び出しているので、その
呼出ベクトルは「0011」となる。手続S2は、手
続S3のみを呼出しているので、その呼出ベクト
ルは「0001」である。手続S3は何も呼出してい
ないので、その呼出ベクトルは「0000」である。
手続きMの呼出レベルは1とされ、初期状態では
呼出レベル・リストは「1000」である。呼出ベク
トルおよび呼出レベル・リストの初期設定が完了
した後、下記のないしの処理が行われる。
析方法を説明するものである。手続きMは手続き
S1のみを呼出しているので、その呼出ベクトル
(ビツト・ベクトル)は、「0100」となる。手続き
S1は手続きS2とS3を呼び出しているので、その
呼出ベクトルは「0011」となる。手続S2は、手
続S3のみを呼出しているので、その呼出ベクト
ルは「0001」である。手続S3は何も呼出してい
ないので、その呼出ベクトルは「0000」である。
手続きMの呼出レベルは1とされ、初期状態では
呼出レベル・リストは「1000」である。呼出ベク
トルおよび呼出レベル・リストの初期設定が完了
した後、下記のないしの処理が行われる。
レベル1の処理
呼出レベル・リストの値が「1000」、手続き
Mの呼出ベクトルは「0100」であるので、呼出
レベル・リストは「1200」とされる。
Mの呼出ベクトルは「0100」であるので、呼出
レベル・リストは「1200」とされる。
レベル2の処理
呼出レベル・リストの値が「1200」、手続S1
の呼出ベクトルが「0011」であるので、呼出レ
ベル・リストは「1233」とされる。
の呼出ベクトルが「0011」であるので、呼出レ
ベル・リストは「1233」とされる。
レベル3の処理
呼出レベル・リストの値が「1233」、手続S2
の呼出ベクトルが「0001」であるので、呼出レ
ベル・リストは「1234」とされる。
の呼出ベクトルが「0001」であるので、呼出レ
ベル・リストは「1234」とされる。
レベル4の処理
呼出レベル・リストの値が「1234」、手続S2
の呼出ベクトルが「0000」であるので、呼出レ
ベル・リストは「1234」のまゝである。
の呼出ベクトルが「0000」であるので、呼出レ
ベル・リストは「1234」のまゝである。
上記のプログラムにおいては、手続S1ないし
S3の呼出レベルはゼロではないので、これらの
手続きは全て他の手続きから呼出されていること
が判る。
S3の呼出レベルはゼロではないので、これらの
手続きは全て他の手続きから呼出されていること
が判る。
第2図は再帰呼出しがある場合における手続き
の呼出関係解析方法を説明するものである。い
ま、 M:PROC; (CALLS); RETURN; S:PROC CALLM; ENDS; ENDM; なるプログラムがあるとする。手続きMの呼出ベ
クトルは「01」であり、手続きSの呼出ベクトル
は「01」である。第1図と同様に、レベル1の処
理を行うと、呼出レベル・リストは「12」とな
り、レベル2の処理を行うと、呼出レベル・リス
トは「32」となる。呼出レベル・リストの手続M
に対応する位置の数値は3となつているが、手続
の数は2であるので、再帰呼出しがあることが判
る。このような場合には手続Mの呼出ベクトル
「10」に手続Sの呼出ベクトル「01」を論理的に
加算する。論理的に加算とは、ビツト対応に論理
和を取ることを意味している。手続きMの呼出ベ
クトル「01」に、手続きSの呼出ベクトル「10」
を加えると、「11」となる。呼出される手続きの
パターンは「11」で固定であり、しかも手続きM
が含まれているので、手続Mは再帰的に呼出され
ている。手続きSについても同様な処理を行う。
の呼出関係解析方法を説明するものである。い
ま、 M:PROC; (CALLS); RETURN; S:PROC CALLM; ENDS; ENDM; なるプログラムがあるとする。手続きMの呼出ベ
クトルは「01」であり、手続きSの呼出ベクトル
は「01」である。第1図と同様に、レベル1の処
理を行うと、呼出レベル・リストは「12」とな
り、レベル2の処理を行うと、呼出レベル・リス
トは「32」となる。呼出レベル・リストの手続M
に対応する位置の数値は3となつているが、手続
の数は2であるので、再帰呼出しがあることが判
る。このような場合には手続Mの呼出ベクトル
「10」に手続Sの呼出ベクトル「01」を論理的に
加算する。論理的に加算とは、ビツト対応に論理
和を取ることを意味している。手続きMの呼出ベ
クトル「01」に、手続きSの呼出ベクトル「10」
を加えると、「11」となる。呼出される手続きの
パターンは「11」で固定であり、しかも手続きM
が含まれているので、手続Mは再帰的に呼出され
ている。手続きSについても同様な処理を行う。
次に複数の手続きでデータ領域を共用できる例
について述べる。いま、 M:PROC; CALL S1; CALL S2; RETURN; S1:PROC; END S1; S2:PROC; END S2 END M; というプログラムがあつたとする。このようなプ
ログラムにおいては、手続きS1とS2は同じ呼出
レベルをもつので、絶対に同じタイミングで使用
されることはない。したがつて、手続きS1とS2
でそれぞれローカルに使用される領域(例えばレ
ジスタのセーブ・エリア)を、同じ場所に割付け
ても問題はない。
について述べる。いま、 M:PROC; CALL S1; CALL S2; RETURN; S1:PROC; END S1; S2:PROC; END S2 END M; というプログラムがあつたとする。このようなプ
ログラムにおいては、手続きS1とS2は同じ呼出
レベルをもつので、絶対に同じタイミングで使用
されることはない。したがつて、手続きS1とS2
でそれぞれローカルに使用される領域(例えばレ
ジスタのセーブ・エリア)を、同じ場所に割付け
ても問題はない。
コンパイラは、構文解析部、最適化処理部およ
びコード生成部から構成されている。手続きの呼
出関係を解析する機能は、上記の最適化処理部に
設けられる。呼出されることのない手続や再帰的
に呼出される手続きが検出された場合には、メツ
セージが出力される。プログラム作成者は、この
メツセージを見て必要に応じてコーデイングの修
正を行う。
びコード生成部から構成されている。手続きの呼
出関係を解析する機能は、上記の最適化処理部に
設けられる。呼出されることのない手続や再帰的
に呼出される手続きが検出された場合には、メツ
セージが出力される。プログラム作成者は、この
メツセージを見て必要に応じてコーデイングの修
正を行う。
以上の説明から明らかなように、本発明によれ
ば、プログラムのエラーの検出およびオブジエク
ト・プログラムの最適化に役立つ情報をプログラ
ム作成者に提供することが出来る。
ば、プログラムのエラーの検出およびオブジエク
ト・プログラムの最適化に役立つ情報をプログラ
ム作成者に提供することが出来る。
第1図は本発明による手続きの呼出し関係解析
方法を説明する図、第2図は再帰呼出しがある場
合における手続きの呼出し関係解析方法を説明す
る図である。
方法を説明する図、第2図は再帰呼出しがある場
合における手続きの呼出し関係解析方法を説明す
る図である。
Claims (1)
- 【特許請求の範囲】 1 入力プログラムをオブジエクト・プログラム
に変換するコンパイラにおける呼出し関係解析方
法であつて、 入力プログラムに関して、手続き毎に呼出して
いる手続きを表すビツト列形式の呼出ベクトルを
作成すると共に、 手続き毎の呼出レベルが記入される呼出レベ
ル・リストを作成し、呼出レベル・リストにおけ
るメイン・ルーチンの手続き及び外部から直接呼
ばれるサブルーチンに対応するレベルを予め1と
し、 呼出ベクトルおよび呼出レベル・リストを参照
して、レベル1の手続きから呼ばれる手続きを求
め、当該呼ばれる手続きのレベルを2とし、2の
レベル値を呼出レベル・リストの該当する位置に
書き込み、 呼出ベクトルおよび呼出レベル・リストを参照
して、レベルnの手続きから呼ばれる手続きを求
め、当該呼ばれる手続きのレベルをn+1とし、
n+1のレベル値を呼出レベル・リストの該当す
る位置に書き込み、 レベルmの手続きから呼ばれる手続きがなくな
つた場合、または呼出レベル・リストの最大レベ
ル値が全体の手続きの数を越えた場合には、レベ
ル付け処理を終わりとし、 レベル付け処理終了後の呼出レベル・リストの
中に、レベル0の手続きがあつた場合には、当該
手続きを何処からも呼出されない手続きとし、 もし、mが手続きの数を越えた場合には、再帰
的呼出しがあると判断し、呼出し関係を解析する
手続きの集合における一つ一つの手続きについ
て、呼出し関係が自分自身に戻つてくるか否かを
調べることにより、再帰呼出しになつている手続
きを見つける ことを特徴とする呼出し関係解析方法。
Priority Applications (1)
| Application Number | Priority Date | Filing Date | Title |
|---|---|---|---|
| JP57172113A JPS5960641A (ja) | 1982-09-30 | 1982-09-30 | 呼出し関係解析方法 |
Applications Claiming Priority (1)
| Application Number | Priority Date | Filing Date | Title |
|---|---|---|---|
| JP57172113A JPS5960641A (ja) | 1982-09-30 | 1982-09-30 | 呼出し関係解析方法 |
Publications (2)
| Publication Number | Publication Date |
|---|---|
| JPS5960641A JPS5960641A (ja) | 1984-04-06 |
| JPH0351007B2 true JPH0351007B2 (ja) | 1991-08-05 |
Family
ID=15935790
Family Applications (1)
| Application Number | Title | Priority Date | Filing Date |
|---|---|---|---|
| JP57172113A Granted JPS5960641A (ja) | 1982-09-30 | 1982-09-30 | 呼出し関係解析方法 |
Country Status (1)
| Country | Link |
|---|---|
| JP (1) | JPS5960641A (ja) |
Families Citing this family (2)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| JPS61188639A (ja) * | 1985-02-15 | 1986-08-22 | Fujitsu Ltd | 制御文の処理方式 |
| KR101640377B1 (ko) | 2016-01-06 | 2016-07-18 | 스튜디오씨드코리아 주식회사 | 그래픽 사용자 인터페이스의 프로토타입 제작 방법 및 그 시스템 |
-
1982
- 1982-09-30 JP JP57172113A patent/JPS5960641A/ja active Granted
Non-Patent Citations (1)
| Title |
|---|
| F.E.ALLEN.PROGRAM OPTIMIZATION.ANNUAL REVIEW IN AUTOMATIC PROGRAMMING.PERGAMMON PRESS=1969 * |
Also Published As
| Publication number | Publication date |
|---|---|
| JPS5960641A (ja) | 1984-04-06 |
Similar Documents
| Publication | Publication Date | Title |
|---|---|---|
| US6412109B1 (en) | Method for optimizing java bytecodes in the presence of try-catch blocks | |
| JPH11242597A (ja) | Javaバイトコードデータのフローグラフの生成方法 | |
| US4843545A (en) | Compile method using copy propagation of a variable | |
| JPH0351007B2 (ja) | ||
| US20050198625A1 (en) | Apparatus and methods for performing generational escape analysis in managed runtime environments | |
| EP0821306A2 (en) | High-speed simulation method | |
| KR100309674B1 (ko) | 실시간데이터베이스관리시스템의트랜잭션전처리방법 | |
| EP1033651B1 (en) | Instruction translation method | |
| Wolberg et al. | CONVERT‐A language for program and data file conversions | |
| JP3072772B2 (ja) | コンパイル装置 | |
| JP3470256B2 (ja) | 命令コードのビット割付装置 | |
| JPH081608B2 (ja) | プログラム実行解析ツール | |
| JPS58169637A (ja) | コンパイル処理方式 | |
| JPH01140236A (ja) | プログラムの逆コンパイル方式 | |
| Hammer | An alternative approach to macro processing | |
| CA2132764C (en) | Method and system of generating combined storage references | |
| JP3018783B2 (ja) | コンパイル方式 | |
| JP3424596B2 (ja) | シンボル参照情報のキャッシュ方法ならびに装置 | |
| JPH03235127A (ja) | インライン展開処理方法 | |
| JPH0358232A (ja) | プリプロセッサ呼び出し方式 | |
| JPH07192034A (ja) | インタプリタ型シミュレーション方法 | |
| GB2347526A (en) | Instruction translation method using templates | |
| JP2003131886A (ja) | 例外処理の翻訳方法 | |
| JPH04364537A (ja) | 並列処理用プログラム最適化方法、装置およびコンパイラ | |
| JPH0293947A (ja) | 電子計算機 |