JP3305767B2 - ソート処理方法及びコンパイル方法 - Google Patents

ソート処理方法及びコンパイル方法

Info

Publication number
JP3305767B2
JP3305767B2 JP23914892A JP23914892A JP3305767B2 JP 3305767 B2 JP3305767 B2 JP 3305767B2 JP 23914892 A JP23914892 A JP 23914892A JP 23914892 A JP23914892 A JP 23914892A JP 3305767 B2 JP3305767 B2 JP 3305767B2
Authority
JP
Japan
Prior art keywords
sort
processing
record
program
routine
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 - Fee Related
Application number
JP23914892A
Other languages
English (en)
Other versions
JPH0689186A (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.)
Hitachi Software Engineering Co Ltd
Hitachi Ltd
Original Assignee
Hitachi Software Engineering Co Ltd
Hitachi 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 Hitachi Software Engineering Co Ltd, Hitachi Ltd filed Critical Hitachi Software Engineering Co Ltd
Priority to JP23914892A priority Critical patent/JP3305767B2/ja
Publication of JPH0689186A publication Critical patent/JPH0689186A/ja
Application granted granted Critical
Publication of JP3305767B2 publication Critical patent/JP3305767B2/ja
Anticipated expiration legal-status Critical
Expired - Fee Related legal-status Critical Current

Links

Landscapes

  • Devices For Executing Special Programs (AREA)

Description

