(57)【要約】      （修正有）【課題】拡張仕様を含むアプリケーションプログラムにおいてホストプロセッサ環境用の開発ツールを利用できるようにするためのコンバータを提供する。【解決手段】コンバータ２１は、拡張仕様のプログラムを含むアプリケーションプログラムAPを標準仕様のアプリケーションプログラムAPCに変換する。コンバータ２１は、アプリケーションAPを入力し、拡張仕様の予約語の情報が登録された予約語テーブルRWTと、変数名と関数名のデータの型の情報を含む変数名・関数名テーブルPFTとを参照して、アプリケーションAPに含まれる文字列を解析して文字列が拡張仕様の文字列か否かを判定し、拡張仕様の文字列についてのデータの型の情報に基づいて、アプリケーションAPに含まれる文字列を、標準仕様の型名に変換し、かつ拡張仕様により定義された関数又は変数を含む式を標準仕様により記述された式に変換する。【選択図】図９
2009252170.tif 000002
【特許請求の範囲】
【請求項１】
所定の仕様に従わない拡張された仕様の第１のプログラムを含む第２のプログラムを前記所定の仕様の第３のプログラムに変換するコンバータであって、
前記第２のプログラムを入力し、前記拡張された仕様の予約語の情報が登録された予約語テーブルと、関数名と変数名のデータの型の情報を含むシンボルテーブルとを参照して、前記第２のプログラムに含まれる文字列を解析して前記文字列が前記拡張された仕様の文字列か否かを判定する拡張仕様判定部と、
前記拡張された仕様の文字列についての前記データの型の情報に基づいて、前記第２のプログラムに含まれる文字列を、前記所定の仕様の型名に変換し、かつ前記拡張された仕様により定義された関数又は変数を含む第１の式を前記所定の仕様により記述された第２の式に変換する拡張仕様変換部と、
を有することを特徴とするコンバータ。
【請求項２】
前記拡張仕様変換部は、前記第２の式を、前記第１の式に対応するライブラリプログラムを呼び出す形式により記述することを特徴とする請求項１に記載のコンバータ。
【請求項３】
前記データの型は、SIMD型であることを特徴とする請求項１又は２に記載のコンバータ。
【請求項４】
前記拡張仕様変換部は、前記第２のプログラムに含まれる前記文字列が前記所定の仕様の文字列の場合は、前記第２のプログラムに含まれる前記文字列を変換しないで出力することを特徴とする請求項１から３のいずれか１項に記載のコンバータ。
【請求項５】
所定の仕様に従わない拡張された仕様の第１のプログラムを含む第２のプログラムを前記所定の仕様の第３のプログラムに変換するプログラム変換方法であって、
前記第２のプログラムを入力し、前記拡張された仕様の予約語の情報が登録された予約語テーブルと、関数名と変数名のデータの型の情報を含むシンボルテーブルとを参照して、前記第２のプログラムに含まれる文字列を解析して前記文字列が前記拡張された仕様の文字列か否かを判定し、
前記拡張された仕様の文字列についての前記データの型の情報に基づいて、前記第２のプログラムに含まれる文字列を、前記所定の仕様の型名に変換し、かつ前記拡張された仕様により定義された関数又は変数を含む第１の式を前記所定の仕様により記述された第２の式に変換することを特徴とするプログラム変換方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、コンバータ及びプログラム変換方法に関し、特に、所定の仕様に従わない仕様のプログラムを所定の仕様のプログラムに変換するコンバータ及びプログラム変換方法に関する。
【背景技術】
【０００２】
従来より、ターゲットプロセッサ上で実行されるアプリケーションプログラムの開発において、ターゲットプロセッサ用に生成された実行ファイルを、ホストプロセッサの実行環境上のシミュレータによって、命令レベルあるいはサイクルレベルでシミュレーションする技術があり、広く利用されている。このようなターゲットプロセッサとは異なるプロセッサを使用したホスト環境でのアプリケーションプログラムの開発環境は、クロス開発環境と言われている。
【０００３】
その技術では、そのシミュレータの各種ソフトウェアルーチンによって、ターゲットプロセッサの命令のデコードが行われながら、実行ファイルが実行されるため、その動作速度が遅く、シミュレーションに時間が掛かるという問題がある。そこで、そのシミュレーションの時間の問題を解決するために、高級言語で記述されたプログラムをアセンブラコードに変換してから、ターゲットプロセッサ用のアセンブラコードをその機能を実現するホスト用のプログラムに変換する技術が提案されている（例えば、特許文献１参照）。
【０００４】
ところで、ターゲットプロセッサに含まれる機能の一部を、特定のコアブロックに実行させることにより、そのターゲットプロセッサの性能の向上を図るようにする構成がとられる場合がしばしばある。例えば、ターゲットプロセッサ内にその一部の機能のための特別なコプロセッサを設け、そのコプロセッサにその機能の処理を実行させる場合がある。その場合、ターゲットプロセッサ用の専用コンパイラがその機能の処理に対応して適切にコンパイルをできるようにするために、アプリケーションプログラムもコンパイラも、JIS規格あるいはISO規格等の標準の言語仕様に従わない拡張した拡張仕様を有する場合がある。
【０００５】
そのような拡張仕様が必要になるのは、例えば、上記の特別な処理に対応しかつターゲットプロセッサが実行可能な命令の機能が、高級言語の標準の演算子では記述できない、あるいは一つの式としては記述できないことがあるからである。よって、そのような高級言語では記述できない機能を持った命令を表現するために拡張仕様によって高級言語のソースプログラム中において記述されるので、ターゲットプロセッサ用の専用コンパイラは、拡張された独自の演算子、式の記述方法等に対応できるようにする必要がある。
【０００６】
また、ターゲットプロセッサが対象とする高級言語では表現できないデータの型、例えば、SIMD型等、を扱うことができる場合、あるいは、対応するデータの型は標準仕様で記述できるがターゲットプロセッサの有するSIMDの演算が標準の式の記述では記述できない場合もある。そのような場合、ターゲットプロセッサ用の専用コンパイラは、同様に、拡張された独自のデータ構造、演算子等にも対応する必要がある。
【０００７】
しかし、いくらこのような対応を施しても、ターゲットプロセッサ独自の拡張仕様を用いてターゲットプロセッサ用のアプリケーションプログラムが記述された場合は、ホストプロセッサ環境用の種々の開発ツールが使用できないという問題があった。開発ツールとしては、標準の仕様で記述されたプログラム用の開発ツールとして市販されているもので、例えば、変数の未初期化や配列の範囲外アクセスなどを検出する動的エラー検出ツール、コード品質を評価するツール、ソースプログラムから設計ドキュメントを自動生成するツールなどがある。
【０００８】
すなわち、ホストプロセッサ環境用の開発ツールは、上述したターゲットプロセッサ独自の拡張仕様を含むアプリケーションプログラムには対応していなため、利用することができない。
【０００９】
上述したシミュレーションの時間の問題を解決する提案に掛かる技術を用いた場合であっても、ホストプロセッサ環境用の種々の開発ツールが利用できないという問題は依然として残る。
【特許文献１】特開2004-13190号公報
【発明の開示】
【発明が解決しようとする課題】
【００１０】
そこで、本発明は、拡張仕様を含むアプリケーションプログラムにおいてホストプロセッサ環境用の開発ツールを利用できるようにするためのコンバータ及びプログラム変換方法を提供することを目的とする。
【課題を解決するための手段】
【００１１】
本発明の一態様によれば、所定の仕様に従わない拡張された仕様の第１のプログラムを含む第２のプログラムを前記所定の仕様の第３のプログラムに変換するコンバータであって、前記第２のプログラムを入力し、前記拡張された仕様の予約語の情報が登録された予約語テーブルと、関数名と変数名のデータの型の情報を含むシンボルテーブルとを参照して、前記第２のプログラムに含まれる文字列を解析して前記文字列が前記拡張された仕様の文字列か否かを判定する拡張仕様判定部と、前記拡張された仕様の文字列についての前記データの型の情報に基づいて、前記第２のプログラムに含まれる文字列を、前記所定の仕様の型名に変換し、かつ前記拡張された仕様により定義された関数又は変数を含む第１の式を前記所定の仕様により記述された第２の式に変換する拡張仕様変換部と、を有するコンバータを提供することができる。
【００１２】
本発明の一態様によれば、所定の仕様に従わない拡張された仕様の第１のプログラムを含む第２のプログラムを前記所定の仕様の第３のプログラムに変換するプログラム変換方法であって、前記第２のプログラムを入力し、前記拡張された仕様の予約語の情報が登録された予約語テーブルと、関数名と変数名のデータの型の情報を含むシンボルテーブルとを参照して、前記第２のプログラムに含まれる文字列を解析して前記文字列が前記拡張された仕様の文字列か否かを判定し、前記拡張された仕様の文字列についての前記データの型の情報に基づいて、前記第２のプログラムに含まれる文字列を、前記所定の仕様の型名に変換し、かつ前記拡張された仕様により定義された関数又は変数を含む第１の式を前記所定の仕様により記述された第２の式に変換することを特徴とするプログラム変換方法を提供することができる。
【発明の効果】
【００１３】
本発明のコンバータ及びプログラム変換方法によれば、拡張仕様を含むアプリケーションプログラムにおいてホストプロセッサ環境用の開発ツールを利用することができる。
【発明を実施するための最良の形態】
【００１４】
以下、図面を参照して本発明の実施の形態に係わるコンバータを説明する。  
（構成）
図１は、本実施の形態に係わるコンバータを有するプログラム開発装置の構成を示す構成図である。
【００１５】
図１に示すように、プログラム開発装置１は、パーソナルコンピュータ（以下、PCという）等のコンピュータ本体１１と、記憶装置１２と、表示装置１３とを有して構成されている。記憶装置１２と表示装置１３は、コンピュータ本体１１に接続されている。記憶装置１２には、後述するコンバータ２１を含む各種プログラムと、各種データとが記憶されている。ここでは、コンバータ２１と、ホストプロセッサ環境で実行可能なコンパイラ２２と、変換前のアプリケーションプログラムAP、変換後のアプリケーションプログラムAPC、予約語テーブルRWT、変数名・関数名テーブルPFT、シンボルテーブルST、演算子対応テーブルOCT、ライブラリプログラム（以下、単にライブラリともいう）LPが、記憶装置１２に、予めあるいは処理実行時に、記憶される。ライブラリLPは、ターゲットプロセッサ用の各命令をホストプロセッサ環境上で擬似的に実現するためのプログラム群を含む。
【００１６】
本体１１、記憶装置１２及び表示装置１３を含むプログラム開発装置１は、アプリケーションプログラム（以下、単にアプリケーションともいう）APを開発する開発環境を提供するホストプロセッサ（以下、単にホストともいう）環境としてのコンピュータシステムである。このホスト環境において、ターゲットプロセッサ用のアプリケーションAPの開発が行われる。
【００１７】
コンピュータ本体１１は、中央処理装置（CPU）を含み、Linux、Windows（登録商標）等のオペレーティングシステム（OS）上で、各種プログラムを実行可能である。ユーザすなわちアプリケーションAPの開発者は、そのOS上で、例えば、JIS規格等の標準仕様であるC言語で、アプリケーションAPを記述する。
【００１８】
通常、C言語は、標準仕様のC言語でプログラムを記述すれば、そのプログラムは、標準仕様の命令として、すなわちいわゆるネイティブな命令として、ホスト環境上の標準仕様のC言語用のコンパイラによりコンパイルでき、コンピュータ本体１１の上述したOS上で実行可能である。
【００１９】
なお、標準仕様とは、JIS規格、あるいはISO/IEC規格等の国内あるいは外国でいわゆる標準として規定された仕様を意味する。プログラム言語であるC言語については、JIS規格ではJIS X3010:2003の項に、ISO/IEC規格であれば、ISO/IEC 9899:1999の項に規定されている。
【００２０】
本実施の形態では、アプリケーションAPは、SoC(System On Chip)のターゲットプロセッサ上で動作するソフトウェアプログラムであり、所定の仕様としての標準仕様のC言語で記述される。しかし、本実施の形態のアプリケーションAPは、標準仕様の記述のプログラムだけでなく、標準仕様に則らないすなわち標準仕様に従わない、記述のプログラム、すなわち拡張された仕様（以下、拡張仕様ともいう）を有するプログラム、も含む。
【００２１】
ここでは、ターゲットプロセッサは、SoCチップで構成され、一つの回路ブロックとしてのコプロセッサを含み、そのコプロセッサが特定の処理を実行するように構成されている。そして、アプリケーションAPは、そのコプロセッサに対してその特定の処理を実行させるための命令として、標準仕様に従わない記述方法の命令等を含むプログラムを含んで記述される。すなわち、そのターゲットプロセッサ向けのアプリケーションAPは、標準仕様のプログラム記述だけでなく、標準仕様に従わない拡張された仕様のプログラム記述を含む。
【００２２】
図２は、コンバータ２１の利用形態の例を説明するための図である。  
図２に示すように、標準仕様のC言語のみで記述されたC言語プログラム３１は、標準仕様のコンパイラ２２によりコンパイル可能であり、ホスト環境上で実行可能な実行ファイル３２にコンパイルされる。
【００２３】
しかし、拡張仕様を含むアプリケーションAPは、図２において点線で示すように、標準仕様のコンパイラ２２によりコンパイルしてもエラーが発生してしまう。そのため、拡張仕様を含むアプリケーションAPは、通常は、専用コンパイラ３３によりコンパイルされる。専用コンパイラ３３は、ターゲットプロセッサ用の実行ファイル３４を生成する。その実行ファイルは、ホスト環境上のシミュレータにより、あるいは評価ボード等の実機により動作可能である。しかし、上述したように、特に、シミュレータによる場合、シミュレーションの時間が多く掛かってしまうという問題がある。
【００２４】
そこで、本実施の形態では、拡張仕様のアプリケーションAPは、高級言語プログラム変換ツールとしてのコンバータ２１により所定のプログラム変換処理されて、アプリケーションAPCに変換される。アプリケーションAPCは、コンパイラ２２により、ホスト環境上で高速に実行可能な実行ファイル３２にコンパイル可能である。さらに、アプリケーションAPCに対して、市販の開発ツールが利用可能となるため、アプリケーションAPを開発する時間を短縮することができる。
【００２５】
すなわち、コンバータ２１は、拡張された仕様を含むアプリケーションAPを、標準仕様に対応したコンパイラ２２でコンパイルできるアプリケーションAPCに変換する高級言語プログラム変換ツールである。コンバータ２１の構成については、後述する。
【００２６】
よって、図１に示すように、記憶装置１２には、ユーザの作成したアプリケーションAPと、後述するコンバータ２１と、標準仕様の言語に対応したコンパイラ２２とが記憶されている。そして、コンバータ２１は、アプリケーションAPを入力して所定の変換処理を行ってアプリケーションAPCを生成する。その生成されたアプリケーションAPCは、記憶装置１２に記憶される。その変換されて生成されたアプリケーションAPCは、コンパイラ２２によってエラーが発生することなくコンパイルすることができる。
【００２７】
次に、コンバータ２１の処理について、アプリケーションAPの具体例を挙げて説明する。図３は、拡張仕様のプログラムの例を説明するための図である。図３は、アプリケーションAPの一部AP1を示し、SIMD演算が可能なターゲットプロセッサについての拡張仕様のC言語のプログラムの例を示す。図３に示す高級言語のプログラムを含むアプリケーションAPのプログラムファイルがコンバータ２１に入力される。
【００２８】
図３のプログラムファイルの内容を説明する。  
図３の「#pragma」 は、標準仕様で規定されている拡張のための指令であるが、標準仕様ではコンパイラの実装依存の部分なので、ターゲットプロセッサ用コンパイラでしか意味がない記述である。  
１行目の「#pragma custom cop_type」は、一つのブロックであるコプロセッサの設定を行う指令であり、「vliw64」が 64bit命令長のVLIWモードが存在することを示す。「reg64 32」は、コプロセッサレジスタのデータ幅が64bit長で、レジスタが32本あることを示している。
【００２９】
２行目の「#pragma custom cop_simd bhw」は、SIMDがコプロセッサの命令により実装され、かつ、その演算で使用できるSIMD型を示している。「b」 は byteの意味で、8bit長のSIMD(レジスタ長が64bitなので、演算は、8bit8並列である)、「h」は halfwordの意味で 16bit長のSIMD(レジスタ長が64bitなので、演算は、16bit4並列である)、「w」はwordの意味で32bit長のSIMD(レジスタ長が64bitなので 演算は、32bit2並列である)を示す。
【００３０】
３行目の「_ _cop_ _pack char cpadd3_b 」の行の記述は、コプロセッサ用の組込み関数(intrinsics関数)の定義である。拡張された予約語_ _cop 修飾子を使用することにより、通常の関数でなく、コプロセッサ命令についての組込み関数の定義であることが示されている。
【００３１】
また、仮引数名としての「_ _cop_src」と 返却値の型として「_ _pack char」を記述することにより、コプロセッサ命令のオペランドの種類がコンパイラ２２に設定されるようにしている。「_ _pack char」は、拡張された予約語 _ _pack 修飾子により標準仕様のcharを修飾することで、SIMD型を意味する。「_ _pack char」は、8bit8並列のSIMD型を意味している。なお、ここでは、「#pragma」を使用したターゲットプロセッサの設定および組込み関数の記述方法は、特開2002-24029号（特願2000-210412号）公報に記載の例の方法に従っている。
【００３２】
「#pragma custom cadd3」の行の記述は、ターゲットプロセッサのコプロセッサ命令の 加算命令cadd3に関する設定の命令であり、「simd_b」により 8bit SIMDが使用可能で、「core」により コアモードで使用可能であることを示している。
【００３３】
「#pragma custom cmov」の行の記述は、ターゲットプロセッサのコプロセッサ命令の代入命令cmovに関する設定の命令であり、「crcr」がコプロセッサ同士の代入が可能であり、「core」がコアモードで使用可能であることを示す。
【００３４】
「void test()」の行の記述は、C言語の標準仕様の記述である。  
「_ _pack char a,b,c;」は、拡張仕様の記述である。これは、拡張仕様の _ _pack char の型を使って変数 a,b,cの定義を意味している。
【００３５】
「c = a + b;」も、式の記述表現は標準仕様であるが、式に使用されている変数が 拡張仕様のSIMD型である。よって、この式は、その意味が SIMD型の加算演算となるため、拡張仕様による記述である。後述するように、コンバータ２１は、cpadd3_bが組込み関数として定義されていることから、_ _pack charの型での + 演算が使用可能であると判断することができる。
【００３６】
上述した拡張仕様のアプリケーションAPがコンバータ２１に入力されると、コンバータ２１は、変換されたアプリケーションAPCを出力する。図４は、その出力されたアプリケーションAPCの例を説明するための図である。図４は、アプリケーションAPCの一部APC1を示す。
【００３７】
図４において、SIMD型「_ _pack char」は、標準仕様の構造体と配列を使用して定義された「_ _pack_char」に変換される。  
「_ _pack char」と「_ _pack_char」は、見かけ上では、「_ _pack」と「char」の間が、空白か、アンダースコア(_)の違いしかないが、意味的には、「_ _pack char」は、拡張仕様の _ _pack修飾子で char を修飾した型であるのに対して、「_ _pack_char」は 標準仕様の配列と構造体を使用して定義した型名である。
【００３８】
図４の４行目に示すように、「cpadd3_b」の拡張仕様を使用した関数宣言は、「_ _pack_char」を使用した関数 「_ _cpadd3_b」の関数宣言に変換される。
【００３９】
６行目に示すように、SIMD型を使用した変数の定義は、「_ _pack_char」を使用した定義に変換される。
【００４０】
SIMD型を使用した式「c = a + b;」は、「_ _pack_char」を引数および返却値の型とする関数「_ _padd_b」を使用した式に変換される。
【００４１】
すなわち、図３の式「c=a+b;」の内容は、図４の式「c=cpadd3_b(a,b)」により、図５のライブラリプログラムLP1を呼び出すように変換される。図５は、ライブラリプログラムの例を示す図である。図５のライブラリプログラムLP1は、図３の式「c=a+b;」の内容を、８ビットデータを８並列で実行するために呼び出されるプログラムである。ライブラリプログラムLP1は、ターゲットプロセッサの命令をホスト環境上で擬似的に実現するためのプログラムである。
【００４２】
（動作）
次に、コンバータ２１の処理内容について説明する。  
図６から図８は、コンバータ２１の処理の内容の例を示すフローチャートである。図９は、コンバータ２１の処理の内容を説明するための図である。図１０は、予約語テーブルの例を示す図である。図１１は、シンボルテーブルSTの例を示す図である。図１２は、演算子対応テーブルOCTの例を示す図である。図６から図８の処理は、コンピュータ本体１１のCPUによって実行される。
【００４３】
まず、図６を用いて、コンバータの全体的な処理の内容を説明する。コンバータ２１は、プログラムであり、記憶装置１３から読み出され、コンピュータ本体１１のCPUによって実行される。
【００４４】
図６の処理は、図示しない入力部を介して入力されたアプリケーションAPを読み込み、プログラムテキストを一文字ずつあるいは所定の単位で読み込みながら、実行される。  
まず、読み込んだテキストについて、拡張仕様判定処理が実行される（ステップS1）。拡張仕様判定処理の内容は、図７に示される。拡張仕様判定処理は、読み込まれた文字列、すなわち字句が拡張された仕様に関するものであるか否かを判定する処理である。
【００４５】
拡張仕様判定処理の結果、読み込んだ文字列が拡張仕様であるときは、ステップS2でYESとなり、拡張仕様変換処理が実行される（ステップS2）。拡張仕様変換処理の内容は、図８に示される。
【００４６】
拡張仕様判定処理の結果、読み込んだ文字列が拡張仕様でないとき、及び拡張仕様変換処理の後は、ファイル出力処理が実行される（ステップS3）。ファイル出力処理では、読み込んだ文字列が拡張仕様でないときは、読み込んだ文字列がそのまま、所定のファイルに出力される。ファイル出力処理では、読み込んだ文字列が拡張仕様であるときは、読み込んだ文字列に対して拡張仕様変換処理の施された文字列が、所定のファイルに出力される。
【００４７】
以上のように、コンバータ２１は、図９に示すように、拡張された仕様を含む高級言語のアプリケーションAPを入力し、入力された文字列が標準仕様の文字列か、拡張仕様の文字列かを、上述した拡張仕様判定処理を行う拡張仕様判定部SS1において判定する。そして、コンバータ２１は、入力された文字列が拡張仕様の文字列の場合には、上述した拡張仕様変換処理を行う拡張仕様変換部SS3において、その文字列を標準仕様の文字列になるように変換する。コンバータ２１は、変換なしの標準仕様の文字列と拡張仕様の変換結果の文字列とを、上述したファイル出力処理を行うファイル出力部SS4において合成して、標準仕様の高級言語のアプリケーションAPCの文字列として出力する。
【００４８】
以下、より具体的に、図６の処理の内容を説明する。まず、拡張仕様判定部SS1における拡張仕様判定処理について説明する。  
図７は、拡張仕様判定処理の流れの例を示すフローチャートである。まず、CPUは、読み込まれた文字列すなわち字句が、予約語であるか否かを、図１０に示す予約語テーブルRWTを参照して判定する（ステップS11）。
【００４９】
予約語は、図１０の予約語テーブルRWTに予め登録されている。図１０の予約語テーブルRWTには、標準仕様の予約語情報と、拡張仕様の予約語情報とが登録されている。
【００５０】
図１０に示すように、予約語テーブルRWTは、標準仕様の予約語が登録されている標準仕様予約語情報部４１と、拡張仕様の予約語が登録されている拡張仕様予約語情報部４２とを有する。標準仕様予約語情報部４１には、void、char、struct、typedef、#pragma、等の予約語の情報が登録されている。これらの情報は、標準仕様のC言語の予約語である。拡張仕様予約語情報部４２には、_ _pack、_ _vliw、_ _cop、等の予約語の情報が登録されている。これらの情報は、拡張仕様のC言語の予約語である。
【００５１】
よって、CPUは、ステップS11では、読み込んだ文字列と、標準仕様予約語情報部４１及び拡張仕様予約語情報部４２に登録された予約語との比較を行うことによって、読み込まれた文字列が予約語であるか否かを判定することができる。読み込んだ文字列が、標準仕様予約語情報部４１又は拡張仕様予約語情報部４２に登録された予約語であるときは、読み込まれた文字列が予約語であると判定される。
【００５２】
読み込まれた文字列が予約語である場合、ステップS12でYESとなり、その文字列が拡張仕様の予約語（以下、拡張予約語という）であるか否かが判断される（ステップS13）。すなわち、読み出された文字列が、拡張仕様予約語情報部４２に登録された予約語であれば、拡張予約語と判定される。
【００５３】
CPUは、読み出された文字列が拡張予約語であるときは、ステップS13でYESとなり、読み出された文字列を、拡張された仕様の文字列（以下、拡張仕様文字列という）として出力する（ステップS14）。  
また、ステップS14では、変数名等の文字列と、その文字列の拡張仕様に関する情報、例えばデータの型の情報、とが、図１１に示すようなシンボルテーブルSTに登録される。文字列の拡張仕様に関する情報は、後述する拡張仕様変換処理において利用される。図１１のシンボルテーブルSTは、変数情報部５１と、型情報部５２とを含む。変数情報部５１には、変数名等の文字列が登録され、型情報部５２には、変数名等に対応してデータの型の情報が登録される。
【００５４】
なお、後述する拡張仕様変換処理において利用されるデータの型の情報は、図１１のようなシンボルテーブルSTに文字列と対応させて登録せずに、その拡張仕様変換処理において、シンボルテーブルSTを参照することにより、得るようにしてもよい。
【００５５】
そして、CPUは、文字列に関する構文木の情報を生成する構文木生成処理を実行する（ステップS15）。この構文木の情報は、後述する拡張仕様変換処理における式の変換において、文字列の構造情報が命令を組み合わせるときに利用される。
【００５６】
読み出された文字列が拡張予約語でないときは、ステップS13でNOとなり、読み出された文字列をそのまま、標準仕様の文字列（以下、標準仕様文字列という）として出力する（ステップS16）。  
また、ステップS12でNOの場合、すなわち読み込まれた文字列が予約語でない場合、CPUは、変数名と関数名の情報が登録された変数名・関数名テーブルPFT（図９参照）を参照して、読み込まれた文字列と変数名・関数名テーブルの情報とを比較することによって、読み込まれた文字列が変数名か関数名かを判定する（ステップS17）。
【００５７】
読み込まれた文字列が関数名又は変数名でないときは、CPUは、ステップS18でNOとなり、読み出された文字列をそのまま、標準仕様文字列として出力する（ステップS16）。
【００５８】
読み込まれた文字列が関数名又は変数名であるときは、その関数名又は変数名のデータの型を判定、ここではその関数名又は変数名がSIMD型で定義あるいは宣言されているか否かが判定される（ステップS19）。
【００５９】
ステップS20でYES、すなわち関数名又は変数名がSIMD型で定義されたあるいは宣言されたものであるときは、処理は、ステップS14に移行する。
【００６０】
ステップS20でNO、すなわち関数名又は変数名がSIMD型で定義されたあるいは宣言されたものでないときは、処理は、ステップS16に移行する。
【００６１】
ステップS14とS16の出力は、図９に示すように、それぞれ、拡張仕様文字列情報ECと標準仕様文字列情報NCとして、記憶装置１２に一次的に保持される。
【００６２】
すなわち、図９に示すように、拡張仕様判定部SS1は、アプリケーションAPが入力されると、予約語テーブルRWTと変数名・関数名テーブルPFTを参照して、読み込んだ文字列が拡張された仕様の文字列であるか、標準仕様の文字列であるかを判定し、拡張された仕様の文字列であれば、拡張仕様文字列情報ECとして所定のファイルに出力し、標準仕様の文字列であれば、標準仕様文字列情報NCとして所定のファイルに出力する。
【００６３】
拡張仕様文字列情報ECには、図８の拡張仕様変換処理が施される。  
図８は、拡張仕様変換処理の流れの例を示すフローチャートである。図８の処理は、拡張仕様の種類に応じて、３つの場合に分けることができる。
【００６４】
１つは、A）拡張仕様の文字列が、ターゲットプロセッサにとっては、意味があるが、ホスト環境では意味の無い機能に関する記述を行うための拡張された仕様の文字列である場合で、２つ目は、B）拡張仕様の文字列が、拡張仕様の変数及び関数のデータの型を記述する文字列である場合で、３つ目は、C）拡張仕様の文字列が、拡張仕様で定義された変数あるいは関数を使用する式を記述する文字列の場合である。  
まず、上記Aの場合は、上述したように、ターゲットプロセッサにとっては、意味がある機能ではあるが、ホスト環境では意味がない機能に関する記述を行うための拡張仕様の場合である。これらの拡張仕様の記述は、削除され、出力されない。
【００６５】
これに該当する拡張仕様としては、ターゲットプロセッサが VLIWモードで動作する関数であることを示す _ _vliw修飾子、関数や変数を配置するセクションを指定する _ _section 修飾子、ターゲットプロセッサの設定情報をコンパイラに設定する #pragma指令、組込み関数の定義を示す_ _cop修飾子、組込み関数の定義の仮引数名に使用する_ _cop_src、等がある。これらの修飾子等の情報が、記憶装置１２に予め記憶されており、入力された文字列が、記憶された情報に合致するか否かにより、拡張仕様の文字列が、ターゲットプロセッサにとっては意味があるが、ホスト環境では意味の無い機能に関する記述を行うための拡張された仕様の文字列であるか否かが判定される。
【００６６】
但し、#pragma 指令のターゲットプロセッサの設定情報は、その後の拡張仕様の変換処理のときに、SIMD型の型名などの置換内容を決めるために使用されるため、内部データとして保持される。
【００６７】
また、組込み関数の定義を示す_ _cop修飾子は、ターゲットプロセッサ用コンパイラに対して、使用できるSIMD演算の組込み関数を指定しているので、_ _cop修飾子に関わる設定情報も、内部データとして保持される。
【００６８】
よって、図８において、まず、拡張仕様文字列が、#pragma指令又は_ _cop修飾子であるか否かが判定される（ステップS21）。拡張仕様文字列が#pragma指令等であるときは、ターゲットプロセッサの設定情報を取得し、保持する（ステップS22）。
【００６９】
拡張仕様文字列が、#pragma指令等でないときは、ステップS21でNOとなり、ホスト環境では意味のない修飾子か否かが判定される（ステップS23）。すなわち、拡張仕様文字列が_ _vliw, _ _section等の修飾子であるかが判定され、_ _vliw, _ _section等の修飾子であるときは、ステップS23でYESとなり、処理は終了し、変換結果として出力されない。
【００７０】
次に、Ｂの場合か否かが判定される。Bの場合は、拡張された仕様の変数及び関数のデータの型を記述する文字列であるので、変数及び関数のデータの型は、標準仕様を使用した型名に、変換して出力される。例えば、拡張仕様のSIMD型のデータは、標準仕様を使用した型に変換される。通常、ターゲットプロセッサ用CコンパイラでSIMD型を示すのに、標準仕様の記述は用いられていない。これは、SIMD型のデータをレジスタに配置するためである。よって、拡張仕様のSIMD型のデータは、標準仕様の配列と構造体を使用した型名に変換される。
【００７１】
例えば、拡張予約語 _ _pack を使用して定義される_ _pack char (レジスタ長が64bitの場合は8bit8並列)、_ _pack short(レジスタが64bitの場合は16bit4並列)、_ _pack long(レジスタが64bitの場合は32bit2並列)は、それぞれ _ _pack_char、_ _pack_short、_ _pack_longの型名に変換される。
【００７２】
よって、変数及び関数のデータの型が、SIMD型であるか否かが判定され（ステップS24）、変数及び関数のデータの型がSIMD型であるときは、ステップS24でYESとなり、CPUは、拡張仕様のデータの型を、標準仕様の配列と構造体を使用した型名に変換する（ステップS25）。
【００７３】
そして、CPUは、拡張仕様の変数及び関数のデータの型を記述する文字列を、標準仕様を使用した型名に変換した文字列を出力する（ステップS26）。
【００７４】
データの型を記述する文字列でないとき、ここでは変数及び関数のデータの型がSIMD型でないとき、ステップS24でNOとなり、拡張仕様文字列が、拡張仕様で定義された変数あるいは関数を使用した式であるか否かが判定される（ステップS27）。ここでは、拡張仕様文字列が、SIMD型として記述された変数あるいは関数を用いた式であるか否かが判定される。
【００７５】
拡張仕様の文字列が、SIMD型として定義された変数あるいは関数を用いた式でなければ、ステップS27でNOとなり、処理は何もせず終了する。
【００７６】
その文字列が拡張仕様で定義された変数あるいは関数を用いた式である場合、ステップS27でYESとなり、変数あるいは関数の式に用いられた演算子に対応する命令を、図１２に示す演算子対応テーブルOCTから検索する検索処理が実行される（ステップS28）。その命令は、SIMD演算を行うターゲットプロセッサの命令に対応する。
【００７７】
検索の結果、演算子対応テーブルOCT中に、式に用いられた演算子に対応する命令があるか否かが判定され（ステップS29）、対応する命令があれば、ステップS29でYESとなり、文字列に関する構文木の情報を用いて、式に用いられた演算子に対応する命令を、対応するSIMD演算のターゲットプロセッサの命令をシミュレートする関数を呼び出す式に変換する（ステップS30）。呼び出される関数は、ライブラリLP中にプログラムとして予め登録されている。例えば、図４における式は、図５に示すライブラリLP１を呼び出すように変換されている。
【００７８】
そして、もしも、対応する命令が演算子対応テーブルOCTに無ければ、エラー処理が行われる（ステップS32）。
【００７９】
以上のように、拡張仕様文字列が拡張仕様で定義された変数あるいは関数を記述する式の文字列の場合、CPUは、その式の演算子に対応する命令をシミュレートする関数を呼び出す式に変換する。ここでは、SIMD型で定義された変数あるいは関数を用いた式が記述されている場合、その式は、記述された演算子は、対応するSIMD型の関数を呼び出す式に変換される。どの関数を呼び出すかを決定するために、CPUは、式に用いられた演算子とSIMDの型とに対応するSIMD演算のターゲットプロセッサの命令を、図１２に示す演算子対応テーブルから検索する。
【００８０】
図１２に示すように、ここでは、Cの演算子とSIMD型との組み合わせが規定されているので、CPUは、指定されたSIMD演算がどの定義された組込み関数かを検索することになる。
【００８１】
図１２は、Cの各演算子に対応する、8bit8並列、16bit4並列及び32bit2並列の各場合の命令の情報が登録されている。例えば、「＋」の演算子については、8bit8並列の場合は命令「cpadd3_b」が対応し、16bit4並列の場合は命令「cpadd3_h」が対応し、そして、32bit2並列の場合は命令「cpadd3_w」が対応することが、演算子対応テーブルに登録されている。
【００８２】
そして、変換された式の文字列は、ファイル出力部SS4に出力され、他の文字列と合成されて、ファイル出力部SS4から出力される。
【００８３】
よって、命令が組込み関数として定義されている場合、例えば、_ _cop修飾子を使って関数が宣言されている、または #pragam指令で設定されているような場合、SIMD演算が可能と判断され、その演算子は、演算子対応テーブルOCTが参照されて、その関数を呼び出す式に変換される。その命令が組込み関数として定義されていない場合、演算子は変換せずに、変換できなかったことをエラーとして出力する。
【００８４】
なお、ホスト環境の開発ツールは、変換後のプログラムファイルを用いるが、開発ツールでのソースファイルの表示には、変換後のプログラムファイルでなく、変換前のソースファイルが使用される。そのため、コンバータ２１は、デバッグ情報を付加して、アプリケーションAPCのプログラムファイルを出力する。例えば、高級言語としてC言語を使用する場合は、#line <行番号> <ファイル名>の記述が、出力するプログラムファイルに付加される。
【００８５】
コンバータ２１により変換処理されたアプリケーションAPCは、種々の開発ツールを利用可能であり、かつホスト環境のコンパイラ２２において、ライブラリLPと結合されることによって、実行ファイルが生成される。
【００８６】
以上のように、本実施の形態では、コンバータ２１は、拡張された仕様が含まれたターゲットプロセッサ用のアプリケーションAPのプログラムファイルを、標準仕様のアプリケーションAPCのプログラムファイルに変換する。その変換されて得られたプログラムファイルは、ホスト環境の開発環境でコンパイルでき、ターゲットプロセッサの命令仕様をホスト環境上で擬似的に実現するライブラリLPと結合される。その結果、ホスト環境の実行ファイル３２が作成される。
【００８７】
この実行ファイル３２は、ホスト環境でネイティブに実行できるファイルなので、従来のホスト上のシミュレータを用いて実行されるシミュレーションよりも、実行時のオーバーヘッドが少ないため、実行速度が向上する。
【００８８】
さらに、標準仕様のアプリケーションAPCなので、ホスト環境用として市販されている、変数の未初期化や配列の範囲外アクセスなどを検出する動的エラー検出ツール、コード品質を評価するツール、ソースプログラムから設計ドキュメントを自動生成するツールなどの開発ツールが使用可能となる。
【００８９】
従って、上述したコンバータ２１により生成されたアプリケーションAPCは、ホスト環境でコンパイルして高速に実行可能であり、かつ、種々の開発ツールを利用可能であるので、アプリケーションプログラムの開発効率が向上する。
【００９０】
なお、以上説明した動作を実行するプログラムは、コンピュータプログラム製品として、フレキシブルディスク、ＣＤ−ＲＯＭ等の可搬媒体や、ハードディスク等の記憶媒体に、その全体あるいは一部が記録され、あるいは記憶されている。そのプログラムがコンピュータにより読み取られて、動作の全部あるいは一部が実行される。あるいは、そのプログラムの全体あるいは一部を通信ネットワークを介して流通または提供することができる。利用者は、通信ネットワークを介してそのプログラムをダウンロードしてコンピュータにインストールしたり、あるいは記録媒体からコンピュータにインストールすることで、容易に本発明のコンバータを使用することができる。
【００９１】
本発明は、上述した実施の形態に限定されるものではなく、本発明の要旨を変えない範囲において、種々の変更、改変等が可能である。
【図面の簡単な説明】
【００９２】
【図１】本発明の実施の形態に係わるコンバータを有するプログラム開発装置の構成を示す構成図である。
【図２】本発明の実施の形態に係わるコンバータの利用形態の例を説明するための図である。
【図３】本発明の実施の形態に係わる拡張仕様のプログラムの例を説明するための図である。
【図４】本発明の実施の形態に係わるアプリケーションAPCの例を説明するための図である。
【図５】本発明の実施の形態に係わるライブラリプログラムの例を示す図である。
【図６】本発明の実施の形態に係わるコンバータの処理の内容の例を示すフローチャートである。
【図７】本発明の実施の形態に係わる拡張仕様判定処理の流れの例を示すフローチャートである。
【図８】本発明の実施の形態に係わる拡張仕様変換処理の流れの例を示すフローチャートである。
【図９】本発明の実施の形態に係わるコンバータの処理の内容を説明するための図である。
【図１０】本発明の実施の形態に係わる予約語テーブルの例を示す図である。
【図１１】本発明の実施の形態に係わるシンボルテーブルの例を示す図である。
【図１２】本発明の実施の形態に係わる演算子対応テーブルの例を示す図である。
【符号の説明】
【００９３】
１  プログラム開発装置、１１  コンピュータ本体、１２  記憶装置、１３  表示装置、２１  コンバータ、２２  コンパイラ
【図１】
2009252170.tif 000003
【図２】
2009252170.tif 000004
【図３】
2009252170.tif 000005
【図４】
2009252170.tif 000006
【図５】
2009252170.tif 000007
【図６】
2009252170.tif 000008
【図７】
2009252170.tif 000009
【図８】
2009252170.tif 000010
【図９】
2009252170.tif 000011
【図１０】
2009252170.tif 000012
【図１１】
2009252170.tif 000013
【図１２】
2009252170.tif 000014