JP2585793B2 - コンパイラシステム - Google Patents

コンパイラシステム

Info

Publication number
JP2585793B2
JP2585793B2 JP1139509A JP13950989A JP2585793B2 JP 2585793 B2 JP2585793 B2 JP 2585793B2 JP 1139509 A JP1139509 A JP 1139509A JP 13950989 A JP13950989 A JP 13950989A JP 2585793 B2 JP2585793 B2 JP 2585793B2
Authority
JP
Japan
Prior art keywords
case
processing
branch
value
type
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
JP1139509A
Other languages
English (en)
Other versions
JPH034332A (ja
Inventor
政一 山良
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 JP1139509A priority Critical patent/JP2585793B2/ja
Publication of JPH034332A publication Critical patent/JPH034332A/ja
Application granted granted Critical
Publication of JP2585793B2 publication Critical patent/JP2585793B2/ja
Anticipated expiration legal-status Critical
Expired - Lifetime legal-status Critical Current

Links

Landscapes

  • Devices For Executing Special Programs (AREA)

Description

【発明の詳細な説明】 〔産業上の利用分野〕 本発明は,CASE構成の仕様をサポートするFORTRAN言語
で記述された原始プログラムをコンパイルするコンパイ
ラシステムに関する。
特に,科学技術計算を計算機で実行する場合などに,
計算機言語としてFORTRANが多く用いられているが,少
しでも高速にプログラムを実行できるようなオブジェク
トの生成が望まれている。
〔従来の技術〕
従来のFORTRANの仕様には,CASE構成(選択分岐)の仕
様はなかった。しかし,IF文だけによる判定分岐では,
プログラムの記述性,読解性が十分でないので,現在,F
ORTRANにおけるCASE構成の採用が検討されている。
検討されているCASE構成の仕様では,ある式の値また
は値の範囲ごとに,それぞれ実行すべき処理を記述でき
るようになっている。
このようなCASE構成の記述に対して,目的プログラム
を生成する場合,従来の考え方でいけば,式の評価結果
について,CASE文で指定された値の1つ1つを判定して
いき,各CASE文に該当する処理ブロックへ分岐するテキ
ストを,順次出力するのが通常であった。
すなわち,CASE構成の記述に対して,判定・分岐/判
定・分岐/……の命令を,順次,各CASE文に対応させ
て,生成することが考えられていた。
〔発明が解決しようとする課題〕
CASE構成による選択分岐を,IF文などによる判定分岐
の延長と考えると,どうしても実行性能が悪くなってし
まうという問題がある。すなわち,判定・分岐の処理を
繰り返すと,最初に分岐するルートを通る実行経路は,
高速に処理できるが,最後に分岐するルートを通る実行
経路は,多くの判定のために処理が遅くなるという問題
がある。また,CASE文で指定された値の出現順序によ
り,余分な判定および分岐命令が入ることがあるという
問題がある。
本発明は上記問題点を解決を図り,全体の判定のダイ
ナミックステップ数を減らし,FORTRANにおけるCASE構成
の高速分岐を可能とすることを目的としている。
〔課題を解決するための手段〕
第1図は本発明の構成例を示す。
第1図において,10はCPUおよびメモリなどからなる処
理装置,11はFORTRAN言語で記述されたプログラムを機械
語に翻訳するFORTRANコンパイラ,12は原始プログラムの
構文解析および意味解析を行う構文/意味解析部,13はC
ASE構成の記述を処理するCASE構成処理部,14は値ソート
処理部,15は選択分岐処理部,16はオブジェクトの最適化
を行う最適化処理部,17は中間テキストから目的プログ
ラムを生成するオブジェクト出力処理部,18はFORTRAN言
語によって記述された原始プログラム,19は原始プログ
ラム18の解析により内部形式に展開された中間テクス
ト,20は機械語命令およびデータのテキストを含む翻訳
結果の目的プログラムを表す。
本発明は,特にCASE構成の仕様をサポートするFORTRA
N言語で記述された原始プログラム18をコンパイルするF
ORTRANコンパイラ11における処理方式に関連している。
FORTRANコンパイラ11は,CASE文で指定された処理への
分岐先を定める値を,昇順または降順に並べる値ソート
処理部14と,ソートした値または値の範囲に基づき,CAS
E構成に係る式を評価した結果に対して,範囲判定によ
る分岐を処理する命令T1,分岐テーブルによる分岐を処
理する命令T2,単独判定による分岐を処理する命令T3の
全部または一部を組み合わせた中間テキスト19を生成す
る選択分岐処理部15を備えている。なお,中間テキスト
19におけるT4は,上記各命令T1〜T3からの分岐先となる
各処理ブロックのテキストである。
〔作用〕
選択分岐を判定分岐の延長と考えると,どうしても実
行性能が悪くなってしまう。そこで,本発明では,値に
応じて分岐先のアドレスが格納された分岐テーブルを利
用した分岐に加え,範囲で分岐する場合,単独で分岐す
る場合をうまく組み合わせて分岐するテキストを生成す
るようにしている。
値ソート処理部14が,CASE文で指定された処理への分
岐先を定める値を,昇順または降順に並べ,選択分岐処
理部15が,その結果に基づいて分岐先を決めるテキスト
(命令)を生成するので,例えば範囲の判定について,
前部分と後部分の2回判定するのではなく,一方の判定
だけで済ませるというように,判定の数を削減すること
が可能になる。また,分岐テーブルを用いることによ
り,多数の連続した値についての分岐処理をまとめて,
一律に処理することができる。
〔実施例〕
第2図は本発明の一実施例に係るCASE構成の出力テキ
スト例,第3図は本発明の一実施例に係る分岐テーブル
の使用例を示す。
CASE構成は,新たにFORTRAN言語に追加される仕様で
ある。原始プログラムでは,次の〜の形式で記述さ
れる。
[SELECT構成名:]SELECT CASE(case式) CASE(case値) ブロック もしくはCASE([case
値]:[case値])ブロックのいくつかの並び, または CASE DEFAULT ブロック END SELECT [SELECT構成名] これを用いた記述は,例えば次のようになる。
このプログラムは,「2I+J」の値が,50から100の範
囲内であれば,処理iを実行し,25であれば,処理iiを
実行し,…,その他の値であれば,処理iiiを実行すべ
きことを示している。
このようなCASE構成の記述を解析することにより,本
発明では,例えば第2図(1)〜(8)に示すような中
間言語による命令列などのテキストを出力する。以下,
これについて説明する。
まず、このようなテキストを生成する前に,CASE文で
指定された各case値を,昇順または降順に並べ換える。
なお,範囲指定のものについては,最小値または最大値
の一方について,ソートすればよい。
このソートした値または値の範囲に基づき,第2図の
(1)〜(8)に示すテキストを生成する。
(1)CASE式の評価 CASE式を評価し,結果をs.0001とする命令を生成す
る。
(2)範囲判定での分岐 範囲判定での分岐(以下,範囲型と呼ぶ)では,いろ
いろケースが考えられる。ここでは,場合分けして説明
する。
(a)DEFAULT文がある場合 基本的には,以下の「言」を作る。
BLT#nx,s.0001,a …… BLE#nn,s.0001,b …… のBLTは,第2オペランドs.0001の値が,第3オペ
ランドaの値より小さいとき,第1オペランド#nxに分
岐すべきことを意味している。のBLEは,第2オペラ
ンドs.0001の値が,第3オペランドbの値より小さいか
等しいとき,第1オペランド#nnに分岐すべきことを意
味している。
ここで,#nxは,CASE DEFAULTの副構成部の先頭アド
レス(以下,そのアドレスを#n−defと表す),分岐テ
ーブルによる分岐(以下,TBL型と呼ぶ)の先頭アドレス
(以下,そのアドレスを#n−tblと表す)または単独値
判定での分岐(以下,単独型と呼ぶ)の先頭アドレス
(以下,そのアドレスを#n−unitと表す)のいずれか
である。
#nnは,分岐先の処理ブロックの先頭アドレス#n1,#n
2,…である。
(イ)範囲型のみの場合 の記述に対して,次のような中間テキストを生成する。
この場合は,DEFAULT副構成部が存在するので,b<X<
Cの範囲のものは,DEFAULT副構成部に分岐させる。ま
た,最適化もこれ以上はできない。
(ロ)範囲型+TBL型の場合 「SELECT CASE(X) CASE(a:b) 処理i CASE(c) 処理ii CASE(d) 処理iii CASE(e) 処理iv CASE(f) 処理v CASE(y:z) 処理vi CASE DEFAULT 処理vii END SELECT」 の記述に対して,次のような中間テキストを生成する。
なお,c,d,e,fは連続数とする。
「 BLT #n−tb1,s.0001,a BLE #na,s.0001,b BLT #n−tb1,s.0001,y BLE #ny,s.0001,z #n−tb1 SUB t.0001,s.0001,(c−1) GOTBL(#nc,#nd,#ne,#nf)t.001 #n−def 処理vii #na 処理i #nc 処理ii #nd 処理iii #ne 処理iv #nf 処理v #ny 処理vi」 SUBは,第2オペランドから第3オペランドを引いた
値を,第1オペランドに代入する命令,GOTBLは,TBL型分
岐のために,値t.0001に応じた分岐先に分岐する命令で
ある。
この場合には,範囲から外れたものをDEFAULT副構成
部へ直接送るのではなく,分岐テーブルの判定に送り,
そこでもう一度判定する。ただし,もし範囲型と範囲型
との間に,TBL型が存在しない場合には,直接,DEFAULT副
構成部へ分岐してもよい。そうすると,範囲型の間に他
の型(TBL型・単独型)が入っているかどうかを調べる
必要がある。また,上記の例では,TBL型の対象を連続数
としたが,そうでなくても,TBL型分岐は可能である。
(ハ)範囲型+単独型の場合 「SELECT CASE(X) CASE(a:b) 処理i CASE(c) 処理ii CASE(d,e) 処理iii CASE(y:z) 処理iv CASE DEFAULT 処理v END SELECT」 の記述に対して,次のような中間テキストを生成する。
「 BLT #n−unit,s.0001,a BLE #na,s.0001,b BLT #n−unit,s.0001,y BLE #ny,s.0001,z #n−unit BLQ #nc,s.0001,c BEQ #nd,s.0001,d BEQ #nd,s.0001,e #n−def 処理v #na 処理i #nc 処理ii #nd 処理iii #ny 処理iv」 BEQは,第2オペランドと第3オペランドの値が等し
いとき,第1オペランドへ分岐する命令である。
この場合は,(ロ)のケースの#n−tb1が#n−unit
に代わっただけである。
(ニ)範囲型+TBL型+単独型の場合 「SELECT CASE(X) CASE(a:b)処理i 処理i CASE(c) 処理ii CASE(d) 処理iii CASE(e) 処理iv CASE(f) 処理v CASE(y:z) 処理vi CASE DEFAULT 処理vii END SELECT」 の記述に対して,次のような中間テキストを生成する。
ただし,c,d,eは連続数とし, (f−e)>10であるとする。
「 BLT #n−tb1,s.0001,a BLE #na,s.0001,b BLT #n−tb1,s.0001,y BLE #ny,s.0001,z #n−tb1 SUB t.0001,s.0001,(c−1) GOTO(#nc,#nd,#ne)t.0001 #n−unit BEQ #nf,s.0001,f #n−def 処理vii #na 処理i #nc 処理ii #nd 処理iii #ne 処理iv #nf 処理v #ny 処理vi」 この場合についても,基本的に上述の(ロ)と同様で
ある。
(b)DEFAULT文がない場合 デバック(DEBUG)オプション指定時には,上述の
(a)と同じ処理を行い,#n−defでは,エラーライブ
ラリを呼び出す。デバックオプションが指定されていな
いときは,以下の処理を行う。
(イ)範囲型のみの場合 の記述に対して,次のような中間テキストを生成する。
Bは,無条件分岐命令である。
DEFAULT文がない場合,文法上は,case値が,いずれに
あてはまることになっている。上記の例では,実際に
は,b=cであり,w=yのはずである。したがって,下限
の「言」を出力しなくてよくなる。また,最後の判定も
不要となり,1つ前の判定の直後に,最後の処理を持って
くることができる。
(ロ)それ以外の場合 範囲型との関係では,特に最適化されない。しかし,
以下の説明でわかるように,それぞれで最適化可能であ
る。
(3)分岐テーブルによる分岐 第3図に分岐テーブルの使用例を示す。
例えば,第3図(イ)に示すように,連続した数値ま
たはそれに近い数値が,case値として並ぶような場合に
は,個々の値について判定して分岐するよりも,第3図
(ロ)に示すような分岐テーブル30を作成して,case値
によって計算された分岐テーブル30内変位から,あらか
じめ格納された各処理ブロックの先頭アドレスに,一度
で分岐するほうが,不要な判定の数を減らすことができ
る。これにより,高速分岐が可能になる。
分岐テーブル30を利用するのは,この例では,以下の
条件がすべて満足される場合である。これらの条件がす
べて満足された場合に,case値範囲をまとめ,計算型GOT
O文(GOTBL)の形式で分岐する。
case式は,スカラ変数である。
CASE構成内で指定されているcase値と,次のcase値
との間隔が10以内である。
範囲型で,範囲に示される値の数は15個以内であ
る。ただし,この範囲型と結合される他の単独型が存在
しない場合は除く。
上記〜の条件を満たす値の数が3個以上存在す
る。
上記に該当する例を挙げる CASE(10)…TBL型分岐 CASE(15) 〃 CASE(20) 〃 CASE(50)…単独型分岐 上記に該当する例を挙げる。
CASE(0:9)…TBL型分岐 CASE(10) 〃 CASE(20) 〃 CASE(20:40)…範囲型分岐 なお,単独値においては,領域の大きさを考えずに,
極力TBL型にする。範囲型+単独型の場合には,その上
下限差間隔を50以下とする。
(a)DEFAULT文のある場合 (イ)TBL型のみの場合 「SELECT CASE(X) CASE(3:6) 処理i CASE(7) 処理ii CASE(9) 処理iii CASE(10) 処理iv CASE DEFAULT 処理v END SELECT」 の記述に対して,次のような中間テキストを生成する。
「#n−tbl SUB t.0001,s.0001,(3−1) GOTBL (#na,#na,#na,#na,#nc,#n−def,#n
d,#ne)t.0001 #n−def 処理v #na 処理i #nc 処理ii #nd 処理iii #ne 処理iv」 (ロ)TBL型+単独型の場合 「SELECT CASE(X) CASE(5:7) 処理i CASE(9) 処理ii CASE(10) 処理iii CASE(50) 処理iv CASE DEFAULT 処理v END SELECT」 の記述に対して,次のような中間テキストを生成する。
「#n−tbl SUB t.0001,s.0001,(5−1) GOTBL(#na,#na,#na,#n−def,#nc#nd)t.0
001 #n−unit BEQ #ne,s.0001,′50′ #n−def 処理v #na 処理i #nc 処理ii #nd 処理iii #ne 処理iv」 (b)DEFAULT文がない場合 この場合は,TBL分岐内の#n−defが,処理出口アドレ
スイ(以下,#n−epiと表す)に代わるだけである。最
適化は進まない。ただし,TBL型+単独型の場合は,以下
の説明のように最適化できる。
(4)単独値判定での分岐 範囲型でなく,TBL型にできなかったcase値の判定およ
び展開を行う。単独型の数をnとすると,この部分の分
岐数は,以下のようになる。
CASE DEFAULT文がCASE構成に存在する場合には,n
となる。
デバック指定時には,nとなる(判定を省略すること
はない)。
CASE DEFAULT文がCASE構成に存在せず,単独型が
存在するならば,n−1となる。
(a)DEFAULT文がある場合 (イ)単独型のみの場合 「SELECT CASE(X) CASE(c) 処理i CASE(d,e) 処理ii CASE DEFAULT 処理iii END SELECT」 の記述に対して,次のような中間テキストを生成する。
「#n−unit BEQ #nc,s.0001,c BEQ #nd,s.0001,d BEQ #nd,s.0001,e #n−def 処理iii #nc 処理i #nd 処理ii」 (b)DEFAULT文がない場合 デバックオプションが指定されている場合には,上述
の(a)と同じ処理を行う。指定されていない場合に
は,最後の判定を減らすことができる。
「SELECT CASE(X) CASE(c) 処理i CASE(d,e) 処理ii CASE(z) 処理iii END SELECT」 の記述に対して,次のような中間テキストを生成する。
「#n−unit BEQ #nc,s.0001,c BEQ #nd,s.0001,d BEQ #nd,s.0001,e B #nz #nc 処理i #nd 処理ii #nz 処理iii」 (5)デバック指定時のデバック用副構成要素 デバックオプションでデバックが指定されたならば,
次のようなエラーライブラリ(errlib)を呼び出す中間
テキストを生成する。
「CALLL0,errlib,A.0001」 CASE構成には,以上のほか,次のものが含まれる。
(6)CASE DEFAULTの副構成部 (7)CASE DEFAULTを除くCASE文の副構成部 (8)CASE構成の出口部 このような中間テキストを生成する処理手続きの実現
は,以上の説明から明らかであるので,その具体的な処
理手続きについての詳細な説明は省略する。
〔発明の効果〕
以上説明したように,本発明によれば,FORTRANにおけ
るCASE構成の実現にあたって,判定分岐のみの考えず
に,判定する命令の出力順序を変え,また分岐テーブル
による分岐を利用するので,効率的な命令の出力が可能
になり,高速分岐により,オブジェクトの実行速度を高
めることができるようになる。
【図面の簡単な説明】
第1図は本発明の構成例, 第2図は本発明の一実施例に係るCASE構成の出力テキス
ト例, 第3図は本発明の一実施例に係る分岐テーブルの使用例
を示す。 図中,10は処理装置,11はFORTRANコンパイラ,12は構文/
意味解析部,13はCASE構成処理部,14は値ソート処理部,1
5は選択分岐処理部,16は最適化処理部,17はオブジェク
ト出力処理部,18は原始プログラム,19は中間テキスト,2
0は目的プログラムを表す。

Claims (1)

    (57)【特許請求の範囲】
  1. 【請求項1】CASE値に基づいて命令の中間テキストを生
    成するFORTRANのコンパイラシステムにおいて、 CASE値に基づいて分岐の種類を選択し,その処理を制御
    する選択制御手段と, 複数のCASE値が規則的に並ぶ数値であるCASE文の一部に
    ついて,当該各CASE値に対応する分岐先へのアドレス情
    報を持つ分岐テーブルを生成するとともに,該分岐テー
    ブルを用いて当該各CASE値に応じた分岐を行う中間テキ
    ストを生成する第一の生成手段と, CASE文のその他の部分であって,CASE値が範囲指定また
    は離散値である部分について,当該各CASE値ごとに分岐
    を行う中間テキストを生成する第二の生成手段と を有することを特徴とするコンパイラシステム。
JP1139509A 1989-06-01 1989-06-01 コンパイラシステム Expired - Lifetime JP2585793B2 (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP1139509A JP2585793B2 (ja) 1989-06-01 1989-06-01 コンパイラシステム

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP1139509A JP2585793B2 (ja) 1989-06-01 1989-06-01 コンパイラシステム

Publications (2)

Publication Number Publication Date
JPH034332A JPH034332A (ja) 1991-01-10
JP2585793B2 true JP2585793B2 (ja) 1997-02-26

Family

ID=15246956

Family Applications (1)

Application Number Title Priority Date Filing Date
JP1139509A Expired - Lifetime JP2585793B2 (ja) 1989-06-01 1989-06-01 コンパイラシステム

Country Status (1)

Country Link
JP (1) JP2585793B2 (ja)

Families Citing this family (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2500515B2 (ja) * 1992-12-11 1996-05-29 日本電気株式会社 範囲指定が可能なcase構造の処理方式
JP6536266B2 (ja) * 2015-08-03 2019-07-03 富士通株式会社 コンパイル装置、コンパイル方法およびコンパイルプログラム

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
インターフェース10[10](1984),CQ出版社P.289−295(特に.P.291)

Also Published As

Publication number Publication date
JPH034332A (ja) 1991-01-10

Similar Documents

Publication Publication Date Title
JPH02217926A (ja) コード生成方法
JPH04330527A (ja) プログラムの最適化方法及びコンパイラ・システム
US10013244B2 (en) Apparatus and method to compile a variadic template function
JP2585793B2 (ja) コンパイラシステム
JP3305767B2 (ja) ソート処理方法及びコンパイル方法
JPH09160784A (ja) 並列化コンパイル方式
JP3730675B2 (ja) 処理装置
JP2002140198A (ja) インライン展開方法
JP2001265605A (ja) コンパイラの命令列最適化方法、コンパイラ装置、記録媒体、及びプログラム
JPH0689187A (ja) インライン展開最適化方法
US7627859B2 (en) Method for configuring non-script language library files to be run as scripts
JPH05100866A (ja) コンパイル・リンク方式
JP3367438B2 (ja) 条件実行処理装置
JPH10326193A (ja) インライン展開関数の最適化のためのコンパイル方法
JPH0736708A (ja) インライン展開方式
Ku et al. Behavioral Transformations
JP2000222218A (ja) コンパイル装置および記録媒体
WO1997007452A1 (en) Programmable compiler
JPH05189243A (ja) 条件付演算のコンパイル処理装置
JPH08115220A (ja) ループ最適化方法
JPH02118732A (ja) プログラム処理方式
JPH0573335A (ja) プログラムの自動インライン展開方式
JPH05342246A (ja) コンパイラのベクトル化処理方式
JPH0713962A (ja) コンパイラ装置
JPH0561687A (ja) コンパイラの処理方式

Legal Events

Date Code Title Description
FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20071205

Year of fee payment: 11

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20081205

Year of fee payment: 12

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20091205

Year of fee payment: 13

EXPY Cancellation because of completion of term
FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20091205

Year of fee payment: 13