JPH06180651A - 範囲指定が可能なcase構造の処理方式 - Google Patents
範囲指定が可能なcase構造の処理方式Info
- Publication number
- JPH06180651A JPH06180651A JP35241092A JP35241092A JPH06180651A JP H06180651 A JPH06180651 A JP H06180651A JP 35241092 A JP35241092 A JP 35241092A JP 35241092 A JP35241092 A JP 35241092A JP H06180651 A JPH06180651 A JP H06180651A
- Authority
- JP
- Japan
- Prior art keywords
- case
- branch
- processing
- range
- value
- 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.)
- Granted
Links
Landscapes
- Devices For Executing Special Programs (AREA)
Abstract
(57)【要約】
【目的】 範囲指定が可能なCASE構造を処理する
際、利用者の指定した順序を変えずに効率の良いオブジ
ェクトを出力する。 【構成】 CASE文で指定された値を記憶する際、す
でに記憶してある値と大小関係を比較した情報も記録す
ることにより、ブロックが実行されないときの最適な分
岐先を決定する次期判定分岐処理決定部11と、各々の
CASEブロックの判定に対し、真ならば対応するCA
SEブロックへ、偽ならば上記次期判定分岐処理決定部
で得た最適な分岐先へ分岐する中間コードを生成する判
定分岐処理生成部12を有するCASE構造処理部1か
ら構成されることを特徴とする。本発明によれば、範囲
指定が可能なCASE構文に対し、判定の出力順序を変
えずに、余分な判定を行わない効率的な命令の出力が可
能になる。
際、利用者の指定した順序を変えずに効率の良いオブジ
ェクトを出力する。 【構成】 CASE文で指定された値を記憶する際、す
でに記憶してある値と大小関係を比較した情報も記録す
ることにより、ブロックが実行されないときの最適な分
岐先を決定する次期判定分岐処理決定部11と、各々の
CASEブロックの判定に対し、真ならば対応するCA
SEブロックへ、偽ならば上記次期判定分岐処理決定部
で得た最適な分岐先へ分岐する中間コードを生成する判
定分岐処理生成部12を有するCASE構造処理部1か
ら構成されることを特徴とする。本発明によれば、範囲
指定が可能なCASE構文に対し、判定の出力順序を変
えずに、余分な判定を行わない効率的な命令の出力が可
能になる。
Description
【0001】
【産業上の利用分野】本発明は、範囲指定が可能なCA
SE構造の仕様をサポートする言語で記述された原始プ
ログラムのコンパイラを有する計算機システムでのCA
SE構造の処理方式に係わり、特にCASE文が現れる
たびに、CASE文で指定された値をSELECT C
ASEブロックごとに記憶しておいて、すでに記憶して
ある値と比較することにより、値の範囲に対してそのブ
ロックが実行されないときの最適な分岐先を決定する、
範囲指定が可能なCASE構造の処理方式に関する。
SE構造の仕様をサポートする言語で記述された原始プ
ログラムのコンパイラを有する計算機システムでのCA
SE構造の処理方式に係わり、特にCASE文が現れる
たびに、CASE文で指定された値をSELECT C
ASEブロックごとに記憶しておいて、すでに記憶して
ある値と比較することにより、値の範囲に対してそのブ
ロックが実行されないときの最適な分岐先を決定する、
範囲指定が可能なCASE構造の処理方式に関する。
【0002】
【従来の技術】範囲指定が可能なCASE構造の仕様を
サポートする言語で記述された原始プログラムをコンパ
イルするコンパイラを備えた計算機システムにおいて、
従来CASE文で指定された処理への分岐先を定める値
を、昇順または降順に並べることにより余分な判定及び
分岐命令を減らす、およびCASE文の範囲指定と範囲
指定の間に分岐テーブルによる分岐を生成するという技
術はあった(特開平3−4332号公報(A) FOR
TRANにおけるCASE構造処理方式)。
サポートする言語で記述された原始プログラムをコンパ
イルするコンパイラを備えた計算機システムにおいて、
従来CASE文で指定された処理への分岐先を定める値
を、昇順または降順に並べることにより余分な判定及び
分岐命令を減らす、およびCASE文の範囲指定と範囲
指定の間に分岐テーブルによる分岐を生成するという技
術はあった(特開平3−4332号公報(A) FOR
TRANにおけるCASE構造処理方式)。
【0003】
【発明が解決しようとする課題】前述の従来技術では、
範囲指定が可能なCASE構造を処理する際、余分な判
定及び分岐命令を減らす、およびCASE文の範囲指定
と範囲指定の間に分岐テーブルによる分岐を生成するた
めに、CASE文で指定された処理への分岐先を定める
値を、昇順または降順に並べていた。
範囲指定が可能なCASE構造を処理する際、余分な判
定及び分岐命令を減らす、およびCASE文の範囲指定
と範囲指定の間に分岐テーブルによる分岐を生成するた
めに、CASE文で指定された処理への分岐先を定める
値を、昇順または降順に並べていた。
【0004】しかし、この方法では最も実行される可能
性の高いCASEブロックを利用者が意識して最初の方
に記述しても、利用者の意図が反映されず、かえって実
行速度が遅くなるという欠点があった。
性の高いCASEブロックを利用者が意識して最初の方
に記述しても、利用者の意図が反映されず、かえって実
行速度が遅くなるという欠点があった。
【0005】
【課題を解決するための手段】本発明の範囲指定が可能
なCASE構造の処理方式は、範囲指定が可能なCAS
E構造の仕様をサポートする言語で記述された原始プロ
グラムをコンパイルするコンパイラを有する計算機シス
テムにおいて、CASE文が現れるたびに、CASE文
で指定された値をSELECT CASEブロックごと
に記憶しておいて、すでに記憶してある値と大小関係を
比較することにより、ブロックが実行されないときの最
適な分岐先を決定する次期判定分岐処理決定部と、CA
SE構造にかかる式を評価した結果に対して判定し、真
ならば対応するCASEブロックへ、偽ならば上記次期
判定分岐処理決定部で得た最適な分岐先へ分岐する中間
コードを生成する判定分岐処理生成部を有するCASE
構造処理部から構成されることを特徴とする。
なCASE構造の処理方式は、範囲指定が可能なCAS
E構造の仕様をサポートする言語で記述された原始プロ
グラムをコンパイルするコンパイラを有する計算機シス
テムにおいて、CASE文が現れるたびに、CASE文
で指定された値をSELECT CASEブロックごと
に記憶しておいて、すでに記憶してある値と大小関係を
比較することにより、ブロックが実行されないときの最
適な分岐先を決定する次期判定分岐処理決定部と、CA
SE構造にかかる式を評価した結果に対して判定し、真
ならば対応するCASEブロックへ、偽ならば上記次期
判定分岐処理決定部で得た最適な分岐先へ分岐する中間
コードを生成する判定分岐処理生成部を有するCASE
構造処理部から構成されることを特徴とする。
【0006】
【作用】本発明により、利用者の記述したブロックの順
序を変更することなしに、余分な判定及び分岐命令を減
らす、およびCASE文の範囲指定と範囲指定の間に分
岐テーブルによる分岐を生成することができるようにな
る。
序を変更することなしに、余分な判定及び分岐命令を減
らす、およびCASE文の範囲指定と範囲指定の間に分
岐テーブルによる分岐を生成することができるようにな
る。
【0007】
〔第1の実施例〕以下、本発明のFortranコンパ
イラにおける一実施例を図面に基づき詳細に説明する。
イラにおける一実施例を図面に基づき詳細に説明する。
【0008】図2は、本発明が適用されたコンパイラ全
体の構造を示す図である。図2の構文解析部22がFo
rtranプログラムである原始プログラム21を入力
して、構文を解析し中間コード13に変換する。意味解
析部23がCASE構造処理部1などを用いて、各文の
意味を解析し、オブジェクト・コードに近い形式の中間
コード14に変換する。これを最適化処理部24が最適
化を行い、コード生成部25がオブジェクト・コード2
7を生成する。
体の構造を示す図である。図2の構文解析部22がFo
rtranプログラムである原始プログラム21を入力
して、構文を解析し中間コード13に変換する。意味解
析部23がCASE構造処理部1などを用いて、各文の
意味を解析し、オブジェクト・コードに近い形式の中間
コード14に変換する。これを最適化処理部24が最適
化を行い、コード生成部25がオブジェクト・コード2
7を生成する。
【0009】本発明はCASE構造処理部1に係わり、
オブジェクト・コード27の実行効率を上げるものであ
る。CASE構造処理部1のうち、本発明に係わる部分
について動作を説明する。
オブジェクト・コード27の実行効率を上げるものであ
る。CASE構造処理部1のうち、本発明に係わる部分
について動作を説明する。
【0010】図1は、本発明の一実施例である範囲指定
が可能なCASE構造の処理方式の構成図である。図1
において、CASE構造処理部1はCASE構造に関す
る文の処理を行う手段であり、次期判定分岐処理決定部
11はCASE文が現れるたびに、CASE文で指定さ
れたCASE値をSELECT CASEブロックごと
に記憶しておいて、すでに記憶してある値と比較するこ
とにより、CASE値の範囲に対してそのブロックが実
行されないときの最適な分岐先を決定する手段であり、
判定分岐処理生成部12は次期判定分岐処理決定部11
で得た情報をもとCASE構造に係る式を評価した結果
に対して、判定し、分岐する中間コードを生成する手段
であり、分岐テーブル生成判定部121は上記次期判定
分岐処理決定部11で得た情報を元に分岐テーブルによ
る分岐を用いた方がオブジェクトプログラムが早く実行
できる一群の判定を決定する手段であり、テーブル分岐
中間コード生成部122は上記分岐テーブル生成判定部
121で決定した一群の判定に対し、テーブル分岐によ
る分岐の中間コードを出力する手段であり、中間コード
13、14は原始プログラム21からオブジェクト コ
ード27へ変換される途中の中間コードに対応するもの
である。
が可能なCASE構造の処理方式の構成図である。図1
において、CASE構造処理部1はCASE構造に関す
る文の処理を行う手段であり、次期判定分岐処理決定部
11はCASE文が現れるたびに、CASE文で指定さ
れたCASE値をSELECT CASEブロックごと
に記憶しておいて、すでに記憶してある値と比較するこ
とにより、CASE値の範囲に対してそのブロックが実
行されないときの最適な分岐先を決定する手段であり、
判定分岐処理生成部12は次期判定分岐処理決定部11
で得た情報をもとCASE構造に係る式を評価した結果
に対して、判定し、分岐する中間コードを生成する手段
であり、分岐テーブル生成判定部121は上記次期判定
分岐処理決定部11で得た情報を元に分岐テーブルによ
る分岐を用いた方がオブジェクトプログラムが早く実行
できる一群の判定を決定する手段であり、テーブル分岐
中間コード生成部122は上記分岐テーブル生成判定部
121で決定した一群の判定に対し、テーブル分岐によ
る分岐の中間コードを出力する手段であり、中間コード
13、14は原始プログラム21からオブジェクト コ
ード27へ変換される途中の中間コードに対応するもの
である。
【0011】本実施例では、範囲指定が可能なCASE
構造の仕様をサポートする言語として、新しいFort
ran言語を例にあげている。
構造の仕様をサポートする言語として、新しいFort
ran言語を例にあげている。
【0012】新しいFortran言語では次の構文規
則からなる範囲指定が可能なCASE構造の仕様を追加
している。 SELECT CASE構造 select-case 文 [case文 block]… end-select文 select-case 文 [case構造名:]SELECT CASE(case式) case文 CASE case選択子 [case構造名] block 実行文の集まり end-select文 END SELECT[case構造名] case選択子 DEFAULT または (case値の範囲の並び) case値の範囲 case値 または case値: または :case値 または case値:case値 FortranにおけるCASE構造の規則は、CAS
E値の範囲指定ができること、一つのブロックに対し複
数のCASE値やCASE値の範囲が指定できること、
実行されるブロックが二つ以上あるようなCASE値や
CASE値の範囲を指定することができないこと、c言
語のbreak文のように明示的にブロックから出るこ
とを指定しなくても、一つのブロックしか実行されない
ことに特徴がある。
則からなる範囲指定が可能なCASE構造の仕様を追加
している。 SELECT CASE構造 select-case 文 [case文 block]… end-select文 select-case 文 [case構造名:]SELECT CASE(case式) case文 CASE case選択子 [case構造名] block 実行文の集まり end-select文 END SELECT[case構造名] case選択子 DEFAULT または (case値の範囲の並び) case値の範囲 case値 または case値: または :case値 または case値:case値 FortranにおけるCASE構造の規則は、CAS
E値の範囲指定ができること、一つのブロックに対し複
数のCASE値やCASE値の範囲が指定できること、
実行されるブロックが二つ以上あるようなCASE値や
CASE値の範囲を指定することができないこと、c言
語のbreak文のように明示的にブロックから出るこ
とを指定しなくても、一つのブロックしか実行されない
ことに特徴がある。
【0013】次のプログラム片はCASE構造の例であ
る。
る。
【0014】 SELECT CASE (I+ J) ! CASE(10:20) ! PRINT *,'10-20' ! CASE DEFAULT ! PRINT *,'DEFAULT' ! CASE(30) ! PRINT *,'30' ! END SELECT ! このプログラム片は(I+J)の値が10以上20以下
ならば「10−20」を印字し、END SELECT
文の次の実行文に制御を移し、(I+J)の値が30に
等しければ、「30」を印字し、END SELECT
文の次の実行文に制御を移し、そのいずれでもなけれ
ば、「DEFAULT」を印字し、ENDSELECT
文の次の実行文に制御を移すように動作する。
ならば「10−20」を印字し、END SELECT
文の次の実行文に制御を移し、(I+J)の値が30に
等しければ、「30」を印字し、END SELECT
文の次の実行文に制御を移し、そのいずれでもなけれ
ば、「DEFAULT」を印字し、ENDSELECT
文の次の実行文に制御を移すように動作する。
【0015】次に本発明の図1の示す実施例のうちCA
SE構造処理部1の動作について、図3、図4、図5を
用いて説明する。
SE構造処理部1の動作について、図3、図4、図5を
用いて説明する。
【0016】図3は本発明の一実施例を説明するための
Fortranの原始プログラムである。
Fortranの原始プログラムである。
【0017】図4は従来技術によって図3のプログラム
から生成された中間コードの例である。
から生成された中間コードの例である。
【0018】図3のような原始プログラムは標準的な構
文/意味解析の理論に基づくと図4のような中間コード
に変換される。すなわち、CASE文の情報を記録して
おいて、END SELECT文が現れたところで、各
々のCASEの値に対応する判定分岐を行う中間コード
を出力することになる。
文/意味解析の理論に基づくと図4のような中間コード
に変換される。すなわち、CASE文の情報を記録して
おいて、END SELECT文が現れたところで、各
々のCASEの値に対応する判定分岐を行う中間コード
を出力することになる。
【0019】図3の3−1(以降単に3−1と書く)の
文のCASE値の範囲による判定分岐は、図4の4−1
と4−2(以降4−1、4−2と書く)のような2つの
中間コードに分解される。4−1はCASE値の範囲の
下限より小さければそのブロックを実行しないので、次
の判定の中間コードへ分岐するというものである。この
ような判定分岐を以降、下限判定分岐と呼ぶ。4−2は
CASE値の範囲の上限より小さければ、4−2に制御
が渡るということは下限よりも大きいか等しいという条
件は満たしていることになるので、このブロックを実行
する分岐先へ分岐する。このような判定分岐を以降、上
限判定分岐と呼ぶ。
文のCASE値の範囲による判定分岐は、図4の4−1
と4−2(以降4−1、4−2と書く)のような2つの
中間コードに分解される。4−1はCASE値の範囲の
下限より小さければそのブロックを実行しないので、次
の判定の中間コードへ分岐するというものである。この
ような判定分岐を以降、下限判定分岐と呼ぶ。4−2は
CASE値の範囲の上限より小さければ、4−2に制御
が渡るということは下限よりも大きいか等しいという条
件は満たしていることになるので、このブロックを実行
する分岐先へ分岐する。このような判定分岐を以降、上
限判定分岐と呼ぶ。
【0020】4−1が真の場合、つまり係るCASE式
が20より小さい場合、その分岐先である4−3は、判
定条件が60に等しいことなので、決して真になること
はなく、このような、判定はむだになる。この場合、4
−4、4−5の判定も無駄で、次に真になる可能性があ
るのは、4−6ということになる。
が20より小さい場合、その分岐先である4−3は、判
定条件が60に等しいことなので、決して真になること
はなく、このような、判定はむだになる。この場合、4
−4、4−5の判定も無駄で、次に真になる可能性があ
るのは、4−6ということになる。
【0021】4−5の場合も同様に、4−5が偽の場
合、つまり係るCASE式が50より大きいとき、その
分岐先である4−6は決して真になることはないので、
この判定を行うことは無駄である。
合、つまり係るCASE式が50より大きいとき、その
分岐先である4−6は決して真になることはないので、
この判定を行うことは無駄である。
【0022】CASE値の判定分岐をソートしてしまえ
ば、この無駄な判定は減らすことができるが、利用者の
意図した順序で判定を行わないと実行される可能性の高
い判定を後の方で行う可能性がありよくない。
ば、この無駄な判定は減らすことができるが、利用者の
意図した順序で判定を行わないと実行される可能性の高
い判定を後の方で行う可能性がありよくない。
【0023】次期判定分岐処理決定部11は、利用者の
指定した順序を変えないまま、無駄な判定を避けるよう
に記録してあるCASE文の情報に無駄な分岐をとばす
ようCASE値の大小関係の情報を付加する処理を行
う。
指定した順序を変えないまま、無駄な判定を避けるよう
に記録してあるCASE文の情報に無駄な分岐をとばす
ようCASE値の大小関係の情報を付加する処理を行
う。
【0024】以下、図5、図6、図7を用いて次期判定
分岐処理決定部11の処理を説明する。
分岐処理決定部11の処理を説明する。
【0025】図5は図3の原始プログラムを例に、標準
的な構文解析の理論と従来技術と本発明によるCASE
文の情報の差異を説明する図である。
的な構文解析の理論と従来技術と本発明によるCASE
文の情報の差異を説明する図である。
【0026】図5において、ラベルとはこの判定に対し
て作るラベルである。内容とはどのような判定を行うか
を記録したものである。分岐先とはこの判定が真の時に
どのブロックを実行するかを意味する。出力順序とは原
始プログラムに記述されている順序と異なる順序で判定
を行うとき、その順序を記録するもので、この例では、
昇順に並び替えられている。
て作るラベルである。内容とはどのような判定を行うか
を記録したものである。分岐先とはこの判定が真の時に
どのブロックを実行するかを意味する。出力順序とは原
始プログラムに記述されている順序と異なる順序で判定
を行うとき、その順序を記録するもので、この例では、
昇順に並び替えられている。
【0027】本発明によるCASE情報の記録による
と、記録されるCASE文の情報のうち範囲指定に対
し、左の枝と右の枝を付加している。左の枝はこの判定
より後に現れる、範囲指定の下限より小さいCASE値
を持つ判定を意味する。すなわち、下限判定によって判
定に対応するブロックが実行されないことが決定したと
きの次に行う判定である。右の枝はこの判定より後に現
れる、範囲指定の上限より大きなCASE値を持つ判定
を意味する。すなわち、上限判定によって判定に対応す
るブロックが実行されないことが決定したときの次に行
う判定である。
と、記録されるCASE文の情報のうち範囲指定に対
し、左の枝と右の枝を付加している。左の枝はこの判定
より後に現れる、範囲指定の下限より小さいCASE値
を持つ判定を意味する。すなわち、下限判定によって判
定に対応するブロックが実行されないことが決定したと
きの次に行う判定である。右の枝はこの判定より後に現
れる、範囲指定の上限より大きなCASE値を持つ判定
を意味する。すなわち、上限判定によって判定に対応す
るブロックが実行されないことが決定したときの次に行
う判定である。
【0028】記録されるCASE文の情報のうち範囲指
定以外の判定に対し、右の枝だけ付加している。これは
この判定によって判定に対応するブロックが実行されな
いことが決定したときの次に行う判定である。
定以外の判定に対し、右の枝だけ付加している。これは
この判定によって判定に対応するブロックが実行されな
いことが決定したときの次に行う判定である。
【0029】新しく記録されるCASE方法は必ず、ど
こかのCASE情報の枝になる。このようにすると原始
プログラムに書かれた判定の順序を変更することはな
い。
こかのCASE情報の枝になる。このようにすると原始
プログラムに書かれた判定の順序を変更することはな
い。
【0030】ここで×は、右枝または左枝が存在しない
ことを意味し、−はここでは用いない(参照されない)
ことを意味する。
ことを意味し、−はここでは用いない(参照されない)
ことを意味する。
【0031】標準的な構文解析の理論に基づくCASE
情報の記録によると、例えば、15という値(どのブロ
ックも実行されない)を判定すると、全ての判定を行わ
なければいけない。
情報の記録によると、例えば、15という値(どのブロ
ックも実行されない)を判定すると、全ての判定を行わ
なければいけない。
【0032】一般的に最も実行される確率の高い判定を
最初に持ってくると実行効率はよくなるが、従来の技術
によると、例えば図5の例では、このSELECT C
ASEブロックが実行されるときはほとんどの場合2
0:30のブロックが実行されるとしても必ず、10の
判定を行ってしまう。
最初に持ってくると実行効率はよくなるが、従来の技術
によると、例えば図5の例では、このSELECT C
ASEブロックが実行されるときはほとんどの場合2
0:30のブロックが実行されるとしても必ず、10の
判定を行ってしまう。
【0033】図6は図5のような本発明によるCASE
情報を記録するための次期判定分岐処理決定部11の処
理を説明するブロック図である。CASE構造解析部1
は、CASE文が現れるたびに次期判定分岐処理決定部
11を呼び出し、CASE文の情報を記録する。
情報を記録するための次期判定分岐処理決定部11の処
理を説明するブロック図である。CASE構造解析部1
は、CASE文が現れるたびに次期判定分岐処理決定部
11を呼び出し、CASE文の情報を記録する。
【0034】図6をみると、61は初期設定として入力
したCASE文の情報を現判定とし、処理中のSELE
CT CASE情報の最初のCASE文の情報を対象判
定するステップ、62は対象判定が範囲指定であるかど
うかを調べ対象判定ならばステップ63へ、対象判定で
なければステップ65へ実行を移すステップ、63は現
判定の値が対象判定の値より小さいかどうかを調べ、小
さければステップ64へ、大きければステップ65へ実
行を移すステップ、64は対象判定に既に左の枝が存在
するかを調べ、存在すればステップ641へ、しなけれ
ばステップ642へ実行を移すステップ、641は対象
判定の左の枝を対象判定とし、ステップ62へ実行を移
すステップ、642は現判定を対象判定の左の枝とし処
理を終えるステップ、65は対象判定に既に右の枝が存
在するかを調べ、存在すればステップ651へ、しなけ
ればステップ652へ実行を移すステップ、651は対
象判定の右の枝を対象判定とし、ステップ62へ実行を
移すステップ、652は現判定を対象判定の右の枝とし
処理を終えるステップである。
したCASE文の情報を現判定とし、処理中のSELE
CT CASE情報の最初のCASE文の情報を対象判
定するステップ、62は対象判定が範囲指定であるかど
うかを調べ対象判定ならばステップ63へ、対象判定で
なければステップ65へ実行を移すステップ、63は現
判定の値が対象判定の値より小さいかどうかを調べ、小
さければステップ64へ、大きければステップ65へ実
行を移すステップ、64は対象判定に既に左の枝が存在
するかを調べ、存在すればステップ641へ、しなけれ
ばステップ642へ実行を移すステップ、641は対象
判定の左の枝を対象判定とし、ステップ62へ実行を移
すステップ、642は現判定を対象判定の左の枝とし処
理を終えるステップ、65は対象判定に既に右の枝が存
在するかを調べ、存在すればステップ651へ、しなけ
ればステップ652へ実行を移すステップ、651は対
象判定の右の枝を対象判定とし、ステップ62へ実行を
移すステップ、652は現判定を対象判定の右の枝とし
処理を終えるステップである。
【0035】図7は図5のCASE情報に対応する本発
明を適用したときに得るCASE情報の状態にさらにC
ASE値15の判定のCASE情報を付加したときの図
である。
明を適用したときに得るCASE情報の状態にさらにC
ASE値15の判定のCASE情報を付加したときの図
である。
【0036】図6、図7を用いて次期判定分岐処理決定
部11の処理を具体的に説明する。
部11の処理を具体的に説明する。
【0037】図6によると、CASE情報の記録が図5
の状態にあるときは、さらにCASE (15)という
CASE文を読み込むと次のような動作でCASE情報
L15を記録する。
の状態にあるときは、さらにCASE (15)という
CASE文を読み込むと次のような動作でCASE情報
L15を記録する。
【0038】まず、現判定L15は値15、対象判定L
20は値20:30となる(ステップ61)。対象判定
が範囲指定なので(ステップ62)、現判定と対象判定
で値を比較すると、現判定が小さいので対象判定の左の
枝を調べる(ステップ63)。左の枝が存在するので
(ステップ64)、対象判定を左の枝のL10にして、
処理を繰り返す(ステップ641)。次に対象判定は範
囲指定ではないので(ステップ62)、右の枝を調べ
る。右の枝は存在しないので(ステップ65)、現判定
を対象判定の枝に設定して処理を終える(ステップ65
2)。
20は値20:30となる(ステップ61)。対象判定
が範囲指定なので(ステップ62)、現判定と対象判定
で値を比較すると、現判定が小さいので対象判定の左の
枝を調べる(ステップ63)。左の枝が存在するので
(ステップ64)、対象判定を左の枝のL10にして、
処理を繰り返す(ステップ641)。次に対象判定は範
囲指定ではないので(ステップ62)、右の枝を調べ
る。右の枝は存在しないので(ステップ65)、現判定
を対象判定の枝に設定して処理を終える(ステップ65
2)。
【0039】この処理の結果、図7のようなCASE情
報を得る。
報を得る。
【0040】次に、図7、図8を用いて判定分岐中間コ
ード生成部12の処理を説明する。
ード生成部12の処理を説明する。
【0041】図8は図3の原始プログラムに対して本発
明を適用したときに得る中間コードである。
明を適用したときに得る中間コードである。
【0042】判定分岐処理生成部12はCASE文の現
れた順序で判定を行う中間コードを生成する。このとき
上記次期判定分岐処理決定部11で記録された、CAS
E値の大小関係から、次の判定への分岐を決定し、中間
コードを生成する。
れた順序で判定を行う中間コードを生成する。このとき
上記次期判定分岐処理決定部11で記録された、CAS
E値の大小関係から、次の判定への分岐を決定し、中間
コードを生成する。
【0043】つまり、記録してある順にCASEの情報
を取り出し、判定分岐の中間コードと、そのCASE情
報の枝の判定に対しラベルを生成し、ブロックが実行さ
れないときそこに分岐する中間コードを生成する。CA
SE情報に枝が記録されていない場合、ブロックが実行
されないときはDEFAULTがあればDEFALUT
ブロック、なければSELECT CASEブロックを
抜ける無条件分岐の中間コードを生成する。
を取り出し、判定分岐の中間コードと、そのCASE情
報の枝の判定に対しラベルを生成し、ブロックが実行さ
れないときそこに分岐する中間コードを生成する。CA
SE情報に枝が記録されていない場合、ブロックが実行
されないときはDEFAULTがあればDEFALUT
ブロック、なければSELECT CASEブロックを
抜ける無条件分岐の中間コードを生成する。
【0044】図7の例でいうとラベルL20の情報は範
囲指定なので、20より小さいときは左の枝のラベルL
10へ分岐する中間コードを生成し、次に30以下のと
きにBLK20へ分岐、それ以外の場合には右の枝のL
60に分岐する中間コードを生成する。次にラベルL6
0の情報は範囲指定でないので、60に等しければBL
K60へ分岐、それ以外の場合には右の枝のL60に分
岐する中間コードを生成する。同様の処理を繰り返す
と、図8の中間コードを得る。図4と図8を比べると、
4−1と4−4の分岐先が冗長な判定を行わない最適な
分岐先に変更されている。
囲指定なので、20より小さいときは左の枝のラベルL
10へ分岐する中間コードを生成し、次に30以下のと
きにBLK20へ分岐、それ以外の場合には右の枝のL
60に分岐する中間コードを生成する。次にラベルL6
0の情報は範囲指定でないので、60に等しければBL
K60へ分岐、それ以外の場合には右の枝のL60に分
岐する中間コードを生成する。同様の処理を繰り返す
と、図8の中間コードを得る。図4と図8を比べると、
4−1と4−4の分岐先が冗長な判定を行わない最適な
分岐先に変更されている。
【0045】ここでこの判定の順序を利用者が原始プロ
グラム上でソートして記述すると、従来技術と同じ効果
を得ることができる。従って利用者はプログラムすると
きどのブロックが実行される確率が高いか分からない場
合は、原始プログラム上でCASE値を並び変え、実行
される確率が高いブロックが分かっている場合は確率の
高いブロックから順に記述すれば良い。
グラム上でソートして記述すると、従来技術と同じ効果
を得ることができる。従って利用者はプログラムすると
きどのブロックが実行される確率が高いか分からない場
合は、原始プログラム上でCASE値を並び変え、実行
される確率が高いブロックが分かっている場合は確率の
高いブロックから順に記述すれば良い。
【0046】〔第2の実施例〕最後に第2の実施例につ
いて、図9、図10の例を基に分岐テーブル生成判定部
121とテーブル分岐中間コード生成部122の動作を
説明する。
いて、図9、図10の例を基に分岐テーブル生成判定部
121とテーブル分岐中間コード生成部122の動作を
説明する。
【0047】図9は第2の実施例を説明するFortr
anの原始プログラムである。
anの原始プログラムである。
【0048】図10は次期判定分岐処理決定部11によ
って図9のFortranの原始プログラムから得たC
ASE情報の図である。ただし、図10中の‘*’の記
号は分岐テーブル生成判定部121によって記録される
テーブル分岐を行うことを示す印であり、‘!’は同じ
くこのCASE情報が処理済みであることを示す印であ
る。
って図9のFortranの原始プログラムから得たC
ASE情報の図である。ただし、図10中の‘*’の記
号は分岐テーブル生成判定部121によって記録される
テーブル分岐を行うことを示す印であり、‘!’は同じ
くこのCASE情報が処理済みであることを示す印であ
る。
【0049】分岐テーブル生成判定部121は、上記次
期判定分岐処理決定部11で作られたCASE値の大小
関係を表す木構造から、各々の枝について左の枝のさら
に右の枝または右の枝のさらに左の枝になっているよう
な枝を調べる。すなわち、ある範囲指定とある範囲指定
の間の値の持つ判定の一群を検出し、その枝の下にある
一群の判定に対して分岐テーブルによる分岐が高速かど
うかを判断する。分岐テーブルによる分岐が高速である
と判断したら、枝にテーブル分岐を行うという印を記録
しておく。
期判定分岐処理決定部11で作られたCASE値の大小
関係を表す木構造から、各々の枝について左の枝のさら
に右の枝または右の枝のさらに左の枝になっているよう
な枝を調べる。すなわち、ある範囲指定とある範囲指定
の間の値の持つ判定の一群を検出し、その枝の下にある
一群の判定に対して分岐テーブルによる分岐が高速かど
うかを判断する。分岐テーブルによる分岐が高速である
と判断したら、枝にテーブル分岐を行うという印を記録
しておく。
【0050】判断の基準は分岐テーブルに必要なメモリ
の量と分岐テーブルによる判定命令の減る量である。
の量と分岐テーブルによる判定命令の減る量である。
【0051】例えば図10を見ると、番号101に示す
部分が範囲指定と範囲指定に囲まれている部分であるこ
とが分かる。この部分に対して分岐テーブルによる分岐
はテーブルの大きさがアドレス10個分で、判定命令は
範囲指定に対しては2つ必要なので5個となり、これ
は、分岐テーブルによる分岐の命令を持つ計算機システ
ムにおいてはほとんどの場合高速になる。そこでCAS
E値31の枝にテーブル分岐の印を記録する。
部分が範囲指定と範囲指定に囲まれている部分であるこ
とが分かる。この部分に対して分岐テーブルによる分岐
はテーブルの大きさがアドレス10個分で、判定命令は
範囲指定に対しては2つ必要なので5個となり、これ
は、分岐テーブルによる分岐の命令を持つ計算機システ
ムにおいてはほとんどの場合高速になる。そこでCAS
E値31の枝にテーブル分岐の印を記録する。
【0052】テーブル分岐中間コード生成部122は、
判定中間コードを出力する際、テーブル分岐を行う印が
あれば、そこから枝をたどることによってテーブル分岐
による分岐の中間コードを出力し、対象となる一群の判
定すべてに処理済みの印を記録する。
判定中間コードを出力する際、テーブル分岐を行う印が
あれば、そこから枝をたどることによってテーブル分岐
による分岐の中間コードを出力し、対象となる一群の判
定すべてに処理済みの印を記録する。
【0053】例えば図10をみると、最初にCASE値
31の枝に印がついているのが分かる。そこで31より
下にある枝に対するテーブルによる分岐の中間コードを
出力する。サーチする際には20:30と40:50の
情報を記録しておいて、31から39までの分岐テーブ
ルを作成する。また枝をたどり31、36、33:3
5、32の分岐先を分岐テーブルに設定しながら、各々
の枝に処理済みの印を記録する。判定を行う中間コード
を出力する際には、この出力済みの印が記録されていな
いことを確認しなくてはいけない。
31の枝に印がついているのが分かる。そこで31より
下にある枝に対するテーブルによる分岐の中間コードを
出力する。サーチする際には20:30と40:50の
情報を記録しておいて、31から39までの分岐テーブ
ルを作成する。また枝をたどり31、36、33:3
5、32の分岐先を分岐テーブルに設定しながら、各々
の枝に処理済みの印を記録する。判定を行う中間コード
を出力する際には、この出力済みの印が記録されていな
いことを確認しなくてはいけない。
【0054】図11は、本発明によって図9の原始プロ
グラムが変換された中間コードの例である。
グラムが変換された中間コードの例である。
【0055】ここで11−1は(R)の後ろのラベルの
うち、R番目のラベルに分岐することを意味するテーブ
ル分岐の中間コードである。
うち、R番目のラベルに分岐することを意味するテーブ
ル分岐の中間コードである。
【0056】図11をみると、判定の順序を変えずに、
分岐テーブルによる分岐の中間コードを出力することが
可能になり、31、32、33:35、36の判定の代
わりに分岐テーブルによる分岐の中間コード一つになり
高速化がはかれたことが分かる。
分岐テーブルによる分岐の中間コードを出力することが
可能になり、31、32、33:35、36の判定の代
わりに分岐テーブルによる分岐の中間コード一つになり
高速化がはかれたことが分かる。
【0057】
【発明の効果】以上説明したように、本発明によれば、
範囲指定が可能なCASE構文の実現に当たって、判定
する命令の出力順序を変えずに、効率的な命令の出力が
可能になり、高速分岐によりオブジェクトの実行速度を
高めることが可能になる。
範囲指定が可能なCASE構文の実現に当たって、判定
する命令の出力順序を変えずに、効率的な命令の出力が
可能になり、高速分岐によりオブジェクトの実行速度を
高めることが可能になる。
【図1】本発明の一実施例を示す構成図。
【図2】本発明が適用されたコンパイラ全体の構造を示
す図。
す図。
【図3】本発明の一実施例を説明するためのFortr
anの原始プログラム。
anの原始プログラム。
【図4】従来技術によって図3のプログラムから生成さ
れた中間コードの例。
れた中間コードの例。
【図5】図3の原始プログラムを例に、標準的な構文解
析の理論と従来技術と本発明によるCASE文の情報の
差異を説明する図。
析の理論と従来技術と本発明によるCASE文の情報の
差異を説明する図。
【図6】次期判定分岐処理決定部11の処理を説明する
図。
図。
【図7】図5のCASE情報に対応する本発明を適用し
たときに得るCASE情報の図。
たときに得るCASE情報の図。
【図8】図3の原始プログラムに対して本発明を適用し
たときに得る中間コード。
たときに得る中間コード。
【図9】第2の実施例を説明するFortranの原始
プログラム。
プログラム。
【図10】次期判定処理決定部11によって図9のFo
rtranの原始プログラムから得たCASE情報の
図。
rtranの原始プログラムから得たCASE情報の
図。
【図11】本発明によって図9の原始プログラムが変換
された中間コード。
された中間コード。
図1において 1 CASE情報処理部 11 次期判定分岐処理決定部 12 判定分岐処理生成部 121 分岐テーブル生成判定部 122 テーブル分岐中間コード生成部 13 中間コード 14 中間コード 図2において 1 CASE構造処理部 13 中間コード 14 中間コード 21 ソース プログラム 22 構文解析部 23 意味解析部 24 最適化処理部 25 コード生成部 26 中間コード 27 オブジェクト コード
Claims (2)
- 【請求項1】 範囲指定が可能なCASE構造の仕様を
サポートする言語で記述された原始プログラムのコンパ
イラを有する計算機システムにおけるCASE構造の処
理方式において、 CASE文が現れるたびに、該CASE文で指定された
値をSELECT CASEブロックごとに記憶してお
いて、すでに記憶してある値と大小関係を比較すること
により、前記ブロックが実行されないときの最適な分岐
先を決定する次期判定分岐処理決定部と、 前記CASE構造にかかる式を評価した結果に対して判
定し、真ならば対応するCASEブロックへ、偽ならば
前記次期判定分岐処理決定部で得た最適な分岐先へ分岐
する中間コードを生成する判定分岐処理生成部と、を有
するCASE構造処理部から構成されることを特徴とす
る範囲指定が可能なCASE構造の処理方式。 - 【請求項2】 前記判定分岐処理生成部が、前記CAS
E文で指定された範囲指定と後に現れた範囲指定との間
の値を持つ前記の範囲指定以降に現れる全ての判定に対
し、分岐テーブルを用いる処理と、分岐テーブルを用い
ない処理とでどちらが高速な処理が可能であるか判断す
る分岐テーブル生成判定部と、 前記分岐テーブル生成判定部で分岐テーブルを用いた方
が高速な処理が可能であると判断されたCASE文で指
定された範囲指定と、次に現れた範囲指定との間の値を
持つ前記範囲指定以降に現れる全ての判定に対し、分岐
テーブルによる分岐を行う中間コードを生成するテーブ
ル分岐中間コード生成部と、を有することを特徴とする
請求項1記載の範囲指定が可能なCASE構造の処理方
式。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP4352410A JP2500515B2 (ja) | 1992-12-11 | 1992-12-11 | 範囲指定が可能なcase構造の処理方式 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP4352410A JP2500515B2 (ja) | 1992-12-11 | 1992-12-11 | 範囲指定が可能なcase構造の処理方式 |
Publications (2)
Publication Number | Publication Date |
---|---|
JPH06180651A true JPH06180651A (ja) | 1994-06-28 |
JP2500515B2 JP2500515B2 (ja) | 1996-05-29 |
Family
ID=18423887
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP4352410A Expired - Fee Related JP2500515B2 (ja) | 1992-12-11 | 1992-12-11 | 範囲指定が可能なcase構造の処理方式 |
Country Status (1)
Country | Link |
---|---|
JP (1) | JP2500515B2 (ja) |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPS5960640A (ja) * | 1982-09-30 | 1984-04-06 | Fujitsu Ltd | コンパイラ処理方法 |
JPH034332A (ja) * | 1989-06-01 | 1991-01-10 | Fujitsu Ltd | コンパイラシステム |
-
1992
- 1992-12-11 JP JP4352410A patent/JP2500515B2/ja not_active Expired - Fee Related
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPS5960640A (ja) * | 1982-09-30 | 1984-04-06 | Fujitsu Ltd | コンパイラ処理方法 |
JPH034332A (ja) * | 1989-06-01 | 1991-01-10 | Fujitsu Ltd | コンパイラシステム |
Also Published As
Publication number | Publication date |
---|---|
JP2500515B2 (ja) | 1996-05-29 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US6243864B1 (en) | Compiler for optimizing memory instruction sequences by marking instructions not having multiple memory address paths | |
US5606697A (en) | Compiler system for language processing program | |
US4860203A (en) | Apparatus and method for extracting documentation text from a source code program | |
US5832273A (en) | System for deleting redundant instructions from high level language source code containing in-line assembly instructions | |
US20090249307A1 (en) | Program analysis apparatus, program analysis method, and program storage medium | |
US20080320031A1 (en) | Method and device for analyzing an expression to evaluate | |
JPH07219758A (ja) | 仕様書生成方法 | |
US5822592A (en) | Method and system for determining source code location | |
US5692196A (en) | System and method for conditionally compiling a software compilation unit | |
RU2115159C1 (ru) | Способ и устройство для проверки использования полей записей во время компиляции | |
JP3437932B2 (ja) | 配列レンジ・チェックのためのコード生成方法及び装置、並びにバージョニング方法及び装置 | |
JP2500515B2 (ja) | 範囲指定が可能なcase構造の処理方式 | |
US4965765A (en) | Distinguishing nested structures by color | |
EP1121641A1 (en) | Apparatus and method for program optimizing | |
JPH11272503A (ja) | プログラムのテストデータ自動生成装置 | |
US8312429B2 (en) | Cell based data processing | |
WO1997007452A1 (en) | Programmable compiler | |
JPH08328904A (ja) | プログラム開発支援装置 | |
JP3417960B2 (ja) | 文章校正支援方法および装置 | |
Abrahams | The CIMS PL/I compiler | |
JP2001265605A (ja) | コンパイラの命令列最適化方法、コンパイラ装置、記録媒体、及びプログラム | |
CN116755700A (zh) | 一种数据收集方法、装置及介质 | |
JP2000242504A (ja) | コンパイラ装置 | |
JPH04237365A (ja) | テキスト処理装置における差分検出方式および自動編集方式 | |
JPH05204705A (ja) | 未定義変数検出処理方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
LAPS | Cancellation because of no payment of annual fees |