(57)【要約】【課題】同じ値の初期値を持つ変数がソースプログラムに多数含まれる場合において、従来より、実行形式プログラムのコードサイズを削減することができるプログラム変換装置を提供する。【解決手段】変数認識部１０２において認識された各変数について、変数配置決定部１０３は初期値が特定値である変数をまとめて特定領域に配置することを決定する。機械語コード生成部１０４は特定領域を特定値で一斉に埋めるスタートアップルーチンと、特定領域を含む各変数領域を参照する機械語コードを生成する。リンク処理部１０６は生成された機械語コードをリンク処理して実行形式プログラムを生成する。【選択図】  図１
2004280311.tif 000002
【特許請求の範囲】
【請求項１】
入力されたソースプログラムを変換してオブジェクトプログラムを出力するプログラム変換装置であって、
前記ソースプログラムに含まれている特定の変数とその初期値とを認識する認識手段と、
前記認識手段により認識された変数のうち初期値が同一の特定値である変数を、メモリ上の連続したアドレスから成る特定領域にまとめて配置することを決定する変数配置決定手段とを備える
ことを特徴とするプログラム変換装置。
【請求項２】
前記認識手段は、前記ソースプログラムに含まれている特定の変数について初期値の有無と、初期値が与えられている場合はその値とを認識し、
前記変数配置決定手段は、前記認識手段により認識された変数のうち、初期値が与えられていない変数及び初期値が０の変数については、前記特定領域にまとめて配置することを決定する
ことを特徴とする請求項１記載のプログラム変換装置。
【請求項３】
前記プログラム変換装置は、更に、
ユーザから前記特定値の指定を受け付ける受付手段を備える
ことを特徴とする請求項１記載のプログラム変換装置。
【請求項４】
前記プログラム変換装置は、更に、
前記認識手段により認識された初期値を持つ変数の数を、初期値別に計数する計数手段と、
前記計数手段により計数された結果、変数の数が所定数以上の初期値を前記特定値とする決定を行う特定値決定手段とを備える
ことを特徴とする請求項１記載のプログラム変換装置。
【請求項５】
前記プログラム変換装置は、更に、
前記変数配置決定手段の決定に従って、前記特定領域を前記特定値で埋める命令コード列を生成する生成手段を備える
ことを特徴とする請求項１乃至４のうちいずれか１項記載のプログラム変換装置。
【請求項６】
前記認識手段は、前記ソースプログラムに含まれている特定の変数の種類について認識し、
前記変数配置決定手段は、前記認識手段により認識された各変数のうち変数の種類が集合体変数であり、当該集合体変数の初期値列が特定値の繰り返し列である場合、当該集合体変数をメモリ上の連続したアドレスから成る専用領域に配置することを決定し、
前記変数配置決定手段の決定に従って、前記専用領域を前記特定値で埋める命令コード列を生成する生成手段を更に備える
ことを特徴とする請求項１記載のプログラム変換装置。
【請求項７】
入力されたソースプログラムを変換してオブジェクトプログラムを出力するプログラム変換処理をコンピュータに行わせるコンピュータプログラムであって、
前記プログラム変換処理は、
前記ソースプログラムに含まれている特定の変数とその初期値とを認識する認識ステップと、
前記認識手段により認識された変数のうち初期値が同一の特定値である変数を、メモリ上の連続したアドレスから成る特定領域にまとめて配置することを決定する変数配置決定ステップとを含む
ことを特徴とするコンピュータプログラム。
【請求項８】
請求項７記載のコンピュータプログラムを記録した記録媒体。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、入力されたソースプログラムを変換してオブジェクトプログラムを出力するプログラム変換装置に関し、特に初期値を持つ各変数をメモリ上のどの領域に配置するかを決定する処理に関する。
【０００２】
【従来の技術】
家電等のマイクロコンピュータ組込み機器のＲＯＭに格納されている実行形式プログラムは、コンパイラ、リンカ等の機能を備えたプログラム変換装置によって、Ｃ言語等の高級言語で記述されたソースプログラムを変換出力したものであるのが一般的である。詳しくは、下記非特許文献に示されている。
【０００３】
【非特許文献】
山本繁寿  インターフェース２００２年３月号  環境構築からソース入力、コンパイルまで実践！Ｃプログラミング  ２．組込みＣプログラミングの実際  ｐ．６１〜６５
【０００４】
【発明が解決しようとする課題】
ところで、従来のプログラム変換装置は、入力されたソースプログラムに含まれている各変数が初期値を持つ場合、これらの初期値は、実行形式プログラムの実行開始時にＲＡＭ上の変数領域を初期化する際に用いるデータとして、実行形式プログラムに含めて出力している。そのため、ソースプログラム内に初期値を持つ変数が多数記述されている場合、実行形式プログラムのコードサイズが大きくなるという問題があった。
【０００５】
本発明は上記問題を鑑みて、同じ値の初期値を持つ変数がソースプログラムに多数含まれる場合において、従来のプログラム変換装置より、実行形式プログラムのコードサイズを削減することができるプログラム変換装置、及びプログラム変換装置にプログラム変換処理を行わせるコンピュータプログラムを提供することを目的とする。
【０００６】
【課題を解決するための手段】
上記目的を達成するために、本発明に係るプログラム変換装置は、入力されたソースプログラムを変換してオブジェクトプログラムを出力するプログラム変換装置であって、前記ソースプログラムに含まれている特定の変数とその初期値とを認識する認識手段と、前記認識手段により認識された変数のうち初期値が同一の特定値である変数を、メモリ上の連続したアドレスから成る特定領域にまとめて配置することを決定する変数配置決定手段とを備えることを特徴とする。
【０００７】
上記プログラム変換装置は、変数配置決定手段の決定に従って、前記ソースプログラム中の初期値が前記特定値である変数を参照する記述に対応する命令コードとして、前記特定領域を参照する命令コードを生成し、組み込み機器において実行可能なオブジェクトプログラム（実行形式プログラム）を出力する。
この構成により、変数の初期値が特定値であるものについては、個々の初期値全てをデータとして実行形式プログラムに含める必要がなくなるので、その分、実行形式プログラムのコードサイズを削減することができる。
【０００８】
また、本発明に係るコンピュータプログラムは、入力されたソースプログラムを変換してオブジェクトプログラムを出力するプログラム変換処理をコンピュータに行わせるコンピュータプログラムであって、前記プログラム変換処理は、前記ソースプログラムに含まれている特定の変数とその初期値とを認識する認識ステップと、前記認識手段により認識された変数のうち初期値が同一の特定値である変数を、メモリ上の連続したアドレスから成る特定領域にまとめて配置することを決定する変数配置決定ステップとを含むことを特徴とする。
【０００９】
【発明の実施の形態】
以下、本発明に係るプログラム変換装置の各実施形態について、図面を用いて説明する。
＜実施形態１＞
実施形態１のプログラム変換装置は、初期値０の変数をＢＳＳ領域にまとめて配置する決定を行い、ＢＳＳ領域を０で一斉初期化するスタートアップルーチンを含む実行形式プログラムを出力する。ＢＳＳ領域は、従来、初期値を持たない変数のみが配置されていた領域である。
【００１０】
以下、実施形態１のプログラム変換装置について、構成、動作、実行形式プログラムの項目に分けて説明する。
＜構成１＞
図１は、実施形態１におけるプログラム変換装置の機能構成を表す図である。図１には、便宜上、プログラム変換装置１００に入力されるソースプログラム１０、及びプログラム変換装置１００から出力された実行形式プログラム２０を記載している。
【００１１】
プログラム変換装置１００は、ＣＰＵ、メモリ、入出力装置等を備えたコンピュータであり、入力されたソースプログラム１０を変換して実行形式プログラム２０を出力する装置である。機能的には、ソースプログラム解析部１０１、機械語コード生成部１０４及びリンク処理部１０６から構成される。そして、ソースプログラム解析部１０１には、変数認識部１０２と変数配置決定部１０３とが含まれ、機械語コード生成部１０４にはスタートアップルーチン生成部１０５が含まれる。
【００１２】
プログラム変換装置１００の各種機能部は、メモリに記憶されているコンパイラ、リンカ等のプログラム変換用プログラムをＣＰＵが実行することにより実現される。
ソースプログラム解析部１０１は、プログラム変換装置１００に入力されたソースプログラムに記載されている字句及び構文を解析し、中間コードを生成する機能を有する。ソースプログラム解析部１０１において生成された中間コードは、機械語コード生成部１０４に送られる。
【００１３】
ソースプログラム解析部１０１に含まれる変数認識部１０２は、入力されたソースプログラムに含まれている各変数のうち外部変数及び静的変数を認識し、変数表を作成する機能を有する。
ここで、具体的な例を図面を用いて説明する。図２は、Ｃ言語で記述されたソースプログラムの一例を示す図である。
【００１４】
ソースプログラム１０の変数宣言部分１１では、初期値１のｉｎｔ型外部変数ａ、初期値２のｉｎｔ型外部変数ｂ、初期値１のｉｎｔ型外部変数ｃ、初期値１のｉｎｔ型外部変数ｄ、初期値１のｉｎｔ型外部変数ｅ、初期値０のｉｎｔ型外部変数ｆ、初期値０のｉｎｔ型外部変数ｇ、初期値０のｉｎｔ型外部変数ｈ、初期値１のｉｎｔ型外部変数ｉ、初期値が与えられていないｉｎｔ型外部変数ｊ、初期値が与えられていないｉｎｔ型外部変数ｋ、初期値１のｉｎｔ型外部変数ｌ、初期値が与えられていないｉｎｔ型外部変数ｍ、初期値１のｉｎｔ型外部変数ｎ、が記述されている。
【００１５】
変数宣言部分１１の各変数は、変数認識部１０２により認識され、図３に示す変数表３０１が変数認識部１０２によって作成される。変数表３０１には、変数名、初期値有無及び初期値の項目があり、各変数の変数名、初期値有無及び初期値が記述される。
変数配置決定部１０３は変数表を参照して、各変数をどの領域に配置するかを決定する変数配置決定処理を行う機能を有する。本実施形態において変数配置決定部１０３は、初期値を持たない変数と初期値が０の変数をＢＳＳ領域に配置することを決定し、０以外の初期値を持つ変数をＤＡＴＡ領域に配置することを決定する。変数配置決定処理の動作については後述する。
【００１６】
機械語コード生成部１０４は、ソースプログラム解析部１０１において生成された中間コードを受けて最適化し、最適化した中間コードから機械語コードを生成する機能を有する。また、０以外の初期値は、データとして機械語コードに含まれる。生成された機械語コードは、リンク処理部１０６に送られる。
機械語コード生成部１０４に含まれるスタートアップルーチン生成部１０５は、変数配置決定部１０３の決定に基づいて、各変数が配置されるＲＡＭ領域上の各種領域を初期化するスタートアップルーチンを生成する機能を有する。各領域のサイズは、各領域に配置される変数のサイズ及び数で決まる。
【００１７】
リンク処理部１０６は、機械語コード生成部１０４において生成された機械語コードとライブラリコードとを結合して、マイクロコンピュータ組込み機器において実行可能な実行形式プログラム２０を生成する機能を有する。生成された実行形式プログラム２０は、プログラム変換装置１００より出力されて、最終的にはマイクロコンピュータ組込み機器のＲＯＭに格納される。
【００１８】
＜動作１＞
次に、実施形態１の変数配置決定処理について説明する。
図４は、変数配置決定部１０３が行う変数配置決定処理を説明するためのフローチャートである。
まず、変数認識部１０２において変数表が作成されると、変数配置決定部１０３は、当該変数表を参照し（ステップＳ１）、表に記載されている各変数の配置を決定する処理を開始する（ステップＳ２）。
【００１９】
変数に初期値が有れば（ステップＳ３：ＹＥＳ）、ステップＳ４に進み、変数に初期値が無ければ（ステップＳ３：ＮＯ）、ステップＳ５に進む。
ステップＳ４において、変数の初期値が０であれば（ステップＳ４：ＹＥＳ）、ステップＳ５に進み、変数の初期値が０以外であれば（ステップＳ４：ＮＯ）、ステップＳ６に進む。
【００２０】
ステップＳ５に進んだ場合、変数をＢＳＳ領域に配置することを決定し、ステップＳ６に進んだ場合、変数をＤＡＴＡ領域に配置することを決定する。
全ての変数の配置を決定するとステップＳ７のループを抜けて処理を終了する。
＜実行形式プログラム１＞
次に、プログラム変換装置１００から出力された実行形式プログラムについて説明する。
【００２１】
図５は、上記変数配置決定処理の処理結果に基づいて出力された実行形式プログラムの記載内容の一部を示す図である。なお、実際の実行形式プログラムは機械語で記述されている。
実行形式プログラム２０には、初期値を持たない変数ｊ、ｋ、ｍ及び初期値が０の変数ｆ、ｇ、ｈがＢＳＳ領域に配置されているものとして、また、０以外の初期値を持つ変数ａ、ｂ、ｃ、ｄ、ｅ、ｉ、ｌ、ｎがＤＡＴＡ領域に配置されているものとして、各領域を参照する機械語コードが記述されている。また、変数ａ、ｂ、ｃ、ｄ、ｅ、ｉ、ｌ、ｎの各初期値が記述されている。
【００２２】
図６は、プログラム変換装置１００から出力された実行形式プログラムが格納されたマイクロコンピュータ組込み機器のメモリレイアウトを表した図である。プログラム変換装置１００から出力された実行形式プログラム２０は、コードとデータに分けられ、コードはＲＯＭ６０１のＣＯＤＥ領域６１１に、初期値等のデータはＲＯＭ６０１のＲＯＭＤＡＴＡ領域６１２に格納される。そして、実行形式プログラム２０に含まれるスタートアップルーチンの実行により、ＲＡＭ６０２のＢＳＳ領域６２１及びＤＡＴＡ領域６２２の初期化が行われる。
【００２３】
図７は、実施形態１のスタートアップルーチンをアセンブラ表記で表した図である。なお、ＲＯＭＤＡＴＡ領域には、０以外の初期値のみが格納されている。スタートアップルーチン７０１の具体的な動作について説明すると、まず、ＢＳＳ領域のサイズを取得し、ＢＳＳ領域の先頭アドレスから１ワード（４バイト）毎に０を書き込む処理を繰り返す。ＢＳＳ領域内の全てのアドレスに０が書き込まれると、続いて、ＤＡＴＡ領域のサイズを取得する。ＤＡＴＡ領域のサイズはＲＯＭＤＡＴＡ領域のサイズと同じである。そして、ＲＯＭＤＡＴＡ領域内の各アドレスに格納されている初期値をＤＡＴＡ領域へコピーする処理を行う。初期値が全てコピーされるとスタートアップルーチン７０１は終了する。
＜実施形態２＞
実施形態２のプログラム変換装置は、ユーザから指定された値（以下、単に指定値という。）を初期値として持つ変数を、特定領域にまとめて配置する決定を行い、当該特定領域を指定値で一斉に初期化するスタートアップルーチンを含む実行形式プログラムを出力する。
【００２４】
ユーザがソースプログラムを見て、同じ値を初期値として持つ変数がソースプログラムに多数含まれていることがわかった場合、プログラム変換装置に対してその変数の初期値をユーザが指定入力すれば、ＲＯＭＤＡＴＡ領域に格納する初期値の数を削減することができる。以下、実施形態２のプログラム変換装置について、構成、動作、実行形式プログラムの項目に分けて説明する。
【００２５】
＜構成２＞
図８は、実施形態２におけるプログラム変換装置の機能構成を表す図である。図８には、便宜上、プログラム変換装置８００に入力されるソースプログラム１０、及びプログラム変換装置８００から出力された実行形式プログラム２０を記載している。
【００２６】
プログラム変換装置８００は、実施形態１で説明したプログラム変換装置１００が備える各種機能に加えて、ユーザインターフェース部８０８を備える。
ユーザインターフェース部８０８は、ユーザから指定値の入力を受け付ける機能を有し、当該指定値を変数配置決定部８０３に送る。
変数認識部８０２は、実施形態１で説明した変数認識部１０２と同様の機能を有し、ソースプログラムに含まれている各変数を認識して、変数表を作成する。
【００２７】
変数配置決定部８０３は、変数表を参照して、各変数をどの領域に配置するかを決定する変数配置決定処理を行う機能を有する。本実施形態において変数配置決定部８０３は、初期値を持たない変数をＢＳＳ領域に配置することを決定し、指定値を初期値として持つ変数をＤＡＴＡ１領域に配置することを決定し、指定値以外の初期値を持つ変数をＤＡＴＡ領域に配置することを決定する。変数配置決定処理の動作については後述する。
【００２８】
機械語コード生成部８０５は、ソースプログラム解析部８０１において生成された中間コードを受けて最適化し、最適化した中間コードから機械語コードを生成する機能を有する。また、指定値以外の各変数の初期値は、データとして機械語コードに含まれる。生成された機械語コードは、リンク処理部８０７に送られる。
【００２９】
機械語コード生成部８０５に含まれるスタートアップルーチン生成部８０６は、変数配置決定部８０３の決定に基づいて、各変数が配置されるＲＡＭ領域上の各種領域を初期化するスタートアップルーチンを生成する機能を有する。ＤＡＴＡ１領域を一斉初期化する際に用いる指定値はスタートアップルーチン内に記述される。
【００３０】
リンク処理部８０７は、機械語コード生成部８０５において生成された機械語コードとライブラリコードとを結合して、マイクロコンピュータ組込み機器において実行可能な実行形式プログラム３０を生成する機能を有する。生成された実行形式プログラム３０は、プログラム変換装置８００より出力されて、最終的にはマイクロコンピュータ組込み機器のＲＯＭに格納される。
【００３１】
＜動作２＞
次に、実施形態２の変数配置決定処理について説明する。
図９は、変数配置決定部８０３が行う変数配置決定処理を説明するためのフローチャートである。
まず、ユーザインターフェース部８０８がユーザから特定値の指定を受け付ける（ステップＳ２１）。続いて、変数配置決定部８０３は、変数認識部８０２において作成された変数表を参照し（ステップＳ２２）、表に記載されている各変数の配置を決定する処理を開始する（ステップＳ２３）。
【００３２】
変数に初期値が有れば（ステップＳ２４：ＹＥＳ）、ステップＳ２５に進み、変数に初期値が無ければ（ステップＳ２４：ＮＯ）、ステップＳ２６に進む。
ステップＳ２５において、変数の初期値が指定値であれば（ステップＳ２５：ＹＥＳ）、ステップＳ２７に進み、変数の初期値が指定値以外であれば（ステップＳ２５：ＮＯ）、ステップＳ２８に進む。
【００３３】
ステップＳ２６に進んだ場合、変数をＢＳＳ領域に配置することを決定し、ステップＳ２７に進んだ場合、変数をＤＡＴＡ１領域に配置することを決定し、ステップＳ２８に進んだ場合、変数をＤＡＴＡ領域に配置することを決定する。
全ての変数の配置を決定するとステップＳ２９のループを抜けて処理を終了する。
【００３４】
＜実行形式プログラム２＞
次に、プログラム変換装置８００から出力された実行形式プログラムについて説明する。
図１０は、上記変数配置決定処理の処理結果に基づいて出力された実行形式プログラムの記載内容の一部を示す図である。なお、実際の実行形式プログラムは機械語で記述されている。また、図１０において指定値は１である。
【００３５】
実行形式プログラム３０には、初期値を持たない変数ｊ、ｋ、ｍがＢＳＳ領域に配置されているものとして、また、ユーザから指定された値である１を初期値として持つ変数ａ、ｃ、ｄ、ｅ、ｉ、ｌ、ｎがＤＡＴＡ１領域に配置されているものとして、また、１以外の初期値を持つ変数ｂ、ｆ、ｇ、ｈがＤＡＴＡ領域に配置されているものとして、各種領域を参照する機械語コードが記述されている。また、変数ｂ、ｆ、ｇ、ｈの各初期値が記述されている。
【００３６】
図１１は、実施形態２のスタートアップルーチンをアセンブラ表記で表した図である。なお、ＲＯＭＤＡＴＡ領域には、指定値以外の初期値のみが格納されている。
スタートアップルーチン１１０１の具体的な動作について説明すると、まず、ＢＳＳ領域のサイズを取得し、ＢＳＳ領域の先頭アドレスから１ワード（４バイト）毎に０を書き込む処理を繰り返す。ＢＳＳ領域内の全てのアドレスに０が書き込まれると、続いて、ＤＡＴＡ１領域のサイズを取得する。そして、ＤＡＴＡ１領域の先頭アドレスから１ワード（４バイト）毎に１を書き込む処理を繰り返す。ＤＡＴＡ１領域内の全てのアドレスに１が書き込まれると、続いて、ＤＡＴＡ領域のサイズを取得する。ＤＡＴＡ領域のサイズはＲＯＭＤＡＴＡ領域のサイズと同じである。そして、ＲＯＭＤＡＴＡ領域内の各アドレスに格納されている初期値をＤＡＴＡ領域へコピーする処理を行う。初期値が全てコピーされるとスタートアップルーチン１１０１は終了する。
＜実施形態３＞
実施形態３のプログラム変換装置は、変数認識部において認識された初期値を持つ変数の数を初期値別に計数して初期値頻度表を作成し、出現回数が所定数以上である出現頻度の高い初期値を特定する。特定された初期値（特定値）を持つ変数をまとめて特定領域に配置する決定を行い、当該特定領域を特定値で一斉に初期化するスタートアップルーチンを含む実行形式プログラムを出力する。以下、実施形態３のプログラム変換装置について、構成、動作の項目に分けて説明する。
【００３７】
＜構成３＞
図１２は、実施形態３におけるプログラム変換装置の機能構成を表す図である。図１２には、便宜上、プログラム変換装置１２００に入力されるソースプログラム１０、及びプログラム変換装置１２００から出力された実行形式プログラム４０を記載している。
【００３８】
プログラム変換装置１２００は、実施形態１において説明したプログラム変換装置１００が備える各種機能以外に、計数部１２０３を備える。
変数認識部１２０２は、実施形態１で説明した変数認識部１０２と同様の機能を有し、ソースプログラムに含まれている各変数を認識して、変数表を作成する。
【００３９】
計数部１２０３は、変数認識部１２０２において認識された初期値を持つ変数の数を、初期値別に計数して初期値頻度表を作成する機能を有する。
図１３は、初期値頻度表の一例を示す図である。初期値頻度表１３０１から、入力されたソースプログラム１０には、初期値０の変数が３つ、初期値１の変数が７つ、初期値２の変数が２つ存在することがわかる。
【００４０】
変数配置決定部１２０４は、計数部１２０３において作成された初期値頻度表を参照して、出現回数が５以上の初期値を特定する機能と、変数表を参照して、各変数をどの領域に配置するかを決定する変数配置決定処理を行う機能とを有する。本実施形態において変数配置決定部１２０４は、初期値を持たない変数をＢＳＳ領域に配置することを決定し、特定値を持つ変数をＤＡＴＡ１領域に配置することを決定し、特定値以外の初期値を持つ変数をＤＡＴＡ領域に配置することを決定する。変数配置決定処理の動作については後述する。
【００４１】
機械語コード生成部１２０５は、ソースプログラム解析部１２０１において生成された中間コードを受けて最適化し、最適化した中間コードから機械語コードを生成する機能を有する。また、特定値以外の初期値は、データとして機械語コードに含まれる。生成された機械語コードは、リンク処理部１２０７に送られる。
【００４２】
機械語コード生成部１２０５に含まれるスタートアップルーチン生成部１２０６は、変数配置決定部１２０４の決定に基づいて、各変数が配置されるＲＡＭ領域上の各種領域を初期化するスタートアップルーチンを生成する機能を有する。ＤＡＴＡ１領域を一斉初期化する際に用いる特定値はスタートアップルーチン内に記述される。
【００４３】
リンク処理部１２０７は、機械語コード生成部１２０５において生成された機械語コードとライブラリコードとを結合して、マイクロコンピュータ組込み機器において実行可能な実行形式プログラム３０を生成する機能を有する。生成された実行形式プログラム４０は、プログラム変換装置１２００より出力されて、最終的にはマイクロコンピュータ組込み機器のＲＯＭに格納される。
【００４４】
＜動作３＞
次に、実施形態３の変数配置決定処理について説明する。
図１４は、変数配置決定部１２０４が行う変数配置決定処理を説明するためのフローチャートである。
まず、計数部１２０３が初期値頻度表を作成する（ステップＳ３１）。続いて、変数配置決定部１２０４は、初期値頻度表を参照して、出現頻度の高い初期値を特定する（ステップＳ３２）。
【００４５】
続いて、変数配置決定部１２０４は、変数表を参照し（ステップＳ３３）、各変数の配置を決定する処理を開始する（ステップＳ３４）。
変数に初期値が有れば（ステップＳ３５：ＹＥＳ）、ステップＳ３７に進み、変数に初期値が無ければ（ステップＳ３５：ＮＯ）、ステップＳ３７に進む。
ステップＳ３７において、変数の初期値が特定値であれば（ステップＳ３７：ＹＥＳ）、ステップＳ３８に進み、変数の初期値が特定値以外であれば（ステップＳ３７：ＮＯ）、ステップＳ３９に進む。
【００４６】
ステップＳ３６に進んだ場合、変数をＢＳＳ領域に配置することを決定し、ステップＳ３８に進んだ場合、変数をＤＡＴＡ１領域に配置することを決定し、ステップＳ３９に進んだ場合、変数をＤＡＴＡ領域に配置することを決定する。
全ての変数の配置を決定するとステップＳ４０のループを抜けて処理を終了する。
＜実施形態４＞
実施形態４のプログラム変換装置は、特定値の繰り返し列を初期値列として持つ集合体変数を特定領域に配置し、その初期値列をＲＯＭＤＡＴＡ領域に格納するデータとして実行形式プログラムに含めないで変換出力するので、従来のプログラム変換装置に比べて、実行形式プログラムのコードサイズを削減することができる。以下、実施形態４のプログラム変換装置について、構成、動作、実行形式プログラムの項目に分けて説明する。
【００４７】
＜構成４＞
実施形態４のプログラム変換装置の機能構成を、図１を用いて説明する。
変数認識部１０２は、ソースプログラムに含まれている各変数を認識して、変数表を作成する。ここで、プログラム変換装置１００に入力されたソースプログラムに、図１５に示す変数宣言部分１５０１が含まれているとする。
【００４８】
変数宣言部分１５０１には、初期値１のｉｎｔ型外部変数ａ、初期値列が１、２、１、２、１、２、１、２、１、２であるｉｎｔ型外部配列変数ｂ、初期値列が１、２、３、４、５であるｉｎｔ型外部配列変数ｃ、初期値が与えられていないｉｎｔ型外部変数ｄ、初期値列が無いｉｎｔ型外部配列変数ｅ、が宣言されている。
【００４９】
変数宣言部分１５０１の各変数は、変数認識部１０２により認識され、図１６に示すような変数表１６０１が変数認識部１０２によって作成される。変数表１６０１には、変数名、変数の種類（スカラ変数、配列変数、集合体変数の別）、初期値有無及び初期値の項目があり、各変数の変数名、種類、初期値有無及び初期値が記述される。
【００５０】
変数配置決定部１０３は変数表を参照して、各変数をどの領域に配置するかを決定する変数配置決定処理を行う機能を有する。本実施形態において変数配置決定部１０３は、初期値を持たない変数をＢＳＳ領域に配置することを決定し、集合体変数であって、特定値の繰り返し列が初期値列である変数をＤＡＴＡ１に配置することを決定し、それ以外の初期値を持つ変数をＤＡＴＡ領域に配置することを決定する。ここで特定値の繰り返し列とは、例えば、１と２の数値を交互に並べてできる数列や、１、１、１、１というように、同じ値から成る数列のことを言う。変数配置決定処理の動作については後述する。
【００５１】
機械語コード生成部１０４は、ソースプログラム解析部１０１において生成された中間コードを受けて最適化し、最適化した中間コードから機械語コードを生成する機能を有する。また、特定値の繰り返し列である初期値以外の初期値は、データとして機械語コードに含まれる。生成された機械語コードは、リンク処理部１０６に送られる。
【００５２】
機械語コード生成部１０４に含まれるスタートアップルーチン生成部１０５は、変数配置決定部１０３の決定に基づいて、各変数が配置されるＲＡＭ領域上の各種領域を初期化するスタートアップルーチンを生成する機能を有する。繰り返し列を構成する特定値は、スタートアップルーチン内に記述される。
＜動作４＞
次に、実施形態４の変数配置決定処理について説明する。
【００５３】
図１７は、実施形態４の変数配置決定部１０３が行う変数配置決定処理を説明するためのフローチャートである。
まず、変数認識部１０２において変数表が作成されると、変数配置決定部１０３は、当該変数表を参照し（ステップＳ５１）、表に記載されている各変数の配置を決定する処理を開始する（ステップＳ５２）。
【００５４】
変数に初期値が有れば（ステップＳ５３：ＹＥＳ）、ステップＳ５４に進み、変数に初期値が無ければ（ステップＳ３：ＮＯ）、ステップＳ５５に進む。
ステップＳ５４において、変数が配列変数であれば（ステップＳ５４：ＹＥＳ）、ステップＳ５６に進み、変数が配列変数でなければ（ステップＳ５４：ＮＯ）、ステップＳ５８に進む。
【００５５】
ステップＳ５６において、初期値列が特定値の繰り返し列であれば（ステップＳ５６：ＹＥＳ）、ステップＳ５７に進み、初期値列が特定値の繰り返し列でなければ（ステップＳ５６：ＮＯ）、ステップＳ５８に進む。
ステップＳ５５に進んだ場合、変数をＢＳＳ領域に配置することを決定し、ステップＳ５７に進んだ場合、変数をＤＡＴＡ１に配置することを決定し、ステップＳ５８に進んだ場合、変数をＤＡＴＡ領域に配置することを決定する。
【００５６】
全ての変数の配置を決定するとステップＳ５９のループを抜けて処理を終了する。
＜実行形式プログラム４＞
次に、実施形態４のプログラム変換装置１００から出力された実行形式プログラムについて説明する。
【００５７】
図１８は、上記変数配置決定処理の処理結果に基づいて出力された実行形式プログラムの記載内容の一部を示す図である。なお、実際の実行形式プログラムは機械語で記述されている。
実行形式プログラム４０には、初期値を持たない変数ｄ、配列変数ｅがＢＳＳ領域に配置されているものとして、また、特定値の繰り返し列を初期値として持つ配列変数ｂがＤＡＴＡ１領域に配置されているものとして、また、その他の初期値を持つ変数ａ、ｃがＤＡＴＡ領域に配置されているものとして、各種領域を参照する機械語コードが記述されている。また、変数ａ、配列変数ｃの初期値が記述されている。
【００５８】
図１９は、実施形態４のスタートアップルーチンをアセンブラ表記で表した図である。なお、ＲＯＭＤＡＴＡ領域には、変数の初期値のみが格納されているものとする。また、ＤＡＴＡ１領域には、１と２の数値が交互に並ぶ数列が初期値列である変数を配置することが決定されている。
スタートアップルーチン１９０１の具体的な動作について説明すると、まず、ＢＳＳ領域のサイズを取得し、ＢＳＳ領域の先頭アドレスから１ワード（４バイト）毎に０を書き込む処理を繰り返す。ＢＳＳ領域内の全てのアドレスに０が書き込まれると、続いて、ＤＡＴＡ１領域のサイズを取得する。そして、ＤＡＴＡ１領域の先頭アドレスから１ワード（４バイト）毎に１と２を交互に書き込む処理を繰り返す。ＤＡＴＡ１領域内の全てのアドレスに書き込みが終わると、続いて、ＤＡＴＡ領域のサイズを取得する。ＤＡＴＡ領域のサイズはＲＯＭＤＡＴＡ領域のサイズと同じである。そして、ＲＯＭＤＡＴＡ領域内の各アドレスに格納されている初期値をＤＡＴＡ領域へコピーする処理を行う。初期値が全てコピーされるとスタートアップルーチンは終了する。
＜その他の変形例＞
なお、本発明は上記実施形態に限られるものではなく、次のような変形例も考えられる。
【００５９】
（１）各実施形態で説明したプログラム変換装置は、入力されたソースプログラムを機械語で記述された実行形式プログラムに変換して出力していたが、アセンブラ言語で記述されたオブジェクトプログラムに変換して出力してもよい。
（２）実施形態２において、ユーザから指定値を受け付けていたが、予めプログラム変換装置に特定値を記憶しておき、当該特定値を初期値として持つ変数をＤＡＴＡ１領域に配置するとしてもよい。例えば、一般的にわかっている出現頻度の高い初期値を特定値としておけば、実行形式プログラムのコードサイズを削減することができる。
【００６０】
（３）また、各実施形態のプログラム変換装置は、スタートアップルーチン生成部においてスタートアップルーチンを生成していたが、スタートアップルーチンをユーザが作成してもよい。この場合、変数配置決定部において決定された各変数の配置情報をユーザに提示する提示機能をプログラム変換装置が有しておくことで、ユーザは提示された配置情報に基づいてスタートアップルーチンを作成することができる。
【００６１】
（４）実施形態２、３、４では、スタートアップルーチンの記載内容が実質的に増加するので、スタートアップルーチンのコードサイズは大きくなる。そこで、実施形態２、３、４において説明した変数配置処理を行った場合の実行形式プログラムのコードサイズと、変換配置処理を行わない場合の実行形式プログラムのコードサイズとを比較して、コードサイズが小さくなる場合にのみ、変数配置処理を行うものとしてもよい。
【００６２】
（５）実施形態２においてプログラム変換装置は、ユーザから１つの指定値を受け付けていたが、複数の指定値を受け付けてもよい。この場合、変数配置決定部８０３は、各指定値を初期値に持つ変数を指定値毎に設けられた各領域に配置する決定を行う。例えば、図２に示す変数宣言部分１１が記述されたソースプログラムを実行形式プログラムに変換する場合において、ユーザが０と１を指定すると、変数配置決定部８０３は、ＤＡＴＡ１領域に初期値が０の変数を配置することを決定し、ＤＡＴＡ２領域に初期値が１の変数を配置することを決定する。
【００６３】
（６）実施形態３においてプログラム変換装置は、出現回数が５以上である初期値を特定していたが、４以上であっても、６以上であってもよい。また、変数配置決定部１２０４は、複数の初期値が特定された場合、各特定値毎に変数をまとめて配置する決定を行うものであってもよい。
（７）上記各実施形態で示した変数配置処理の処理手順（図４に示した手順等）を汎用のコンピュータ又はプログラム実行機能を有する機器に実行させるためのコンピュータプログラムを、記録媒体に記録し又は各種通信路等を介して、流通させ頒布することもできる。
【００６４】
かかる記録媒体には、ＩＣカード、光ディスク、フレキシブルディスク、ＲＯＭ等がある。流通、頒布されたコンピュータプログラムは、プログラム実行機能を有する機器やパーソナルコンピュータ等にインストールされることにより利用に供され、その機器やパーソナルコンピュータ等は、そのコンピュータプログラムを実行して、本実施の形態に示したようなプログラム変換装置としての機能を実現する。
【００６５】
【発明の効果】
以上の説明から明らかなように、本発明に係るプログラム変換装置は、入力されたソースプログラムを変換してオブジェクトプログラムを出力するプログラム変換装置であって、前記ソースプログラムに含まれている特定の変数とその初期値とを認識する認識手段と、前記認識手段により認識された変数のうち初期値が同一の特定値である変数を、メモリ上の連続したアドレスから成る特定領域にまとめて配置することを決定する変数配置決定手段とを備えることを特徴とする。
【００６６】
上記プログラム変換装置は、変数配置決定手段の決定に従って、前記ソースプログラム  中の初期値が前記特定値である変数を参照する記述に対応する命令コードとして、前記特定領域を参照する命令コードを生成し、組み込み機器において実行可能なオブジェクトプログラム（実行形式プログラム）を出力する。
これにより、変数の初期値が特定値であるものについては、個々の初期値全てをデータとして実行形式プログラムに含める必要がなくなるので、その分、実行形式プログラムのコードサイズを削減することができる。
【００６７】
また、前記認識手段は、前記ソースプログラムに含まれている特定の変数について初期値の有無と、初期値が与えられている場合はその値とを認識し、前記変数配置決定手段は、前記認識手段により認識された変数のうち、初期値が与えられていない変数及び初期値が０の変数については、前記特定領域にまとめて配置することを決定するとしてもよい。
【００６８】
これにより、０を初期値として持つ変数については、０という初期値をデータとして実行形式プログラムに含める必要がなくなるので、その分、実行形式プログラムのコードサイズを削減することができる。
また、前記プログラム変換装置は、更に、ユーザから前記特定値の指定を受け付ける受付手段を備えるとしてもよい。
【００６９】
これにより、ユーザから指定された特定値を初期値として持つ変数については、個々の初期値全てをデータとして実行形式プログラムに含める必要がなくなるので、その分、実行形式プログラムのコードサイズを削減することが可能である。
また、前記プログラム変換装置は、更に、前記認識手段により認識された初期値を持つ変数の数を、初期値別に計数する計数手段と、前記計数手段により計数された結果、変数の数が所定数以上の初期値を前記特定値とする決定を行う特定値決定手段とを備えるとしてもよい。
【００７０】
これにより、変数の数が所定数以上の初期値を持つ変数については、個々の初期値全てを実行形式プログラムに含める必要がなくなるので、その分、実行形式プログラムのコードサイズを削減することが可能である。
また、前記認識手段は、前記ソースプログラムに含まれている特定の変数の種類について認識し、前記変数配置決定手段は、前記認識手段により認識された各変数のうち変数の種類が集合体変数であり、当該集合体変数の初期値列が特定値の繰り返し列である場合、当該集合体変数をメモリ上の連続したアドレスから成る専用領域に配置することを決定し、前記変数配置決定手段の決定に従って、前記専用領域を前記特定値で埋める命令コード列を生成する生成手段を更に備えるとしてもよい。
【００７１】
これにより、特定値の繰り返し列を初期値列として持つ集合体変数については、特定値だけを実行形式プログラムに含めればよく、その分、実行形式プログラムのコードサイズを削減することができる。
【図面の簡単な説明】
【図１】プログラム変換装置の機能構成の一例を表す図である。
【図２】ソースプログラムの一例である。
【図３】変数表の一例である。
【図４】実施形態１の変数配置決定処理のフローチャートである。
【図５】実行形式プログラムの一例である。
【図６】目的機器のメモリレイアウトを表す図である。
【図７】スタートアップルーチンの一例である。
【図８】プログラム変換装置の機能構成の一例を表す図である。
【図９】実施形態２の変数配置決定処理のフローチャートである。
【図１０】実行形式プログラムの一例である。
【図１１】スタートアップルーチンの一例である。
【図１２】プログラム変換装置の機能構成の一例を表す図である。
【図１３】初期値頻度表の一例である。
【図１４】実施形態３の変数配置決定処理のフローチャートである。
【図１５】ソースプログラムの一例である。
【図１６】変数表の一例である。
【図１７】実施形態４の変数配置決定処理のフローチャートである。
【図１８】実行形式プログラムの一例である。
【図１９】スタートアップルーチンの一例である。
【符号の説明】
１０  ソースプログラム
２０、３０、４０  実行形式プログラム
１００、８００、１２００  プログラム変換装置
１０１、８０１、１２０１  ソースプログラム解析部
１０２、８０２、１２０２  変数認識部
１０３、８０３、１２０４  変数配置決定部
１０４、８０５、１２０５  機械語コード生成部
１０５、８０６、１２０６  スタートアップルーチン生成部
１０６、８０７、１２０７  リンク処理部
８０８  ユーザインターフェース部
１２０３  計数部
【図１】
2004280311.tif 000003
【図２】
2004280311.tif 000004
【図３】
2004280311.tif 000005
【図４】
2004280311.tif 000006
【図５】
2004280311.tif 000007
【図６】
2004280311.tif 000008
【図７】
2004280311.tif 000009
【図８】
2004280311.tif 000010
【図９】
2004280311.tif 000011
【図１０】
2004280311.tif 000012
【図１１】
2004280311.tif 000013
【図１２】
2004280311.tif 000014
【図１３】
2004280311.tif 000015
【図１４】
2004280311.tif 000016
【図１５】
2004280311.tif 000017
【図１６】
2004280311.tif 000018
【図１７】
2004280311.tif 000019
【図１８】
2004280311.tif 000020
【図１９】
2004280311.tif 000021