JP4786268B2 - コンパイル装置 - Google Patents

コンパイル装置 Download PDF

Info

Publication number
JP4786268B2
JP4786268B2 JP2005265851A JP2005265851A JP4786268B2 JP 4786268 B2 JP4786268 B2 JP 4786268B2 JP 2005265851 A JP2005265851 A JP 2005265851A JP 2005265851 A JP2005265851 A JP 2005265851A JP 4786268 B2 JP4786268 B2 JP 4786268B2
Authority
JP
Japan
Prior art keywords
type
point
fixed
point type
floating
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
JP2005265851A
Other languages
English (en)
Other versions
JP2007079844A (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.)
Toshiba Corp
Original Assignee
Toshiba Corp
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 Toshiba Corp filed Critical Toshiba Corp
Priority to JP2005265851A priority Critical patent/JP4786268B2/ja
Priority to US11/531,619 priority patent/US7716655B2/en
Publication of JP2007079844A publication Critical patent/JP2007079844A/ja
Application granted granted Critical
Publication of JP4786268B2 publication Critical patent/JP4786268B2/ja
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation

Landscapes

  • Engineering & Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Devices For Executing Special Programs (AREA)

Description

本発明は、C言語等の高級言語で記述されたソースプログラムを機械語(オブジェクトコード)に翻訳(コンパイル)するコンパイル装置に関する。
音声及び映像を含むマルチメディアのデータ処理をする場合、浮動小数点数のデータ型(以下において単に「浮動小数点型」という。)ではなく固定小数点数のデータ型(以下において単に「固定小数点型」という。)で処理すれば、高速で十分な精度の実行結果が得られることが知られている。一方、プログラミング言語の仕様では、通常、固定小数点型は存在しないため、新たなプログラムを作成する際に基準となるプログラムは浮動小数点型を使用して記述されていることが多い。この場合、浮動小数点型で記述された部分を、擬似的に固定小数点を表現した整数型に手作業で変換する必要がある。したがって、変換作業により、長時間を要するだけではなく、バグを混入する可能性がある。
上記した問題に鑑みて、浮動小数点型の記述のままコンパイルを実行し、オブジェクトコード生成の最終段階で、リンカによりライブラリをリンクすることにより、浮動小数点型の記述を固定小数点型の記述に変換する手法が用いられている(例えば、非特許文献1参照。)。
しかしながら、上述した背景技術においては、ソースプログラム中の浮動小数点型の記述を固定小数点型の記述と解釈してコンパイルを実行できない。
"C28x IQMath Library - A Virtual Floating Point Engine"、[online]、テキサス・インスツルメンツ・インコーポレイテッド、[平成17年7月4日検索]、インターネット<URL:http://www.ti.com/iqmath>
本発明は、ソースプログラム中の浮動小数点型の記述を固定小数点型の記述と解釈してコンパイルを実行可能なコンパイル装置を提供する。
本発明の一態様によれば、(a)ソースプログラムと、固定小数点型を含む各データ型の型情報を格納する記憶装置と、(b)記憶装置からソースプログラムを取得し、取得したソースプログラムから型指定子及び即値を検出する検出部と、(c)型指定子を解析して、型指定子が浮動小数点型であるとき、型指定子によりデータ型が指定される変数及び関数のいずれかを、固定小数点型の型情報にリンクさせて記憶装置に格納する型指定子解析部と、(d)即値を解析して、即値が接尾語を有しない小数及び浮動小数点型の接尾語を有する小数のいずれかであるとき、即値を固定小数点型の型情報にリンクさせて記憶装置に格納する即値解析部とを備えるコンパイル装置が提供される。
本発明によれば、ソースプログラム中の浮動小数点型の記述を固定小数点型と解釈してコンパイルを実行可能なコンパイル装置を提供できる。
以下に、図面を参照して、本発明の第1及び第2実施形態を説明する。以下の第1及び第2実施形態における図面の記載において、同一又は類似の部分には同一又は類似の符号を付している。
(第1実施形態)
本発明の第1実施形態に係るコンパイル装置は、図1に示すように、処理装置1a、入力装置2、出力装置3、及び記憶装置4a等を備える。処理装置1aは、ソースプログラムをオブジェクトコードにコンパイルするために、ソースプログラムの字句を解析して複数のトークンに分割する字句解析部6aと、字句解析後のソースプログラムが文法的に正しいかを解析する構文解析部7aと、構文解析後のソースプログラムからオブジェクトコードを生成するコード生成部51の各機能を実行する。記憶装置4aは、C言語等の高級言語で記述されたソースプログラムと、固定小数点型を含む各データ型の型情報とを格納する。以下の説明においては、ソースプログラムがC言語で記述されている場合を例に説明する。字句解析部6aは、記憶装置4aからソースプログラムを取得し、取得したソースプログラムから型指定子及び即値を検出する検出部61と、型指定子を解析して、型指定子が浮動小数点型であるとき、型指定子によりデータ型が指定される変数及び関数のいずれかを、固定小数点型の型情報にリンクさせて記憶装置4aに格納する型指定子解析部62aと、即値を解析して、即値が接尾語を有しない小数及び浮動小数点型の接尾語を有する小数のいずれかであるとき、即値を固定小数点型の型情報にリンクさせて記憶装置4aに格納する即値解析部63aとを備える。
ここで、「型指定子」とは、変数等のデータ型を指定する指定子である。浮動小数点型においては、指数部と仮数部とに分けて数値が表現される。これに対して固定小数点型においては、図2に示すように、ビット列の所定の位置を小数点として、上位ビット及び下位ビットを整数部及び小数部にそれぞれ割り当てることで数値が表現される。固定小数点型は表現可能な値の範囲が浮動小数点型よりも狭い一方、整数型と同様のデータとして演算できるため、演算が高速になる。
「即値」とは、ソースプログラム中に記述された定数を意味する。「接尾語」は、即値のサイズ修飾及び符号修飾を行うために用いられる。更に、「型情報」には、例えば各データ型の型番号、型名、及びサイズ等が含まれる。
また、処理装置1aは、コンパイラ60aの起動時において、コンパイルオプションを解析し、浮動小数点型から固定小数点型への型変換が指示されているかを判定するオプション解析部50aを更に備える。コンパイルオプションで型変換を指示することにより、ソースプログラムを変更する作業を不要とすることができる。オプション解析部50aは、浮動小数点型から固定小数点型への型変換が指示されていると判定した場合に、例えば変換フラグを立てる。具体的には変換フラグの値を真(論理値“1”)に設定する。
よって、型指定子解析部62aは、変換フラグの値を参照して、変換フラグの値が真であるときに、浮動小数点型の型指定子によりデータ型が指定される変数及び関数のいずれかを固定小数点型の型情報にリンクさせる。同様に即値解析部63aは、変換フラグの値を参照して、変換フラグの値が真であるときに、接尾語を有しない小数及び浮動小数点型の接尾語を有する小数のいずれかを固定小数点型の型情報にリンクさせる。
また、型指定子解析部62aは、変換フラグの値が真である場合に、ソースプログラム中に記述された浮動小数点型の型指定子を対応する(サイズの等しい)固定小数点型の型情報にリンクさせる。C言語の場合、単精度(float)の浮動小数点型に対してはshortサイズの固定小数点型(short_Accum)の型情報をリンクさせ、倍精度(double)の浮動小数点型に対してはlongサイズの固定小数点型(long_Accum)の型情報をリンクさせる。
更に、図1に示す記憶装置4aは、ソースプログラム格納領域41、変換フラグ格納領域42、型情報テーブル格納領域43、リンク情報格納領域44、及びオブジェクトコード格納領域45を備える。ソースプログラム格納領域41にはソースプログラムが格納される。変換フラグ格納領域42には変換フラグの値が格納される。型情報テーブル格納領域43には、固定小数点型を含む各データ型の型情報が格納される。リンク情報格納領域44には、型指定子解析部62a及び即値解析部63aによるリンク結果が格納される。オブジェクトコード格納領域45には、コード生成部51が生成したオブジェクトコードが格納される。
型情報テーブル格納領域43には、図3に示すような型情報テーブルが予め格納されている。図3に示す型情報テーブル例においては、上述したように、各データ型に対して型番号、型名、及びサイズが定義されている。「型番号」とは、各データ型を識別可能な識別子である。「型名」とは、プログラミング言語で規定される各データ型の名前を意味する。「サイズ」とは、例えば、各データ型のデータサイズをバイト単位で規定したものである。
尚、図3に示す型情報テーブル例において、型番号“1”のchar型は、文字型を示し、文字(2進コード化した文字)を表現するデータ型である。型番号“2”のshort型は整数値を示すデータ型である。型番号“3”のint型はshort型と等しい又はshort型よりも長いバイト幅を有する整数値を示すデータ型である。型番号“4”のlong型はint型と等しい又はint型よりも長いバイト幅を有する整数値を示すデータ型であるが、図3に示す例においてはint型と等しいバイト幅を有している。
更に、型番号“5”のfloat型は、単精度の浮動小数点数を示すデータ型であり、4バイトのバイト幅を有している。型番号“6”のdouble型は、倍精度の浮動小数点数を示すデータ型であり、float型よりも長い8バイトのバイト幅を有している。
型番号“7”のshort_Accum型は、固定小数点数を示すデータ型であり、4バイトのバイト幅を有している。型番号“8”のlong_Accum型は、固定小数点数を示すデータ型であり、short_Accum型よりも長い8バイトのバイト幅を有している。
また、図1に示すソースプログラム格納領域41には、例えば図4に示すようなソースプログラムが格納される。図4に示すソースプログラム例においては、引数がdouble型の変数“a”であり、戻り値がdouble型の変数“b”である関数“func”を示している。
更に、検出部61は、図4に示すソースプログラムから、型指定子“double”D1,D2,及びD3を検出し、即値“0.5”を検出する。更に、型指定子解析部62aは、変換フラグ格納領域42に格納された変換フラグの値が真である場合、図5に示すように、型指定子“double”D1によりデータ型の指定される関数“func”、型指定子“double”D2によりデータ型の指定される変数“a”、及び型指定子“double”D2によりデータ型の指定される変数“b”を、図3に示す型番号“8”(long_Accum)にリンクさせる。
また、即値解析部63aは、変換フラグ格納領域42に格納された変換フラグの値が真である場合、図5に示すように、即値“0.5”を図3に示す型番号“8”(long_Accum)にリンクさせる。この結果、図5に示すようなリンク情報が作成される。
更に、構文解析部7aは、リンク情報を参照して構文解析を行う。したがって、図5に示す例においては、関数“func”、変数“a”及び“b”、即値“0.5”は、long_Accum型と解釈されて構文解析される。よって、構文解析後のソースプログラムは、図6に示すようなプログラムとなる。図6に示すプログラムにおいては、図4に示す型指定子“double”が型指定子“long_Accum”に変換されている。また、図4に示した即値“0.5”は、図6に示すように、longサイズの固定小数点型を意味する接尾語“k”が付加されている。
一方、変換フラグ格納領域42に格納された変換フラグの値が偽(論理値“0”)である場合、型指定子解析部62aは、型指定子“double”D1によりデータ型の指定される関数“func”、型指定子“double”D2によりデータ型の指定される変数“a”、及び型指定子“double”D2によりデータ型の指定される変数“b”を、図3に示す型番号6(double)にリンクさせる。
また、即値解析部63aは、変換フラグ格納領域42に格納された変換フラグの値が偽である場合、即値“0.5”を図3に示す型番号6(double)にリンクさせる。したがって、変換フラグの値が偽である場合、構文解析後のソースプログラムは、図4に示す記述に維持される。
詳細には、図1に示す構文解析部7aは、例えば固定小数点型解析部71、浮動小数点型解析部72、及び整数型解析部73等を備える。固定小数点型解析部71、浮動小数点型解析部72、及び整数型解析部73は、型情報テーブルを参照して、固定小数点型の記述、浮動小数点型の記述、及び整数型の記述をそれぞれ構文解析する。尚、構文解析部7aは、図示を省略する文字型解析部等を更に備える。
更に、検出部61は、図7に示すように、基本要素切り出し部611、型指定子検出部612、及び即値検出部613を備える。基本要素切り出し部611は、ソースプログラムを基本要素毎に切り出す。ここで「基本要素」とは、プログラミング言語のキーワード、演算子、変数名、定数、及び区切り記号等のプログラム中の最小単位を意味する。例えば、図4に示したソースプログラム例においては、図8の破線で囲まれる各記述が基本要素に相当する。
型指定子検出部612は、複数の基本要素に分割されたソースプログラムから、型指定子及び型指定子によりデータ型の指定される変数及び関数のいずれかを検出する。即値検出部613は、複数の基本要素に分割されたソースプログラムから、接尾語を有しない小数及び浮動小数点型の接尾語を有する小数のいずれかを検出する。
更に、型指定子解析部62aは図9に示すように、浮動小数点型判定部621、フラグ判定部622、サイズ判定部623、及びリンク部624を備える。浮動小数点型判定部621は、検出された型指定子が浮動小数点型の型指定子であるかを判定する。フラグ判定部622は、変換フラグの値が真であるかを判定する。サイズ判定部623は、変換フラグの値が真である場合、検出された型指定子のサイズを判定する。リンク部624は、変換フラグの値が真である場合、検出された型指定子を、判定されたサイズに対応する固定小数点型の型情報にリンクする。
即値解析部63aは、図10に示すように、浮動小数点型判定部631、フラグ判定部632、接尾語判定部633、及びリンク部634を備える。浮動小数点型判定部631は、検出された即値が浮動小数点型の即値であるかを判定する。接尾語判定部633は、検出された即値が接尾語を有するかを判定する。更に、接尾語判定部633は、検出された即値に付加されている接尾語が、浮動小数点型の接尾語であるかを判定する。フラグ判定部632は、変換フラグの値が真であるかを判定する。但し、フラグ判定部632を備えずに、図9に示すフラグ判定部622の判定結果を利用しても良い。リンク部634は、変換フラグの値が真である場合、浮動小数点型の即値を、対応する固定小数点型の型情報にリンクする。
尚、図1に示した入力装置2としては、例えばキーボード及びマウス等が使用できる。出力装置3としては、ディスプレイ又はプリンタ等が使用可能である。記憶装置4aには、ハードディスク等の補助記憶装置、SDRAM等の主記憶装置、或いはキャッシュメモリ及びレジスタ等が含まれる。
次に、図11に示すフローチャートを参照して、図1に示すコンパイル装置の動作の概要を説明する。
(A)ステップS101において、検出部61は、ソースプログラム格納領域41に格納されたソースプログラムを取得し、取得したソースプログラムから型指定子及び即値等を検出する。また、オプション解析部50aは、ソースプログラムの取得前のコンパイラ60aの起動時にコンパイルオプションを解析する。尚、ステップS101の詳細な処理については後述する。
(B)ステップS102において、型指定子解析部62aは、ステップS101で検出された型指定子、及び型指定子によりデータ型の指定される変数及び関数のいずれかを解析する。ステップS102の詳細な処理については後述する。
(C)ステップS103において、即値解析部63aは、ステップS101で検出された即値を解析する。ステップS103の詳細な処理については後述する。ステップS103は、ステップS102の前に実行されても良く、ステップS102と同時に実行されても構わない。ステップS101〜ステップS103の結果は複数のトークンとして構文解析部7aに供給される。
(D)ステップS104において、構文解析部7aは、トークン単位に分割されたソースプログラムを構文解析する。具体的には、構文解析部7aは、字句解析によって得られるトークンの列が、プログラミング言語の文法規則に適合しているかを調べ、プログラムを構文木と呼ばれる木構造に変換する。
(E)ステップS105において、コード生成部51は、例えば構文解析後のソースプログラムを中間コードに変換し、中間コードの最適化後にオブジェクトコードを生成する。或いは、ソースプログラムを中間コードに変換せずに、オブジェクトコードを直接生成しても良い。生成されたオブジェクトコードは、オブジェクトコード格納領域45に格納される。
次に、図12に示すフローチャートを参照して、図7に示す検出部61による検出処理の手順例を説明する。
(a1)ステップS201において、基本要素切り出し部611は、ソースプログラムを基本要素単位に分割する。
(a2)ステップS202において、型指定子検出部612は、切り出された基本要素が、型指定子、及び型指定子によりデータ型の指定される変数及び関数のいずれかであるかを判定する。切り出された基本要素が、型指定子及び型指定子によりデータ型の指定される変数及び関数のいずれかであると判定された場合、ステップS102に進む。
(a3)ステップS203において、即値検出部613は、切り出された基本要素が、接尾語を有しない小数及び浮動小数点型の接尾語を有する小数のいずれかであるかを判定する。切り出された基本要素が、接尾語を有しない小数及び浮動小数点型の接尾語を有する小数のいずれかであると判定された場合、ステップS103に進む。尚、ステップS203は、ステップS202の前に実行されても良く、ステップS202と同時に実行されても良い。
(a4)ステップS204においては、切り出された基本要素が、型変換に関係しない基本要素であると判定されているので、他の基本要素解析部により基本要素解析処理が行われる。
次に、図13に示すフローチャートを参照して、図9に示す型指定子解析部62aによる型指定子解析処理の手順例を説明する。
(b1)ステップS301において、浮動小数点型判定部621は、検出された型指定子が浮動小数点型の型指定子であるかを判定する。検出された型指定子が浮動小数点型の型指定子であると判定された場合、ステップS302に進む。検出された型指定子が浮動小数点型の型指定子でないと判定された場合、ステップS303に進む。ステップS303においては、図1に示す整数型解析部73又は図示を省略する文字型解析部等による構文解析処理が行われる。
(b2)ステップS302において、フラグ判定部622は、変換フラグ格納領域42に格納された変換フラグの値が真であるかを判定する。変換フラグの値が真であると判定された場合、ステップS304に進む。変換フラグの値が偽であると判定された場合、ステップS305に進む。ステップS305において、浮動小数点型解析部72による構文解析処理が行われる。
(b3)ステップS304において、サイズ判定部623は、浮動小数点型の型指定子のサイズがfloatサイズであるかを判定する。浮動小数点型の型指定子のサイズがfloatサイズであると判定された場合、ステップS306に進む。浮動小数点型の型指定子のサイズがfloatサイズでないと判定された場合、即ちdoubleサイズであると判定された場合、ステップS307に進む。
(b4)ステップS306において、リンク部624は、float型で指定される変数又は関数を、図3に示す型番号“7”の“short_Accum”にリンクさせる。リンクが完了するとステップS308に進み、
(b5)ステップS307において、リンク部624は、double型で指定される変数又は関数を、図3に示す型番号“8”の“long_Accum”にリンクさせる。リンクが完了するとステップS308に進む。
(b6)ステップS308において、固定小数点型解析部71による構文解析処理が行われる。
次に、図14に示すフローチャートを参照して、図10に示す即値解析部63aによる即値解析処理の手順例を説明する。
(c1)ステップS401において、浮動小数点型判定部631は、検出された即値が浮動小数点型の即値であるかを判定する。即値が浮動小数点型であると判定された場合、ステップS402に進む。即値が浮動小数点型でないと判定された場合、ステップS403に進む。ステップS403においては、図1に示す整数型解析部73により構文解析処理が行われる。
(c2)ステップS402において、接尾語判定部633は、即値が接尾語を有するかを判定する。即値が接尾語を有すると判定された場合、ステップS404に進む。即値が接尾語を有しないと判定された場合、ステップS405に進む。ステップS405においては、即値がdouble型であると判定される。
(c3)ステップS404において、接尾語判定部633は、即値に付加されている接尾語が、浮動小数点型の接尾語であるかを判定する。接尾語が浮動小数点型であると判定された場合、ステップS406に進む。接尾語が浮動小数点型でないと判定された場合、ステップS407に進む。ステップS407においては、即値がfloat型であると判定される。
(c4)ステップS409において、フラグ判定部632は、変換フラグの値が真であるかを判定する。変換フラグの値が真であると判定された場合、ステップS410に進む。変換フラグの値が偽であると判定された場合、ステップS411に進む。ステップS411においては、浮動小数点型解析部72により構文解析処理が行われる。
(c5)ステップS406において、接尾語判定部633は、接尾語が固定小数点型であるかを判定する。接尾語が固定小数点型であると判定された場合、ステップS412に進む。接尾語が固定小数点型でないと判定された場合、ステップS408に進む。ステップS412においては、固定小数点型解析部71により構文解析処理が行われる。ステップS408においては、例えば、図1に示す出力装置3としてのディスプレイ上にエラーメッセージが表示される。
このように、本発明の第1実施形態に係るコンパイル装置によれば、ソースプログラム中に記述された浮動小数点型の記述を固定小数点型と解釈してコンパイルを実行できる。この結果、手作業で変換を行った場合よりも変換時間を大幅に削減できる。したがって、浮動小数点記述を固定小数点記述に変換した際のコードサイズと実行性能を容易に見積もることができる。
(第1実施形態の第1変形例)
本発明の第1実施形態の第1変形例に係るコンパイル装置は、図1に示したコンパイル装置が、構文解析後のソースプログラムに基づいてオブジェクトコードの生成までを行うのに対して、構文解析部7aの構文解析結果を例えばソースプログラム格納領域41に書き戻すことにより、ソースプログラム中の浮動小数点記述を固定小数点記述に変換したプログラムを得ることができる。
したがって、本発明の第1実施形態の第1変形例に係るコンパイル装置によれば、ソースプログラム中の浮動小数点記述を固定小数点記述に変換した結果を得ることができるので、他のコンパイル装置を用いたコンパイルが可能となる。
(第1実施形態の第2変形例)
本発明の第1実施形態の第2変形例に係るコンパイル装置は、図15に示すように、字句解析部6bが、浮動小数点型から固定小数点型へのデータ型の変換を指示するコンパイラ指示子を検出する指示子検出部74を更に備える。即ち、コンパイル時に指定されるコンパイラオプションで変換フラグを立てるのではなく、コンパイラへのコンパイラ指示子をソースプログラム中に記述しても良い。一例として、C言語においては#pragma指令がコンパイラ指示子として利用できる。
この場合、ソースプログラムの変更が必要になるが、#pragma指令を記述したヘッダファイルを用意して記憶装置4aに予め格納し、ヘッダファイルをコンパイルオプションで読み込ませるようにすると、ソースプログラムの変更を不要とすることができる。
このように、第1実施形態の第2変形例によれば、コンパイラ60bの動作中に、浮動小数点型から固定小数点型へのデータ型の変換指示を行うことができる。
(第1実施形態の第3変形例)
本発明の第1実施形態の第3変形例に係るコンパイル装置は、図16に示すように、字句解析部6cが、固定小数点型の型情報の整数部及び小数部の各ビット数を再定義したコンパイラ指示子を検出する指示子検出部74と、型情報テーブルを更新する型情報更新部75とを備える。具体的には、型情報更新部75は、図17に示すように、型情報テーブルにおける固定小数点型の型情報の整数部及び小数部の各ビット数を更新する。
或いは、コンパイラ指示子に代えて、コンパイルオプションを用いて固定小数点型の型情報の整数部及び小数部の各ビット数を再定義しても良い。尚、固定小数点型をユーザ定義する手法の詳細については、特開2005−141410号公報に開示されている。
図17に示す型情報テーブル例においては、型番号“7”のshort_Accum型の整数部のビット数A1及び小数部のビット数A2を変更できる。同様に、型番号“8”のlong_Accum型の整数部のビット数B1及び小数部のビット数B2を変更できる。
このように、本発明の第1実施形態の第3変形例に係るコンパイル装置によれば、精度が固定の固定小数点型のみを使用する場合と比較して、浮動小数点型を固定小数点型に変換した場合の性能見積もりを幅広く行うことができる。更に、アプリケーションに適した固定小数点型のデータで処理できるので、実行性能を向上させることが可能となる。
(第2実施形態)
本発明の第2実施形態に係るコンパイラ60dは、図18に示すように、コンパイルオプションを用いて、ソースプログラム中の浮動小数点型の記述を所望の固定小数点型に変換する。図18に示す例においては、標準(デフォルト)ではソースプログラム中の浮動小数点型の記述を固定小数点型に変換せずにオブジェクトコードを生成する。オプション1においては、ソースプログラム中の浮動小数点型の記述を、対応する(サイズの等しい)固定小数点型に変換する。オプション2においては、ソースプログラム中の浮動小数点型の記述を、精度の高い(サイズの大きい)固定小数点型、例えばlong_Accum型に変換する。オプション3においては、ソースプログラム中の浮動小数点型の記述を、精度の低い(サイズの小さい)固定小数点型、例えばshort_Accum型に変換する。
具体的には、図19に示すオプション解析部50bは、コンパイラ60dの起動時において、コンパイルオプションを解析し、コンパイルオプションが浮動小数点型から固定小数点型への型変換を指示しているか、及び型変換後の固定小数点型のサイズ(精度)を指定しているかを判定する。オプション解析部50bは、型変換後の固定小数点型のサイズ(精度)が指定されている場合、型変換後の固定小数点型のサイズ(精度)を指定するデータである変換指定データを変換指定データ格納領域46に格納する。
或いは、変換指定データを変換指定データ格納領域46に格納することに代えて、変換フラグに複数のビット幅を持たせて、変換フラグの値により型変換後の固定小数点型のサイズ(精度)を指定しても良い。
更に、型指定子解析部62bは、図20に示すように、変換指定データが固定小数点型のサイズ(精度)を指定しているかを判定する変換指定判定部625を備える。同様に、即値解析部63bは、図21に示すように、変換指定データが固定小数点型のサイズ(精度)を指定しているかを判定する変換指定判定部635を備える。但し、図21の変換指定判定部635を備えずに、図20に示す変換指定判定部625の判定結果を利用しても良い。
次に、図22に示すフローチャートを参照して、図20に示す型指定子解析部62bによる型指定子解析処理の手順例を説明する。但し、図9に示す型指定子解析部62aによる型指定子解析処理と同様の処理については、重複する説明を省略する。
(b1)ステップS302において、フラグ判定部622は、変換フラグ格納領域42に格納された変換フラグの値が真であるかを判定する。変換フラグの値が真であると判定された場合、ステップS501に進む。変換フラグの値が偽であると判定された場合、ステップS305に進む。ステップS305、浮動小数点型解析部72による構文解析処理が行われる。
(b2)ステップS501において、変換指定判定部625は、図19に示す変換指定データ格納領域46を参照して、変換指定データが型変換後の固定小数点型のサイズ(精度)を指定しているかを判定する。即ち変換指定判定部625は、図18に示すオプション2又は3が選択されているかを判定する。型変換後の固定小数点型のサイズ(精度)が指定されていると判定された場合、ステップS502に進む。型変換後の固定小数点型のサイズ(精度)が指定されていないと判定された場合、ステップS304に進む。
(b3)ステップS502において、リンク部624は、浮動小数点型の型指定子を、指定されたサイズ(精度)を有する固定小数点型の型情報にリンクさせる。
次に、図23に示すフローチャートを参照して、図21に示す即値解析部63bによる即値解析処理の手順例を説明する。但し、図10に示す即値解析部63aによる即値解析処理と同様の処理については、重複する説明を省略する。
(c1)ステップS409において、フラグ判定部632は、変換フラグの値が真であるかを判定する。変換フラグの値が真であると判定された場合、ステップS601に進む。変換フラグの値が偽であると判定された場合、ステップS411に進む。ステップS411においては、浮動小数点型解析部72により構文解析処理が行われる。
(c2)ステップS601において、変換指定判定部635は、図19に示す変換指定データ格納領域46を参照して、変換指定データが型変換後の固定小数点型のサイズ(精度)を指定しているかを判定する。即ち、図18に示すオプション2又は3が選択されているかを判定する。型変換後の固定小数点型のサイズ(精度)が指定されていると判定された場合、ステップS602に進む。型変換後の固定小数点型のサイズ(精度)が指定されていないと判定された場合、ステップS410に進む。
(c3)ステップS602において、リンク部634は、浮動小数点型の即値を、指定されたサイズ(精度)を有する固定小数点型の型情報にリンクさせる。
このように、本発明の第2実施形態によれば、ソースプログラム中の浮動小数点型の記述を所望のデータ型に解釈可能なコンパイル装置を提供できる。
(その他の実施形態)
上記のように、本発明は第1及び第2実施形態によって記載したが、この開示の一部をなす論述及び図面はこの発明を限定するものであると理解すべきではない。この開示から当業者には様々な代替実施形態、実施例及び運用技術が明らかとなろう。
上述した実施の形態においては、ソースプログラムがC言語で記述されている場合について説明したが、C言語に限定されるものではなく、C++言語等の様々なプログラミング言語に適用可能である。
更に、既に述べた第1実施形態の第1〜第3変形例は、第2実施形態に対しても適用可能である。
尚、既に述べた実施形態に係るコンパイル装置において、記憶装置4a,4bから、ローカルエリアネットワーク(LAN)等のネットワークを介してソースプログラム等を取得しても良い。この場合、コンパイル装置に、ネットワークとの通信を制御する通信制御装置等を更に備える必要がある。
このように本発明は、ここでは記載していない様々な実施形態等を包含するということを理解すべきである。したがって、本発明はこの開示から妥当な特許請求の範囲の発明特定事項によってのみ限定されるものである。
本発明の第1実施形態に係るコンパイル装置の構成例を示す機能ブロック図である。 本発明の第1実施形態に係るコンパイル装置が取り扱う固定小数点型の数値の表記例を説明するための模式図である。 本発明の第1実施形態に係る型情報テーブルの一例を示す模式図である。 本発明の第1実施形態に係る記憶装置に格納されるソースプログラムの一例を示す模式図である。 本発明の第1実施形態に係るリンク情報の一例を示す模式図である。 本発明の第1実施形態に係るコンパイル装置が図4に示すソースプログラムを変換して得られたプログラム例を示す模式図である。 本発明の第1実施形態に係る検出部の構成例を示す機能ブロック図である。 本発明の第1実施形態に係るコンパイル装置における基本要素切り出し動作を説明するための模式図である。 本発明の第1実施形態に係る型指定子解析部の構成例を示す機能ブロック図である。 本発明の第1実施形態に係る即値解析部の構成例を示す機能ブロック図である。 本発明の第1実施形態に係るコンパイル方法の一例を示すフローチャートである。 本発明の第1実施形態に係るコンパイル方法における検出処理の一例を示すフローチャートである。 本発明の第1実施形態に係るコンパイル方法における型指定子解析処理の一例を示すフローチャートである。 本発明の第1実施形態に係るコンパイル方法における即値解析処理の一例を示すフローチャートである。 本発明の第1実施形態の第2変形例に係るコンパイル装置の構成例を示す機能ブロック図である。 本発明の第1実施形態の第3変形例に係るコンパイル装置の構成例を示す機能ブロック図である。 本発明の第1実施形態の第3変形例に係る型情報テーブルの一例を示す模式図である。 本発明の第2実施形態に係るコンパイル装置の機能を説明するための模式図である。 本発明の第2実施形態に係るコンパイル装置の構成例を示す機能ブロック図である。 本発明の第2実施形態に係る型指定子解析部の構成例を示す機能ブロック図である。 本発明の第2実施形態に係る即値解析部の構成例を示す機能ブロック図である。 本発明の第2実施形態に係るコンパイル方法における型指定子解析処理の一例を示すフローチャートである。 本発明の第2実施形態に係るコンパイル方法における即値解析処理の一例を示すフローチャートである。
符号の説明
4a…記憶装置
50a…オプション解析部
61…検出部
62a…型指定子解析部
63a…即値解析部
74…指示子検出部
75…型情報更新部