【発明の詳細な説明】
【0001】
【産業上の利用分野】本発明は、ユーザが指定した順序
関係の決定方法に従ってデータのソートを効率的に行な
うためのソート処理方法及びそれを支援するコンパイル
方法に関する。
【0002】
【従来の技術】プログラミング言語が用意したソート機
能を使用する場合、ユーザはデータの順序関係をソート
キーやキーを揃える向き(昇順・降順の別)などでソー
スプログラム中に指定する。従来のコンパイラは、これ
を読んでソートキーの情報をパラメタとしてソートルー
チンを呼び出すオブジェクトを生成するように構成され
ていた。また、コンパイルしたオブジェクトプログラム
の実行時において、従来のソートルーチンは、オブジェ
クトプログラムよりパラメタとして渡されたキー情報を
解析し、ソート処理中に、内部に蓄えたソートキー情報
を参照しながらデータを比較することによってソートを
行なうように構成されていた。
【0003】公知文献に関して述べれば、「HITAC
プログラムプロダクト VOS3COBOL85 使用
の手引」(マニュアル番号 8090-3-855-30、(株)日立製
作所)の第197頁から第205頁によれば、COBOLコン
パイラはソースプログラムのSORT文から「拡張ソー
トマージXSORT」(ソートマージプログラム)に渡
すパラメタを生成する。このパラメタは、キーの位置、
長さ、データ形式、向きの4項目の組をキーの数だけ繰
り返したものである。
【0004】そして「プログラムプロダクト VOS3
拡張ソートマージ XSORT E2解説・文法書」(マ
ニュアル番号 6180-3-470、(株)日立製作所)の第7頁
に記述してあるように、「拡張ソートマージXSOR
T」は、それらパラメタ(文献中では「拡張ソートマー
ジ制御文」)を解析してからソート処理を実行する。
【0005】
【発明が解決しようとする課題】ソースプログラム上の
ソートキー情報をパラメタにしてソートルーチンを実行
させる方式では、ソートルーチン側でソートキー情報パ
ラメタを解析しなければならず、また、ソート機能の実
行時に、キーを比較しようとするたびにキー情報を参照
しながら比較を行なわなければならず、これらのことが
ソート処理全体の時間を増加させる要因となっていた。
【0006】本発明の目的は、前記のような処理時間増
加要因を排除することによって、ソート処理全体の時間
を短縮できるソート処理方法及びそれを支援するコンパ
イル方法を提供することにある。
【0007】より具体的にいえば、本発明の一つの目的
は、ソートルーチンにソートキー情報のパラメタを渡さ
ないようにして、ソートルーチンにおけるパラメタ解析
フェーズを不要とすることにより、実際のソート処理が
始まるまでの時間の短縮を図ることである。本発明のも
うひとつの目的は、ソートルーチンにおいて比較のたび
にキー情報を参照する必要をなくすことによって、デー
タ比較の処理速度を上げることである。
【0008】
【課題を解決するための手段】本発明は、ソースプログ
ラムのオブジェクトプログラムへのコンパイル時に、コ
ンパイラにおいて、あらかじめプログラミング言語固有
の方法でソースプログラムに書かれたソート順序の決定
方法から、該ソート文に専用の比較関数をオブジェクト
プログラム中に生成しておく。オブジェクトプログラム
の実行時、ソートプログラム(ソートルーチン)から
記比較関数を呼び出し、該比較関数にてデータ比較処理
を行う。ソートルーチンでは、該比較関数からの戻り値
を判定してデータのソートを実行する。
【0009】
【作用】ソートルーチンの初期処理でソートキー情報の
解析処理が不要になるため、この分だけ実際のソート処
理が始まるまでの時間が短くなる。またソートルーチン
のソート処理中の比較処理でキー情報を参照して解釈す
る処理が不要になるため、この分だけ処理速度が向上す
る。このような二つの時間の短縮の結果として、ソート
処理全体の時間短縮を達成できる。また、コンパイラに
最適化機能がある場合、データ比較処理専用の比較関数
の最適化による高速化も期待できる。
【0010】
【実施例】以下、COBOL言語処理系での本発明の一
実施例について、図面を用いて説明する。なお、説明に
おいて、処理の流れ等を表現するためにJIS X0128
のPAD図を使用する。
【0011】図1は、本発明の一実施例におけるコンパ
イラ及びソートルーチンの構造、並びにコンパイルされ
たオブジェクトプログラムとソートルーチンとの呼び出
し関係を示している。1と2は計算機の中央処理装置
(CPU)と記憶装置である。ここでは、ソースプログ
ラム100、コンパイラ101、オブジェクトプログラ
ム111、ソートルーチン121はすべて記憶装置2上
にあるものとして示されている。また、図示されていな
いがソートすべきデータファイルと、ソート後のデータ
ファイルなども記憶装置2上にあるものとする。
【0012】コンパイラ101の全体的構成は基本的に
従来と同様であって、ソースプログラム100を解析し
て中間言語表現のプログラムを生成するフロント部10
2と、それを入力してオブジェクトプログラム111を
生成するバック部104とからなる。フロント部102
はソート文展開処理部103を含むが、これはソースプ
ログラム上のソート文を解析し、データ整列機能を実現
する中間言語を生成する部分である。
【0013】従来、このソート文展開処理部103で、
ソートキー情報を解析して、それを引数としてソートル
ーチンを呼び出す中間言語プログラムを生成していた。
しかし本発明によれば、このソート文展開部分103
は、ソートに必要なデータ比較を行う中間言語関数を生
成し、さらにオブジェクトプログラム実行時にソートル
ーチンを呼び出すときの引数を、その関数のアドレスと
するように機能が変更される。
【0014】ソートルーチン121の全体的構成も基本
的に従来と同様であって、初期化処理部122、レコー
ド受け取り(データ入力)処理部123、ソート処理部
124、レコード引渡し(データ出力)処理部126、
終了処理部127のルーチン群からなる。しかし、本発
明によれば、初期化処理部122に従来含まれていたソ
ートキー情報パラメタ解釈処理は取り除かれる。また本
発明によれば、ソート処理部124のデータ比較処理の
内容は、ソートキー情報を解釈しながら比較する従来の
方式から変更され、コンパイラ101が生成したデータ
比較関数に比較対象の2つのデータを渡し、その戻り値
を判定する方式とされる。なお、レコード受け取り処理
部123、レコード引渡処理部126及び終了処理部1
27は従来と変わらない。
【0015】111はコンパイラ101により出力され
たオブジェクトプログラムである。このオブジェクトプ
ログラム111において、112〜116がソースプロ
グラム100上のSORT文を展開した部分であり、ソ
ートルーチン121の対応する部分を呼び出す。117
は、コンパイラ101がSORT文から生成した比較関
数(ソートのためのデータ比較処理ルーチン)である。
【0016】次に、オブジェクトプログラム111とソ
ートルーチン121との呼び出し関係について説明す
る。
【0017】オブジェクトプログラム111の初期処理
呼び出し112では、ソートするデータのレコード長と
最大レコード件数を引数にして、ソートルーチン121
の初期処理部122を呼び出し、初期処理部122は必
要な作業領域を確保する。
【0018】オブジェクトプログラム111のレコード
受け取り処理呼び出し113では、ソート(整列)作業
用のレコードにSORT文で指定された方法でソート対
象のデータを設定し、そのレコード領域のアドレスを引
数にしてレコード受け取り処理部123を呼び出す。レ
コード受け取り処理部123は、レコードを一つ受け取
って初期処理部122で確保した作業領域に格納する。
ソート対象のデータがなくなるまでこの呼び出しを繰り
返す。
【0019】オブジェクトプログラム111のソート処
理呼び出し114では、ソート処理部124を呼び出
す。ソート処理部124では、レコード受け取り処理部
123で蓄えたレコードの中から比較すべき二つのレコ
ードをソートアルゴリズムに従って選択し、このレコー
ドのアドレスを引数にして比較関数117を呼び出す
(比較関数呼び出し125)。比較関数117では、S
ORT文のソートキー情報に従って二つのレコードを比
較し、レコードの順番を入れ替える必要があるかどうか
を判定して、必要があれば "入れ替える" を、なければ
"入れ替えない"を、リタン値として返す。ソート処理
部124は、制御が戻ると、リタン値が "入れ替える"
ならレコードの順番を入れ替え、そうでなければ入れ替
えない。このようにして、データを全てソートする。
【0020】オブジェクトプログラム111のレコード
引渡し処理呼び出し115では、受け取りになるソート
用のレコード領域のアドレスを引数にしてレコード引渡
し処理部126を繰返し呼び出し、ソートされた順番に
レコードを受け取ってSORT文に指定された方法で処
理する。レコード引渡し処理部126では、ソート済み
のデータを、呼ばれるたびに1レコードずつ引数のレコ
ード領域に格納する。終了処理呼び出し116では、終
了処理部127を呼び出す。終了処理部127では、ソ
ートルーチン121で使用した作業領域を解放する。
【0021】次に、このようなプログラム実行時の呼び
出し関係を実現するために、コンパイラ101がSOR
T文を展開する処理を説明する。
【0022】図2は、コンパイラ101のSORT文展
開処理部103の処理の流れを示すPAD図である。こ
の図の中で、「展開する」とは、中間言語表現の処理を
展開することを意味する。
【0023】まずSORT文のソートキー情報から比較
関数117を展開し(ステップ201)、次にソートル
ーチンの初期処理呼び出し112を展開する(ステップ
202)。次に、ソートルーチンへデータを引き渡すた
めのレコード受取処理呼び出し113を展開する(ステ
ップ203)。次にソートルーチンのソート処理呼び出
し114を展開する(ステップ204)。次にソートル
ーチンから整列順にデータを受け取るためのレコード引
渡し処理呼び出し205を展開する(ステップ20
5)。最後にソートルーチンの終了処理の呼び出し11
6を展開する(ステップ206)。
【0024】図3は、図2の比較関数展開処理ステップ
201を詳細に説明したPAD図である。図4は、図3
の処理で組み立てていく処理の部品をPAD図で表した
ものである。組み立てる比較関数の仕様は、レコード1
とレコード2を引数として受け取り、レコード1の方が
順序が前にあるとして入れ替える必要があると判定した
ら "入れ替える" を、そうでなければ "入れ替えない"
を、リタン値として返すというものである。ここではP
AD図の組み立て方で関数の生成方法を説明するが、実
際には組み立てられたPAD図に相当する中間言語表現
の処理を展開する。
【0025】図4において、401は比較関数の入り口
部分で、レコード1とレコード2を受け取る。402は
比較関数の出口部分で、設定されたリタン値を呼び出し
元に返す。403〜406はn番目のソートキー(以
後、キーnと表す)に対する処理である。
【0026】403と404は指定されたキーのうち最
後でないもの対する処理である。403はキーが昇順の
ときの処理で、レコード1のキーnがレコード2のキー
nより大きいときは "入れ替える" を、小さければ "入
れ替えない" をリタン値に設定する。どちらでもないと
きの処理は、他の処理部品をつなげられるように空けて
ある。404はキーが降順のときの処理で、判定条件が
403と逆になるが、どちらでもないときの処理は40
3と同様に空けてある。
【0027】405と406は最後に指定されたキーに
対する処理である。405はキーが昇順のときの処理
で、レコード1のキーnがレコード2のキーnより大き
いときは "入れ替える" を、そうでなければ、 "入れ替
えない" を、リタン値に設定する。406はキーが降順
のときの処理で、判定条件が403と逆になる。
【0028】次に、図3に従って比較関数の展開方法を
説明する。まず、部分401を展開し関数の入り口を作
る(ステップ301)。そして、(SORT文に指定さ
れたキーの数 − 1)回だけ、変数nに回数を設定しな
がら次の処理行う(ステップ302)。
【0029】即ち、もしキーnが昇順指定のものなら
(ステップ303)、PAD図の最も右下に部分403
を接続し(ステップ304)、そうでなければPAD図
の最も右下に部分404を接続する(ステップ30
5)。もしキーが一つしか指定されなかった場合は、3
02〜305の処理は1回も行われない。
【0030】次に、変数nに、SORT文に指定された
キーの数を設定して(ステップ306)、もしキーn
(つまり最後のキー)が昇順指定のものならば(ステッ
プ307)、PAD図の最も右下に部分405を接続し
(ステップ308)、そうでなければPAD図の最も右
下に部分406を接続する(ステップ309)。そして
最後に、最も左下に部分402を展開して、この関数の
出口を作る(ステップ310)。
【0031】具体的な比較の演算方法は、データ属性
(文字、2進形式、ゾーン形式、パック形式など)によ
って異なるが、ソースプログラムの他の部分の比較演算
と同様に、コンパイラ101のバック部104で異なる
オブジェクトを生成することで解決する。このようにし
て、特定のSORT文に専用の比較関数117を生成す
る。
【0032】次に、実際のCOBOLプログラムのSO
RT文から、図3及び図4で説明した方法で展開される
比較関数の例を、図5及び図6で説明する。
【0033】図5は、SORT文を含んだCOBOLプ
ログラムの例である。501はソート(整列)用ファイ
ルのレコードの構造を指定している部分である。502
と503はそれぞれ入力ファイルと出力ファイルのレコ
ードの構造を指定している部分である。504はSOR
T文である。SOR文504において、505は最初の
キーである S-URIAGE-KOSU について降順に並べること
を指定し、506は2番目のキーの S-CODE について昇
順に並べることを指定し、507と508はそれぞれ入
力ファイルと出力ファイルを指定している。
【0034】図6は、このCOBOLプログラムのSO
RT文504から生成される比較関数の内容を示すPA
D図である。601は図4の401を展開したもので、
レコード1(C1-RECORD)とレコード2(C2-RECORD)を
受け取る。レコード1とレコード2は、それぞれ図中の
610と611により示されるレコード構造を持つよう
にコンパイラの内部で設定する。なお、これらのレコー
ド構造は、図5のCOBOLプログラムの部分91で指
定されたソート(整列)用ファイルのレコード構造と同
じである。602は、ソースプログラムのSORT文5
04において最初のキー S-URIAGE-KOSU が降順指定な
ので、図4の404を展開している。レコード1の C1-
URIAGE-KOSU が レコード2の C2-URIAGE-KOSU より小
さければリタン値を "入れ替える" に設定し、大きけれ
ば "入れ替えない" に設定する。どちらでもないときの
処理には603を展開する。これは、SORT文504
の次のキー S-CODE が昇順指定であり、しかもこのキー
が最後のキーなので、図4の405を展開したものであ
る。レコード1のC1-CODE が レコード2のC2-CODEより
大きければ、リタン値を "入れ替える" に設定し、そう
でなければ "入れ替えない" に設定する。この関数の最
後は、図4の82を展開した604であり、ここでは、
リタン値を呼び出し元に返す。
【0035】以上のように、コンパイル段階で、コンパ
イラはフロント部でソート文を解析してデータを比較す
る中間言語表現の関数を生成することにより、ユーザが
指定したデータ順序の決定方法に特化したソート処理用
比較関数(ソート専用データ比較処理ルーチン)を、オ
ブジェクトプログラム中に生成する。そして、オブジェ
クトプログラムの実行時に、ソートルーチンの初期処理
部においてソートキーパラメタ解析処理を不要にし、実
際のソート処理を始めるまでの時間を短縮することがで
きる。また、ソートルーチンのソート処理部において、
ソートキー情報を解釈しながら比較する替わりに、コン
パイラが生成した比較関数を呼び出してその戻り値を判
定する方式とすることで、解釈する処理がない分だけ、
比較処理を高速化することができる。さらに、コンパイ
ラに最適化機能があれば、この比較関数も最適化処理さ
れて高速になることが期待できる。
【0036】
【発明の効果】本発明によれば、ソートルーチンの初期
処理の中のソートキー情報の解析処理がなくなる分だけ
実際のソート処理が始まるまでの時間が短くなり、さら
に、ソート処理中の比較処理で、キー情報を参照して解
釈しなくなる分だけ処理速度が向上し、結果としてソー
ト全体処理時間を短縮できる。
【図面の簡単な説明】
【図1】本発明の一実施例におけるコンパイラ及びソー
トルーチンの一般的構造、並びにコンパイルされたオブ
ジェクトプログラムとソートルーチンとの呼び出し関係
を示す図である。
【図2】SORT文を展開する処理を表したPAD図で
ある。
【図3】比較関数を展開する処理を表したPAD図であ
る。
【図4】比較関数展開処理で使用する処理部品を表した
PAD図である。
【図5】SORT文を含んだCOBOLプログラムの例
を示す図である。
【図6】COBOLプログラム例から生成する比較関数
の内容を表したPAD図である。
【符号の説明】
100 ソースプログラム 101 コンパイラ 102 フロント部 103 ソート文展開処理部 104 バック部 111 オブジェクトプログラム 112 初期処理呼び出し 113 レコード受け取り処理呼び出し 114 ソート処理呼び出し 115 レコード引渡し処理呼び出し 116 終了処理呼び出し 117 比較関数 121 ソートルーチン 122 初期処理部 123 レコード受け取り処理部 124 ソート処理部 125 比較関数呼び出し 126 レコード引渡し処理部 127 終了処理部 501 ソート用ファイルのレコード構造指定部 502 入力ファイルのレコード構造指定部 503 出力ファイルのレコード構造指定部 504 SORT文 610 レコード1の構造 611 レコード2の構造
───────────────────────────────────────────────────── フロントページの続き (72)発明者 今岡 弘良 神奈川県横浜市戸塚区戸塚町5030番地 株式会社 日立製作所 ソフトウェア開 発本部内 (72)発明者 三宅 立記 神奈川県横浜市中区尾上町6丁目81番地 日立ソフトウェアエンジニアリング株 式会社内 (72)発明者 渡辺 良一 神奈川県横浜市中区尾上町6丁目81番地 日立ソフトウェアエンジニアリング株 式会社内 (56)参考文献 特開 昭61−264441(JP,A) 特開 昭62−267831(JP,A) (58)調査した分野(Int.Cl.7,DB名) G06F 9/45 G06F 7/24

