JP4057938B2 - コンパイラ、コンパイル方法、及びプログラム開発ツール - Google Patents

コンパイラ、コンパイル方法、及びプログラム開発ツール Download PDF

Info

Publication number
JP4057938B2
JP4057938B2 JP2003085848A JP2003085848A JP4057938B2 JP 4057938 B2 JP4057938 B2 JP 4057938B2 JP 2003085848 A JP2003085848 A JP 2003085848A JP 2003085848 A JP2003085848 A JP 2003085848A JP 4057938 B2 JP4057938 B2 JP 4057938B2
Authority
JP
Japan
Prior art keywords
user
machine language
function
built
syntax analysis
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
JP2003085848A
Other languages
English (en)
Other versions
JP2004295398A (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 JP2003085848A priority Critical patent/JP4057938B2/ja
Priority to US10/807,374 priority patent/US7657878B2/en
Publication of JP2004295398A publication Critical patent/JP2004295398A/ja
Application granted granted Critical
Publication of JP4057938B2 publication Critical patent/JP4057938B2/ja
Anticipated expiration legal-status Critical
Expired - Fee Related legal-status Critical Current

Links

Images

Classifications

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

Description

【0001】
【発明の属する技術分野】
プログラミング言語により記述されたソースプログラムを、機械語によるオブジェクトコードに変換(コンパイル)するコンパイラ、コンパイル方法、及び該コンパイラを備えたプログラム開発ツールに係り、特に、ユーザによる拡張仕様を定義した関数を組み込む技術に関する。
【0002】
【従来の技術】
一般に、ソースプログラムを機械語であるオブジェクトコードに変換するコンパイラは、プロセッサ・アーキテクチャごとに用意され、関数の処理手順もコンパイラ内部に組み込まれていて、ユーザが独自に変更できない。従って、ユーザが仕様(プロセッサ・アーキテクチャおよび命令セット)を拡張可能なプロセッサでアプリケーションプログラム等を動作させるためには、ユーザ仕様に対応したコンパイラが必要となる。
【0003】
そこで、本出願人は、組込関数(intrinsic function)をユーザの拡張仕様に応じてカスタマイズできるコンパイラを提案している(例えば、特許文献1参照)。
【0004】
【特許文献1】
特開2002−24029号公報
【0005】
【発明が解決しようとする課題】
しかしながら、特許文献1に記載のコンパイラでは、ユーザが定義した組込関数を用いた処理動作と同等の動作を行う命令文を、ソースプログラム中にプログラミング言語で記述したとしても、その命令文をユーザ定義の組込関数に応じた機械語に変換することができなかった。
【0006】
例えば、ソースレジスタに"10"を加算して、"__imm"でマスクした値をデスティネーションレジスタに格納する処理として、図19(a)に示すような組込関数"uci"(組込関数F91)をソースプログラム中に宣言した場合、コンパイラは、ソースプログラム中で組込関数"uci"を明示的に呼び出す命令文T91から、ユーザの定義に応じた命令語"uci"を用いた機械語(図19(b)における機械語M91)へ変換することが可能である。
【0007】
ところが、命令文T91が組込関数"uci"を用いて実行する処理動作(ソースレジスタに"10"を加算して、"__imm"でマスクした値をデスティネーションレジスタに格納する処理動作)と同等の処理動作を実行する命令文T92がソースプログラム中に記述されていたとしても、コンパイラは命令文T92をユーザ定義の命令語"uci"を用いた機械語へ変換することができず、命令語"add"を用いた従来の機械語(図19(b)における機械語M92)を生成してしまう。命令文T92をユーザ定義の命令語"uci"を用いた機械語へ変換させるためには、ユーザは、命令文T92の記述を、組込関数"uci"を明示的に呼び出す命令文T91に書き改める必要がある。
【0008】
このように、ユーザは、ソースプログラムを記述する時に、ユーザが定義した組込関数について熟知していなければならなかったり、プロセッサの仕様を拡張した時に、ソースプログラム中の記述の中から該当する動作部分をユーザが定義した組込関数に書き換える必要があったりして、プロセッサあるいはそのアプリケーションプログラムの設計に多大な時間やコストを要するという問題があった。
【0009】
本発明は、以上のような問題を鑑みてなされたものであり、ユーザが仕様を拡張可能なプロセッサにおいて、ユーザが定義した組込関数を用いた処理動作と同等の動作を行う命令文を、ユーザが定義した組込関数に応じた機械語に最適化することができるコンパイラ、コンパイル方法、及び該コンパイラを用いたプログラム開発ツールを提供することを目的とする。
【0010】
【課題を解決するための手段】
上記課題を解決するために、本発明の一態様によれば、入力したソースプログラムからオブジェクトコードを生成するコンパイラであって、前記オブジェクトコードはユーザが定義したユーザ定義機械語命令を含み、前記コンパイラは、コンピュータを、前記ソースプログラム内に記述された命令について文法規則への適合性を解析し、構文解析結果を出力するとともに、前記命令の組み合わせが、前記ユーザ定義機械語命令に変換されるように対応付けられた動作内容を定義する組込関数の関数定義であることを検出すると、前記動作内容と前記ユーザ定義機械語命令を対応付けて組込関数定義記憶部に記憶させる構文解析部と、前記構文解析部の前記構文解析結果に基づいて、機械語命令を生成するコード生成部と、前記コード生成部により生成された前記機械語命令の動作内容が前記組込関数定義記憶部に記憶されている前記動作内容と一致する場合、当該機械語命令を前記組込関数定義記憶部に記憶されている対応する前記ユーザ定義機械語命令に置換するコード最適化部と、して動作させることを特徴とするコンパイラが提供される。
【0011】
本発明の他の態様によれば、入力したソースプログラムからオブジェクトコードを生成するコンパイル方法であって、前記オブジェクトコードはユーザが定義したユーザ定義機械語命令を含み、前記コンパイル方法は、構文解析部が、前記ソースプログラム内に記述された命令について文法規則への適合性を解析し、構文解析結果を出力するとともに、前記命令の組み合わせが、前記ユーザ定義機械語命令に変換されるように対応付けられた動作内容を定義する組込関数の関数定義であることを検出すると、前記動作内容と前記ユーザ定義機械語命令を対応付けて組込関数定義記憶部に記憶させる第1のステップと、コード生成部が、前記構文解析部の前記構文解析結果に基づいて、機械語命令を生成する第2のステップと、コード最適化部が、前記コード生成部により生成された前記機械語命令の動作内容が前記組込関数定義記憶部に記憶されている前記動作内容と一致する場合、当該機械語命令を前記組込関数定義記憶部に記憶されている対応する前記ユーザ定義機械語命令に置換する第3のステップから成るコンパイル方法が提供される。
【0012】
本発明の他の態様によれば、ユーザが定義したユーザ定義機械語命令を実行可能なプロセッサのためのアプリケーションプログラムを開発するためのコンパイル装置とシミュレータ装置とから成るプログラム開発ツールであって、前記コンパイル装置は、前記アプリケーションプログラムのソースコード内に記述された命令をトークンに分割する字句解析部と、前記トークンについて文法規則への適合性を解析し、構文解析結果を出力するとともに、前記命令の組み合わせが、前記ユーザ定義機械語命令に変換されるように対応付けられた動作内容を定義する組込関数の関数定義であることを検出すると、前記動作内容と前記ユーザ定義機械語命令を対応付けて組込関数定義記憶部に記憶させる構文解析部と、前記構文解析部の前記構文解析結果に基づいて、機械語命令を生成するコード生成部と、前記コード生成部により生成された前記機械語命令の動作内容が前記組込関数定義記憶部に記憶されている前記動作内容と一致する場合、当該機械語命令を前記組込関数定義記憶部に記憶されている対応する前記ユーザ定義機械語命令に置換するコード最適化部とから成り、前記シミュレータ装置は、前記コンパイル装置が出力した機械語命令から成る前記アプリケーションプログラムをシミュレーション実行することを特徴とするプログラム開発ツールが提供される。
【0013】
ユーザがソースプログラムを記述する際に、ユーザ定義の組み込み関数を明示的に呼び出さなくても、ユーザ定義の組込関数を用いた処理動作と同等の処理動作を行う命令文を、その組込関数に応じた機械語に最適化することができる。
【0014】
【発明の実施の形態】
以下、本発明の実施形態を図面に基づいて説明する。尚、各図面を通じて同一もしくは同等の部位や構成要素には、同一もしくは同等の参照符号を付し、その説明を省略もしくは簡略化する。
【0015】
図1は、本発明の実施形態におけるコンパイラ10の構成を例示する概略ブロック図である。コンパイラ10は、アプリケーションプログラム開発ツール等のコンピュータシステムに搭載され、プログラミング言語で記述されたソースプログラム1を機械言語に翻訳する翻訳プログラムであり、字句解析部11、構文解析部12、中間コード生成部13、中間コード最適化部14、コード生成部15、コード最適化部16、コード出力部17などを含んでいる。
【0016】
まず、字句解析部11がソースプログラム1を入力して字句解析を行う。字句解析部11は、ソースプログラム1に高級言語で記述された記述された命令文を意味のある最小の単位であるトークン(token)に分割する「字句解析」を行う。「トークン」の代表例は、プログラミング言語のキーワード、演算子、変数名、定数、区切り記号等である。
【0017】
次に、構文解析部12は、字句解析部11の処理結果を入力して構文解析を行う。構文解析部12が行う「構文解析」では、字句解析部11によって変数名や記号などのトークンに分割された命令について、それぞれのプログラミング言語で定められた文法規則に適合しているか否かがチェックされる。更に、構文解析部12は、トークンに分割された命令若しくはこれら命令の組み合わせが、ユーザ定義の組込関数及び該組込関数の動作内容を定義しているか否かを解析し、解析した組込関数及びその動作内容の定義を組込関数定義記憶部である記号表20に記憶する。
【0018】
その後、中間コード生成部13による中間コードの生成、中間コード最適化部14による中間コードの最適化を経て、コード生成部15によるコード生成が行われる。コード生成部15による「コード生成」では、それまでに行われたソースプログラム1の最小単位への分割、構文エラーのチェックなどの結果を受けて、コード・ジェネレータの機能を用いてソースプログラム1を、アセンブラ形式や2進数形式などの機械語へ変換する処理が行われる。
【0019】
更に、コード最適化部16によるコード最適化が行われる。コード最適化部16による「コード最適化」では、直前のコード生成部15により変換された機械語に、実際の処理効率を向上させるための変更が加えられる。また、コード最適化部16は、コード生成部15により生成された機械語が、組込関数定義記憶部(記号表20)に記憶されているユーザが定義した組込関数の動作内容と一致する場合、その機械語をユーザが定義した組込関数の動作内容に応じた機械語に最適化する。
【0020】
そして、コード出力部17は、コード最適化部16によるコード最適化結果に基づいてオブジェクトコード2を生成する。
【0021】
ここで、コンパイラ10が中間コード生成部13及び中間コード最適化部14によって中間コードの生成を行うのは、構文解析の直後にコード生成をすると、生成されるプログラム・サイズが大きくなり、変換処理が効率よく行われない場合があるため、ソースプログラム1aと等価で、しかも簡潔な言語である中間コードに変換してから翻訳処理を行う。中間コード生成及び中間コード最適化を省略してもオブジェクトコード2は得られる。
【0022】
図2は、中間コードを生成しないでソースプログラム1からオブジェクトコード2を生成するコンパイラ10aの構成を示す概略ブロック図である。図2に示すように、コンパイラ10aは、字句解析部11a、構文解析部12a、コード生成部15a、コード最適化部16a、コード出力部17aを経て、ソースプログラム1からオブジェクトコード2を生成する。構文解析部12aは、字句解析部11aによって分割されたトークンの組み合わせが、ユーザが定義した組込関数及び該組込関数の動作内容を定義しているか否かを解析し、解析した組込関数及びその動作内容の定義を記号表20aに記憶する。コード最適化部16aは、コード生成部15aにより生成された機械語が、記号表20aに記憶されているユーザが定義した組込関数の動作内容と一致する場合、その機械語をユーザが定義した組込関数動作内容に応じた機械語に最適化する。
【0023】
[第1実施例]
プロセッサ・アーキテクチャや命令セットなどの仕様をユーザが拡張可能なプロセッサにおいて、拡張した仕様に応じたハードウェア動作を実現するために、ユーザが独自に組込関数を定義できるようにする。以下、第1の実施例では、プログラミング言語としてC言語をモデルにして説明する。
【0024】
図4(a)及び(b)は、ユーザが拡張した仕様に応じて組込関数を定義した例を示している。また、図5(a)は、図4に示したユーザ定義の組込関数を明示的に呼び出す命令列の記述例を示しており、図5(b)は、図5(a)に示す命令列から生成される機械語列を例示している。図6(a)は、図4に示したユーザ定義の組込関数と同等の処理動作を実行する命令列を例示しており、図6(b)は、図6(a)に示す命令列から生成される最適化前の機械語列、図6(c)は最適化後の機械語列を例示している。
【0025】
図4(a)の組込関数定義F11では、予約語"__asm","__reg_src"を用いて、組込関数"uci"を宣言し仮引数等の属性を定義すると共に、この組込関数"uci"の動作内容P11をプログラミング言語で定義する。図4(b)の組込関数定義F12は、図4(a)の組込関数定義F11を再定義したものであり、図4(a)の動作内容P11と異なる記述で動作内容P12を定義している。つまり、図4(a)〜(b)に示す組込関数はその動作内容の記述方法が異なるだけで、結果的に同等の動作内容を有している。
【0026】
このように、1つのユーザ定義の組込関数を何度でも(何種類でも)再定義可能とし、再定義された定義の数が増えれば増えるほど、コンパイラ10のコード最適化部16が最適化可能と判定できる命令列の特定を容易にすることができる。
【0027】
コンパイラ10は、図4に示したようなユーザ定義の組込関数の記述に対して、オブジェクトコード2を生成しない。従って、このような組込関数定義をソースプログラム1のヘッダファイルに記述しても良いし、あるいは図3に示すように組込関数定義をソースプログラム1とは別のファイル(組込関数情報ファイル3)に格納しておき、コンパイラ10は組込関数情報ファイル3からユーザ定義の組込関数定義を読み込んでコンパイルしてもよい。
【0028】
ユーザ定義の組込関数の定義は、わずかな予約語("__asm","__reg_src"など)を追加しただけであるため、組込関数定義をソースプログラム1中に記述するようにすると、ユーザは組込関数の内容を理解でき、組込関数の動作定義から最適化が容易なプログラミングが容易となる。更に、ソースプログラム1の管理も容易となる。
【0029】
図7はコンパイラ10の構文解析部12の詳細な処理動作を例示するフローチャートである。
【0030】
構文解析部12は、字句解析部11の処理結果を入力し、入力した各トークンについて、図7に示すような解析処理を実行する。構文解析部12はステップS01において、入力したトークンが関数宣言であるか否かを判定する。判定の結果、関数宣言でない場合、ステップS02へ進み、構文解析部12は通常の構文解析処理を実行する。
【0031】
ステップS01の判定の結果、関数宣言である場合、構文解析部12はステップS03において、関数宣言に独自の予約語"__asm"が付加されているか否かを判定する。判定の結果、予約語"__asm"が付加されていなければ、構文解析部12はユーザが拡張定義した組込関数ではないと判断し、ステップS04の通常の関数宣言処理へ移行する。
【0032】
ステップS03の判定の結果、予約語"__asm"が付加されている場合、構文解析部12は、ユーザが定義した組込関数であると判断し、ステップS05において、その組込関数の宣言がプロトタイプ宣言なのか、関数定義なのかを判定する。ここで、「プロトタイプ宣言」とはユーザ定義の組込関数のうち、仮引数の型情報や識別子の名前の定義のみで、動作内容の定義を持たない組込関数の宣言をいう。
【0033】
ステップS05の判定の結果、そのユーザ定義の組込関数の宣言がプロトタイプ宣言である場合、構文解析部12はステップS06において、組込関数の仮引数の型情報や識別子の名前の解釈を行い、仮引数の型情報や識別子の名前の指定方法に誤りがあるか否かを判定する。判定の結果、仮引数の型情報や識別子の名前の指定方法に誤りがなければ、構文解析部12はステップS07においてユーザ定義の組込関数の定義内容を記号表20へ登録する。逆に、仮引数の型情報や識別子の名前の指定方法に誤りがあれば、構文解析部12はステップS08においてエラーメッセージを出力する。
【0034】
一方、ステップS05の判定の結果、ユーザ定義の組込関数の宣言がプロトタイプ宣言でない場合、構文解析部12はステップS10において、組込関数の仮引数の型情報や識別子の名前の解釈を行い、仮引数の型情報や識別子の名前の指定方法に誤りがあるか否か、組込関数の動作内容の定義に文法的な誤りがあるか否かを判定する。判定の結果、仮引数の型情報や識別子の名前の指定方法や動作内容の定義に誤りがある場合、ステップS08においてエラーメッセージを出力する。
【0035】
ステップS10の判定の結果、仮引数の型情報や識別子の名前の指定方法や動作内容の定義に誤りがない場合、ステップS11において、構文解析部12は、このユーザ定義の組込関数が、既に記号表20に定義済みの組込関数の再定義であるか否かを判定する。判定の結果、既に定義済みの組込関数の再定義でない場合、ステップS12において、構文解析部12は、ユーザ定義の組込関数及び定義内容の定義を記号表20へ登録する。
【0036】
ステップS11の判定の結果、このユーザ定義の組込関数が既に記号表20に定義済みの組込関数の再定義である場合、構文解析部12はステップS13において、この組込関数と定義済みの組込関数の動作定義が実質的に一致しているか否かを判定し、例えば、図4(a)の関数定義と図4(b)の関数定義のように動作定義が実質的に一致している場合は、ステップS13において、組込関数及び定義内容の定義を記号表20へ登録する。逆に、一致していない場合は、ステップS14においてエラーメッセージを出力する。尚、ステップS11における再定義された関数の動作内容と実質的に同じであるか否かの判定処理は、一般的なコンパイラで用いられている「共通式の検出」技術により実現できる。
【0037】
図4(a)及び図4(b)に示した組込関数定義に対して、以上の構文解析部12による処理を実行すると、結果として図8に例示するようなデータが記号表20に登録される。
【0038】
図8に示すように、記号表20のハッシュテーブル21内のハッシュ値が指し示す先に組込関数の定義テーブル221,222,…が格納されている。各定義テーブル221,222,…は、ハッシュ値、先頭の機械語、組込関数名、引数、引数の種類、動作定義内容231,222,…、最適化結果などが格納されている。動作定義内容231,222,…には、動作内容を示す機械語列が動作順序に並べられて格納されており、構文解析部12及びコード最適化部16におけるユーザ定義の組込関数の機械語への変換処理を実現している。
【0039】
図9は、コード最適化部16が実行する処理の手順例を示すフローチャートである。
【0040】
まず、ステップS21において、コード最適化部16はコード生成部15により生成された機械語が、ユーザが定義した組込関数の明示的呼び出しであるか否かを判定する。判定の結果、図5(a)に例示するような組込関数の明示的呼び出しである場合、コード最適化部16は、図5(b)に例示するようなユーザが定義した組込関数"uci"の動作内容に応じた機械語に最適化する。
【0041】
ステップS21の判定の結果、図6(a)に例示するような組込関数の明示的呼び出しでない場合、コード最適化部16はステップS22において、図6(a)の命令文T21,T22にそれぞれ対応する機械語M21,M22が、記号表20に登録されている組込関数の定義内容とそれぞれ一致するかどうか検査する。機械語列M21について具体的に説明すると、先頭の機械語列"add $3,$1,10"に対して、ハッシュ検索を行うことにより、図8の記号表20に登録された組込関数"uci"の第一の定義(#num1)に対応する定義内容に一致し、次に、機械語列"add $4,$0,10"に対して、ハッシュ検索を行うことにより、同じく組込関数"uci"の第一の定義(#num1)に対応する定義内容に一致する。従って、機械語列M21は、ステップS23において、図6(c)の機械語列M23に最適化され、出力される。同様に、機械語列M22は、ステップS23において、組込関数"uci"の動作内容に応じた、図6(c)の機械語列M24に最適化されて、出力される。
【0042】
ステップS22の検査の結果、機械語の組み合わせが記号表20に登録されている組込関数の定義内容と一致しない場合は、通常の機械語であると判断し、通常の機械語を生成する。図6に示した例であれば、図6(b)の機械語列M21,M22がそのまま生成される。
【0043】
以上説明したコンパイラ10による処理結果として、入力のソースプログラム1の例を図10に示し、生成されるオブジェクトコード2(アセンブラ)の例を図11に示す。
【0044】
以上説明したように、第1実施例によれば、ユーザがソースプログラム1を記述する際に、ユーザ定義の組み込み関数を明示的に呼び出さなくても、ユーザが定義した組込関数を用いた処理動作と同等の処理動作を行う命令文を、その組込関数に応じた機械語に最適化することができる。
【0045】
更に、ユーザ定義の組込関数の定義を、何度でも(何種類でも)再定義可能とすることで、ユーザ定義の組込関数の機械語への変換において変換候補となる命令文が増え、より効果的な最適化が実現できる。
【0046】
[第2実施例]
第1実施例では、C言語によってユーザ定義の組込関数を記述する例を示したが、ユーザ定義の組込関数を記述するプログラミング言語はC言語に限らない。
【0047】
そこで、第2実施例では、ハードウェア記述言語(例えば、VerilogHDL)で記述されたユーザ定義の組込関数を入力して、記号表20を作成・登録し、ソースプログラム1中の同等の処理動作を行う命令文をユーザ定義の組込関数に応じた機械語に最適化するコンパイラ10の例を示す。
【0048】
図12は、VerilogHDLで記述されたユーザ定義の組込関数(命令動作定義)の例(命令動作定義ファイル名は"add10_and_1.v")を示しており、動作内容の命令語列P41を含んだ記述となっている。同様に、図13は、VerilogHDLで記述された命令動作定義の例(命令動作定義ファイル名は"add10_and_2.v")を示しており、動作内容の命令語列P42を含んでいる。
【0049】
尚、図12における動作内容の命令語列P41は、第1実施例の図10における動作内容の命令語列P11と同等の処理を実現し、図13における動作内容の命令語列P42は、図10における動作内容の命令語列P12と同等の処理を実現する。つまり、第1実施例と同様に、VerilogHDLで記述された命令動作定義の再定義が可能である。
【0050】
図14(a)は、コンパイラ10が入力するソースプログラム1の例を示している。ソースプログラム1中には、VerilogHDLで記述された命令動作定義ファイルの宣言H41,H42と、ユーザが定義した組込関数の明示的呼び出しを行う命令文T41、命令文T41と同等の処理を実現する命令文T42がC言語で記述されている。このようなソースプログラム1を入力したコンパイラ10の構文解析部12の処理動作例を図15に例示する。
【0051】
図15に示すように、構文解析部12は字句解析部11の処理結果を入力し、ステップS31において、入力したトークンがVerilogHDLの命令動作定義ファイルの宣言("#pragma input HDL")であるか否かを判定する。判定の結果、VerilogHDLの命令動作定義ファイルの宣言でない場合、構文解析部12はステップS32において通常の構文解析処理を実行する。
【0052】
ステップS31の判定の結果、VerilogHDLの命令動作定義ファイルの宣言である場合、構文解析部12はステップS33において、VerilogHDLの命令動作定義ファイルを入力する。そして、構文解析部12はステップS34において、入力した命令動作定義ファイルに記述されている命令動作定義に、文法的な誤りがあるか否か判定する。
【0053】
ステップS34の判定の結果、命令動作定義に誤りがあれば、構文解析部12はステップS08においてエラーメッセージを出力し、命令動作定義に誤りがなければ、構文解析部12はステップS36において、VerilogHDLの命令動作定義の記述をユーザ定義の組み込み関数定義に記述に変換する。例えば、図12に示した命令動作定義は、図10における関数定義F11に変換され、図13に示した命令動作定義は、図10における関数定義F12に変換される。
【0054】
ステップS36の変換処理が正常に行われなかった場合、構文解析部12はステップS38においてエラーメッセージを出力する。
【0055】
逆に、ステップS36の変換処理が正常に行われた場合、構文解析部12はステップS41において、変換された組込関数が記号表20に既に定義済みの組込関数の再定義であるか否かを判定する。判定の結果、この組込関数が既に定義済みの組込関数の再定義でない場合、ステップS42において、構文解析部12はこの組込関数及び定義内容の定義を記号表20へ登録する。
【0056】
ステップS41の判定の結果、この組込関数が既に記号表20に定義済みの組込関数の再定義である場合、構文解析部12はステップS43において、この組込関数と定義済みの組込関数の動作定義が実質的に一致しているか否かを判定し、実質的に一致している場合は、ステップS13において、この組込関数及び定義内容の定義を記号表20へ登録する。逆に、一致していない場合は、ステップS14においてエラーメッセージを出力する。
【0057】
以上の構文解析部12による処理を実行した結果、図16に例示するようなデータが記号表20に登録される。結果的に、図8に示した記号表20とほぼ同等な内容になっている。
【0058】
尚、第2実施例におけるコンパイラ10の構成要素のうち、構文解析部12以外の各構成要素は、図1に示したコンパイラ10の各構成要素と同様である。
【0059】
以上説明したコンパイラ10による処理結果として、図14(a)に示した入力のソースプログラム1が、図14(b)に示すオブジェクトコード2(アセンブラ)に最適化されて生成される。
【0060】
このように、第2実施例によれば、ハードウェア記述言語によって記述されたユーザ定義の組込関数と同等の処理動作を行う命令文を、ユーザの拡張定義の組込関数に応じた機械語に最適化することができる。
【0061】
また、ユーザは、プログラミングの際にハードウェア記述言語によって記述されたユーザ定義の組込関数の定義を読むことで、ハードウェアの実装方法が容易に理解できるため、ユーザが拡張した仕様に基づいたプログラムの動作時の最適化を図ることができる。
【0062】
尚、図15に示したHDLファイルの入力処理(ステップS33)の後で、字句解析や構文解析の処理(ステップS34)を行う例を示したが、ソースプログラム1中にVerilogHDLの記述を混在可能とするために、字句解析部11や構文解析部12にVerilogHDLの字句解析や構文解析処理機能を持たせるようにしてもよい。
【0063】
[第3実施例]
第3実施例では、第2実施例で説明したコンパイラ10を用いたプログラム開発ツールについて詳細に説明する。このプログラム開発ツールは、例えば、ユーザ定義のハードウェアを導入したプロセッサと、そのプロセッサのためのアプリケーションプログラムを設計するための開発ツールとして用いることができる。
【0064】
初めに、比較例として、特許文献1に記載のコンパイラを利用したプログラム開発ツールの処理動作例を図17に示す。
【0065】
図17に示すように、開発対象のアプリケーションプログラムを作成し(ステップS51)、作成した開発対象プログラムのユーザ定義命令の該当個所を、ユーザ定義命令を記述した組込関数へ置き換える修正を施す(ステップS52)。そして、修正した開発対象のアプリケーションプログラムを特許文献1に記載のコンパイラによりコンパイルし(ステップS53a)、シミュレーションによるデバッグを行う(ステップS53b)。
【0066】
ステップS53のシミュレーション結果が"OK"でない場合、再度ステップS52へ戻って、ユーザ定義命令の組込関数への置き換えからやり直す。
【0067】
ステップS53のシミュレーション結果が"OK"の場合は、修正した開発対象のアプリケーションプログラムから生成された実行形式のオブジェクトコード2が得られる(ステップS55)。また、他方で、出来上がった開発対象のアプリケーションプログラムに基づいて、ユーザ定義命令のハードウェア定義の記述を行い(ステップS56)、シミュレーションによるデバッグを行う(ステップS57)。
【0068】
ステップS57のシミュレーション結果が"OK"でない場合、再度ステップS52へ戻って、ユーザ定義命令の組込関数への置き換えからやり直すか、ステップS56へ戻って、ユーザ定義命令のハードウェア定義の記述からやり直す。
【0069】
ステップS56のシミュレーション結果が"OK"の場合、出来上がったユーザ定義命令のハードウェア定義が得られる(ステップS59)。
【0070】
以上のような比較例のプログラム開発ツールに対し、次に、第3実施例におけるプログラム開発ツールについて、図18のフローチャートに従って説明する。
【0071】
図18に示すように、第3実施例におけるプログラム開発ツールでは、例えば図14(a)に示したような開発対象のアプリケーションプログラムを作成する(ステップS71)。一方で、図12及び図13に示したようなユーザ定義命令のハードウェア定義の記述を行う(ステップS72)。
【0072】
そして、第2実施例で説明したコンパイラ10を用いて、ステップS71で作成した開発対象のアプリケーションプログラムをコンパイルする(ステップS73a)。具体的には、構文解析部12がユーザ定義命令のハードウェア定義を入力して組込関数の定義内容に変換し、変換した組込関数及び該組込関数の動作内容の定義を記号表20に記憶する。そして、コード最適化部16がコード生成部15により生成された機械語が記号表20に記憶された組込関数の動作内容と一致するか否かを判定し、一致する場合、当該機械語を組込関数の定義内容に応じた機械語に最適化する。
【0073】
このようにしてコンパイルされた開発対象のアプリケーションプログラムについて、シミュレーションによるデバッグを行う(ステップS73b)。
【0074】
ステップS73のシミュレーション結果が"OK"でない場合、再度ステップS72へ戻って、ユーザ定義命令のハードウェア定義の記述からやり直す。
【0075】
ステップS73のシミュレーション結果が"OK"である場合、出来上がった開発対象のアプリケーションプログラムから生成された実行形式のオブジェクトコード2が得られ(ステップS76)、ユーザ定義命令のハードウェア定義も得られる(ステップS75)。
【0076】
このように、第3実施例におけるプログラム開発ツールによれば、比較例に示したプログラム開発ツールに比べて、極めて簡単な処理手順で、ユーザ定義のハードウェアを導入したプロセッサと、そのプロセッサのためのアプリケーションプログラムを設計することができる。
【0077】
ユーザは、ソースプログラム1をプログラミングする時に、ユーザ定義のハードウェアを意識しないでプログラミングすることができる。更に、ユーザ定義のハードウェアをプロセッサの仕様に導入した後、ユーザが定義した部分に該当するプログラム記述を、組込関数に置き換える必要がないため、置き換えに伴うミスなどを防止することができ、しかも作業時間を短縮することができる。
【0078】
以上、第1実施例〜第3実施例について詳細に説明したが、本発明は、その精神または主要な特徴から逸脱することなく、他の色々な形で実施することができる。
【0079】
例えば、前述の各実施例では、C言語を用いて記述されたソースプログラム1をコンパイルするコンパイラ10を例示したが、プログラミング言語はこれに限定されず、例えばC++言語によって記述されたソースプログラムも同様にしてコンパイルできる。
【0080】
また、前述の各実施例では、予約語"__asm"や予約語"__reg_src"を用いてユーザ定義の組込関数を定義する例を示したが、使用するプログラミング言語に規定されている予約語以外の語句であれば、他の語句を用いてユーザ定義の組込関数を定義することができる。
【0081】
このように、前述の各実施例はあらゆる点で単なる例示に過ぎず、限定的に解釈してはならない。本発明の範囲は、特許請求の範囲によって示すものであって、明細書本文には何ら拘束されない。更に、特許請求の範囲の均等範囲に属する変形や変更は、全て本発明の範囲内のものである。
【0082】
【発明の効果】
本発明によれば、ソースプログラム中でユーザ定義の組み込み関数を明示的に呼び出さなくても、ユーザが定義した組込関数を用いた処理動作と同等の動作を行う命令文を、その組込関数に応じた機械語に最適化できるコンパイラ、コンパイル方法及びプログラム開発ツールを提供することができる。
【図面の簡単な説明】
【図1】本実施形態におけるコンパイラの構成を例示する概略ブロック図である。
【図2】中間コードを生成しないでコンパイルを実行するコンパイラの構成を例示する概略ブロック図である。
【図3】組込関数定義を組込関数情報ファイル3から入力してコンパイルを実行するコンパイラを例示する概略図である。
【図4】C言語を用いてユーザ定義の組込関数を記述した例を示したイメージ図であり、(a)は第1の定義例、(b)は再定義した第2の定義例を示している。
【図5】図5(a)は、図4に示したユーザ定義の組込関数を明示的に呼び出す命令列の記述例を示したイメージ図であり、図5(b)は、図5(a)に示す命令列から生成される機械語列を例示したイメージ図である。
【図6】図6(a)は、図4に示したユーザ定義の組込関数と同等の処理動作を実行する命令列を例示したイメージ図であり、図6(b)は、図6(a)に示す命令列から生成される最適化前の機械語列、図6(c)は最適化後の機械語列を例示したイメージ図である。
【図7】第1実施例のコンパイラにおける構文解析部による処理手順例を示すフローチャートである。
【図8】図8に示した構文解析部の処理により作成される記号表の一例を示す図である。
【図9】第1実施例のコンパイラにおけるコード最適化部による処理手順例を示すフローチャートである。
【図10】第1実施例のコンパイラがコンパイルするソースプログラムの記述例を示すイメージ図である。
【図11】図10に示すソースプログラムを第1実施例のコンパイラがコンパイルした結果生成されるオブジェクトコードの例を示すイメージ図である。
【図12】ハードウェア記述言語(VerilogHDL)を用いてユーザ定義の組込関数を記述した例を示したイメージ図である。
【図13】ハードウェア記述言語(VerilogHDL)を用いてユーザ定義の組込関数を記述した例を示したイメージ図である。
【図14】(a)は第2実施例のコンパイラがコンパイルするソースプログラムの記述例を示し、(b)はコンパイルの結果生成されるオブジェクトコードの例を示すイメージ図である。
【図15】第2実施例のコンパイラにおける構文解析部による処理手順例を示すフローチャートである。
【図16】図14に示した構文解析部の処理により作成される記号表の一例を示す図である。
【図17】比較例におけるプログラム開発ツールの処理手順例を示すフローチャートである。
【図18】第3実施例におけるプログラム開発ツールの処理手順例を示すフローチャートである。
【図19】(a)は一般的なソースプログラムの記述例を示し、(b)はコンパイルの結果生成されるオブジェクトコードの例を示すイメージ図である。
【符号の説明】
1,1a…ソースプログラム
2…オブジェクトコード
3…組込関数情報ファイル
10,10a…コンパイラ
11,11a…字句解析部
12,12a…構文解析部
13…中間コード生成部
14…中間コード最適化部
15,15a…コード生成部
16,16a…コード最適化部
17,17a…コード出力部
20,20a…記号表
21…ハッシュテーブル
221,222…定義テーブル
231,222…動作定義内容

Claims (5)

  1. 入力したソースプログラムからオブジェクトコードを生成するコンパイラであって、前記オブジェクトコードはユーザが定義したユーザ定義機械語命令を含み、前記コンパイラは、コンピュータを、
    前記ソースプログラム内に記述された命令について文法規則への適合性を解析し、構文解析結果を出力するとともに、前記命令の組み合わせが、前記ユーザ定義機械語命令に変換されるように対応付けられた動作内容を定義する組込関数の関数定義であることを検出すると、前記動作内容と前記ユーザ定義機械語命令を対応付けて組込関数定義記憶部に記憶させる構文解析部と、
    前記構文解析部の前記構文解析結果に基づいて、機械語命令を生成するコード生成部と、
    前記コード生成部により生成された前記機械語命令の動作内容が前記組込関数定義記憶部に記憶されている前記動作内容と一致する場合、当該機械語命令を前記組込関数定義記憶部に記憶されている対応する前記ユーザ定義機械語命令に置換するコード最適化部と、
    して動作させることを特徴とするコンパイラ。
  2. 前記コンパイラは、さらに、前記コンピュータを、前記ソースプログラム内に記述された命令をトークンに分割する字句解析部として動作させ
    前記構文解析部は、前記トークンについて文法規則への適合性を解析し、前記トークンの組み合わせが前記組込関数の関数定義であるかを解析することを特徴とする請求項1に記載のコンパイラ。
  3. 入力したソースプログラムからオブジェクトコードを生成するコンパイル方法であって、前記オブジェクトコードはユーザが定義したユーザ定義機械語命令を含み、前記コンパイル方法は、
    構文解析部が、前記ソースプログラム内に記述された命令について文法規則への適合性を解析し、構文解析結果を出力するとともに、前記命令の組み合わせが、前記ユーザ定義機械語命令に変換されるように対応付けられた動作内容を定義する組込関数の関数定義であることを検出すると、前記動作内容と前記ユーザ定義機械語命令を対応付けて組込関数定義記憶部に記憶させる第1のステップと
    コード生成部が、前記構文解析部の前記構文解析結果に基づいて、機械語命令を生成する第2のステップと
    コード最適化部が、前記コード生成部により生成された前記機械語命令の動作内容が前記組込関数定義記憶部に記憶されている前記動作内容と一致する場合、当該機械語命令を前記組込関数定義記憶部に記憶されている対応する前記ユーザ定義機械語命令に置換する第3のステップから成るコンパイル方法。
  4. 前記コンパイル方法は、さらに、字句解析部が前記ソースプログラム内に記述された命令をトークンに分割するステップを含み、
    前記第1のステップにおいて、前記構文解析部は、前記トークンについて文法規則への適合性を解析し、前記トークンの組み合わせが前記組込関数の関数定義であるかを解析することを特徴とする請求項3に記載のコンパイル方法。
  5. ユーザが定義したユーザ定義機械語命令を実行可能なプロセッサのためのアプリケーションプログラムを開発するためのコンパイル装置とシミュレータ装置とから成るプログラム開発ツールであって、
    前記コンパイル装置は、
    前記アプリケーションプログラムのソースコード内に記述された命令をトークンに分割する字句解析部と、
    前記トークンについて文法規則への適合性を解析し、構文解析結果を出力するとともに、前記命令の組み合わせが、前記ユーザ定義機械語命令に変換されるように対応付けられた動作内容を定義する組込関数の関数定義であることを検出すると、前記動作内容と前記ユーザ定義機械語命令を対応付けて組込関数定義記憶部に記憶させる構文解析部と、
    前記構文解析部の前記構文解析結果に基づいて、機械語命令を生成するコード生成部と、
    前記コード生成部により生成された前記機械語命令の動作内容が前記組込関数定義記憶部に記憶されている前記動作内容と一致する場合、当該機械語命令を前記組込関数定義記憶部に記憶されている対応する前記ユーザ定義機械語命令に置換するコード最適化部とから成り
    前記シミュレータ装置は、前記コンパイル装置が出力した機械語命令から成る前記アプリケーションプログラムをシミュレーション実行することを特徴とするプログラム開発ツール。
JP2003085848A 2003-03-26 2003-03-26 コンパイラ、コンパイル方法、及びプログラム開発ツール Expired - Fee Related JP4057938B2 (ja)

Priority Applications (2)

Application Number Priority Date Filing Date Title
JP2003085848A JP4057938B2 (ja) 2003-03-26 2003-03-26 コンパイラ、コンパイル方法、及びプログラム開発ツール
US10/807,374 US7657878B2 (en) 2003-03-26 2004-03-24 Compiler, method of compiling and program development tool

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2003085848A JP4057938B2 (ja) 2003-03-26 2003-03-26 コンパイラ、コンパイル方法、及びプログラム開発ツール

Publications (2)

Publication Number Publication Date
JP2004295398A JP2004295398A (ja) 2004-10-21
JP4057938B2 true JP4057938B2 (ja) 2008-03-05

Family

ID=33400653

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2003085848A Expired - Fee Related JP4057938B2 (ja) 2003-03-26 2003-03-26 コンパイラ、コンパイル方法、及びプログラム開発ツール

Country Status (2)

Country Link
US (1) US7657878B2 (ja)
JP (1) JP4057938B2 (ja)

Families Citing this family (31)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20050125783A1 (en) * 2003-12-09 2005-06-09 Texas Instruments Incorporated Program optimization with intermediate code
JP2006243838A (ja) 2005-02-28 2006-09-14 Toshiba Corp プログラム開発装置
JP2006243839A (ja) * 2005-02-28 2006-09-14 Toshiba Corp 命令生成装置及び命令生成方法
US20060277525A1 (en) * 2005-06-06 2006-12-07 Microsoft Corporation Lexical, grammatical, and semantic inference mechanisms
US8024054B2 (en) 2005-08-22 2011-09-20 Trane International, Inc. Building automation system facilitating user customization
US8055386B2 (en) 2005-08-22 2011-11-08 Trane International Inc. Building automation system data management
US8055387B2 (en) 2005-08-22 2011-11-08 Trane International Inc. Building automation system data management
US8050801B2 (en) * 2005-08-22 2011-11-01 Trane International Inc. Dynamically extensible and automatically configurable building automation system and architecture
US8099178B2 (en) 2005-08-22 2012-01-17 Trane International Inc. Building automation system facilitating user customization
WO2007024573A2 (en) * 2005-08-22 2007-03-01 Trane International Inc. Dynamically extensible and automatically configurable building automation system and architecture
US7870090B2 (en) * 2005-08-22 2011-01-11 Trane International Inc. Building automation system date management
US7904186B2 (en) * 2005-08-22 2011-03-08 Trane International, Inc. Building automation system facilitating user customization
US7917232B2 (en) * 2005-08-22 2011-03-29 Trane International Inc. Building automation system data management
JP2008276735A (ja) * 2007-04-03 2008-11-13 Toshiba Corp プログラムコード変換装置及びプログラムコード変換方法
US20100070951A1 (en) * 2008-09-15 2010-03-18 Horizon Semiconductors Ltd. Generic assembler
US8370822B2 (en) * 2008-11-20 2013-02-05 Apple Inc. Compiling techniques for providing limited accuracy and enhanced performance granularity
US8930928B2 (en) * 2008-12-31 2015-01-06 Opera Software Asa Method for modifying the assembly output of a compiler
US8180824B2 (en) 2009-02-23 2012-05-15 Trane International, Inc. Log collection data harvester for use in a building automation system
US9258201B2 (en) 2010-02-23 2016-02-09 Trane International Inc. Active device management for use in a building automation system
US8793022B2 (en) 2010-02-26 2014-07-29 Trane International, Inc. Automated air source and VAV box association
US8219660B2 (en) 2010-02-26 2012-07-10 Trane International Inc. Simultaneous connectivity and management across multiple building automation system networks
US8972961B2 (en) * 2010-05-19 2015-03-03 International Business Machines Corporation Instruction scheduling approach to improve processor performance
US9134976B1 (en) * 2010-12-13 2015-09-15 Reservoir Labs, Inc. Cross-format analysis of software systems
US8694978B1 (en) * 2011-03-25 2014-04-08 Google Inc. Function side-effect modeling by prototyping
US20120330878A1 (en) * 2011-06-23 2012-12-27 Microsoft Corporation Conventions for inferring data models
US20130019225A1 (en) * 2011-07-11 2013-01-17 Microsoft Corporation Incremental Inferences for Developing Data Models
JP5967618B2 (ja) 2013-04-17 2016-08-10 インターナショナル・ビジネス・マシーンズ・コーポレーションInternational Business Machines Corporation 二進化十進数型変数へのアクセスを有する言語のバイナリコードを最適化する方法、並びにそのコンピュータ及びコンピュータ・プログラム
US10269235B2 (en) 2016-08-26 2019-04-23 Trane International Inc. System and method to assist building automation system end user based on alarm parameters
US10922485B2 (en) * 2019-07-10 2021-02-16 FinancialForce.com, Inc. Platform interpretation of user input converted into standardized input
US10776255B1 (en) 2019-07-31 2020-09-15 International Business Machines Corporation Automatic verification of optimization of high level constructs using test vectors
CN114647413A (zh) * 2020-12-17 2022-06-21 华为云计算技术有限公司 一种代码处理方法以及相关设备

Family Cites Families (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4302820A (en) * 1979-08-20 1981-11-24 Allen-Bradley Company Dual language programmable controller
US6091896A (en) * 1995-12-22 2000-07-18 Hewlett-Packard Company Debugging optimized code using data change points
US6247174B1 (en) * 1998-01-02 2001-06-12 Hewlett-Packard Company Optimization of source code with embedded machine instructions
US6701515B1 (en) * 1999-05-27 2004-03-02 Tensilica, Inc. System and method for dynamically designing and evaluating configurable processor instructions
JP2002024029A (ja) * 2000-07-11 2002-01-25 Toshiba Corp コンパイラ、コンパイル方法及びコンパイルプログラムを記録したコンピュータ読み取り可能な記録媒体
US6941548B2 (en) * 2001-10-16 2005-09-06 Tensilica, Inc. Automatic instruction set architecture generation

Also Published As

Publication number Publication date
US7657878B2 (en) 2010-02-02
US20040243988A1 (en) 2004-12-02
JP2004295398A (ja) 2004-10-21

Similar Documents

Publication Publication Date Title
JP4057938B2 (ja) コンパイラ、コンパイル方法、及びプログラム開発ツール
JP4822817B2 (ja) コンパイルシステム
US7559050B2 (en) Generating software development tools via target architecture specification
US7958493B2 (en) Type inference system and method
US7917899B2 (en) Program development apparatus, method for developing a program, and a computer program product for executing an application for a program development apparatus
US8453128B2 (en) Method and system for implementing a just-in-time compiler
US8122440B1 (en) Method and apparatus for enumerating external program code dependencies
US20080104096A1 (en) Software development system
JP4157016B2 (ja) コンパイラ装置及びコンパイル方法
JP2002024029A (ja) コンパイラ、コンパイル方法及びコンパイルプログラムを記録したコンピュータ読み取り可能な記録媒体
US10459829B2 (en) Overall test tool migration pipeline
US8930925B2 (en) Method for enabling compilation of a Cobol source program utilizing a two-stage compilation process, the Cobol source program including a mix of Cobol, C++ or JAVA statements, and optional OpenMP directives
JP2005141380A (ja) テンプレートコンパイル方法
JP2008165342A (ja) ソースコード生成方法及び装置並びにプログラム
Paulweber et al. CASM-IR: uniform ASM-based intermediate representation for model specification, execution, and transformation
KR102614967B1 (ko) 자바스크립트의 중간 언어 기반 의미론 추출 자동화 시스템 및 방법
JP7295469B2 (ja) 関数生成プログラム、関数生成方法、及び情報処理装置
US7873949B2 (en) In source code suppression of binary analysis
GB2420638A (en) Method of substituting code fragments in Internal Representation
Dillig et al. SAIL: Static analysis intermediate language with a two-level representation
Stucki Scalable metaprogramming in scala 3
JPH11110256A (ja) プログラムデバッグ装置、プログラムデバッグ方法及びその方法を記録したコンピュータ読取り可能な記録媒体
Schordan Source-to-source analysis with SATIrE-an example revisited
JP4679540B2 (ja) プログラム検証方法とシステムおよびプログラム
JP2004280476A (ja) プログラム開発装置、およびプログラム開発プログラム

Legal Events

Date Code Title Description
A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20070515

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20070709

A02 Decision of refusal

Free format text: JAPANESE INTERMEDIATE CODE: A02

Effective date: 20070807

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20070904

A911 Transfer to examiner for re-examination before appeal (zenchi)

Free format text: JAPANESE INTERMEDIATE CODE: A911

Effective date: 20071108

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: 20071204

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20071214

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

Free format text: PAYMENT UNTIL: 20101221

Year of fee payment: 3

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

Free format text: PAYMENT UNTIL: 20111221

Year of fee payment: 4

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

Free format text: PAYMENT UNTIL: 20121221

Year of fee payment: 5

LAPS Cancellation because of no payment of annual fees