Claims (3)

  1. ソースプログラムと、固定小数点型を含む各データ型の型情報を格納する記憶装置と、
    前記記憶装置から前記ソースプログラムを取得し、取得した前記ソースプログラムから型指定子及び即値を検出する検出部と、
    コンパイルオプションを解析し、浮動小数点型から固定小数点型への型変換が指示されているかを判定するオプション解析部と、
    前記オプション解析部により型変換が指示されたと判定され、かつ、前記型指定子を解析して前記型指定子が浮動小数点型であるとき、前記型指定子によりデータ型が指定される変数及び関数のいずれかを、前記固定小数点型の型情報にリンクさせて前記記憶装置に格納する型指定子解析部と、
    前記オプション解析部により型変換が指示されたと判定され、かつ、前記即値を解析して前記即値が接尾語を有しない小数及び浮動小数点型の接尾語を有する小数のいずれかであるとき、前記即値を前記固定小数点型の型情報にリンクさせて前記記憶装置に格納する即値解析部とを備え
    前記記憶装置に格納したリンク情報に基づき前記ソースプログラムの構文解析を行い、前記構文解析後のソースプログラムからオブジェクトコードを生成する
    ことを特徴とするコンパイル装置。
  2. 前記オプション解析部は、前記型変換後の固定小数点型のサイズが指定されているかを更に判定し、
    前記型指定子解析部は、前記変数及び前記関数を、指定されたサイズを有する固定小数点型の型情報にリンクさせ、
    前記即値解析部は、前記即値を、指定されたサイズを有する固定小数点型の型情報にリンクさせる
    ことを特徴とする請求項に記載のコンパイル装置。
  3. 浮動小数点型から固定小数点型への型変換を指示するコンパイラ指示子を検出する指示子検出部を更に備える
    ことを特徴とする請求項1に記載のコンパイル装置。