Claims (2)

    (57)【特許請求の範囲】
  1. 【請求項1】 ソースプログラムからオブジェクトプロ
    グラムを生成するコンパイル時に、ソースプログラムに
    含まれるソート文を解析して該ソート文に専用の比較関
    数をオブジェクトプログラム中に生成し、オブジェクト
    プロラムの実行時に、ソートルーチンから前記比較関数
    を呼び出し、該比較関数にてデータ比較処理を行い、ソ
    ートルーチンでは該比較関数からの戻り値を判定してデ
    ータをソートすることを特徴とするソート処理方法。
  2. 【請求項2】 ソースプログラムからオブジェクトプロ
    グラムを生成するためのコンパイル方法であって、ソー
    スプログラムに含まれるソート文を解析して、該ソート
    文に専用の比較関数をオブジェクトプログラム中に生成
    することを特徴とするコンパイル方法。
JP23914892A 1992-09-08 1992-09-08 ソート処理方法及びコンパイル方法 Expired - Fee Related JP3305767B2 (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP23914892A JP3305767B2 (ja) 1992-09-08 1992-09-08 ソート処理方法及びコンパイル方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP23914892A JP3305767B2 (ja) 1992-09-08 1992-09-08 ソート処理方法及びコンパイル方法

Publications (2)

Publication Number Publication Date
JPH0689186A JPH0689186A (ja) 1994-03-29
JP3305767B2 true JP3305767B2 (ja) 2002-07-24

Family

ID=17040471

Family Applications (1)

Application Number Title Priority Date Filing Date
JP23914892A Expired - Fee Related JP3305767B2 (ja) 1992-09-08 1992-09-08 ソート処理方法及びコンパイル方法

Country Status (1)

Country Link
JP (1) JP3305767B2 (ja)

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP5304307B2 (ja) * 2009-02-23 2013-10-02 日本電気株式会社 ソートキー比較コード生成装置、ソート処理装置及びソートキー比較コード生成方法

Also Published As

Publication number Publication date
JPH0689186A (ja) 1994-03-29

Similar Documents

Publication Publication Date Title
US5586328A (en) Module dependency based incremental compiler and method
JP2609093B2 (ja) ソフトウエアプログラムを生成するための装置及びその方法
US6233733B1 (en) Method for generating a Java bytecode data flow graph
US8423982B2 (en) Speculative compilation
US5357452A (en) Automatic generation of auto-checking testing functions
US6072952A (en) Method and apparatus for coalescing variables
US10157055B2 (en) Code refactoring mechanism for asynchronous code optimization using topological sorting
CN109313547B (zh) 用于cpu利用率和代码重构的查询优化器
JP2002149416A (ja) プログラムの最適化方法及びこれを用いたコンパイラ
JPH06103463B2 (ja) コード生成方法
US6895580B2 (en) Expression reduction during compilation through routine cloning
JP2001166947A (ja) コンパイル処理方式
US20050160410A1 (en) Object-oriented optimization code generator and a method therefor
JP3802058B2 (ja) ソフトウェア・コンパイル・ユニットを条件付きでコンパイルするシステム、方法およびコンパイラ・プリプロセッサ
US6665864B1 (en) Method and apparatus for generating code for array range check and method and apparatus for versioning
JP3305767B2 (ja) ソート処理方法及びコンパイル方法
JP3840149B2 (ja) コンパイラ、演算処理システム及び演算処理方法
JP3915208B2 (ja) コンパイル装置
JP3018783B2 (ja) コンパイル方式
US7627859B2 (en) Method for configuring non-script language library files to be run as scripts
JP2002140198A (ja) インライン展開方法
JPH0689187A (ja) インライン展開最適化方法
JP3044953B2 (ja) 言語処理システムのシンボル処理方式
JPH06290159A (ja) 並列計算機のプロセス割当方法
JP2944500B2 (ja) コンパイル装置および方法

Legal Events

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

Free format text: PAYMENT UNTIL: 20080510

Year of fee payment: 6

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

Free format text: PAYMENT UNTIL: 20090510

Year of fee payment: 7

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

Free format text: PAYMENT UNTIL: 20100510

Year of fee payment: 8

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

Free format text: PAYMENT UNTIL: 20110510

Year of fee payment: 9

LAPS Cancellation because of no payment of annual fees