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
Application number
JP57172113A
Other languages
English (en)
Other versions
JPS5960641A (ja
Inventor
Tadashi Kusama
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.)
Fujitsu Ltd
Original Assignee
Fujitsu 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 Fujitsu Ltd filed Critical Fujitsu Ltd
Priority to JP57172113A priority Critical patent/JPS5960641A/ja
Publication of JPS5960641A publication Critical patent/JPS5960641A/ja
Publication of JPH0351007B2 publication Critical patent/JPH0351007B2/ja
Granted legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING OR CALCULATING; COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/44Arrangements for executing specific programs
    • G06F9/448Execution paradigms, e.g. implementations of programming paradigms
    • G06F9/4482Procedural
    • G06F9/4484Executing subprograms
    • G06F9/4486Formation 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は同一タイミングで行われることは
ないので、データ域を共用できるが、従来のコン
パイラにおいては、このようなチエツクを行つて
いない。
〔発明の目的〕
本発明は、上記の考察に基づくものであつて、
手続きの呼出し関係のチエツクを行い、効率的で
エラーのない実行プログラムを作成できるように
したコンパイラにおける手続きの呼出し関係解析
方法を提供することを目的としている。
〔発明の構成〕
そしてそのため、本発明の呼出し関係解析方法
は、 入力プログラムをオブジエクト・プログラムに
変換するコンパイラにおける呼出し関係解析方法
であつて、 入力プログラムに関して、手続き毎に呼出して
いる手続きを表すビツト列形式の呼出ベクトルを
作成すると共に、 手続き毎の呼出レベルが記入される呼出レベ
ル・リストを作成し、呼出レベル・リストにおけ
るメイン・ルーチンの手続き及び外部から直接呼
ばれるサブルーチンに対応するレベルを予め1と
し、 呼出ベクトルおよび呼出レベル・リストを参照
して、レベル1の手続きから呼ばれる手続きを求
め、当該呼ばれる手続きのレベルを2とし、2の
レベル値を呼出レベル・リストの該当する位置に
書き込み、 呼出ベクトルおよび呼出レベル・リストを参照
して、レベルnの手続きから呼ばれる手続きを求
め、当該呼ばれる手続きのレベルをn+1とし、
n+1のレベル値を呼出レベル・リストの該当す
る位置に書き込み、 レベルmの手続きから呼ばれる手続きがなくな
つた場合、または呼出レベル・リストの最大レベ
ル値が全体の手続きの数を越えた場合には、レベ
ル付け処理を終わりとし、 レベル付け処理終了後の呼出レベル・リストの
中に、レベル0の手続きがあつた場合には、当該
手続きを何処からも呼出されない手続きとし、 もし、mが手続きの数を越えた場合には、再帰
的呼出しがあると判断し、呼出し関係を解析する
手続きの集合における一つ一つの手続きについ
て、呼出し関係が自分自身に戻つてくるか否かを
調べることにより、再帰呼出しになつている手続
きを見つける ことを特徴とするものである。
〔発明の実施例〕
以下、本発明を具体的に説明する。本発明の呼
出し関係解析方法は、前処理として下記の処理を
行う。
手続き(メイン・ルーチンとサブルーチン)
毎に、呼出している手続きを表わすビツト・ベ
クトルを作成する。
手続きの呼出しのレベルを表わすリストを作
成する。ただし、メイン・ルーチンと外部から
直接呼ばれるサブ・ルーチンは、予めレベル1
に設定しておく。
上記の前処理を行つた後、下記の処理を行う。
レベル1の手続きから呼ばれる手続きのレベル
を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」である。呼出ベク
トルおよび呼出レベル・リストの初期設定が完了
した後、下記のないしの処理が行われる。
レベル1の処理 呼出レベル・リストの値が「1000」、手続き
Mの呼出ベクトルは「0100」であるので、呼出
レベル・リストは「1200」とされる。
レベル2の処理 呼出レベル・リストの値が「1200」、手続S1
の呼出ベクトルが「0011」であるので、呼出レ
ベル・リストは「1233」とされる。
レベル3の処理 呼出レベル・リストの値が「1233」、手続S2
の呼出ベクトルが「0001」であるので、呼出レ
ベル・リストは「1234」とされる。
レベル4の処理 呼出レベル・リストの値が「1234」、手続S2
の呼出ベクトルが「0000」であるので、呼出レ
ベル・リストは「1234」のまゝである。
上記のプログラムにおいては、手続S1ないし
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; CALL S1; CALL S2; RETURN; S1:PROC; END S1; S2:PROC; END S2 END M; というプログラムがあつたとする。このようなプ
ログラムにおいては、手続きS1とS2は同じ呼出
レベルをもつので、絶対に同じタイミングで使用
されることはない。したがつて、手続きS1とS2
でそれぞれローカルに使用される領域(例えばレ
ジスタのセーブ・エリア)を、同じ場所に割付け
ても問題はない。
コンパイラは、構文解析部、最適化処理部およ
びコード生成部から構成されている。手続きの呼
出関係を解析する機能は、上記の最適化処理部に
設けられる。呼出されることのない手続や再帰的
に呼出される手続きが検出された場合には、メツ
セージが出力される。プログラム作成者は、この
メツセージを見て必要に応じてコーデイングの修
正を行う。
〔発明の効果〕
以上の説明から明らかなように、本発明によれ
ば、プログラムのエラーの検出およびオブジエク
ト・プログラムの最適化に役立つ情報をプログラ
ム作成者に提供することが出来る。
【図面の簡単な説明】
第1図は本発明による手続きの呼出し関係解析
方法を説明する図、第2図は再帰呼出しがある場
合における手続きの呼出し関係解析方法を説明す
る図である。