JP2005265851A 2005-09-13 2005-09-13 コンパイル装置 Expired - Fee Related JP4786268B2 (ja)

Priority Applications (2)

Application Number Priority Date Filing Date Title
JP2005265851A JP4786268B2 (ja) 2005-09-13 2005-09-13 コンパイル装置
US11/531,619 US7716655B2 (en) 2005-09-13 2006-09-13 Computer system for compiling source program

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2005265851A JP4786268B2 (ja) 2005-09-13 2005-09-13 コンパイル装置

Publications (2)

Publication Number Publication Date
JP2007079844A JP2007079844A (ja) 2007-03-29
JP4786268B2 true JP4786268B2 (ja) 2011-10-05

Family

ID=37885696

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2005265851A Expired - Fee Related JP4786268B2 (ja) 2005-09-13 2005-09-13 コンパイル装置

Country Status (2)

Country Link
US (1) US7716655B2 (ja)
JP (1) JP4786268B2 (ja)

Families Citing this family (15)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8136101B2 (en) * 2005-11-04 2012-03-13 Oracle America, Inc. Threshold search failure analysis
JP4645519B2 (ja) * 2006-04-27 2011-03-09 株式会社デンソー 演算処理装置,制御装置およびプログラム
US8601452B2 (en) * 2007-03-02 2013-12-03 Oracle International Corporation Compiler for JAVA and .NET
US8633936B2 (en) 2008-04-21 2014-01-21 Qualcomm Incorporated Programmable streaming processor with mixed precision instruction execution
US8296744B2 (en) * 2008-10-03 2012-10-23 Microsoft Corporation Tree-based directed graph programming structures for a declarative programming language
JP6137962B2 (ja) * 2013-06-24 2017-05-31 キヤノン株式会社 情報処理装置、情報処理方法及びプログラム
GB2517192A (en) * 2013-08-14 2015-02-18 Micro Focus Ip Dev Ltd Processing for application program deployment
CN104461459B (zh) * 2013-09-23 2017-04-19 富士通株式会社 定点化处理方法及其装置
US10514913B2 (en) * 2017-06-23 2019-12-24 International Business Machines Corporation Compiler controls for program regions
US10684852B2 (en) 2017-06-23 2020-06-16 International Business Machines Corporation Employing prefixes to control floating point operations
US10310814B2 (en) 2017-06-23 2019-06-04 International Business Machines Corporation Read and set floating point control register instruction
US10481908B2 (en) 2017-06-23 2019-11-19 International Business Machines Corporation Predicted null updated
US10725739B2 (en) 2017-06-23 2020-07-28 International Business Machines Corporation Compiler controls for program language constructs
US10379851B2 (en) 2017-06-23 2019-08-13 International Business Machines Corporation Fine-grained management of exception enablement of floating point controls
US10740067B2 (en) 2017-06-23 2020-08-11 International Business Machines Corporation Selective updating of floating point controls

