JPH0561687A - コンパイラの処理方式 - Google Patents

コンパイラの処理方式

Info

Publication number
JPH0561687A
JPH0561687A JP22555691A JP22555691A JPH0561687A JP H0561687 A JPH0561687 A JP H0561687A JP 22555691 A JP22555691 A JP 22555691A JP 22555691 A JP22555691 A JP 22555691A JP H0561687 A JPH0561687 A JP H0561687A
Authority
JP
Japan
Prior art keywords
function
intermediate information
file
compiler
input
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
JP22555691A
Other languages
English (en)
Inventor
Hirohiko Ono
洋彦 小野
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.)
NEC Corp
Original Assignee
NEC Corp
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 NEC Corp filed Critical NEC Corp
Priority to JP22555691A priority Critical patent/JPH0561687A/ja
Publication of JPH0561687A publication Critical patent/JPH0561687A/ja
Pending legal-status Critical Current

Links

Abstract

(57)【要約】 【目的】コンパイラにういてライブラリ等の外部関数
を、入力ソースファイルとともにコンパイラの最適化の
対象として、コンパイラの最適化の性能を向上させる。 【構成】従来のコンパイラシステムに比べ、コンパイラ
で直接ソースライブラリファイルから入力ソースファイ
ルで参照されている関数のプログラムを抽出し、入力ソ
ースファイルと結合して、最適化処理を行ない、機械語
命令列に変換する。

Description

