"ソースプログラムをコンパイルし、オブジェクトコードを生成するコンパイル装置であって、前記ソースプログラムの解析から得られる中間コードに含まれる命令列に対し、所定規則により類似と判定される類似命令列をも同一命令列とみなす比較を行い、サブルーチン化可能な命令列群であるサブルーチン対象命令列群を検出するサブルーチン検出部と、前記サブルーチン対象命令列群から前記オブジェクトコード内に埋め込むサブルーチンを生成するサブルーチン生成部と、前記オブジェクトコードに対し、前記所定規則に基づいて、前記類似命令列の各々に応じた処理を埋め込むサブルーチン呼び出し部と、を備え、前記サブルーチン生成部は、前記所定規則に基づいて、前記類似命令列に関する処理を置換可能に構成した前記サブルーチンを生成する、コンパイル装置。前記命令列は、命令種別と、オペランドタイプと、オペランド情報と、を含み、前記所定規則は、前記オペランドタイプが記述されるテーブル形式のデータであり、前記サブルーチン検出部は、前記命令種別及び前記オペランドタイプが一致し、前記所定規則に定義された前記オペランドタイプを持つ命令列同士を前記類似命令列と判定することを特徴とする請求項1に記載のコンパイル装置。前記類似命令列は、定数値をレジスタにロードする処理を示すことを特徴とする請求項1または請求項2に記載のコンパイル装置。ソースプログラムをコンパイルし、オブジェクトコードを生成するコンパイル方法であって、前記ソースプログラムの解析から得られる中間コードに含まれる命令列に対し、所定規則により類似と判定される類似命令列をも同一命令列とみなす比較を行い、サブルーチン化可能な命令列群であるサブルーチン対象命令列群を検出し、前記サブルーチン対象命令列群から前記オブジェクトコード内に埋め込むサブルーチンを生成する際に、前記所定規則に基づいて、前記類似命令列に関する処理を置換可能に構成した前記オブジェクトコードを生成し、前記オブジェクトコードに対し、前記所定規則に基づいて、前記類似命令列の各々に応じた処理を埋め込む、コンパイル方法。請求項4に記載のコンパイル方法をコンピュータに行わせるためのプログラム。上述したように、コンパイラは、同一コードパターンを検出し、サブルーチン化を行っている。しかしながら、コンパイラは、完全に同一のコードパターンのみを検出しており、コードパターンの一部のみが異なる類似のコードパターンをサブルーチン化の対象とできない。図2は、当該問題を説明するためのソースコード及びオブジェクトコードである。このソースコードに含まれる代入文は、代入する定数値のみが異なる。しかしながら、上述のコンパイラは、異なるコードパターンであると判定し、オブジェクトコードを生成する。サブルーチン化は、同一コードパターンが複数回出現し、オブジェクトコードにおいて当該コードパターンの出現位置にサブルーチンの呼び出し命令を記載しても全体のコードサイズが削減される場合に有効である。そのため、たとえば1回のみ出現するコードパターンに対してサブルーチン化を行うと、サブルーチンの呼び出し命令の分だけコードサイズが大きくなってしまう。図11は、1回だけ出現するコードパターンdata10x1030005をサブルーチン化の対象とした場合の各オブジェクトコードの比較を示す図である。図示するように、この場合にはサブルーチン化を行った方がオブジェクトコードのコードサイズが大きくなってしまう。すなわち、上述のコンパイラは、同一コードパターンのみをサブルーチン化の対象としているため、十分にオブジェクトコードのコードサイズを小さくすることが出来ないという問題があった。本発明にかかるコンパイル装置の一態様は、ソースプログラムをコンパイルし、オブジェクトコードを生成するコンパイル装置であって、前記ソースプログラムの解析から得られる中間コードに含まれる命令列に対し、所定規則により類似と判定される類似命令列をも同一命令列とみなす比較を行い、サブルーチン化可能な命令列群であるサブルーチン対象命令列群を検出するサブルーチン検出部と、前記サブルーチン対象命令列群から前記オブジェクトコード内に埋め込むサブルーチンを生成するサブルーチン生成部と、前記オブジェクトコードに対し、前記所定規則に基づいて、前記類似命令列の各々に応じた処理を埋め込むサブルーチン呼び出し部と、を備え、前記サブルーチン生成部は、前記所定規則に基づいて、前記類似命令列に関する処理を置換可能に構成した前記サブルーチンを生成する、ものである。本発明にかかるコンパイル方法の一態様は、ソースプログラムをコンパイルし、オブジェクトコードを生成するコンパイル方法であって、前記ソースプログラムの解析から得られる中間コードに含まれる命令列に対し、所定規則により類似と判定される類似命令列をも同一命令列とみなす比較を行い、サブルーチン化可能な命令列群であるサブルーチン対象命令列群を検出し、前記サブルーチン対象命令列群から前記オブジェクトコード内に埋め込むサブルーチンを生成する際に、前記所定規則に基づいて、前記類似命令列に関する処理を置換可能に構成した前記オブジェクトコードを生成し、前記オブジェクトコードに対し、前記所定規則に基づいて、前記類似命令列の各々に応じた処理を埋め込む、ものである。本発明にかかるプログラムの一態様は、上述した本発明にかかるコンパイル方法をコンピュータに行わせるためのプログラムである。本発明にかかるコンパイル装置は、同一命令列に限らず、類似命令列をもオブジェクトコード内でのサブルーチン化の対象サブルーチン対象命令群として検出している。コンパイル装置は、サブルーチン対象命令群をサブルーチン化するとともに、類似命令列かかる箇所を差し替え可能に構成し、サブルーチン呼び出しの後に各類似命令列に応じた処理に差し替えている。これにより、論理的に誤りのないオブジェクトコードを生成できるとともに、サブルーチン化の対象となる命令列を増加させることができ、オブジェクトコードのデータサイズを削減できる。本発明では、データサイズを削減したオブジェクトコードを生成するコンパイル装置、コンパイル方法、及びプログラムを提供することができる。<実施の形態1>以下、図面を参照して本発明の実施の形態について説明する。図1は、本実施の形態にかかるコンパイル装置の構成を示すブロック図である。コンパイル装置100は、構文解析部110と、中間コード生成部120と、サブルーチン化部130と、オブジェクト出力部140と、を備える。サブルーチン化部130は、サブルーチン検出部131と、サブルーチン生成部132と、サブルーチン呼び出し部133と、を備える。サブルーチン検出部131は、類似命令パターンマッチ部134を備える。サブルーチン生成部132は、類似命令コード生成部135を備える。サブルーチン呼び出し部133は、類似コードパターン呼び出し部136を備える。コンパイル装置100には、ソースプログラム200が入力される。コンパイル装置は、ソースプログラム200に対するコンパイル処理の結果としてオブジェクトコード300を出力する。以下の説明では、ソースプログラム200は、C言語により記載されたプログラムである図2に記載のプログラムとする。図2には、3つの関数を含むプログラムが記載されている。以下、各処理部の動作詳細について説明する。構文解析部110は、コンパイルの際に必要となる字句解析及び構文解析を行う処理部である。この解析は、既知の手法を用いれば良い。構文解析部110は、解析結果を中間コード生成部120に供給する。中間コード生成部120は、構文解析部110から供給された解析結果を基に、オブジェクトコードの基となる中間的なコード以下の説明では中間コードと記載する。を作成する。中間コード生成部120が図2に記載のプログラムを基に作成した中間コードの概要を図3に示す。図3は、図2のソースプログラムを基に作成した中間コードであり、3つの関数に対応する命令列が記載されている。なお、図3では説明の便宜を図るため、各命令列に通し番号301~312を付している。中間コード生成部120は、作成した中間コードをサブルーチン化部130に供給する。中間コードの各命令列は、命令種別と、オペランドタイプと、オペランド情報と、を含んで構成される。命令にOP_MOVWと記載され、オペランドタイプにOPT_AX_CONと記載されている命令列は、レジスタaxにオペランド情報に記載された定数をロードすることを意味している。命令にOP_MOVWと記載され、オペランドタイプにOPT_SYM_AXと記載されている命令列は、レジスタaxに格納された値をメモリにストアすることを意味している。この命令列のオペランド情報は、シンボル及びオフセットを示す。中間コードは、サブルーチン化部130内のサブルーチン検出部131に供給される。サブルーチン検出部131は、中間コードを基にサブルーチンの対象となる命令列を特定する処理部である。サブルーチン検出部131内の類似命令パターンマッチ部134は、同一ではないもののサブルーチン化が可能な類似命令列をもサブルーチンの対象として抽出する処理部である。類似命令パターンマッチ部134の処理の流れを図4のフローチャートを参照して説明する。類似命令パターンマッチ部134は、中間コードから一つの命令列を抽出し、当該命令列と同一の命令列のパターンマッチを行うS11。そして、処理対象の命令列と同一の命令列があるか否かを判定するS12。例えば命令列301を処理対象としている場合、中間コード内に命令種別、オペランドタイプ、及びオペランド情報が完全に一致する命令列が無いため、類似命令パターンマッチ部134は、同一命令列は無いと判定するS12:No。一方、命令列302を処理対象としている場合、命令列306及び命令列310と完全一致するため、類似命令パターンマッチ部134は、同一命令列があると判定するS12:Yes。同一命令列がある場合、類似命令パターンマッチ部134は、パターンマッチの結果としてTRUEをリターンするS15。同一命令列は無いと判定した場合S12:No、類似命令パターンマッチ部134は、処理対象の命令列のオペランドタイプが類似パターンテーブルに登録されているか否かを判定するS13。類似パターンテーブルとは、同一ではないが類似または略同一であるとしてサブルーチン化の処理においては同一命令列として扱っても良いと判定するための規則を定めたテーブルである。本例では、類似パターンテーブルには、オペランド情報のみが異なる命令列を同一の命令列と扱っても良いと判定するために参照するテーブルであり、オペランドタイプが登録される。図5は、類似パターンテーブルを示す図である。図示するように、OPT_AX_CONが登録されている。類似命令パターンマッチ部134は、処理対象の命令列と同じ命令種別及びオペランドタイプを持ち、当該オペランドタイプが類似パターンテーブルに登録されている場合に、オペランド情報を記憶部図示せずに登録するS13:Yes、S14。そして、類似命令パターンマッチ部134は、パターンマッチの結果としてTRUEをリターンするS15。たとえば命令列301を処理対象とする場合、類似命令パターンマッチ部134は、命令列305及び命令列309と類似の命令列であると判定しS13:Yes、オペランド情報0x0003を記憶部に登録するS14。一方、処理対象の命令列と類似する命令列が無かった場合、類似命令パターンマッチ部134は、パターンマッチの結果としてFALSEをリターンするS16。類似命令パターンマッチ部134は、上記一連の処理S11~S16を各命令列に対して実行する。これにより、func1の各命令列301~304は、func2の各命令列305~308、及びfunc3の各命令列309~312と同一、または類似と判定される。すなわち、類似命令パターンマッチ部134は、func1の各命令列と、func2の各命令列と、func3の各命令列と、がサブルーチン化できると判定する。また、類似命令パターンマッチ部134は、命令列301、305、309が類似すると判定し、当該命令列のオペランド情報0x0003、0x0005、0x0006を記憶部に格納する。サブルーチン検出部131は、類似命令パターンマッチ部134の判定結果を含む情報、すなわちサブルーチン化できる命令列の情報サブルーチン対象命令列群をサブルーチン生成部132に通知する。サブルーチン生成部132は、オブジェクトコードに埋め込むサブルーチンを生成する処理部である。サブルーチン生成部132または他の処理部は、サブルーチンの対象ではない命令列を、オブジェクトコードの各行に変換する。以下、サブルーチン生成部132によるサブルーチンの生成処理について説明する。図6は、サブルーチン生成部132内の類似命令コード生成部135の処理を主に示すフローチャートである。類似命令コード生成部135は、サブルーチン化の対象とされた命令列を1命令列毎に処理対象とする。類似命令コード生成部135は、処理対象の命令列がサブルーチン検出部131により類似命令列と判定された命令列であるか否かを判定するS21。類似命令列である場合S21:Yes、類似命令コード生成部135は、類似パターンテーブルを基に、後ほど置換可能な処理をオブジェクトコード内に埋め込むS22。S22の処理の詳細について図3、及び図7を参照して説明する。図7は、図3に示す中間コードをオブジェクトコードにする処理を示す図である。ここで、図7には、サブルーチンを行わないオブジェクトコードも参考に記載している。類似命令コード生成部135は、命令にOP_MOVWと記載され、オペランドタイプにOPT_AX_CONと記載される命令列301、305、309に対応するコードとして以下の処理をオブジェクトコードに記載する。movwax,[sp0]movwde,axincwaxincwaxmovw[sp0],axmovwax,[de]上記の処理は、後の処理S33で設定するオペランド情報を、呼び出し元の関数への戻りアドレスから取得する処理、呼び出し元の関数への戻りアドレスをオペランド情報の設定の後ろに位置するように補正する処理、及び取り出したオペランド情報にアクセスする処理を生成する処理を含む。上述の処理は、オペランドタイプのOPT_AX_CONに対応した処理であり、他のオペランドタイプが類似パターンテーブルに定義されている場合には他の処理が記載される。すなわち、類似命令コード生成部135は、類似命令列にかかる処理を、サブルーチン呼び出しの後で補正できるような処理を生成する。一方、処理対象の命令列が類似命令列ではない場合S21:No、類似命令コード生成部135または他の処理部は、処理対象の命令列を、オブジェクトコードの各行に変換するS23。上述の処理により、サブルーチン生成部132は、サブルーチン図7におけるbs_S0009を含むオブジェクトコードを生成する。サブルーチン生成部132は、サブルーチン化した処理を含むオブジェクトコードをサブルーチン呼び出し部133に供給する。サブルーチン呼び出し部133は、供給されたオブジェクトコードに対し、類似命令列の各々に応じた処理を埋め込む処理部である。以下、サブルーチン呼び出し部133内の類似コードパターン呼び出し部136の処理を図7及び図8を参照して説明する。図8は、サブルーチン呼び出し部133の処理の流れを示すフローチャートである。サブルーチン呼び出し部133は、一般的なコンパイラの処理と同様にサブルーチンを呼び出す処理図7におけるcallbs_S0009を呼び出し箇所に追加するS31。次に、類似コードパターン呼び出し部136は、呼び出したサブルーチンの生成の際に類似命令列が含まれていたか否かを判定するS32。類似命令列が含まれていた場合S32:Yes、類似命令パターンマッチ部134が記憶部に書き込んだオペランド情報と類似パターンテーブルを基に、類似命令列の各々に応じた処理を埋め込む。ここで、類似コードパターン呼び出し部136は、類似パターンテーブルにオペランドタイプOPT_AX_CONが規定されており、命令列301のオペランド情報として0x0003がメモリに格納されているため、オブジェクトコードにDW03Hという行を追加する。同様に類似コードパターン呼び出し部136は、オブジェクトコードにDW05H、DW06Hという行を追加する。サブルーチン呼び出し部133は、全てのサブルーチン呼び出しについて処理を行ったオブジェクトコード図7参照をオブジェクト出力部140に出力する。なお、図7では、図面での説明の便宜上、3つの関数を用いて説明を行ったが、一般のソースプログラムでは定数を設定する処理は多いため、サブルーチン化によりオブジェクトコードのサイズが削減できる。オブジェクト出力部140は、供給されたオブジェクトコード300を任意の記憶装置ハードディスク等に書き込む。続いて、本実施の形態にかかるコンパイル装置の効果について説明する。コンパイル装置100は、同一命令列に限らず、類似命令列をもオブジェクトコード内でのサブルーチン化の対象サブルーチン対象命令群として検出している。コンパイル装置100は、サブルーチン対象命令群をサブルーチン化するとともに、類似命令列かかる箇所を差し替え可能に構成し、サブルーチン呼び出しの後に各類似命令列に応じた処理に差し替えている。これにより、論理的に誤りのないオブジェクトコードを生成できるとともに、サブルーチン化の対象となる命令列を増加させることができ、オブジェクトコードのデータサイズを削減できる。一般に、マイクロコントローラが使用される組み込みシステムにおいて、当該システムに用いられるプログラム処理は、定数値をメモリに設定する処理が多い。そのため、定数値をレジスタにロードする処理が多い。すなわち、設定する定数値のみが異なる同様の処理が多い。そのため、これらの命令を類似命令列と扱い、サブルーチン化することにより、サブルーチンの適用範囲が広くなり、オブジェクトコードのサイズの削減の効果が大きく成る。コンパイル装置100の各処理部構文解析部110、中間コード生成部120、サブルーチン化部130、及びオブジェクト出力部140の処理は、任意のコンピュータ内で動作するプログラムとして実現することが可能である。プログラムは、様々なタイプの非一時的なコンピュータ可読媒体nontransitorycomputerreadablemediumを用いて格納され、コンピュータに供給することができる。非一時的なコンピュータ可読媒体は、様々なタイプの実体のある記録媒体tangiblestoragemediumを含む。非一時的なコンピュータ可読媒体の例は、磁気記録媒体例えばフレキシブルディスク、磁気テープ、ハードディスクドライブ、光磁気記録媒体例えば光磁気ディスク、CD-ROMReadOnlyMemory、CD-R、CD-R/W、半導体メモリ例えば、マスクROM、PROMProgrammableROM、EPROMErasablePROM、フラッシュROM、RAMrandomaccessmemoryを含む。また、プログラムは、様々なタイプの一時的なコンピュータ可読媒体transitorycomputerreadablemediumによってコンピュータに供給されてもよい。一時的なコンピュータ可読媒体の例は、電気信号、光信号、及び電磁波を含む。一時的なコンピュータ可読媒体は、電線及び光ファイバ等の有線通信路、又は無線通信路を介して、プログラムをコンピュータに供給できる。図9は、コンパイル装置100を実現するためのコンピュータシステムのハードウェア構成例を示している。例えば、このシステムは、中央処理装置CPU410とメモリ420とを含んでいる。CPU410とメモリ420とは、バスを介して補助記憶装置としてのハードディスク装置HDD430に接続される。このシステムは、典型的には、ユーザインターフェースハードウェアを備える。ユーザインターフェースハードウェアとしては、例えば、入力をするためのポインティングデバイスマウス、ジョイスティック等やキーボード等の入力装置440や、視覚データをユーザに提示するための液晶ディスプレイなどの表示装置450がある。ハードディスク装置430等の記憶媒体にはオペレーティングシステムと共同してCPU410等に命令を与え、このシステムの各部の機能を実施するためのコンピュータプログラムを記憶することができる。すなわち、プログラムがメモリ420上に展開され、CPU410がプログラムに従って処理を行い、他のハードウェア構成と協働することによって、コンパイル装置100の各ブロックが構成されている。そして、コンパイル装置100による各処理は、CPU410において所定のプログラムが実行されることで実現されている。尚、これらのシステムは、単一のコンピュータでなくとも、複数のコンピュータによって構成することも可能である。なお、本発明は上記実施の形態に限られたものではなく、趣旨を逸脱しない範囲で適宜変更することが可能である。例えば、上述の説明ではC言語を対象として説明を行ったが必ずしもこれに限られず、コンパイルを要する任意のプログラム言語に本発明のコンパイル手法を適用することができる。また、上述の説明では、類似パターンテーブルに上記以外の処理たとえば、メモリ上のデータをレジスタにロードする、レジスタ上のデータをメモリにストアする等を登録し、これらの処理に対応するサブルーチン化のアルゴリズムを追加しても良い。これにより、サブルーチン化の対象範囲が広くなり、更なるオブジェクトコードの削減が期待できる。"