Family Cites Families (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPS56153451A (en) * 1980-04-30 1981-11-27 Fujitsu Ltd Attribute conversion system
US5758349A (en) * 1995-12-27 1998-05-26 International Business Machines Corporation Process and system for run-time inheritance and disinheritance of methods and data
US6560774B1 (en) * 1999-09-01 2003-05-06 Microsoft Corporation Verifier to check intermediate language
US6460177B1 (en) * 1999-09-22 2002-10-01 Lucent Technologies Inc. Method for target-specific development of fixed-point algorithms employing C++ class definitions
US6775680B2 (en) * 2000-08-08 2004-08-10 International Business Machines Corporation High level assembler metamodel
US6701501B2 (en) * 2000-10-16 2004-03-02 Simon Joshua Waters Structured algorithmic programming language approach to system design
US7885792B2 (en) * 2003-04-15 2011-02-08 The Mathworks, Inc. Programming Environment
US7080364B2 (en) * 2003-04-28 2006-07-18 Intel Corporation Methods and apparatus for compiling a transcendental floating-point operation
US7461116B2 (en) * 2003-09-17 2008-12-02 Agility Design Solutions Inc. Emulation of a fixed point operation using a corresponding floating point operation
JP4157016B2 (ja) * 2003-11-05 2008-09-24 株式会社東芝 コンパイラ装置及びコンパイル方法

Also Published As

Publication number Publication date
US7716655B2 (en) 2010-05-11
US20070067759A1 (en) 2007-03-22
JP2007079844A (ja) 2007-03-29

Similar Documents

Publication Publication Date Title
JP4786268B2 (ja) コンパイル装置
CN1664779B (zh) 软件开发基础架构
JP4057938B2 (ja) コンパイラ、コンパイル方法、及びプログラム開発ツール
US7559050B2 (en) Generating software development tools via target architecture specification
US7937688B2 (en) System and method for context-sensitive help in a design environment
JP4157016B2 (ja) コンパイラ装置及びコンパイル方法
US8850414B2 (en) Direct access of language metadata
US20070271553A1 (en) Method and system for translating assembler code to a target language
JP2006243839A (ja) 命令生成装置及び命令生成方法
JPH0769834B2 (ja) ソース・プログラムをコンパイルする方法及び装置
US7043720B2 (en) Mechanism for reformatting a simple source code statement into a compound source code statement
US5949993A (en) Method for the generation of ISA simulators and assemblers from a machine description
JP6651974B2 (ja) 情報処理装置、コンパイル方法及びコンパイラプログラム
JP2879099B1 (ja) 抽象構文木処理方法、抽象構文木処理プログラムを記録したコンピュータ読み取り可能な記録媒体、抽象構文木データを記録したコンピュータ読み取り可能な記録媒体、及び、抽象構文木処理装置
EP1444071B1 (en) A robot system and a method and a software product for the robot system
JP5600301B2 (ja) システム表現およびハンドリング技術
GB2420638A (en) Method of substituting code fragments in Internal Representation
US8572592B2 (en) Extended language specification assigning method, program developing method and computer-readable storage medium
JP3000878B2 (ja) アセンブラの処理方法
Wendt Fast code generation using automatically-generated decision trees
CN114327469A (zh) 一种代码解析方法、装置、设备及介质
JP2004139369A (ja) 定数アドレス領域を指示するポインタ解析方法
von Manteuffel et al. Reduze 2 Tutorial
JPH05108372A (ja) コンパイラ最適化処理内容の出力方式
Watson Barry’s Prolog Reference Manual & User Guide

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20080718

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20100615

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20110405

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20110606

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20110621

A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20110713

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

Free format text: PAYMENT UNTIL: 20140722

Year of fee payment: 3

LAPS Cancellation because of no payment of annual fees