(57)【特許請求の範囲】
【請求項１】
ソースプログラムと、固定小数点型を含む各データ型の型情報を格納する記憶装置と、
前記記憶装置から前記ソースプログラムを取得し、取得した前記ソースプログラムから型指定子及び即値を検出する検出部と、
コンパイルオプションを解析し、浮動小数点型から固定小数点型への型変換が指示されているかを判定するオプション解析部と、
前記オプション解析部により型変換が指示されたと判定され、かつ、前記型指定子を解析して前記型指定子が浮動小数点型であるとき、前記型指定子によりデータ型が指定される変数及び関数のいずれかを、前記固定小数点型の型情報にリンクさせて前記記憶装置に格納する型指定子解析部と、
前記オプション解析部により型変換が指示されたと判定され、かつ、前記即値を解析して前記即値が接尾語を有しない小数及び浮動小数点型の接尾語を有する小数のいずれかであるとき、前記即値を前記固定小数点型の型情報にリンクさせて前記記憶装置に格納する即値解析部とを備え、
前記記憶装置に格納したリンク情報に基づき前記ソースプログラムの構文解析を行い、前記構文解析後のソースプログラムからオブジェクトコードを生成する
ことを特徴とするコンパイル装置。
【請求項２】
前記オプション解析部は、前記型変換後の固定小数点型のサイズが指定されているかを更に判定し、
前記型指定子解析部は、前記変数及び前記関数を、指定されたサイズを有する固定小数点型の型情報にリンクさせ、
前記即値解析部は、前記即値を、指定されたサイズを有する固定小数点型の型情報にリンクさせる
ことを特徴とする請求項１に記載のコンパイル装置。
【請求項３】
浮動小数点型から固定小数点型への型変換を指示するコンパイラ指示子を検出する指示子検出部を更に備える
ことを特徴とする請求項１に記載のコンパイル装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、Ｃ言語等の高級言語で記述されたソースプログラムを機械語（オブジェクトコード）に翻訳（コンパイル）するコンパイル装置に関する。
【背景技術】
【０００２】
音声及び映像を含むマルチメディアのデータ処理をする場合、浮動小数点数のデータ型（以下において単に「浮動小数点型」という。）ではなく固定小数点数のデータ型（以下において単に「固定小数点型」という。）で処理すれば、高速で十分な精度の実行結果が得られることが知られている。一方、プログラミング言語の仕様では、通常、固定小数点型は存在しないため、新たなプログラムを作成する際に基準となるプログラムは浮動小数点型を使用して記述されていることが多い。この場合、浮動小数点型で記述された部分を、擬似的に固定小数点を表現した整数型に手作業で変換する必要がある。したがって、変換作業により、長時間を要するだけではなく、バグを混入する可能性がある。
【０００３】
上記した問題に鑑みて、浮動小数点型の記述のままコンパイルを実行し、オブジェクトコード生成の最終段階で、リンカによりライブラリをリンクすることにより、浮動小数点型の記述を固定小数点型の記述に変換する手法が用いられている（例えば、非特許文献１参照。）。
【０００４】
しかしながら、上述した背景技術においては、ソースプログラム中の浮動小数点型の記述を固定小数点型の記述と解釈してコンパイルを実行できない。
【非特許文献１】“C28x IQMath Library - A Virtual Floating Point Engine”、［online］、テキサス・インスツルメンツ・インコーポレイテッド、［平成１７年７月４日検索］、インターネット＜URL：http://www.ti.com/iqmath＞
【発明の開示】
【発明が解決しようとする課題】
【０００５】
本発明は、ソースプログラム中の浮動小数点型の記述を固定小数点型の記述と解釈してコンパイルを実行可能なコンパイル装置を提供する。
【課題を解決するための手段】
【０００６】
本発明の一態様によれば、（ａ）ソースプログラムと、固定小数点型を含む各データ型の型情報を格納する記憶装置と、（ｂ）記憶装置からソースプログラムを取得し、取得したソースプログラムから型指定子及び即値を検出する検出部と、（ｃ）型指定子を解析して、型指定子が浮動小数点型であるとき、型指定子によりデータ型が指定される変数及び関数のいずれかを、固定小数点型の型情報にリンクさせて記憶装置に格納する型指定子解析部と、（ｄ）即値を解析して、即値が接尾語を有しない小数及び浮動小数点型の接尾語を有する小数のいずれかであるとき、即値を固定小数点型の型情報にリンクさせて記憶装置に格納する即値解析部とを備えるコンパイル装置が提供される。
【発明の効果】
【０００７】
本発明によれば、ソースプログラム中の浮動小数点型の記述を固定小数点型と解釈してコンパイルを実行可能なコンパイル装置を提供できる。
【発明を実施するための最良の形態】
【０００８】
以下に、図面を参照して、本発明の第１及び第２実施形態を説明する。以下の第１及び第２実施形態における図面の記載において、同一又は類似の部分には同一又は類似の符号を付している。
【０００９】
（第１実施形態）
本発明の第１実施形態に係るコンパイル装置は、図１に示すように、処理装置１ａ、入力装置２、出力装置３、及び記憶装置４ａ等を備える。処理装置１ａは、ソースプログラムをオブジェクトコードにコンパイルするために、ソースプログラムの字句を解析して複数のトークンに分割する字句解析部６ａと、字句解析後のソースプログラムが文法的に正しいかを解析する構文解析部７ａと、構文解析後のソースプログラムからオブジェクトコードを生成するコード生成部５１の各機能を実行する。記憶装置４ａは、Ｃ言語等の高級言語で記述されたソースプログラムと、固定小数点型を含む各データ型の型情報とを格納する。以下の説明においては、ソースプログラムがＣ言語で記述されている場合を例に説明する。字句解析部６ａは、記憶装置４ａからソースプログラムを取得し、取得したソースプログラムから型指定子及び即値を検出する検出部６１と、型指定子を解析して、型指定子が浮動小数点型であるとき、型指定子によりデータ型が指定される変数及び関数のいずれかを、固定小数点型の型情報にリンクさせて記憶装置４ａに格納する型指定子解析部６２ａと、即値を解析して、即値が接尾語を有しない小数及び浮動小数点型の接尾語を有する小数のいずれかであるとき、即値を固定小数点型の型情報にリンクさせて記憶装置４ａに格納する即値解析部６３ａとを備える。
【００１０】
ここで、「型指定子」とは、変数等のデータ型を指定する指定子である。浮動小数点型においては、指数部と仮数部とに分けて数値が表現される。これに対して固定小数点型においては、図２に示すように、ビット列の所定の位置を小数点として、上位ビット及び下位ビットを整数部及び小数部にそれぞれ割り当てることで数値が表現される。固定小数点型は表現可能な値の範囲が浮動小数点型よりも狭い一方、整数型と同様のデータとして演算できるため、演算が高速になる。
【００１１】
「即値」とは、ソースプログラム中に記述された定数を意味する。「接尾語」は、即値のサイズ修飾及び符号修飾を行うために用いられる。更に、「型情報」には、例えば各データ型の型番号、型名、及びサイズ等が含まれる。
【００１２】
また、処理装置１ａは、コンパイラ６０ａの起動時において、コンパイルオプションを解析し、浮動小数点型から固定小数点型への型変換が指示されているかを判定するオプション解析部５０ａを更に備える。コンパイルオプションで型変換を指示することにより、ソースプログラムを変更する作業を不要とすることができる。オプション解析部５０ａは、浮動小数点型から固定小数点型への型変換が指示されていると判定した場合に、例えば変換フラグを立てる。具体的には変換フラグの値を真（論理値“１”）に設定する。
【００１３】
よって、型指定子解析部６２ａは、変換フラグの値を参照して、変換フラグの値が真であるときに、浮動小数点型の型指定子によりデータ型が指定される変数及び関数のいずれかを固定小数点型の型情報にリンクさせる。同様に即値解析部６３ａは、変換フラグの値を参照して、変換フラグの値が真であるときに、接尾語を有しない小数及び浮動小数点型の接尾語を有する小数のいずれかを固定小数点型の型情報にリンクさせる。
【００１４】
また、型指定子解析部６２ａは、変換フラグの値が真である場合に、ソースプログラム中に記述された浮動小数点型の型指定子を対応する（サイズの等しい）固定小数点型の型情報にリンクさせる。Ｃ言語の場合、単精度（ｆｌｏａｔ）の浮動小数点型に対してはｓｈｏｒｔサイズの固定小数点型（ｓｈｏｒｔ＿Ａｃｃｕｍ）の型情報をリンクさせ、倍精度（ｄｏｕｂｌｅ）の浮動小数点型に対してはｌｏｎｇサイズの固定小数点型（ｌｏｎｇ＿Ａｃｃｕｍ）の型情報をリンクさせる。
【００１５】
更に、図１に示す記憶装置４ａは、ソースプログラム格納領域４１、変換フラグ格納領域４２、型情報テーブル格納領域４３、リンク情報格納領域４４、及びオブジェクトコード格納領域４５を備える。ソースプログラム格納領域４１にはソースプログラムが格納される。変換フラグ格納領域４２には変換フラグの値が格納される。型情報テーブル格納領域４３には、固定小数点型を含む各データ型の型情報が格納される。リンク情報格納領域４４には、型指定子解析部６２ａ及び即値解析部６３ａによるリンク結果が格納される。オブジェクトコード格納領域４５には、コード生成部５１が生成したオブジェクトコードが格納される。
【００１６】
型情報テーブル格納領域４３には、図３に示すような型情報テーブルが予め格納されている。図３に示す型情報テーブル例においては、上述したように、各データ型に対して型番号、型名、及びサイズが定義されている。「型番号」とは、各データ型を識別可能な識別子である。「型名」とは、プログラミング言語で規定される各データ型の名前を意味する。「サイズ」とは、例えば、各データ型のデータサイズをバイト単位で規定したものである。
【００１７】
尚、図３に示す型情報テーブル例において、型番号“１”のｃｈａｒ型は、文字型を示し、文字（２進コード化した文字）を表現するデータ型である。型番号“２”のｓｈｏｒｔ型は整数値を示すデータ型である。型番号“３”のｉｎｔ型はｓｈｏｒｔ型と等しい又はｓｈｏｒｔ型よりも長いバイト幅を有する整数値を示すデータ型である。型番号“４”のｌｏｎｇ型はｉｎｔ型と等しい又はｉｎｔ型よりも長いバイト幅を有する整数値を示すデータ型であるが、図３に示す例においてはｉｎｔ型と等しいバイト幅を有している。
【００１８】
更に、型番号“５”のｆｌｏａｔ型は、単精度の浮動小数点数を示すデータ型であり、４バイトのバイト幅を有している。型番号“６”のｄｏｕｂｌｅ型は、倍精度の浮動小数点数を示すデータ型であり、ｆｌｏａｔ型よりも長い８バイトのバイト幅を有している。
【００１９】
型番号“７”のｓｈｏｒｔ＿Ａｃｃｕｍ型は、固定小数点数を示すデータ型であり、４バイトのバイト幅を有している。型番号“８”のｌｏｎｇ＿Ａｃｃｕｍ型は、固定小数点数を示すデータ型であり、ｓｈｏｒｔ＿Ａｃｃｕｍ型よりも長い８バイトのバイト幅を有している。
【００２０】
また、図１に示すソースプログラム格納領域４１には、例えば図４に示すようなソースプログラムが格納される。図４に示すソースプログラム例においては、引数がｄｏｕｂｌｅ型の変数“ａ”であり、戻り値がｄｏｕｂｌｅ型の変数“ｂ”である関数“ｆｕｎｃ”を示している。
【００２１】
更に、検出部６１は、図４に示すソースプログラムから、型指定子“ｄｏｕｂｌｅ”Ｄ１，Ｄ２，及びＤ３を検出し、即値“０．５”を検出する。更に、型指定子解析部６２ａは、変換フラグ格納領域４２に格納された変換フラグの値が真である場合、図５に示すように、型指定子“ｄｏｕｂｌｅ”Ｄ１によりデータ型の指定される関数“ｆｕｎｃ”、型指定子“ｄｏｕｂｌｅ”Ｄ２によりデータ型の指定される変数“ａ”、及び型指定子“ｄｏｕｂｌｅ”Ｄ２によりデータ型の指定される変数“ｂ”を、図３に示す型番号“８”（ｌｏｎｇ＿Ａｃｃｕｍ）にリンクさせる。
【００２２】
また、即値解析部６３ａは、変換フラグ格納領域４２に格納された変換フラグの値が真である場合、図５に示すように、即値“０．５”を図３に示す型番号“８”（ｌｏｎｇ＿Ａｃｃｕｍ）にリンクさせる。この結果、図５に示すようなリンク情報が作成される。
【００２３】
更に、構文解析部７ａは、リンク情報を参照して構文解析を行う。したがって、図５に示す例においては、関数“ｆｕｎｃ”、変数“ａ”及び“ｂ”、即値“０．５”は、ｌｏｎｇ＿Ａｃｃｕｍ型と解釈されて構文解析される。よって、構文解析後のソースプログラムは、図６に示すようなプログラムとなる。図６に示すプログラムにおいては、図４に示す型指定子“ｄｏｕｂｌｅ”が型指定子“ｌｏｎｇ＿Ａｃｃｕｍ”に変換されている。また、図４に示した即値“０．５”は、図６に示すように、ｌｏｎｇサイズの固定小数点型を意味する接尾語“ｋ”が付加されている。
【００２４】
一方、変換フラグ格納領域４２に格納された変換フラグの値が偽（論理値“０”）である場合、型指定子解析部６２ａは、型指定子“ｄｏｕｂｌｅ”Ｄ１によりデータ型の指定される関数“ｆｕｎｃ”、型指定子“ｄｏｕｂｌｅ”Ｄ２によりデータ型の指定される変数“ａ”、及び型指定子“ｄｏｕｂｌｅ”Ｄ２によりデータ型の指定される変数“ｂ”を、図３に示す型番号６（ｄｏｕｂｌｅ）にリンクさせる。
【００２５】
また、即値解析部６３ａは、変換フラグ格納領域４２に格納された変換フラグの値が偽である場合、即値“０．５”を図３に示す型番号６（ｄｏｕｂｌｅ）にリンクさせる。したがって、変換フラグの値が偽である場合、構文解析後のソースプログラムは、図４に示す記述に維持される。
【００２６】
詳細には、図１に示す構文解析部７ａは、例えば固定小数点型解析部７１、浮動小数点型解析部７２、及び整数型解析部７３等を備える。固定小数点型解析部７１、浮動小数点型解析部７２、及び整数型解析部７３は、型情報テーブルを参照して、固定小数点型の記述、浮動小数点型の記述、及び整数型の記述をそれぞれ構文解析する。尚、構文解析部７ａは、図示を省略する文字型解析部等を更に備える。
【００２７】
更に、検出部６１は、図７に示すように、基本要素切り出し部６１１、型指定子検出部６１２、及び即値検出部６１３を備える。基本要素切り出し部６１１は、ソースプログラムを基本要素毎に切り出す。ここで「基本要素」とは、プログラミング言語のキーワード、演算子、変数名、定数、及び区切り記号等のプログラム中の最小単位を意味する。例えば、図４に示したソースプログラム例においては、図８の破線で囲まれる各記述が基本要素に相当する。
【００２８】
型指定子検出部６１２は、複数の基本要素に分割されたソースプログラムから、型指定子及び型指定子によりデータ型の指定される変数及び関数のいずれかを検出する。即値検出部６１３は、複数の基本要素に分割されたソースプログラムから、接尾語を有しない小数及び浮動小数点型の接尾語を有する小数のいずれかを検出する。
【００２９】
更に、型指定子解析部６２ａは図９に示すように、浮動小数点型判定部６２１、フラグ判定部６２２、サイズ判定部６２３、及びリンク部６２４を備える。浮動小数点型判定部６２１は、検出された型指定子が浮動小数点型の型指定子であるかを判定する。フラグ判定部６２２は、変換フラグの値が真であるかを判定する。サイズ判定部６２３は、変換フラグの値が真である場合、検出された型指定子のサイズを判定する。リンク部６２４は、変換フラグの値が真である場合、検出された型指定子を、判定されたサイズに対応する固定小数点型の型情報にリンクする。
【００３０】
即値解析部６３ａは、図１０に示すように、浮動小数点型判定部６３１、フラグ判定部６３２、接尾語判定部６３３、及びリンク部６３４を備える。浮動小数点型判定部６３１は、検出された即値が浮動小数点型の即値であるかを判定する。接尾語判定部６３３は、検出された即値が接尾語を有するかを判定する。更に、接尾語判定部６３３は、検出された即値に付加されている接尾語が、浮動小数点型の接尾語であるかを判定する。フラグ判定部６３２は、変換フラグの値が真であるかを判定する。但し、フラグ判定部６３２を備えずに、図９に示すフラグ判定部６２２の判定結果を利用しても良い。リンク部６３４は、変換フラグの値が真である場合、浮動小数点型の即値を、対応する固定小数点型の型情報にリンクする。
【００３１】
尚、図１に示した入力装置２としては、例えばキーボード及びマウス等が使用できる。出力装置３としては、ディスプレイ又はプリンタ等が使用可能である。記憶装置４ａには、ハードディスク等の補助記憶装置、ＳＤＲＡＭ等の主記憶装置、或いはキャッシュメモリ及びレジスタ等が含まれる。
【００３２】
次に、図１１に示すフローチャートを参照して、図１に示すコンパイル装置の動作の概要を説明する。
【００３３】
（Ａ）ステップＳ１０１において、検出部６１は、ソースプログラム格納領域４１に格納されたソースプログラムを取得し、取得したソースプログラムから型指定子及び即値等を検出する。また、オプション解析部５０ａは、ソースプログラムの取得前のコンパイラ６０ａの起動時にコンパイルオプションを解析する。尚、ステップＳ１０１の詳細な処理については後述する。
【００３４】
（Ｂ）ステップＳ１０２において、型指定子解析部６２ａは、ステップＳ１０１で検出された型指定子、及び型指定子によりデータ型の指定される変数及び関数のいずれかを解析する。ステップＳ１０２の詳細な処理については後述する。
【００３５】
（Ｃ）ステップＳ１０３において、即値解析部６３ａは、ステップＳ１０１で検出された即値を解析する。ステップＳ１０３の詳細な処理については後述する。ステップＳ１０３は、ステップＳ１０２の前に実行されても良く、ステップＳ１０２と同時に実行されても構わない。ステップＳ１０１〜ステップＳ１０３の結果は複数のトークンとして構文解析部７ａに供給される。
【００３６】
（Ｄ）ステップＳ１０４において、構文解析部７ａは、トークン単位に分割されたソースプログラムを構文解析する。具体的には、構文解析部７ａは、字句解析によって得られるトークンの列が、プログラミング言語の文法規則に適合しているかを調べ、プログラムを構文木と呼ばれる木構造に変換する。
【００３７】
（Ｅ）ステップＳ１０５において、コード生成部５１は、例えば構文解析後のソースプログラムを中間コードに変換し、中間コードの最適化後にオブジェクトコードを生成する。或いは、ソースプログラムを中間コードに変換せずに、オブジェクトコードを直接生成しても良い。生成されたオブジェクトコードは、オブジェクトコード格納領域４５に格納される。
【００３８】
次に、図１２に示すフローチャートを参照して、図７に示す検出部６１による検出処理の手順例を説明する。
【００３９】
（ａ１）ステップＳ２０１において、基本要素切り出し部６１１は、ソースプログラムを基本要素単位に分割する。
【００４０】
（ａ２）ステップＳ２０２において、型指定子検出部６１２は、切り出された基本要素が、型指定子、及び型指定子によりデータ型の指定される変数及び関数のいずれかであるかを判定する。切り出された基本要素が、型指定子及び型指定子によりデータ型の指定される変数及び関数のいずれかであると判定された場合、ステップＳ１０２に進む。
【００４１】
（ａ３）ステップＳ２０３において、即値検出部６１３は、切り出された基本要素が、接尾語を有しない小数及び浮動小数点型の接尾語を有する小数のいずれかであるかを判定する。切り出された基本要素が、接尾語を有しない小数及び浮動小数点型の接尾語を有する小数のいずれかであると判定された場合、ステップＳ１０３に進む。尚、ステップＳ２０３は、ステップＳ２０２の前に実行されても良く、ステップＳ２０２と同時に実行されても良い。
【００４２】
（ａ４）ステップＳ２０４においては、切り出された基本要素が、型変換に関係しない基本要素であると判定されているので、他の基本要素解析部により基本要素解析処理が行われる。
【００４３】
次に、図１３に示すフローチャートを参照して、図９に示す型指定子解析部６２ａによる型指定子解析処理の手順例を説明する。
【００４４】
（ｂ１）ステップＳ３０１において、浮動小数点型判定部６２１は、検出された型指定子が浮動小数点型の型指定子であるかを判定する。検出された型指定子が浮動小数点型の型指定子であると判定された場合、ステップＳ３０２に進む。検出された型指定子が浮動小数点型の型指定子でないと判定された場合、ステップＳ３０３に進む。ステップＳ３０３においては、図１に示す整数型解析部７３又は図示を省略する文字型解析部等による構文解析処理が行われる。
【００４５】
（ｂ２）ステップＳ３０２において、フラグ判定部６２２は、変換フラグ格納領域４２に格納された変換フラグの値が真であるかを判定する。変換フラグの値が真であると判定された場合、ステップＳ３０４に進む。変換フラグの値が偽であると判定された場合、ステップＳ３０５に進む。ステップＳ３０５において、浮動小数点型解析部７２による構文解析処理が行われる。
【００４６】
（ｂ３）ステップＳ３０４において、サイズ判定部６２３は、浮動小数点型の型指定子のサイズがｆｌｏａｔサイズであるかを判定する。浮動小数点型の型指定子のサイズがｆｌｏａｔサイズであると判定された場合、ステップＳ３０６に進む。浮動小数点型の型指定子のサイズがｆｌｏａｔサイズでないと判定された場合、即ちｄｏｕｂｌｅサイズであると判定された場合、ステップＳ３０７に進む。
【００４７】
（ｂ４）ステップＳ３０６において、リンク部６２４は、ｆｌｏａｔ型で指定される変数又は関数を、図３に示す型番号“７”の“ｓｈｏｒｔ＿Ａｃｃｕｍ”にリンクさせる。リンクが完了するとステップＳ３０８に進み、
（ｂ５）ステップＳ３０７において、リンク部６２４は、ｄｏｕｂｌｅ型で指定される変数又は関数を、図３に示す型番号“８”の“ｌｏｎｇ＿Ａｃｃｕｍ”にリンクさせる。リンクが完了するとステップＳ３０８に進む。
【００４８】
（ｂ６）ステップＳ３０８において、固定小数点型解析部７１による構文解析処理が行われる。
【００４９】
次に、図１４に示すフローチャートを参照して、図１０に示す即値解析部６３ａによる即値解析処理の手順例を説明する。
【００５０】
（ｃ１）ステップＳ４０１において、浮動小数点型判定部６３１は、検出された即値が浮動小数点型の即値であるかを判定する。即値が浮動小数点型であると判定された場合、ステップＳ４０２に進む。即値が浮動小数点型でないと判定された場合、ステップＳ４０３に進む。ステップＳ４０３においては、図１に示す整数型解析部７３により構文解析処理が行われる。
【００５１】
（ｃ２）ステップＳ４０２において、接尾語判定部６３３は、即値が接尾語を有するかを判定する。即値が接尾語を有すると判定された場合、ステップＳ４０４に進む。即値が接尾語を有しないと判定された場合、ステップＳ４０５に進む。ステップＳ４０５においては、即値がｄｏｕｂｌｅ型であると判定される。
【００５２】
（ｃ３）ステップＳ４０４において、接尾語判定部６３３は、即値に付加されている接尾語が、浮動小数点型の接尾語であるかを判定する。接尾語が浮動小数点型であると判定された場合、ステップＳ４０６に進む。接尾語が浮動小数点型でないと判定された場合、ステップＳ４０７に進む。ステップＳ４０７においては、即値がｆｌｏａｔ型であると判定される。
【００５３】
（ｃ４）ステップＳ４０９において、フラグ判定部６３２は、変換フラグの値が真であるかを判定する。変換フラグの値が真であると判定された場合、ステップＳ４１０に進む。変換フラグの値が偽であると判定された場合、ステップＳ４１１に進む。ステップＳ４１１においては、浮動小数点型解析部７２により構文解析処理が行われる。
【００５４】
（ｃ５）ステップＳ４０６において、接尾語判定部６３３は、接尾語が固定小数点型であるかを判定する。接尾語が固定小数点型であると判定された場合、ステップＳ４１２に進む。接尾語が固定小数点型でないと判定された場合、ステップＳ４０８に進む。ステップＳ４１２においては、固定小数点型解析部７１により構文解析処理が行われる。ステップＳ４０８においては、例えば、図１に示す出力装置３としてのディスプレイ上にエラーメッセージが表示される。
【００５５】
このように、本発明の第１実施形態に係るコンパイル装置によれば、ソースプログラム中に記述された浮動小数点型の記述を固定小数点型と解釈してコンパイルを実行できる。この結果、手作業で変換を行った場合よりも変換時間を大幅に削減できる。したがって、浮動小数点記述を固定小数点記述に変換した際のコードサイズと実行性能を容易に見積もることができる。
【００５６】
（第１実施形態の第１変形例）
本発明の第１実施形態の第１変形例に係るコンパイル装置は、図１に示したコンパイル装置が、構文解析後のソースプログラムに基づいてオブジェクトコードの生成までを行うのに対して、構文解析部７ａの構文解析結果を例えばソースプログラム格納領域４１に書き戻すことにより、ソースプログラム中の浮動小数点記述を固定小数点記述に変換したプログラムを得ることができる。
【００５７】
したがって、本発明の第１実施形態の第１変形例に係るコンパイル装置によれば、ソースプログラム中の浮動小数点記述を固定小数点記述に変換した結果を得ることができるので、他のコンパイル装置を用いたコンパイルが可能となる。
【００５８】
（第１実施形態の第２変形例）
本発明の第１実施形態の第２変形例に係るコンパイル装置は、図１５に示すように、字句解析部６ｂが、浮動小数点型から固定小数点型へのデータ型の変換を指示するコンパイラ指示子を検出する指示子検出部７４を更に備える。即ち、コンパイル時に指定されるコンパイラオプションで変換フラグを立てるのではなく、コンパイラへのコンパイラ指示子をソースプログラム中に記述しても良い。一例として、Ｃ言語においては#pragma指令がコンパイラ指示子として利用できる。
【００５９】
この場合、ソースプログラムの変更が必要になるが、#pragma指令を記述したヘッダファイルを用意して記憶装置４ａに予め格納し、ヘッダファイルをコンパイルオプションで読み込ませるようにすると、ソースプログラムの変更を不要とすることができる。
【００６０】
このように、第１実施形態の第２変形例によれば、コンパイラ６０ｂの動作中に、浮動小数点型から固定小数点型へのデータ型の変換指示を行うことができる。
【００６１】
（第１実施形態の第３変形例）
本発明の第１実施形態の第３変形例に係るコンパイル装置は、図１６に示すように、字句解析部６ｃが、固定小数点型の型情報の整数部及び小数部の各ビット数を再定義したコンパイラ指示子を検出する指示子検出部７４と、型情報テーブルを更新する型情報更新部７５とを備える。具体的には、型情報更新部７５は、図１７に示すように、型情報テーブルにおける固定小数点型の型情報の整数部及び小数部の各ビット数を更新する。
【００６２】
或いは、コンパイラ指示子に代えて、コンパイルオプションを用いて固定小数点型の型情報の整数部及び小数部の各ビット数を再定義しても良い。尚、固定小数点型をユーザ定義する手法の詳細については、特開２００５−１４１４１０号公報に開示されている。
【００６３】
図１７に示す型情報テーブル例においては、型番号“７”のｓｈｏｒｔ＿Ａｃｃｕｍ型の整数部のビット数Ａ１及び小数部のビット数Ａ２を変更できる。同様に、型番号“８”のｌｏｎｇ＿Ａｃｃｕｍ型の整数部のビット数Ｂ１及び小数部のビット数Ｂ２を変更できる。
【００６４】
このように、本発明の第１実施形態の第３変形例に係るコンパイル装置によれば、精度が固定の固定小数点型のみを使用する場合と比較して、浮動小数点型を固定小数点型に変換した場合の性能見積もりを幅広く行うことができる。更に、アプリケーションに適した固定小数点型のデータで処理できるので、実行性能を向上させることが可能となる。
【００６５】
（第２実施形態）
本発明の第２実施形態に係るコンパイラ６０ｄは、図１８に示すように、コンパイルオプションを用いて、ソースプログラム中の浮動小数点型の記述を所望の固定小数点型に変換する。図１８に示す例においては、標準（デフォルト）ではソースプログラム中の浮動小数点型の記述を固定小数点型に変換せずにオブジェクトコードを生成する。オプション１においては、ソースプログラム中の浮動小数点型の記述を、対応する（サイズの等しい）固定小数点型に変換する。オプション２においては、ソースプログラム中の浮動小数点型の記述を、精度の高い（サイズの大きい）固定小数点型、例えばｌｏｎｇ＿Ａｃｃｕｍ型に変換する。オプション３においては、ソースプログラム中の浮動小数点型の記述を、精度の低い（サイズの小さい）固定小数点型、例えばｓｈｏｒｔ＿Ａｃｃｕｍ型に変換する。
【００６６】
具体的には、図１９に示すオプション解析部５０ｂは、コンパイラ６０ｄの起動時において、コンパイルオプションを解析し、コンパイルオプションが浮動小数点型から固定小数点型への型変換を指示しているか、及び型変換後の固定小数点型のサイズ（精度）を指定しているかを判定する。オプション解析部５０ｂは、型変換後の固定小数点型のサイズ（精度）が指定されている場合、型変換後の固定小数点型のサイズ（精度）を指定するデータである変換指定データを変換指定データ格納領域４６に格納する。
【００６７】
或いは、変換指定データを変換指定データ格納領域４６に格納することに代えて、変換フラグに複数のビット幅を持たせて、変換フラグの値により型変換後の固定小数点型のサイズ（精度）を指定しても良い。
【００６８】
更に、型指定子解析部６２ｂは、図２０に示すように、変換指定データが固定小数点型のサイズ（精度）を指定しているかを判定する変換指定判定部６２５を備える。同様に、即値解析部６３ｂは、図２１に示すように、変換指定データが固定小数点型のサイズ（精度）を指定しているかを判定する変換指定判定部６３５を備える。但し、図２１の変換指定判定部６３５を備えずに、図２０に示す変換指定判定部６２５の判定結果を利用しても良い。
【００６９】
次に、図２２に示すフローチャートを参照して、図２０に示す型指定子解析部６２ｂによる型指定子解析処理の手順例を説明する。但し、図９に示す型指定子解析部６２ａによる型指定子解析処理と同様の処理については、重複する説明を省略する。
【００７０】
（ｂ１）ステップＳ３０２において、フラグ判定部６２２は、変換フラグ格納領域４２に格納された変換フラグの値が真であるかを判定する。変換フラグの値が真であると判定された場合、ステップＳ５０１に進む。変換フラグの値が偽であると判定された場合、ステップＳ３０５に進む。ステップＳ３０５、浮動小数点型解析部７２による構文解析処理が行われる。
【００７１】
（ｂ２）ステップＳ５０１において、変換指定判定部６２５は、図１９に示す変換指定データ格納領域４６を参照して、変換指定データが型変換後の固定小数点型のサイズ（精度）を指定しているかを判定する。即ち変換指定判定部６２５は、図１８に示すオプション２又は３が選択されているかを判定する。型変換後の固定小数点型のサイズ（精度）が指定されていると判定された場合、ステップＳ５０２に進む。型変換後の固定小数点型のサイズ（精度）が指定されていないと判定された場合、ステップＳ３０４に進む。
【００７２】
（ｂ３）ステップＳ５０２において、リンク部６２４は、浮動小数点型の型指定子を、指定されたサイズ（精度）を有する固定小数点型の型情報にリンクさせる。
【００７３】
次に、図２３に示すフローチャートを参照して、図２１に示す即値解析部６３ｂによる即値解析処理の手順例を説明する。但し、図１０に示す即値解析部６３ａによる即値解析処理と同様の処理については、重複する説明を省略する。
【００７４】
（ｃ１）ステップＳ４０９において、フラグ判定部６３２は、変換フラグの値が真であるかを判定する。変換フラグの値が真であると判定された場合、ステップＳ６０１に進む。変換フラグの値が偽であると判定された場合、ステップＳ４１１に進む。ステップＳ４１１においては、浮動小数点型解析部７２により構文解析処理が行われる。
【００７５】
（ｃ２）ステップＳ６０１において、変換指定判定部６３５は、図１９に示す変換指定データ格納領域４６を参照して、変換指定データが型変換後の固定小数点型のサイズ（精度）を指定しているかを判定する。即ち、図１８に示すオプション２又は３が選択されているかを判定する。型変換後の固定小数点型のサイズ（精度）が指定されていると判定された場合、ステップＳ６０２に進む。型変換後の固定小数点型のサイズ（精度）が指定されていないと判定された場合、ステップＳ４１０に進む。
【００７６】
（ｃ３）ステップＳ６０２において、リンク部６３４は、浮動小数点型の即値を、指定されたサイズ（精度）を有する固定小数点型の型情報にリンクさせる。
【００７７】
このように、本発明の第２実施形態によれば、ソースプログラム中の浮動小数点型の記述を所望のデータ型に解釈可能なコンパイル装置を提供できる。
【００７８】
（その他の実施形態）
上記のように、本発明は第１及び第２実施形態によって記載したが、この開示の一部をなす論述及び図面はこの発明を限定するものであると理解すべきではない。この開示から当業者には様々な代替実施形態、実施例及び運用技術が明らかとなろう。
【００７９】
上述した実施の形態においては、ソースプログラムがＣ言語で記述されている場合について説明したが、Ｃ言語に限定されるものではなく、Ｃ＋＋言語等の様々なプログラミング言語に適用可能である。
【００８０】
更に、既に述べた第１実施形態の第１〜第３変形例は、第２実施形態に対しても適用可能である。
【００８１】
尚、既に述べた実施形態に係るコンパイル装置において、記憶装置４ａ，４ｂから、ローカルエリアネットワーク（ＬＡＮ）等のネットワークを介してソースプログラム等を取得しても良い。この場合、コンパイル装置に、ネットワークとの通信を制御する通信制御装置等を更に備える必要がある。
【００８２】
このように本発明は、ここでは記載していない様々な実施形態等を包含するということを理解すべきである。したがって、本発明はこの開示から妥当な特許請求の範囲の発明特定事項によってのみ限定されるものである。
【図面の簡単な説明】
【００８３】
【図１】本発明の第１実施形態に係るコンパイル装置の構成例を示す機能ブロック図である。
【図２】本発明の第１実施形態に係るコンパイル装置が取り扱う固定小数点型の数値の表記例を説明するための模式図である。
【図３】本発明の第１実施形態に係る型情報テーブルの一例を示す模式図である。
【図４】本発明の第１実施形態に係る記憶装置に格納されるソースプログラムの一例を示す模式図である。
【図５】本発明の第１実施形態に係るリンク情報の一例を示す模式図である。
【図６】本発明の第１実施形態に係るコンパイル装置が図４に示すソースプログラムを変換して得られたプログラム例を示す模式図である。
【図７】本発明の第１実施形態に係る検出部の構成例を示す機能ブロック図である。
【図８】本発明の第１実施形態に係るコンパイル装置における基本要素切り出し動作を説明するための模式図である。
【図９】本発明の第１実施形態に係る型指定子解析部の構成例を示す機能ブロック図である。
【図１０】本発明の第１実施形態に係る即値解析部の構成例を示す機能ブロック図である。
【図１１】本発明の第１実施形態に係るコンパイル方法の一例を示すフローチャートである。
【図１２】本発明の第１実施形態に係るコンパイル方法における検出処理の一例を示すフローチャートである。
【図１３】本発明の第１実施形態に係るコンパイル方法における型指定子解析処理の一例を示すフローチャートである。
【図１４】本発明の第１実施形態に係るコンパイル方法における即値解析処理の一例を示すフローチャートである。
【図１５】本発明の第１実施形態の第２変形例に係るコンパイル装置の構成例を示す機能ブロック図である。
【図１６】本発明の第１実施形態の第３変形例に係るコンパイル装置の構成例を示す機能ブロック図である。
【図１７】本発明の第１実施形態の第３変形例に係る型情報テーブルの一例を示す模式図である。
【図１８】本発明の第２実施形態に係るコンパイル装置の機能を説明するための模式図である。
【図１９】本発明の第２実施形態に係るコンパイル装置の構成例を示す機能ブロック図である。
【図２０】本発明の第２実施形態に係る型指定子解析部の構成例を示す機能ブロック図である。
【図２１】本発明の第２実施形態に係る即値解析部の構成例を示す機能ブロック図である。
【図２２】本発明の第２実施形態に係るコンパイル方法における型指定子解析処理の一例を示すフローチャートである。
【図２３】本発明の第２実施形態に係るコンパイル方法における即値解析処理の一例を示すフローチャートである。
【符号の説明】
【００８４】
４ａ…記憶装置
５０ａ…オプション解析部
６１…検出部
６２ａ…型指定子解析部
６３ａ…即値解析部
７４…指示子検出部
７５…型情報更新部
【図１】
0004786268.tif 000002
【図２】
0004786268.tif 000003
【図３】
0004786268.tif 000004
【図４】
0004786268.tif 000005
【図５】
0004786268.tif 000006
【図６】
0004786268.tif 000007
【図７】
0004786268.tif 000008
【図８】
0004786268.tif 000009
【図９】
0004786268.tif 000010
【図１０】
0004786268.tif 000011
【図１１】
0004786268.tif 000012
【図１２】
0004786268.tif 000013
【図１３】
0004786268.tif 000014
【図１４】
0004786268.tif 000015
【図１５】
0004786268.tif 000016
【図１６】
0004786268.tif 000017
【図１７】
0004786268.tif 000018
【図１８】
0004786268.tif 000019
【図１９】
0004786268.tif 000020
【図２０】
0004786268.tif 000021
【図２１】
0004786268.tif 000022
【図２２】
0004786268.tif 000023
【図２３】
0004786268.tif 000024