【発明の詳細な説明】
【0001】
【産業上の利用分野】本発明は、最適化を伴う言語処理
プログラムの言語処理方式に関する。
【0002】
【従来の技術】マイクロコンピュータ用のプログラムの
開発は、開発者がソースプログラムを作成し、言語処理
プログラム(コンパイラ等)にソースプログラムを入力
し、マイクロコンピュータ用の機械語命令列に翻訳し、
マイクロコンピュータ上のメモリに置き、実行させる。
【0003】高級言語で記述されたソースプログラム
は、コンパイラにより翻訳され、目的機械語列に変換さ
れる。開発者は、目的の機械語列の実行性能の向上のた
め、コンパイラの最適化機能を使用し、目的の機械語列
の短縮を図るのが通常である。
【0004】最適化は、機械語命令列の短縮と実行性能
の向上のための最適化が存在する。機械語命令列の短縮
は、共通部分式の削除、ジャンプ最適化等があり、実行
性能の向上は、ループ最適化、レジスタ割付け最適化が
ある。
【0005】前記の最適化の適用する対象は、入力され
たソースプログラムのみを対象としている。
【0006】開発者の記述するソースプログラム中には
ライブラ関数と呼ばれる標準仕様の手続き関数が記述さ
れている。例えば、メモリの内容のコピー等である。ラ
イブラリ関数は、コンパイラされた機械語列の集合のラ
イブラリファイルとして提供されている。
【0007】図2を用いて、従来のコンパイラ処理方式
を説明する。
【0008】開発者はソースプログラム(210)をコ
ンパイルし、機械語命令列の中間ファイル(203)を
作成し、ソースプログラム中で、ライブラリ関数を使用
していれば、リンクエディタ(204)でライブラリフ
ァイル(205)から必要なライブラリ関数をとりだ
し、機械語命令列の中間ファイル(203)と結合を行
ない、最終の機械語命令列ファイル(206)を作成す
る。
【0009】最適化は、ライブラリ関数の記述(呼びだ
し)がある場合は、通常の関数としてライブラリ関数を
処理し、ライブラリ関数に対して最適化処理は行なわな
い。
【0010】コンパイラの最適化性能は、最適化の適用
範囲が広がるほど、性能向上することが可能である。最
適化の処理範囲とは、最適化の対象とするソースプログ
ラム中で、一度に最適化処理を行なう範囲のことであ
る。たとえば、1行内または、基本ブロックと呼ばれる
複数行内または、関数内、関数を越えた範囲等である。
【0011】前記のレジスタ割付けの最適化を例に示す
と、ソースプログラムの1行内の変数に対して、マイク
ロコンピュータのレジスタのを割り付けるより、さらに
複数行にまたがり変数に対してレジスタを割り付ける方
が、機械語命令列が少なくてすみ、最適化性能が良い。
【0012】さらに、関数から関数が呼ばれている場合
には、呼び側の関数から呼びだし関数を連続した関数と
見なし、関数引数に対して呼び側、呼び出し側の関数間
で同一のレジスタを割り付けることにより関数呼びだし
時の関数引数の退避、復帰の機械語命令列をはぶけるこ
とにより、レジスタ割付け最適化の性能が向上する。
【0013】また近年、コンパイラに要求される最適化
の処理性能は、高性能なものが要求されている。
【0014】
【発明が解決しようとする課題】従来のコンパイラ処理
方式においては、ソースプログラム中にライブラリ関数
が記述されると、最適化処理はライブラリ関数をスキッ
プして、最適化処理を行なっていた。
【0015】最適化技術としては、複数関数間で関数を
結合したような最適化処理を行なうことは可能である
が、すでにコンパイラされ機械語命令列の中間ファイル
に変換されたライブラリ関数に対しては、最適化を行な
えず、より良い最適化性能を行なうことが出来ない問題
点が存在した。
【0016】
【課題を解決するための手段】本発明では、入力ソース
プログラムを解析し、中間情報に変換する手段、解析し
たソースプログラムの中間情報を最適化する手段、最適
化した中間情報を機械語命令列に変換する手段を有する
コンパイラの処理方式において、関数手続きのソースプ
ログラムの集まりから、入力ソースファイルで参照され
る関数を選択する手段、選択した関数の解析後の中間情
報と入力ソースプログラムの中間情報とを結合する手段
を有する。
【0017】さらに、本発明では、入力ソースプログラ
ムを解析し、中間情報に変換する手段、解析したソース
プログラムの中間情報を最適化する手段、最適化した中
間情報を機械語命令に変換する手段を有するコンパイラ
の処理方式において、あらかじめ、コンパイラにより中
間情報に変換された関数手続き関数手続きの集まりか
ら、入力ソースファイルで参照される関数の中間情報を
選択する手段、選択した関数の中間情報と入力ソースプ
ログラムをコンパイラが変換した中間情報とを結合する
手段を有する。
【0018】
【実施例】以下、図面により本発明を詳述する。
【0019】図1により全体の流れを説明する。
【0020】コンパイラ(102)は入力ソースファイ
ル(101)を入力し、解析手段(106)でソースフ
ァイルを解析し、中間情報(108)に変換する。
【0021】手続き入力手段(105)が、入力ファイ
ル用シンボルテーブル(107)を参照し、入力ソース
ファイル中で参照される外部関数をソースライブラリフ
ァイル(103)から該当の関数部分のソースプログラ
ムを抽出する。
【0022】抽出した当該関数のプログラムを解析手段
(106)で当該関数用中間情報(109)とシンボル
テーブル(110)に変換する。
【0023】結合手段(107)は、当該関数用中間情
報(109)を、すでに変換済みの入力ソースファイル
の中間情報(108)の最後に結合する。さらに、当該
関数用シンボルテーブル(110)を、すでに変換済み
の入力ソースファイルのシンボルテーブル(107)と
結合する。
【0024】最適化手段(108)は、結合された中間
情報に対して最適化処理を行なう。
【0025】変換手段(109)は、最適化された中間
情報を最終的な機械語命令列に変換し、機械語命令ファ
イル(104)に出力する。
【0026】図3の処理フローチャートにより、本方式
のコンパイル処理の説明を行なう。
【0027】解析手段(301)では、入力ソースファ
イルを解析し(302)、入力ソースファイルに対応す
る中間情報を出力する(303)。
【0028】中間情報とは、開発者が記述した高級言語
レベルのソースプログラムをコンパイラが処理、解釈し
やすいように変換した情報である。一般には中間コード
と呼ばれ、機械語レベルにまでは変換せず、高級言語プ
ログラムを機能レベルのコードに変換する。
【0029】シンボルテーブルは、解析したソースプロ
グラム内で参照、定義した関数名/変数名/ラベルを登
録したテーブルである。定義されているシンボルは、定
義済みのフラグと定義されている関数名等の情報が記録
されており、参照のみで未定義のシンボルが設定され、
参照されている関数名等の情報が記録される。またシン
ボル情報としては、関数、変数、ラベル等のシンボル属
性も記録されている。
【0030】手続き入力手段(305)は、入力ファイ
ルのシンボルテーブルから1シンボル情報を読み込む
(306)。
【0031】シンボルテーブル情報がなくなるまで、シ
ンボルの読み込みを行なう。(307)。
【0032】読み込んだシンボル情報のシンボル定義が
未定義であり、かつ関数の属性が記録されているかを判
断する(308)。
【0033】上記の場合、関数は外部関数であり、入力
ソースファイル内で定義されていない関数である。
【0034】ライブラリソースファイル内を検索し、当
該の関数名と一致する関数のソースプログラムをライブ
ラリソースファイル内から抽出し、コンパイラの作業領
域に保持する(309,310)。作業領域とは、コン
パイラの動作する計算機のメモリまたはファイルを意味
する。
【0035】当該の関数名と一致する関数プログラムが
ライブラリソースファイル内に存在しない場合は、なに
もしない。
【0036】入力ソースファイル内の記述された外部関
数でライブラリソースファイルに存在する関数を抽出し
関数のプログラム群を、ふたたび解析処理を行なう(3
12)。当該の関数の中間情報を出力し(313)、ま
たその関数のシンボルテーブルを出力する(314)。
【0037】入力ソースファイルの中間情報とライブラ
リ内に存在する外部関数の中間情報を結合する(31
7)。結合は、入力ソースファイルの中間情報の最後に
外部関数の中間情報を結合する。
【0038】さらにライブラリ内に存在する外部関数の
シンボルテーブルを参照して、入力ソースファイルのシ
ンボルテーブルとを更新する(317)。
【0039】更新は、外部関数のシンボルテーブルで定
義されていて、入力ソースファイルのシンボルテーブル
内で同名で未定義なシンボルは入力ソースファイルのシ
ンボルテーブルのシンボル情報を定義にして、シンボル
情報を更新する。
【0040】外部関数のシンボルテーブルで未定義なシ
ンボルがあり、入力ソースファイルのシンボルテーブル
内で同名で定義なシンボルがある場合はなにもしない。
【0041】入力ソースファイルのシンボルテーブル内
で同名で未定義なシンボルがある場合もなにもしない。
【0042】上記の結合処理、更新処理を行なった中間
情報、シンボルテーブルに対して、最適化処理を行なう
(319)。
【0043】最後に最適化処理を行なった中間情報を機
械語命令列に変換する(320)。
【0044】請求範囲の(2)に示す場合は、図1に示
すソースライブラリファイルのかわりに、関数をあらか
じめ解析処理を行ない中間情報に変換した関数の中間情
報とシンボルテーブルの集まりのファイルを使用する。
【0045】次に入力手続きで当該の関数を入力したあ
と解析処理を行なわず、抽出した当該関数の中間情報と
シンボルテーブルを結合手段により、中間情報の結合、
シンボルテーブルの更新を行ない、最適化処理をし、最
終の機械語命令列に変換する。
【0046】次に第2実施例について説明する。
【0047】実施例では、図5のフローチャートに基づ
き、本方式のコンパイラ処理の説明を行なう。図4の、
解析手段、結合手段、最適化手段、変換手段について
は、実施例1と同様の処理を行なう。
【0048】手続き入力手段の処理手順が実施例1と異
なる。
【0049】コンパイラのシステム構成図は、図4であ
る。システム構成も実施例1と同様であるが手続き入力
手段(405)内に関数名リスト(414)を追加す
る。
【0050】関数リストは、手続き入力手段においてソ
ースライブラリファイル内の関数を入力するために使用
する複数の関数名を保持する記録領域である。
【0051】実施例2では、手続き手段について説明を
行なう。他の処理内容の解析手段(301,311)、
結合手段(316)、最適化手段(319)、変換手段
(320)は実施例1と同一であり、また処理手順も実
施例1と同一である。
【0052】実施例2では、手続き手段(510)の構
成が実施例1と異なる。
【0053】実施例1と同様に、解析手段において入力
ソースファイルを中間情報とシンボルテーブルに変換す
る。
【0054】シンボルテーブルからシンボル情報を入力
し(502)、シンボル情報の終了するまで処理シンボ
ル情報を入力する(503)。
【0055】入力したシンボル情報が、外部関数である
場合、シンボルが未定義であり、シンボルの属性が関数
であるシンボルの場合は、関数名リストにその該当の関
数名を登録する(505)。
【0056】すべてのシンボル情報を検索した後、関数
名リストに登録した関数名を読み出す(506)。
【0057】関数名リストの内容が終了するまで、読み
だしと以下の処理を繰り帰す(507)。
【0058】読みだした関数名がソースライブラリファ
イルに存在するかを判定する(508)。
【0059】関数名の関数がソースライブラリファイル
内に存在する場合は、当該の関数のソースファイルをソ
ースライブラリファイルから抽出し、コンパイラの作業
領域に保持する(509)。作業領域とは、コンパイラ
の動作する計算機のメモリまたはファイルを意味する。
【0060】関数名の関数がソースライブラリファイル
内に存在しない場合は、なにもせず、関数名リストから
の読みだしを行なう処理にもどる。
【0061】以下の処理は、実施例1と同様に、抽出し
た当該関数を解析手段により中間情報とシンボルテーブ
ルに変換する。変換した中間情報とシンボルテーブルを
入力ソースファイルの中間情報と結合し、またシンボル
テーブルを更新する。つぎに最適化手段により最適化を
行ない、最後に変換手段により機械語命令列に変換す
る。
【0062】実施例2では、関数名リストを用いること
により、実施例1と同様の処理を行なう。
【0063】請求範囲の(2)に示す場合は、図4に示
すソースライブラリファイルのかわりに、関数をあらか
じめ解析処理を行ない中間情報に変換した関数の中間情
報とシンボルテーブルの集まりのファイルを使用する。
【0064】次に手続き入力で当該の関数を入力したあ
と解析処理を行なわず、抽出した当該関数の中間情報と
シンボルテーブルを結合手段により、中間情報の結合、
シンボルテーブルの更新を行ない、最適化処理をし、最
終の機械語命令列に変換する。
【0065】
【発明の効果】最適化処理を行なうコンパイラは、開発
者の記述するソースプログラムにおいて、最適化の処理
範囲は、記述されたソースプログラム内のみであったの
に比べて、ライブラリ等の外部関数も同時に最適化の対
象とすることができ、最適化の処理性能が向上する。
【0066】また、あらかじめ解析し中間情報に変換し
たプログラム情報を使用することにより、抽出した当該
関数の解析処理を行なわないので、コンパイル処理速度
の向上が行なえる。
【図面の簡単な説明】
【図1】本発明のコンパイラ処理方式のシステム構成図
である。
【図2】従来のコンパイラ処理方式のシステム構成図で
ある。
【図3】本発明のコンパイラ処理方式の処理のフローチ
ャートである。
【図4】本発明のコンパイラ処理方式の実施例2のシス
テム構成図である。
【図5】本発明のコンパイラ処理方式の実施例2の処理
フローチャートである。

