JPH01274241A - 命令列生成方式 - Google Patents

命令列生成方式

Info

Publication number
JPH01274241A
JPH01274241A JP63104974A JP10497488A JPH01274241A JP H01274241 A JPH01274241 A JP H01274241A JP 63104974 A JP63104974 A JP 63104974A JP 10497488 A JP10497488 A JP 10497488A JP H01274241 A JPH01274241 A JP H01274241A
Authority
JP
Japan
Prior art keywords
function
text
argument
instruction string
generation means
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
JP63104974A
Other languages
English (en)
Inventor
Kiyomi Taniguchi
谷口 紀代美
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 JP63104974A priority Critical patent/JPH01274241A/ja
Publication of JPH01274241A publication Critical patent/JPH01274241A/ja
Pending legal-status Critical Current

Links

Abstract

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

Description

【発明の詳細な説明】 〔産業上の利用分野〕 本発明はコンパイラにおいて他・の手続きを呼び出す命
令列の生成方式に関し、特に関数をアーギュメントとす
る場合の命令列生成方式に関する。
〔従来の技術〕
一般に、手続き間の呼出しによるオーバヘッドは、アー
ギュメントの受は渡し、レジスタの退避/復元等の時間
により相対的に大きくなるという(頃向がある。
このような状況において、従来の命令列生成方式では、
組込み関数のようにコンパイラと一体となって提供され
る関数との間には特殊な呼出し手順を設定し、前述のオ
ーバヘッドができるだけ少な(なるような呼出し命令列
を生成していた。
しかし、アーギュメントとして渡されてきた関数につい
ては、組込み関数であるかユーザ定義の関数であるかの
判定ができないために、コンパイラは常にユーザ定義の
関数であるとみなして一般的な呼出し手順で呼出し命令
列を生成していた。
〔発明が解決しようとする課題〕
上述した従来の命令列生成方式では、アーギュメントと
して渡されてきた関数についてコンパイラはユーザ定義
の関数として一般的な呼出し手順での呼出し命令列を生
成するので、組込み関数であると認識して特殊な呼出し
手順で呼び出す呼出し命令列より効率の悪い呼出し命令
列が生成され、実行時性能が低下するという欠点がある
また、組込み関数自身の入口も、特殊な呼出し手順で呼
ばれた場合と、−i的な呼出し手順で呼ばれた場合との
2つを用意しなければならないという欠点がある。
本発明の目的は、上述の点に鑑み、アーギュメントとし
て渡されてきた関数が組込み関数である場合の関数呼出
しの実行時性能を向上させることができるとともに、組
込み関数が1つの入口をもつだけでよくなるようにした
命令列生成方式を提供することにある。
〔課題を解決するための手段〕
本発明の命令列生成方式は、高級言語で記述されたソー
スプログラムを翻訳してオブジェクトプログラムを生成
するコンパイラをもつ計算機システムにおいて、ソース
プログラムを構文解析して中間テキストを生成するテキ
スト生成手段と、このテキスト生成手段により生成され
た中間テキストから関数をアーギュメントとして他の手
続きを呼び出す中間テキストを検出する手続き呼出しテ
キスト検出手段と、この手続き呼出しテキスト検出手段
により検出された中間テキストから生成される命令列に
組込み関数かユーザ定義の関数かを示す関数判定情報を
付加する関数判定情報付加命令列生成手段と、前記テキ
スト生成手段により生成された中間テキストからアーギ
ュメントとして渡されてきた関数を引用している中間テ
キストを検出する関数引用テキスト検出手段と、この関
数引用テキスト検出手段により検出された中間テキスト
からアーギュメントとして渡されてきた関数が組込み関
数であるかユーザ定義の関数であるかを前記関数判定情
報付加命令列生成手段により付加された関数判定情報に
基づいて判定させ組込み関数であるならば組込み関数専
用の呼出し手順によって組込み関数を呼び出す命令列を
、ユーザ定義の関数であるならばユーザ定義の関数を呼
び出す命令列を実行させるような命令列を生成する関数
引用部命令列生成手段とを有する。
〔作用〕
本発明の命令列生成方式では、テキスト生成手段がソー
スプログラムを構文解析して中間テキストを生成し、手
続き呼出しテキスト検出手段がテキスト生成手段により
生成された中間テキストから関数をアーギュメントとし
て他の手続きを呼び出す中間テキストを検出し、関数判
定情報付加命令列生成手段が手続き呼出しテキスト検出
手段により検出された中間テキストから生成される命令
列に組込み関数かユーザ定義の関数かを示す関数判定情
報を付加し、関数引用テキスト検出手段がテキスト生成
手段により生成された中間テキストからアーギュメント
として渡されてきた関数を引用している中間テキストを
検出し、関数引用部命令列生成手段が関数引用テキスト
検出手段により検出された中間テキストからアーギュメ
ントとして渡されてきた関数が組込み関数であるかユー
ザ定義の関数であるかを関数判定情報付加命令列生成手
段により付加された関数判定情報に基づいて判定させ組
込み関数であるならば組込み関数専用の呼出し手順によ
って組込み関数を呼び出す命令列を、ユーザ定義の関数
であるならばユーザ定義の関数を呼び出す命令列を実行
させるような命令列を生成する。
〔実施例〕
次に、本発明について図面を参照して詳細に説明する。
第1図は、本発明の一実施例の命令列生成方式が適用さ
れたコンパイラ2の構成を示すブロック図である。この
コンパイラ2は、ソースプログラム1を入力して、中間
テキスト(群)(以下、単にテキストという)4に一旦
変換した後に、オブジェクトプログラム3を出力する。
コンパイラ2は、テキスト生成手段21と、テキスト読
込み手段22と、手続き呼出しテキスト検出手段23と
、関数引用テキスト検出手段24と、オブジェクトプロ
グラム生成手段25とを含んで構成されている。
手続き呼出しテキスト検出手段23は、テキスト4が他
の手続きを呼んでいるテキストかどうかを判定する判定
部231(判定I)と、テキスト4が関数をアーギュメ
ントとしてもっているテキストかどうかを判定する判定
部232(判定■)とを含んでいる。
関数引用テキスト検出手段24は、テキスト4が関数を
引用しているテキストかどうかを判定する判定部241
(判定■)と、テキスト4における関数がアーギュメン
トとして渡されたものかどうかを判定する判定部242
(判定■)とを含んでいる。
オブジェクトプログラム生成手段25は、関数判定情報
付加命令列生成手段251と、関数引用部命令列生成手
段252と、通常命令列生成手段253とを含んでいる
次に、このように構成された本実施例の命令列生成方式
の動作について説明する。
コンパイラ2が起動されると、テキスト生成手段21は
、入力されたソースプログラム1を構文解析し、テキス
ト4を生成する。
生成されたテキスト4はテキスト読込み手段22によっ
て読み込まれ、手続き呼出しテキスト検出手段23は、
まず判定■によりテキスト4が他の手続きを呼んでいる
テキストかどうかを判定する。
テキスト4が他の手続きを呼んでいるテキストである場
合には、手続き呼出しテキスト検出手段23は、次に判
定■によりテキスト4においてアーギュメントとして関
数を使用しているかどうかを判定する。テキスト4が関
数をアーギュメントとしてもつテキストであると判定さ
れた場合には、オブジェクトプログラム生成手段25中
の関数判定情報付加命令列生成手段251に進む。
関数判定情報付加命令列生成手段251は、アーギュメ
ントである関数が組込み関数であるかユーザ定義の関数
であるかの情報を関数判定情報のフラグとしてアーギュ
メントに付加した手続き呼出しの命令列を生成する。
一方、テキスト読込み手段22により読み込まれてきた
テキスト4が判定Iまたは判定■の条件を満たさなかっ
た場合には、アーギュメントとして渡されてきた関数を
引用しているテキストを検出する関数引用テキスト検出
手段24に進む。
関数引用テキスト検出手段24は、まず判定■によりテ
キスト4が関数を引用しているテキストであるかどうか
を判定する。テキスト4が関数を引用しているテキスト
である場合には、関数引用テキスト検出手段24は、次
に判定■によりテキスト4で引用されている関数がアー
ギュメントとして渡されてきた関数かどうかを判定する
。テキスト4がアーギュメントとして渡されてきた関数
を引用しているテキストである場合には、オブジェクト
プログラム生成手段25中の関数引用部命令列生成手段
252に進む。
関数引用部命令列生成手段252は、アーギュメントと
して渡されてきた関数が組込み関数であるかユーザ定義
の関数であるかをアーギュメントに付加された関数判定
情報のフラグの値に基づいて実行時に判定させ、組込み
関数であるならば組込み関数専用の特殊な呼出し手順に
よって組込み関数を呼び出す呼出し命令列を、ユーザ定
義の関数であるならば一般的な呼出し手順でユーザ定義
の関数を呼び出す呼出し命令列を実行させるような命令
列を生成する。
さらに、テキスト読込み手段22により読み込まれてき
たテキストが判定■または判定■の条件をも満たさなか
った場合は、オブジェクトプログラム生成手段25中の
通常命令列生成手段253に進む。
通常命令列生成手段253は、通常の命令列を生成する
このようにして、関数判定情報付加命令列生成手段25
1.関数引用部命令列生成手段252および通常命令列
生成手段253を含むオブジェクトプログラム生成手段
25によってオブジェクトプログラム3が生成される。
第2図は、FORTRAN言語で記述されたソースプロ
グラム5において、組込み関数SINをアーギュメント
として手続き5UBIを呼んでいる文51と、ユーザ定
義の関数AAAをアーギュメントとして同し手続き5U
BIを呼んでいる文52との一例をそれぞれ示す図であ
る。
第2図における組込み関数SINをアーギュメントとし
て手続き5UBIを呼んでいる文51から生成されたテ
キストからは、関数判定情報付加命令列生成手段251
により関数判定情報のフラグの値を組込み関数ならば0
1ユーザ定義の関数ならば1とすると、値Oをもつ関数
判定情報のフラグを対応アーギュメントに付加して手続
き5UBIを呼び出す命令列が生成される。
同様に、ユーザ定義の関数AAAをアーギュメントにし
て手続き5UBIを呼んでいる文52から生成されたテ
キストからは、値1をもつ関数判定情報のフラグを対応
アーギュメントに付加して手続き5UBIを呼び出す命
令列が生成される。
第3図は、FORTRAN言語で記述されたソースプロ
グラム5において、手続き5UBI中でアーギュメント
として渡されてきた関数Fを引用している文53の一例
を示す図である。
第3図におけるアーギュメントとして渡されてきた関数
Fを引用している文53から生成されたテキストからは
、関数引用部命令列生成手段252により第4図中に示
す関数引用部命令列61が生成される。
関数引用部命令列61は、関数判定命令列611゜組込
み関数専用の呼出し命令列612およびユーザ定義の関
数呼出し命令列613からなっている。
間数判定命令列611は、関数判定情報のフラグの値が
01すなわちアーギュメントとして渡されてきた関数が
組込み関数であるならば、組込み関数専用の呼出し命令
列612に制御を移し、関数判定情報のフラグの値が1
、すなわちアーギュメントとして渡されてきた関数がユ
ーザ定義の関数であるならば、ユーザ定義の関数呼出し
命令列613に制御を移すような命令列である。
このため、ソースプログラム1 (5)が翻訳されたオ
ブジェクトプログラム3が実行されると、アーギュメン
トとして渡されてきた関数が組込み関数であるかユーザ
定義の関数であるかに応じて最適な呼出しがなされるこ
とになる。
〔発明の効果〕
以上説明したように本発明は、コンパイラ中に手続き呼
出しテキスト検出手段、関数判定情報付加命令列生成手
段、関数引用テキスト検出手段および関数引用部命令列
生成手段を設けたことにより、アーギュメントとして受
は取った組込み関数の呼出し時における実行時性能を向
上させることができる効果がある。
また、組込み関数においては1つの入口をもつだけでよ
くなるという効果がある。
【図面の簡単な説明】
第1図は本発明の一実施例の命令列生成方式が適用され
たコンパイラの構成を示すブロック図、第2図は関数を
アーギュメントとして他の手続きを呼んでいる文を含む
FORTRAN言語で記述されたソースプログラムの一
例を示す図、第3図はアーギュメントとして渡されてき
た関数を引用している文を含むFORTRAN言語で記
述されたソースプログラムの一例を示す図、第4図はア
ーギュメントとして渡されてきた関数を引用している文
に対して生成される関数引用部命令列の一例を示す図で
ある。 図において、 1・・・ソースプログラム、 2・・・コンパイラ、 3・・・オブジェクトプログラム、 4・・・中間テキスト、 21・・・テキスト生成手段、 22・・・テキスト読込み手段、 23・・・手続き呼出しテキスト検出手段、24・・・
関数引用テキスト検出手段、25・・・オブジェクトプ
ログラム生成手段、231 、232 、241 、2
42  ・・・判定部(判定■〜判定■)、 251  ・・関数判定情報付加命令列生成手段、25
2  ・・関数引用部命令列生成手段、253  ・・
通常命令列生成手段である。

Claims (1)

  1. 【特許請求の範囲】 高級言語で記述されたソースプログラムを翻訳してオブ
    ジェクトプログラムを生成するコンパイラをもつ計算機
    システムにおいて、 ソースプログラムを構文解析して中間テキストを生成す
    るテキスト生成手段と、 このテキスト生成手段により生成された中間テキストか
    ら関数をアーギュメントとして他の手続きを呼び出す中
    間テキストを検出する手続き呼出しテキスト検出手段と
    、 この手続き呼出しテキスト検出手段により検出された中
    間テキストから生成される命令列に組込み関数かユーザ
    定義の関数かを示す関数判定情報を付加する関数判定情
    報付加命令列生成手段と、前記テキスト生成手段により
    生成された中間テキストからアーギュメントとして渡さ
    れてきた関数を引用している中間テキストを検出する関
    数引用テキスト検出手段と、 この関数引用テキスト検出手段により検出された中間テ
    キストからアーギュメントとして渡されてきた関数が組
    込み関数であるかユーザ定義の関数であるかを前記関数
    判定情報付加命令列生成手段により付加された関数判定
    情報に基づいて判定させ組込み関数であるならば組込み
    関数専用の呼出し手順によって組込み関数を呼び出す命
    令列を、ユーザ定義の関数であるならばユーザ定義の関
    数を呼び出す命令列を実行させるような命令列を生成す
    る関数引用部命令列生成手段と、 を有することを特徴とする命令列生成方式。
JP63104974A 1988-04-26 1988-04-26 命令列生成方式 Pending JPH01274241A (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP63104974A JPH01274241A (ja) 1988-04-26 1988-04-26 命令列生成方式

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP63104974A JPH01274241A (ja) 1988-04-26 1988-04-26 命令列生成方式

Publications (1)

Publication Number Publication Date
JPH01274241A true JPH01274241A (ja) 1989-11-02

Family

ID=14395067

Family Applications (1)

Application Number Title Priority Date Filing Date
JP63104974A Pending JPH01274241A (ja) 1988-04-26 1988-04-26 命令列生成方式

Country Status (1)

Country Link
JP (1) JPH01274241A (ja)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH05505274A (ja) * 1991-03-07 1993-08-05 ディジタル イクイップメント コーポレイション 2個の非類似プログラムユニット間の呼出規格を自動的にインターフェイスさせるシステム及び方法

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH05505274A (ja) * 1991-03-07 1993-08-05 ディジタル イクイップメント コーポレイション 2個の非類似プログラムユニット間の呼出規格を自動的にインターフェイスさせるシステム及び方法

Similar Documents

Publication Publication Date Title
JP2001184218A (ja) Mpiプログラムのコンパイルにおける最適化方法
US7350165B2 (en) Compiler
US6086624A (en) Simulator and simulation method in each of which simulation can be carried out at a high-speed
JPH01274241A (ja) 命令列生成方式
JPS5922140A (ja) 対話型コンパイル方式
JPH025136A (ja) 言語処理プログラムのエラー処理方式
JP2001125793A (ja) コンパイラシステム及びコンパイル方法並びに記録媒体
JPH02165339A (ja) コンパイル装置
JP2001265605A (ja) コンパイラの命令列最適化方法、コンパイラ装置、記録媒体、及びプログラム
JPH0259823A (ja) コンパイル処理方式
JPH04343140A (ja) コンパイラの最適化処理方法
KR20040057037A (ko) 에스디엘에서 c언어로의 변환 시스템 및 방법, 그프로그램이 구현된 기록매체
JPH02133825A (ja) コンパイル方式
JPH03132825A (ja) 論理型言語のコンパイル方式
JPH05324344A (ja) 関数呼出し時の引数処理最適化方法
JPH05334097A (ja) 並列化解析情報出力方式
JPH02135529A (ja) コンパイル方式
JPH03144830A (ja) 並列処理方式
JPH06103079A (ja) コンパイル方式
JPH02231638A (ja) オブジエクト指向データベース管理システムにおけるメツセージ処理方法
JPH0962512A (ja) 低級言語から高級言語への記述言語変換機能を有するプログラム変換装置及び方法
JPH04248624A (ja) プログラム変換処理装置
Berry et al. The C Preprocessor
JPH05324401A (ja) 組込み関数誤差影響度出力方式
JPH0561687A (ja) コンパイラの処理方式