JPH03235127A - インライン展開処理方法 - Google Patents

インライン展開処理方法

Info

Publication number
JPH03235127A
JPH03235127A JP3124090A JP3124090A JPH03235127A JP H03235127 A JPH03235127 A JP H03235127A JP 3124090 A JP3124090 A JP 3124090A JP 3124090 A JP3124090 A JP 3124090A JP H03235127 A JPH03235127 A JP H03235127A
Authority
JP
Japan
Prior art keywords
processing
program
program unit
intermediate data
executed
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
Application number
JP3124090A
Other languages
English (en)
Inventor
Tomomasa Arase
荒瀬 倫昌
Shiyouji Ookubo
大久保 沼二
Yasuhiko Kinoshita
康彦 木下
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 JP3124090A priority Critical patent/JPH03235127A/ja
Publication of JPH03235127A publication Critical patent/JPH03235127A/ja
Pending legal-status Critical Current

Links

Landscapes

  • Devices For Executing Special Programs (AREA)

Abstract

(57)【要約】本公報は電子出願前の出願データであるた
め要約のデータは記録されません。

Description

【発明の詳細な説明】 〔概 要〕 ソース・プログラムをオブジェクトに展開するコンパイ
ルに際してのインライン展開処理方法に関し ソース・プログラムの形でインライン展開する場合に必
要以外の個所についても、構文解析などが行われること
となり処理量が大となるおそれがあるなどを解決するこ
とを目的とし。
構文解析図による処理と、意味解析区による処理とを少
なくとも行った結果の中間データを翻訳作業ファイルに
格納しておき、当該翻訳作業ファイルの内容を利用して
、上記インライン展開を行うようにして、中間データの
形でのインライン展開を可能にするよう構成する。
〔産業上の利用分野〕
本発明は、ソース・プログラムをオブジェクトに展開す
るコンパイルに際してのインライン展開処理方法に関す
る。
実際の処理に当ってオブジェクトを実行する際にサブ・
プログラムを呼んで実行する如き処理が行われるが、こ
のような、処理速度向上の面からは、いわば必ずしも好
ましくない処理形態となることを排除すべく、オブジェ
クト展開する際に上記サブ・プログラムを取り込んで展
開しておくインライン展開が行われることがある。
〔従来の技術〕
従来の場合、上記インライン展開を行うに当っては、ソ
ース・レベルでの取り込みを行っている。
即ち1例えば、プログラム単位■、■、■、■が存在し
、かつプログラム単位■がプログラム単位■と■とを呼
んでいる如き状況を考えるとき、ソース・レベルでプロ
グラム単位■内にプログラム単位■と■とを取り込んだ
上で、第5図図示の如き処理を行う。
第5図は従来の例を示している。図中の符号1はソース
・プログラム、1−1はプログラム単位。
(i)FEIは構文解析図による処理。
(ii)FE2は、意味解析区による処理。
(ii)FE3は低レベル中間言語(L INDA)へ
の変換を行う処理。
(iv) MP 1. MP 2は最適化を行う処理。
(v)BEは領域・レジスタ割り付けやコード生成を行
う処理。
を表している。
従来の場合には、ソース・プログラム1におけるプログ
ラム単位■内に、プログラム単位■と■とを取り込んだ
ものを単位■とし、以下夫々プログラム単位■、プログ
ラム単位■、プログラム単位■とし、第5図図示矢印に
示す如く、各単位■。
■、■、■について、上記処理FE1.FE2゜FE3
.MPI、MP2.BEを順に実行してゆくようにして
いる。
〔発明が解決しようとする課題〕
上記従来の場合においては1本発明の場合の如く中間デ
ータの形でインライン展開していたならば行う必要のな
かった範囲についても構文解析や意味解析を行うような
ことが生じ易い。またプログラム単位にまたがる最適化
が中間データ・レベルで実現し難い。更にまた。ソース
・レベルでインライン処理を行う際には、上記従来の場
合の例で、上記の如くプログラム単位のがプログラム単
位■と■とを呼び、更にプログラム単位■がプログラム
単位■を呼んでいた如き場合には、プログラム単位■内
にプログラム単位■を取り込むことが難しい。
本発明は、ソース・プログラムの形でインライン展開す
る場合に必要以外の個所についても2構文解析などが行
われることとなり処理量が大となるおそれがあるなどを
解決すると共に、その際の作業簿を正しく引き継いで上
記解決処理を円滑に行わせ得るようにすることを目的と
している。
〔課題を解決するための手段〕
第1図は本発明の原理構成図を示す。図中の符号lはソ
ース・プログラム、1−iはプログラム単位、2は翻訳
作業ファイル、2−1はプログラム単位の中間データを
表している。また(i)FEIは構文解析区による処理
(ii)FE2は意味解析区による処理。
(iii) FE3は低レベル中間言語(LINDA)
への変換を行う処理 (iv) MP 1. MP 2は最適化を行う処理。
(v)BEは領域・レジスタ割り付けやコード生成を行
う処理。
を表している。
なお、第1図図示の処理においては、各プログラム単位
■、■、■、■相互間において2次の如き関゛係で呼び
出しが行われるものとしている。即ち。
(i)プログラム単位■が、プログラム単位■とプログ
ラム単位■とを呼び。
(11)プログラム単位■が、プログラム単位■とプロ
グラム単位■とを呼び。
(in)プログラム単位■が、プログラム単位■を呼ふ 如き関係にあるものとしている。
処理は第1図図示矢印の順に行われてゆく。
(作 用〕 最初の段階において、ソース・プログラム1のすべての
プログラム単位■、■、■、■に対して構文解析処理(
FEI)と意味解析処理(FE2)とが行われる。この
段階を第1の段階と呼ぶことにする。
そして、解析した結果の各中間データは、翻訳作業ファ
イル2に書き出される。この処理を格納処理と呼んでい
る。
翻訳作業ファイル2上に中間データ2−iが格納され終
わった後に、解析したプログラム単位の順(■、■、■
、■の順)に翻訳作業ファイルから2図示しない主記憶
内に読み込まれ、意味解析区(図示の場合には2度目で
あることがらFE2’としている)が再び呼び出される
意味解析区F E 2’では、そのプログラム単位から
直接的に及び間接的に呼び出されている他のプログラム
単位があるか否かを調べ、ある場合にはそれらも翻訳作
業ファイル2から主記憶内に読み込む、そして、インラ
イン展開に当っての条件を満足しているか否かを調べる
。満足している場合には、呼び出し元プログラム単位と
呼び出し先プログラム単位とを関係づける。上記の例で
言えば。
プログラム単位■はプログラム単位■と■とを呼んでい
ることから9図示の処理(FE2’)、  (FE3)
、(MPI)についてプログラム単位■が実行されてい
る間に1図示点線で囲う如くプログラム単位■、■の中
間データが参照される。
図示処理(FE3)は、LINDA変換区による処理と
呼んでもよく、呼び出し元のプログラム単位と呼び出し
先のプログラム単位との両者を入力し、LINDAに変
換する。
図示処理(MPI)は、インライン展開処理区と呼んで
もよく、呼び出し元と呼び出し先とのプログラム単位の
間でインライン展開の条件を満足しているか否かを調べ
る。満足していれば、呼び出し先のプログラム単位のL
rNDAを呼び出し元のプログラム単位のLINDAの
上に取り込む。
図示処理(MP2)は、汎用最適化区と呼んでもよく、
インライン展開が行われていることを全(意識せずに最
適化を行う。
図示処理(BE)は、領域・レジスタ割り付けやコード
生成などを行う。
図示処理(FE2’)以陳の処理を第2の段階と呼んで
いる。
〔実施例〕
第2図は本発明の一実施例処理フローを示す。
図中の記号■、■、・・・は処理ステップを表しており
1図示処理ステップ■は上記構文解析区による処理(F
E1)に対応し、処理ステップ■は上記意味解析区によ
る処理(FE2)に対応し、処理ステップ■、■は上記
意味解析区による処理(FE 2’・・・この場合には
2度目であることから、FE2と区別してF E 2’
としている)に対応し、処理ステップ■9は上記L■N
DA変換区による処理に対応し、処理ステンプ■は上記
インライン展開処理区(MPI)と上記汎用最適化区(
MP2)と対応し、処理ステップ[相]と■とは上記領
域・レジスタ割り付けなどの処理(BE)に対応してい
る。
第3図はLINDA変換区による処理(F2a)が終了
した時の解析結果の一例を示す。図中の符号3−iは各
プログラム単位に対応するプログラム単位溝であって夫
々対応するプログラム単位の中間データをポイントする
ものである。また4−1は処理単位溝、5−1は言票列
、6.7.8は夫々外部参照簿である。各プログラム単
位は外部参照簿を介して関連付けられる。
第3図は第1図図示のプログラム単位■に関して処理(
F2a)が終了した時点の解析結果の概要を表している
。上記の設定例の場合には、プログラム単位■がプログ
ラム単位■と■とを呼んでいることから1図示の如く、
外部参照’;86を介してプログラム単位■が関連付け
られている。また外部参照m7を介してプログラム単位
■が関連付けられている。またプログラム単位■はプロ
グラム単位■と関連をもっており、外部参照m8が存在
している。
第4図はインライン展開処理区による処理(MPi)の
−例を示す。図示の符号2は翻訳作業ファイル、3−1
はプログラム単位簿を表している。
図示の場合には、プログラム単位の1つであるMAIN
(メイン・プログラム)に他のプログラム単位であるS
UB (サブ・プログラム)とFUN(ファンクション
)とインライン展開を行うものとして例示している。
MAIHにおいてCALL  SUB”が見出されたと
き、外部参照簿を介してプログラム単位*3iと関連づ
けられ、翻訳作業ファイル2上のSUBやFUNに対応
する中間データが取り出されてインライン展開される。
インライン展開を行うに当っての制約条件を検査するに
当っては、−例として次の如き検査を行い、該当する場
合にはインライン展開を行わない。
■ 呼び出し先の副プログラムに関するエラー検査 一実行文の数が多い ENTRY文がある EQU T VALENCE文カアル −ASSIGN文がある。
−割り当て形GOTO文がある 一人出力文がある 一3AVE文がある 一スカラ整数式のあるRETURN文がある■ 呼び出
し元と呼び出し先との関係に関するエラー検査 一オプション指定が異なる 一実引数と仮引数の個数が異なる 実引数と仮引数の型が異なる 一使用者関数において1手続きの型が異なる呼び出し方
法が誤っている ■ 呼び出し元に関するエラー検査 入力ソース・ファイル内に、同じ名前のプログラム単位
がある なお上記説明においては、主として第1図を参照する形
で、翻訳作業ファイル2を利用する場合の処理について
説明した。しかし、インライン展開を行うに当っては、
インライン展開の最適化を行うか否かによって制御態様
を異ならしめている。即ち、インライン展開の最適化を
行う場合には、上記第1図ないし第4図を参照して説明
した処理方法を採用するが、インライン展開の最適化を
行わない場合には、第5図を参照して従来の例として示
した処理方法が採用される。したがって1言うまでもな
く、第5図図示の処理方法をも行い得ることをもって1
本発明の範囲外となるものではない。
(発明の効果〕 以上説明した如く2本発明によれば、中間データの形で
のインライン展開が可能であり、最適化処理などの処理
を効率よく行うことが可能となる。
【図面の簡単な説明】
第1図は本発明の原理構成図、第2図は本発明の一実施
例処理フロー、第3図はLINDA変換区による処理(
FE3)が終了した時の解析結果の一例、第4図はイン
ライン展開処理区による処理(MPI)の−例、第5図
は従来例を示す。 図中、1はソース・プログラム、1−1はプログラム単
位、2は翻訳作業ファイル、2−1はプログラム単位の
中間データ、3−1はプログラム単位連、6.7.8は
夫々外部参照溝を表す。

Claims (1)

  1. 【特許請求の範囲】 複数のプログラム単位(1−i)からなるソース・プロ
    グラム(1)を読み込み、上記各プログラム単位(1−
    i)の個々について、少なくとも、構文解析区による処
    理(FE1)と、 意味解析区による処理(FE2)と、 低レベル中間言語への変換を行う処理(FE3)と、 最適化を行う処理(MP)と、 領域・レジスタ割り付けを含む処理(BE)と、を実行
    するコンパイラにおいて、 上記プログラム単位(1−i)の1つが処理を実行する
    に当って他のプログラム単位(1−j)を呼んだ上で当
    該処理を実行する処理態様をもつ場合に、当該プログラ
    ム単位(1−i)をオブジェクトに展開するに当って上
    記他のプログラム単位(1−j)を上記オブジェクト上
    で取り込んで展開するようにしたインライン展開に際し
    て、 当該インライン展開が行われる可能性のある複数のプロ
    グラム単位(1−i)の夫々について、上記最適化を行
    う処理(MP)を実行するに先立って、上記構文解析区
    による処理(FE1)と上記意味解析区による処理(F
    E2)とを実行する第1の段階と、 当該第1の段階によって生成されている所の、上記可能
    性のある複数のプログラム単位の夫々に対応する中間デ
    ータ(2−i)について、当該中間データを翻訳作業フ
    ァイル(2)に格納する格納処理と、 当該格納処理によって格納された上記中間データ(2−
    i)を、上記翻訳作業ファイル(2)から読み出した上
    で、当該読み出された中間データについて上記最適化を
    行う処理(MP)を実行し、次いで上記領域・レジスタ
    割り付けを含む処理(BE)を実行する第2の段階をそ
    なえ、 上記第1の段階と上記格納処理と上記第2の段階とを順
    に実行するようにした ことを特徴とするインライン展開処理方法。
JP3124090A 1990-02-09 1990-02-09 インライン展開処理方法 Pending JPH03235127A (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP3124090A JPH03235127A (ja) 1990-02-09 1990-02-09 インライン展開処理方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP3124090A JPH03235127A (ja) 1990-02-09 1990-02-09 インライン展開処理方法

Publications (1)

Publication Number Publication Date
JPH03235127A true JPH03235127A (ja) 1991-10-21

Family

ID=12325865

Family Applications (1)

Application Number Title Priority Date Filing Date
JP3124090A Pending JPH03235127A (ja) 1990-02-09 1990-02-09 インライン展開処理方法

Country Status (1)

Country Link
JP (1) JPH03235127A (ja)

Similar Documents

Publication Publication Date Title
US5586328A (en) Module dependency based incremental compiler and method
EP0905617B1 (en) Method for generating a java bytecode data flow graph
JP4833206B2 (ja) 最適化されたプログラムのためのアンワインド情報の生成
US6292940B1 (en) Program complete system and its compile method for efficiently compiling a source program including an indirect call for a procedure
US7823139B2 (en) Method and system for translating programming languages
JPH01306923A (ja) 異種言語間連絡方式
JPH11110194A (ja) 外部ライブラリ関数との結合方法ならびに同方法がプログラムされ記録される記録媒体
JP3199013B2 (ja) 言語処理方法及び言語処理装置並びに言語処理プログラムを記録した記憶媒体
JP7391983B2 (ja) プログラム論理の表現を生成する方法、逆コンパイル装置、再コンパイルシステムおよびコンピュータプログラム製品
KR0125605B1 (ko) 프로그램의 아키덱쳐 변환방법 및 장치와 그 방법 및 장치를 사용하여 프로그램의 동작을 검증하는 방법 및 장치
US7207036B2 (en) Preprocessing of interfaces to allow fast call through
Inostroza et al. Modular interpreters for the masses: Implicit context propagation using object algebras
JPH03235127A (ja) インライン展開処理方法
US7266814B2 (en) Namespace based function invocation
JP3266097B2 (ja) 非リエントラントプログラムの自動リエントラント化方法及びシステム
JPH09218789A (ja) 分割コンパイル方式
JPH03235128A (ja) 作業簿を引継ぐインライン展開処理方法
EP1033651B1 (en) Instruction translation method
JP3018783B2 (ja) コンパイル方式
JP3424596B2 (ja) シンボル参照情報のキャッシュ方法ならびに装置
Gerking et al. Reducing the Verbosity of Imperative Model Refinements by Using General-Purpose Language Facilities
JPS58169637A (ja) コンパイル処理方式
Simpson Design and verification of IFL: a wide-spectrum intermediate functional language.
JP2807162B2 (ja) プログラム翻訳装置
JPH07192034A (ja) インタプリタ型シミュレーション方法