Claims (2)

    【特許請求の範囲】
  1. 【請求項1】 入力ソースプログラムを解析し、中間情
    報に変換する手段、解析したソースプログラムの中間情
    報を最適化する手段、最適化した中間情報を機械語命令
    に変換する手段を有するコンパイラの処理方式におい
    て、関数手続きのソースプログラムの集まりから、入力
    ソースファイルで参照される関数を選択する手段、選択
    した関数の解析後の中間情報と入力ソースプログラムの
    中間情報とを結合する手段を有することを特徴とするコ
    ンパイラの処理方式。
  2. 【請求項2】 入力ソースプログラムを解析し、中間情
    報に変換する手段、解析したソースプログラムの中間情
    報を最適化する手段、最適化した中間情報を機械語命令
    に変換する手段を有するコンパイラの処理方式におい
    て、あらかじめ、コンパイラにより中間情報に変換され
    た関数手続き関数手続きの集まりから、入力ソースファ
    イルで参照される関数の中間情報を選択する手段、選択
    した関数の中間情報と入力ソースプログラムをコンパイ
    ラが変換した中間情報とを結合する手段を有することを
    特徴とするコンパイラの処理方式。
JP22555691A 1991-09-05 1991-09-05 コンパイラの処理方式 Pending JPH0561687A (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP22555691A JPH0561687A (ja) 1991-09-05 1991-09-05 コンパイラの処理方式

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP22555691A JPH0561687A (ja) 1991-09-05 1991-09-05 コンパイラの処理方式

Publications (1)

Publication Number Publication Date
JPH0561687A true JPH0561687A (ja) 1993-03-12

Family

ID=16831147

Family Applications (1)

Application Number Title Priority Date Filing Date
JP22555691A Pending JPH0561687A (ja) 1991-09-05 1991-09-05 コンパイラの処理方式

Country Status (1)

Country Link
JP (1) JPH0561687A (ja)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2001134337A (ja) * 1999-08-05 2001-05-18 Canon Inc 暗号解読コンパイラ

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
ACM SIGPLAN NOTICE=1991 *

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2001134337A (ja) * 1999-08-05 2001-05-18 Canon Inc 暗号解読コンパイラ

Similar Documents

Publication Publication Date Title
US7784039B2 (en) Compiler, compilation method, and compilation program
JP3190773B2 (ja) 言語処理プログラムのコンパイル処理方法
JPH08202545A (ja) ターゲット言語コードを生成するためのオブジェクト指向システム及びその方法
JP2007141173A (ja) コンパイルシステム、デバッグシステムおよびプログラム開発システム
JPS63201834A (ja) オブジエクト・モジユール生成方法
JP3318051B2 (ja) 翻訳処理方法
US20050144605A1 (en) Information processing system and code generation method
JP3266097B2 (ja) 非リエントラントプログラムの自動リエントラント化方法及びシステム
JPH0561687A (ja) コンパイラの処理方式
GB2420638A (en) Method of substituting code fragments in Internal Representation
CN116560667B (zh) 一种基于预编译延迟执行的拆分调度系统及方法
JP3323147B2 (ja) コンパイル装置、コンパイル方法およびコンパイラプログラムを記録した記録媒体
JPH11154093A (ja) プログラムコンパイラ及びコンパイラ用プログラムを記録した記録媒体
JPH07121379A (ja) 複数言語混在コンパイラ
CN117270863A (zh) 一种基于增量编译的Verilog语法分析方法
JPH05120025A (ja) ソースプログラムのインライン展開方法
JP3018783B2 (ja) コンパイル方式
JP2000242504A (ja) コンパイラ装置
JPH11195011A (ja) 言語翻訳処理装置、言語翻訳処理方法、言語翻訳処理プログラムを記録した記録媒体
JP3367438B2 (ja) 条件実行処理装置
JPH11161500A (ja) 実行時依存解析を行う目的プログラムの生成方法
JP2001005655A (ja) アプリケーションジェネレータ開発支援装置及びアプリケーションジェネレータ開発支援方法
JPH07105014A (ja) 言語処理システムのシンボル処理方式
JP2004246924A (ja) アプリケーションジェネレータ開発支援装置及びアプリケーションジェネレータ開発支援方法
JP2001034482A (ja) コンパイル装置、プログラム最適化装置、コンパイル処理方法及び記録媒体

Legal Events

Date Code Title Description
A02 Decision of refusal

Free format text: JAPANESE INTERMEDIATE CODE: A02

Effective date: 19990406