(57)【特許請求の範囲】
【請求項１】
高級言語から生成された中間コードに対して最適化を行う中間コード最適化部と、
この最適化された中間コードから生成されたアセンブラコードのコンパイルを行いオブジェクトコードを生成するアセンブラコードコンパイル部とを備えたオブジェクトコード生成装置において、
前記中間コード最適化部は、多分岐判断構文の中間コードに対し、
前記多分岐判断構文の各分岐の分岐先のうち、互いに異なる分岐先のみが登録される分岐先テーブルと、
前記多分岐判断構文の各分岐の分岐先のインデックスが登録されるインデックステーブルと、
を具備させ、前記分岐先を段階的に示すようにする最適化処理を行うことを特徴とするオブジェクト生成装置。
【請求項２】
前記中間コード最適化部は、
前記多分岐判断構文に関する情報を収集する多分岐判断構文情報収集手段と、この多分岐判断構文情報収集手段にて収集された情報により分岐先テーブルを作成するか否かの判断を行う分岐先テーブル作成判断手段と、
この分岐先テーブル作成判断手段にて分岐先テーブルを作成すると判断された多分岐判断構文に対し、前記多分岐判断構文情報収集手段にて収集された情報によりインデックステーブルを作成するか否かの判断を行うインデックステーブル作成判断手段と、
このインデックステーブル作成判断手段にてインデックステーブルを作成すると判断された多分岐判断構文に対して、前記多分岐判断構文の各分岐の分岐先のうち、互いに異なる分岐先のみが登録される分岐先テーブルと、前記多分岐判断構文の各分岐の分岐先のインデックスを示すインデックステーブルと、により分岐先を段階的に示すように最適化処理を行う第１の最適化処理手段と、
を備えることを特徴とする請求項１記載のオブジェクト生成装置。
【請求項３】
前記オブジェクト生成装置は、
前記分岐先テーブル作成判断手段にて分岐先テーブルを作成しないと判断された多分岐判断構文に対して比較命令列を用いた最適化処理を行う第２の最適化処理手段と、
前記インデックステーブル作成判断手段にてインデックステーブルを作成しないと判断された多分岐判断構文に対して分岐先テーブルを用いた最適化処理を行う第３の最適化処理手段と、
をさらに備えることを特徴とする請求項２記載のオブジェクト生成装置。
【請求項４】
コンピュータを用いて、高級言語から生成された中間コードに対して最適化を行い、この最適化された中間コードから生成されたアセンブラコードのコンパイルを行いオブジェクトコードを生成するオブジェクトコード生成方法において、
前記最適化の際に、多分岐判断構文の中間コードに対し、
前記多分岐判断構文の各分岐の分岐先のうち、互いに異なる分岐先のみが登録された分岐先テーブルと、
前記多分岐判断構文の各分岐の分岐先のインデックスが登録されるインデックステーブルと、
を具備させ、前記中間コードが前記分岐先を段階的に示すようにする最適化処理を前記コンピュータが行うことを特徴とするオブジェクト生成方法。
【請求項５】
コンピュータを用いた前記最適化の際に多分岐判断構文の中間コードに対し、
コンピュータが、前記多分岐判断構文に関する情報を収集する多分岐判断構文情報収集ステップと、
この多分岐判断構文情報収集ステップにて収集された情報により分岐先テーブルを作成するか否かの判断をコンピュータが行う分岐先テーブル作成判断ステップと、
この分岐先テーブル作成判断ステップにて分岐先テーブルを作成すると判断された多分岐判断構文に対し、前記多分岐判断構文情報収集ステップにて収集された情報によりインデックステーブルを作成するか否かの判断をコンピュータが行うインデックステーブル作成判断ステップと、
このインデックステーブル作成判断ステップにてインデックステーブルを作成すると判断された多分岐判断構文に対して、前記多分岐判断構文の各分岐の分岐先のうち、互いに異なる分岐先のみが登録される分岐先テーブルと、前記多分岐判断構文の各分岐の分岐先のインデックスを示すインデックステーブルとを具備させ分岐先を段階的に示すようにする最適化処理をコンピュータが行う最適化処理ステップと、
を含むことを特徴とする請求項４記載のオブジェクト生成方法。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、コンピュータシステムにて用いられるオブジェクト生成装置及びその方法に関し、特に、多分岐判断構文を有する高級言語を機械命令（オブジェクト）に変換する際に、オブジェクト効率を向上させることのできるオブジェクト生成装置及びその方法に関する。
【０００２】
【従来の技術】
高級言語の多分岐判断構文のオブジェクト生成については従来からコンパイラで様々な方法が試みられている。数学的には、多分岐の比較の対象となる定数の値をすべて集めて一つの集合とすると、ある変数に格納された値がその集合の中の一つに一致しているかどうかを調べる問題は、検索アルゴリズムに帰着する。検索にはさまざまな数学的アルゴリズムが存在するため、検索に対応する機械命令を出力する多分岐判断構文のオブジェクト生成も、さまざまな方式が考えられる。
【０００３】
検索のアルゴリズムを多分岐判断構文のオブジェクト生成に応用する場合、検索の結果、変数に格納された値が集合の中にあったかどうかの情報の他に、分岐すべき分岐先アドレスの情報も得られるような機械命令を出力しなければならない。
【０００４】
検索と分岐先アドレスの決定の両方を同時に行い、実行速度効率、オブジェクト効率の両方を損なわない機械命令を出力するため、従来では多分岐判断構文のオブジェクトを生成する際の最適化処理の方法として、比較命令と条件分岐命令をすべて出力する方法（以下、比較命令列を用いた最適化処理と記す）や、範囲を限定して分岐先テーブルを出力する方法（以下、分岐先テーブルを用いた最適化処理と記す）といったものが利用されている。各分岐の比較の対象となる定数が連続した整数値である場合は、範囲を限定して分岐先テーブルを出力する方法の方がより効率的な機械命令を出力することが出来る。
【０００５】
一般的なオブジェクト生成装置のブロック図を図４に示す。このオブジェクト生成装置は、高級言語１００に記述された字句の置き換えを行うマクロ展開部２１０と、高級言語１００の文法の解析を行う構文解析部２２０と、この解析された高級言語１００から高級言語の種類に依存しないコードである中間コードを生成する中間コード生成部２３０と、この生成された中間コードの各種の最適化を行う中間コード最適部２４０と、この最適化された中間コードからアセンブラコード（機械命令）を生成するアセンブラコード生成部２５０と、この生成されたアセンブラコードをオブジェクトコード（機械語）３００に翻訳するアセンブラコードコンパイル部２６０と、を備えるものである。
【０００６】
ここで、中間コード最適化部２４０における最適化処理には、上述した多分岐判断構文の最適化処理が含まれる。この多分岐判断構文とは、所定の条件により分岐する先が２以上の構文であり、代表的なものとして、ある整数型の変数に格納された値により、指定された定数と一致した場合にその定数ラベルへ分岐する構文であるＣ言語のｓｗｉｔｃｈ文を挙げることができる。以下、多分岐判断構文として、Ｃ言語のｓｗｉｔｃｈ文を例に取りＣ言語からのオブジェクトの生成方法について説明する。
【０００７】
まず、比較命令列を用いた最適化処理について説明する。この最適化処理は、最も簡潔な方法で、整数型の変数に格納された値を、指定されたすべての定数と次々に比較して行き、一致した場合にその定数ラベルの実行式文に相当する機械命令列へ分岐するような機械命令を出力する方法である。指定されたどの定数も一致しなかった場合はｄｅｆａｕｌｔラベルの実行式文に相当する機械命令列へ分岐するような機械命令を出力する。この比較命令列を用いた最適化処理は中間コード生成部２３０にて行われる中間コードの生成の過程で行ってもよいが（すなわち、最適化処理として取り扱わずに中間コードの生成処理として取り扱うこともできるが）、ここでは以下の説明の便宜上最適化処理として取り扱う。
【０００８】
この比較命令列を用いた最適化処理にて最適化された中間コードについてのアセンブラコードの典型例を以下に示す。
【０００９】
0003599888.tif 000002
この出力機械命令の性能については次のようになる。整数型の変数に格納された値が、指定された定数を確率的に均等に取り得るものと仮定すると、ｓｗｉｔｃｈ文に入ってから一致した定数ラベルへ分岐までに要する平均実行時間は、
（Ｔｂｃｃ＊  ｎ）／２
である。但し、Ｔｂｃｃは比較命令と条件分岐命令の２命令に要する実行時間、ｎは指定された定数ラベルの総個数である。
【００１０】
また、一致した定数ラベルへ分岐する処理に対応する部分の機械命令の静的なオブジェクトサイズは、
（Ｓｂｃｃ＊  ｎ）＋Ｓｂｒａ
である。但し、Ｓｂｃｃは比較命令と条件分岐命令の２命令の命令長、Ｓｂｒａは無条件分岐の命令長である。従って、平均実行時間、静的オブジェクトサイズともにｎの増加に伴なって増加する。
【００１１】
図５に示すＣ言語のｓｗｉｔｃｈ文について、比較命令列を用いた最適化処理方法でオブジェクト生成を行った結果を図６に示した。
【００１２】
次に、分岐先テーブルを用いた最適化処理について説明する。指定された定数が連続している場合には、分岐先テーブルを作成し、そのテーブルを参照する機械命令を出力するこの最適化処理が利用できる。
【００１３】
まず、整数型の変数に格納された値が、指定された定数の中の最小値と最大値の間に含まれているかを調べる命令列を出力する。その間に含まれない場合は、ｄｅｆａｕｌｔラベルの実行式文に相当する機械命令列へ分岐するような命令列を出力する。その間に含まれていた場合は、整数型の変数に格納された値から、指定された定数の中の最小値を減算し、その結果の値をインデックスとして分岐先テーブルから対応する分岐先を取り出す命令列を出力する。
【００１４】
なお、インデックスとは、テーブルに格納されたデータのうち、何番目のデータを示すかを意味する値である。又、分岐先テーブルには、指定された定数の中の最小値とそれぞれのインデックスを加えた値に相当する定数ラベルへの分岐先アドレスが格納されているデータの列である。
【００１５】
この分岐先テーブルを用いた最適化処理にて最適化された中間コードについてのアセンブラコードの典型例を以下に示す。
【００１６】
0003599888.tif 000003
上記のＳ０ラベルは、分岐先テーブルの先頭アドレスを示す。分岐先テーブルには順番に、定数０，１，２，に対応する定数ラベルへの分岐先アドレスが格納されている。
【００１７】
この出力機械命令の性能については次のようになる。整数型の変数に格納された値が、指定された定数を確率的に均等に取り得るものと仮定すると、ｓｗｉｔｃｈ文に入ってから一致した定数ラベルへ分岐までに要する平均実行時間は、
Ｔｂｃｃ＋Ｔｌｄ＋Ｔｊｍｐ
である。但し、Ｔｂｃｃは比較命令と条件分岐命令の２命令に要する実行時間、Ｔｌｄは分岐先テーブルからアドレスデータをロードするのに要する時間、ＴｊｍｐはＰＣ相対分岐に要する時間である。
【００１８】
また、一致した定数ラベルへ分岐する処理に対応する部分の機械命令の静的なオブジェクトサイズは、
Ｓｂｃｃ＋Ｓｌｄ＋Ｓｊｍｐ＋（Ｓａｄｄｒ＊  ｎ）
である。但し、Ｓｂｃｃは比較命令と条件分岐命令の２命令の命令長、Ｓｌｄは分岐先テーブルからアドレスデータをロードする命令の命令長、ＳｊｍｐはＰＣ相対分岐命令の命令長、Ｓａｄｄｒは分岐先アドレスに必要なバイト数で、（Ｓａｄｄｒ＊  ｎ）は分岐先テーブルのデータサイズを表す。
【００１９】
図６に示すＣ言語のｓｗｉｔｃｈ文について、分岐先テーブルを用いた最適化処理方法でオブジェクト生成を行った結果を図７に示した。
【００２０】
【発明が解決しようとする課題】
しかしながら、従来の多分岐判断構文のオブジェクト生成方法においては、出力機械命令の動的実行速度効率の向上を重点においてきたため、出力機械命令のオブジェクト効率の向上が不十分である。とくに分岐先テーブルを出力する場合、すべての分岐についての分岐先アドレスのテーブルを出力するのは、オブジェクトサイズが増加する恐れがある。
【００２１】
多分岐判断構文の例として、図８のようなＣ言語のｓｗｉｔｃｈ文を取り上げ、分岐先テーブルを用いて最適化処理を行った結果を図９に示す。図８のように分岐の数が多いにも関わらず、分岐先の種類の数が少ない場合であっても、インデックスを各々持つため、オブジェクトの効率が悪かった。例えば、オブジェクトを格納するための装置（メモリ装置等）の容量に制限がある等の理由の出力機械命令のオブジェクト効率を重視する場合は、従来のオブジェクト生成方法だけでは不十分であった。
【００２２】
本発明は上記事情に鑑みて成されたものであり、その目的とするところは、高級言語の多分岐判断構文のコンパイル結果である機械命令のオブジェクトコードの効率を図ることのできるオブジェクト生成装置及びその方法を提供することにある。
【００２３】
【課題を解決するための手段】
上記目的を達成するため、第１の発明の特徴は、高級言語から生成された中間コードに対して最適化を行う中間コード最適化部と、この最適化された中間コードから生成されたアセンブラコードのコンパイルを行いオブジェクトコードを生成するアセンブラコードコンパイル部とを備えたオブジェクトコード生成装置において、前記中間コード最適化部は、多分岐判断構文の中間コードに対し、前記多分岐判断構文の各分岐の分岐先のうち、互いに異なる分岐先のみが登録される分岐先テーブルと、前記多分岐判断構文の各分岐の分岐先のインデックスが登録されるインデックステーブルと、を具備させ、前記分岐先を段階的に示すようにすることである。
ここで、前記中間コード最適化部は、前記多分岐判断構文に関する情報を収集する多分岐判断構文情報収集手段と、この多分岐判断構文情報収集手段にて収集された情報により分岐先テーブルを作成するか否かの判断を行う分岐先テーブル作成判断手段と、この分岐先テーブル作成判断手段にて分岐先テーブルを作成すると判断された多分岐判断構文に対し、前記多分岐判断構文情報収集手段にて収集された情報によりインデックステーブルを作成するか否かの判断を行うインデックステーブル作成判断手段と、このインデックステーブル作成判断手段にてインデックステーブルを作成すると判断された多分岐判断構文に対して、前記多分岐判断構文の各分岐の分岐先のうち、互いに異なる分岐先のみが登録される分岐先テーブルと、前記多分岐判断構文の各分岐の分岐先のインデックスを示すインデックステーブルと、により分岐先を段階的に示すように最適化処理を行う第１の最適化処理手段と、を備えることが好ましい。
【００２４】
また、前記分岐先テーブル作成判断手段にて分岐先テーブルを作成しないと判断された多分岐判断構文に対して比較命令列を用いた最適化処理を行う第２の最適化処理手段と、前記インデックステーブル作成判断手段にてインデックステーブルを作成しないと判断された多分岐判断構文に対して分岐先テーブルを用いた最適化処理を行う第３の最適化処理手段と、をさらに備えることが好ましい。
【００２５】
上記目的を達成するため、第２の発明の特徴は、コンピュータを用いて、高級言語から生成された中間コードに対して最適化を行い、この最適化された中間コードから生成されたアセンブラコードのコンパイルを行いオブジェクトコードを生成するオブジェクトコード生成方法において、前記最適化の際に、多分岐判断構文の中間コードに対し、前記多分岐判断構文の各分岐の分岐先のうち、互いに異なる分岐先のみが登録された分岐先テーブルと、前記多分岐判断構文の各分岐の分岐先のインデックスが登録されるインデックステーブルと、を具備させ、前記中間コードが前記分岐先を段階的に示すようにする最適化処理を前記コンピュータが行うことである。
【００２６】
ここで、コンピュータを用いた前記最適化の際に多分岐判断構文の中間コードに対し、コンピュータが、前記多分岐判断構文に関する情報を収集する多分岐判断構文情報収集ステップと、この多分岐判断構文情報収集ステップにて収集された情報により分岐先テーブルを作成するか否かの判断をコンピュータが行う分岐先テーブル作成判断ステップと、この分岐先テーブル作成判断ステップにて分岐先テーブルを作成すると判断された多分岐判断構文に対し、前記多分岐判断構文情報収集ステップにて収集された情報によりインデックステーブルを作成するか否かの判断をコンピュータが行うインデックステーブル作成判断ステップと、このインデックステーブル作成判断ステップにてインデックステーブルを作成すると判断された多分岐判断構文に対して、前記多分岐判断構文の各分岐の分岐先のうち、互いに異なる分岐先のみが登録される分岐先テーブルと、前記多分岐判断構文の各分岐の分岐先のインデックスを示すインデックステーブルとを具備させ分岐先を段階的に示すようにする最適化処理をコンピュータが行う最適化処理ステップと、を含むことが好ましい。
【００２７】
【発明の実施の形態】
以下、本発明に係るオブジェクト生成装置及びその方法の実施の形態について、図面を参照しながら説明する。
【００２８】
第１の実施形態
図１は本実施形態に係るオブジェクト生成装置のブロック図を示したものである。このオブジェクト生成装置は、図４にて説明した中間コード最適化部２４０のうち、多分岐判断構文最適化部２４１の構成を示したものである。この多分岐判断構文最適化部２４１は、多分岐判断構文に関する情報を収集する多分岐判断構文情報収集手段１と、この多分岐判断構文情報収集手段１にて収集された情報により分岐先テーブルを作成するか否かの判断を行う分岐先テーブル作成判断手段３と、この分岐先テーブル作成判断手段３にて分岐先テーブルを作成すると判断された多分岐判断構文に対し、多分岐判断構文情報収集手段１にて収集された情報によりインデックステーブルを作成するか否かの判断を行うインデックステーブル作成判断手段５と、このインデックステーブル作成判断手段５にてインデックステーブルを作成すると判断された多分岐判断構文に対して、多分岐判断構文の各分岐の分岐先のうち、互いに異なる分岐先のみが登録される分岐先テーブルと、前記多分岐判断構文の各分岐の分岐先のインデックスを示すインデックステーブルと、により分岐先を段階的に示すように最適化処理を行う最適化処理手段７と、を備えるものである。
【００２９】
多分岐判断構文情報収集手段１は、以降の各手段における判断に用いるための各種の情報を収集する。ここで、情報とは、例えば、分岐判断構文の定数ラベルの総数や、その各ラベルの定数値に関するものである。
分岐先テーブル作成判断手段３は、分岐先テーブルを作成するか否かの判断を行う。ここで、この判断は、従来のオブジェクト生成装置でも様々な方法が試みられているが、基本的な基準としては、オブジェクト効率優先の機械命令を出力したければ、
｛（Ｓｂｃｃ＊  ｎ）＋Ｓｂｒａ｝−｛Ｓｂｃｃ＋Ｓｌｄ＋Ｓｊｍｐ＋（Ｓａｄｄｒ＊  ｎ）｝＝（Ｓｂｃｃ−Ｓａｄｄｒ）＊  ｎ−（Ｓｂｃｃ＋Ｓｌｄ＋Ｓｊｍｐ−Ｓｂｒａ）
の正負によって分岐先テーブルを作成するか否かを決定できる。また、実行速度効率優先の機械命令を出力したければ、
｛（Ｔｂｃｃ＊  ｎ）／２｝−｛Ｔｂｃｃ＋Ｔｌｄ＋Ｔｊｍｐ｝
の正負によって分岐先テーブルを作成するか否かの判断を行うことができる。
【００３０】
インデックステーブル作成判断手段５は、分岐先テーブルを作成すると判断された多分岐判断構文に対して、多分岐判断構文情報収集手段１にて収集された情報によりインデックステーブルを作成するか否かの判断を行う。
【００３１】
ここで、多分岐判断構文にて指定された定数ラベルのうち、複数の定数ラベルが同じ分岐先アドレスをもつ場合は、分岐先テーブルに登録される分岐先アドレスの中に同じデータが現れることになる。次のようなｓｗｉｔｃｈ文を例にして説明を行う。
【００３２】
0003599888.tif 000004
まず、これを従来の分岐先テーブルを用いた方法で機械命令を出力すると次のようになる。
【００３３】
0003599888.tif 000005
この出力機械命令の性能はすでに述べたように静的オブジェクトサイズは、
Ｓｂｃｃ＋Ｓｌｄ＋Ｓｊｍｐ＋（Ｓａｄｄｒ＊  ｎ）
であり、平均実行時間は、
Ｔｂｃｃ＋Ｔｌｄ＋Ｔｊｍｐ
である。上記の場合、分岐先テーブルには２種類の分岐先アドレスしかない。
【００３４】
次に、分岐先テーブル及びインデックステーブルを用いた最適化処理により、分岐先テーブルは２種類の分岐先テーブルだけのテーブルとし、各定数ラベルに対するテーブルとしては、分岐先テーブルへのインデックスを登録したテーブルへの参照を利用するようした場合には、出力機械命令は次のようになる。
【００３５】
0003599888.tif 000006
この出力機械命令の性能は次のようになる。静的オブジェクトサイズは、
Ｓｂｃｃ＋Ｓｌｄ＋Ｓｌｄｂ＋Ｓｊｍｐ＋（Ｓｄｄｒ＊  ｋｉｎｄ）＋ｎ
である。但し、Ｓｌｄｂはインデックステーブルから１バイトデータをロードする命令の命令長、ｋｉｎｄは定数ラベルの分岐先のうち、異なった分岐先の種類を示す数である。分岐先の種類が２５５以下ならばインデックスの値は１バイトで済むため、オブジェクトサイズは指定された定数ラベルの数と１バイトを掛けたものとなる。平均実行時間は、
Ｔｂｃｃ＋Ｔｌｄ＋Ｔｌｄｂ＋Ｔｊｍｐ
である。但し、Ｔｌｄｂはインデックステーブルから１バイトデータをロードする命令に要する実行時間である。
【００３６】
分岐先テーブルのみを用いた場合と分岐先テーブル及びインデックステーブルを用いた場合の性能について比較して見ると、
（分岐先テーブルのみの場合の実行時間）−（分岐先テーブル及びインデックステーブルを用いた場合の実行時間）
であるから、
＝｛Ｔｂｃｃ＋Ｔｌｄ＋Ｔｌｄｂ＋Ｔｊｍｐ｝−｛Ｔｂｃｃ＋Ｔｌｄ＋Ｔｊｍｐ｝＝Ｔｌｄｂ
となり、実行時間ではわずかに悪くなるが、この値は定数ラベルの数や、異なった分岐先の種類などに依存しない。オブジェクトサイズでは、
（分岐先テーブルを用いた最適化処理のオブジェクトサイズ）−（分岐先テーブル及びインデックステーブルを用いた最適化処理のオブジェクトサイズ）＝｛Ｓｂｃｃ＋Ｓｌｄ＋Ｓｌｄｂ＋Ｓｊｍｐ＋（Ｓａｄｄｒ＊  ｋｉｎｄ）＋ｎ｝−｛Ｓｂｃｃ＋Ｓｌｄ＋Ｓｊｍｐ＋（Ｓａｄｄｒ＊  ｎ）｝＝Ｓｌｄｂ＋ｋｉｎｄ−（Ｓａｄｄｒ−１）＊  （ｎ−ｋｉｎｄ）
となる。これは正にも負にもなり得るが、ｋｉｎｄに比べてｎが非常に大きい場合はｎが大きければ大きいほどオブジェクトサイズが削減されることになる。
【００３７】
（分岐先テーブルのみの場合のオブジェクトサイズ）＜（分岐先テーブル及びインデックステーブルを用いた場合のオブジェクトサイズ）となる条件をｋｉｎｄについて解くと、
ｋｉｎｄ＜｛（Ｓａｄｄｒ−１）＊  ｎ−Ｓｌｄｂ｝／Ｓａｄｄｒ
という解を得る。分岐先の種類ｋｉｎｄが、定数ラベルの総数ｎに対して上式の条件を満たす場合、分岐先テーブルのみのような機械命令を出力した方がオブジェクトサイズが有利になる。
【００３８】
最適化処理手段７は、インデックステーブル作成判断手段５にてインデックステーブルを作成すると判断された多分岐判断構文に対して分岐先テーブル及びインデックステーブルを用いた最適化処理を行う。以下、この分岐先テーブル及びインデックステーブルを用いた最適化処理を説明する。
【００３９】
多分岐判断構文の例として、図８に示したようなＣ言語のｓｗｉｔｃｈ文を取り上げ、本手段により最適化処理を行った結果を図３に示す。図示の如く、多分岐判断構文の各分岐の分岐先のうち、互いに異なる分岐先のみが登録される分岐先テーブルと、多分岐判断構文の各分岐の分岐先のインデックスが登録されるインデックステーブルとにより分岐先を段階的に示すようにしてある。このような最適化処理を行うことで、所定の場合にはオブジェクトのサイズを小さくすることができるのである。
【００４０】
本実施形態によれば、自動的に分岐先テーブル及びインデックステーブルを用いた場合のオブジェクト生成装置及びその方法を実施することにより、オブジェクト効率の向上が実現する。
【００４１】
また、本実施形態のオブジェクト生成装置はＣ言語のｓｗｉｔｃｈ文だけでなく、多分岐判断構文をもつ言語のコンパイラで使用することができる。
【００４２】
第２の実施形態
上記第１の実施形態においては、インデックステーブルを作成すると判断された多分岐判断構文のみに対して最適化のための処理を行う説明を行ったが、分岐先テーブル作成判断手段３及びインデックステーブル作成判断手段５の判断によって最適化処理の内容を変えるようにすることもできる。この場合の処理のフローチャートを図２に示す。このフローチャートを用いて本実施形態に係るオブジェクト生成装置の動作を説明する。
【００４３】
まず、定数ラベルの総数と各ラベルの定数値の情報収集を行う（ステップＳ１０１）。続いて、この情報収集により、分岐先テーブルの作成が可能か否かの判断を行う（ステップＳ１０２）。この判断は、上述の分岐先テーブル作成判断手段３で説明したような手法により判断を行うことができる。これにより、分岐先テーブルの作成を行うと判断しない場合には、比較命令列を用いた最適化処理を行う（ステップＳ１０３）。この最適化処理の説明は上述したので、ここでは省略する。
【００４４】
続いて、分岐先テーブルの作成が可能と判断された場合には、多分岐判断構文のラベルと分岐先の対応付けを行う（ステップＳ１０４）。この対応付けにより、分岐先の種類の個数を調べてインデックステーブルの作成が可能か否かの判断を行う（ステップＳ１０５）。この判断は、上述のインデックステーブル作成判断手段５で説明したような手法により判断を行うことができる。これにより、分岐先テーブルの作成を行うと判断しない場合には、分岐先テーブルを用いた最適化処理を行う（ステップＳ１０６）。この最適化処理の説明は上述したので、ここでは省略する。
【００４５】
続いて、インデックステーブルの作成が可能と判断された場合には、分岐先テーブル及びインデックステーブルを用いた最適化処理を行う（ステップＳ１０７）。
【００４６】
このように、本実施形態によれば、自動的に最適なオブジェクトを生成することができる。また、本実施形態では高級言語の多分岐判断構文の最適化が強力になるため、出力機械命令のオブジェクト効率が向上する。
【００４７】
これにより、コンパイラの出力結果の機械命令をＲＯＭに記録した場合、ＲＯＭの使用量が削減できるなどの利点がある。
【００４８】
【発明の効果】
以上説明してきたように、本発明に係るオブジェクト生成装置及びその方法によれば、高級言語の多分岐判断構文のコンパイル結果である機械命令のオブジェクトコードの効率を図ることができる。
【図面の簡単な説明】
【図１】本発明に係るオブジェクト生成装置の多分岐判断構文最適化部を示すブロック図である。
【図２】本発明に係るオブジェクト生成方法の多分岐判断構文最適化の処理フローを示す図である。
【図３】図８のｓｗｉｔｃｈ文を本発明の方式でコンパイルした結果である。
【図４】一般的なオブジェクト生成装置を示すブロック図である。
【図５】多分岐判断構文の一例であるＣ言語のｓｗｉｔｃｈ文である。
【図６】図５のｓｗｉｔｃｈ文をＣコンパイラでコンパイルした結果の一例である。
【図７】図５のｓｗｉｔｃｈ文をＣコンパイラでコンパイルした結果の一例である。
【図８】本実施形態を説明するために用いた多分岐判断構文である。
【図９】図８のｓｗｉｔｃｈ文を従来の方式でコンパイルした結果の一例である。
【符号の説明】
１  多分岐判断構文情報収集手段
３  分岐先テーブル作成手段
５  インデックステーブル作成手段
７  最適化処理手段
１１  中間コード
１３  最適化済中間コード
１００  高級言語
２００  オブジェクトコード生成部
２１０  マクロ展開部
２２０  構文解析部
２３０  中間コード生成部
２４０  中間コード最適化部
２４１  多分岐判断構文最適化部
２５０  アセンブラコード生成部
２６０  アセンブラコードコンパイル部
３００  オブジェクトコード
【図１】
0003599888.tif 000007
【図２】
0003599888.tif 000008
【図３】
0003599888.tif 000009
【図４】
0003599888.tif 000010
【図５】
0003599888.tif 000011
【図６】
0003599888.tif 000012
【図７】
0003599888.tif 000013
【図８】
0003599888.tif 000014
【図９】
0003599888.tif 000015