Claims (1)

  1. 【特許請求の範囲】 1 入力プログラムをオブジエクト・プログラム
    に変換するコンパイラにおける呼出し関係解析方
    法であつて、 入力プログラムに関して、手続き毎に呼出して
    いる手続きを表すビツト列形式の呼出ベクトルを
    作成すると共に、 手続き毎の呼出レベルが記入される呼出レベ
    ル・リストを作成し、呼出レベル・リストにおけ
    るメイン・ルーチンの手続き及び外部から直接呼
    ばれるサブルーチンに対応するレベルを予め1と
    し、 呼出ベクトルおよび呼出レベル・リストを参照
    して、レベル1の手続きから呼ばれる手続きを求
    め、当該呼ばれる手続きのレベルを2とし、2の
    レベル値を呼出レベル・リストの該当する位置に
    書き込み、 呼出ベクトルおよび呼出レベル・リストを参照
    して、レベルnの手続きから呼ばれる手続きを求
    め、当該呼ばれる手続きのレベルをn+1とし、
    n+1のレベル値を呼出レベル・リストの該当す
    る位置に書き込み、 レベルmの手続きから呼ばれる手続きがなくな
    つた場合、または呼出レベル・リストの最大レベ
    ル値が全体の手続きの数を越えた場合には、レベ
    ル付け処理を終わりとし、 レベル付け処理終了後の呼出レベル・リストの
    中に、レベル0の手続きがあつた場合には、当該
    手続きを何処からも呼出されない手続きとし、 もし、mが手続きの数を越えた場合には、再帰
    的呼出しがあると判断し、呼出し関係を解析する
    手続きの集合における一つ一つの手続きについ
    て、呼出し関係が自分自身に戻つてくるか否かを
    調べることにより、再帰呼出しになつている手続
    きを見つける ことを特徴とする呼出し関係解析方法。
JP57172113A 1982-09-30 1982-09-30 呼出し関係解析方法 Granted JPS5960641A (ja)

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)

* Cited by examiner, † Cited by third party
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 스튜디오씨드코리아 주식회사 그래픽 사용자 인터페이스의 프로토타입 제작 방법 및 그 시스템

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
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) 電子計算機