(57)【要約】【課題】前処理を行った後もマクロの情報が無くならない前処理後ソースプログラムでのマクロ置換表示を提供すること。【解決手段】ソースプログラムを翻訳する段階にて、前処理指令の実行を必要とするソースプログラム検証プログラムであって、前処理後ソースプログラムでのマクロ置換表示は、マクロの置換の並びの前後にマクロを示す文字を埋め込む手段と、そのマクロを示す文字からマクロ置き換えしたことを示す情報を得る手段を設けたものである。【選択図】    図６
2007265095.tif 000002
【特許請求の範囲】
【請求項１】
ソースプログラムを翻訳する段階にて、前処理指令の実行を必要とするソースプログラム検証プログラムであって、
前記前処理指令の実行段階でのマクロ呼び出しの展開において、その展開前に前記マクロ展開前を示す文字と、
前記マクロの展開後にマクロ展開後を示す文字と、
を埋め込むことを特徴とするソースプログラム検証プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、マクロの展開処理を必要とするソースプログラム(Ｃ言語等)の翻訳に関し、特にマクロの置き換え後の表示に関するものである。
【背景技術】
【０００２】
Ｃソースプログラムの翻訳においては、Ｃソースプログラムから目的プログラムを生成するまでに、複数の翻訳段階の規則がある。これらの翻訳段階の実装は、一般に、前処理とコンパイラと呼ばれる２つの実装に区別されている。前処理は、ソースプログラムに記述されている前処理指令と呼ばれるものによって、処理条件の組込み、ソースファイルの組込み、及びマクロ置き換えなどを行う。コンパイラは、前処理が処理したＣソースプログラムを入力し、それを目的プログラムに変換する。この一連の処理によって、Ｃソースプログラムは翻訳される。このＣソースプログラムは、Ｃ言語仕様に従った記述でさえあれば、目的プログラムを作ることができる。
【０００３】
最近、ソースコードを静的に解析するツールが注目されている。これはＣソースプログラム上で曖昧な記述があってもそれをコンパイラが勝手に解釈して翻訳してしまうことを注意したり、コーディング作法的な指摘をするためである。この指摘には、マクロ定義やマクロ呼び出しについての指摘もある。
【０００４】
このような、マクロに関して、デバッグ時にマクロ定義の定義展開内容が確認できるものが開示されている。
図９は、プログラムファイルの構成図である。図９に示すように、プログラムファイル内（図略）にはソースプログラムファイル３１と複数のインクルードファイル３２とが設けられている。ソースプログラムファイル３１内には、Ｃ言語で記述されたソースプログラム３１ａが記憶されている。このソースプログラム３１ａには、複数のマクロ定義（定義名）３３と複数の参照命令３４が記述されている。そして、各インクルードファイル３２内には、各マクロ定義３３に対する具体的な定義内容が記憶されている。
【０００５】
プログラム取込処理部（図略）では、プログラムコンパイラが起動されると、ソースプログラム３１ａを１行ずつ読取ると共に、読取り過程でマクロ定義３３が現れると、このマクロ定義３３に対応するインクルードファイル３２から定義内容を読取って、マクロ定義３３の次にその定義内容を展開して、取込ソースプログラム３５を順次作成しながら、コンパイル前処理部（図略）へ転送する。
【０００６】
このとき、Ｃ言語で記述されたプログラムに、たとえマクロ定義３３及びこのマクロ定義３３の参照命令３４が書込まれていたとしても、展開後のソースプログラム３６，３９及び翻訳後のオブジェクトプログラム４０にはマクロ定義３３の定義展開内容３７を示す文字列配列変数３８が残ることになる。
【０００７】
したがって、デバッグ操作者は、デバッグ処理過程で必要に応じてこの文字列配列変数３８の内容からマクロ定義３３の定義展開内容３７を簡単に確認でき、マクロ定義３３及びこのマクロ定義３３に対する参照命令３４を含むＣ言語で記述されたソースプログラム３１ａをデバッグすることができる（例えば、特許文献１参照）。
【特許文献１】特開平１１−１５４０９３号公報（段落番号００２４〜００４１、図２、図３）
【発明の開示】
【発明が解決しようとする課題】
【０００８】
しかしながら、前処理の翻訳段階で処理するマクロ置き換えは、マクロ定義に従ってマクロ名を置換の並びに置き換えることであり、これによって、マクロ置き換え後のソースプログラムからは、マクロ呼び出しが見えなくなるという問題があった。
また、コンパイラではマクロ置き換え後、ソースプログラムを処理するので、そのソースプログラムにエラーなどを検出したときに、そのエラーがマクロ定義に問題があったとしてもマクロに関する情報が欠乏するため、マクロ置き換えに関する指摘を出力することができない。また、静的解析ツールでも同じことが言える。このため、前処理を行ったソースプログラムからは、マクロ置き換えに関する指摘を出力することができないという問題があった。
【０００９】
これは、マクロ置き換えに関する情報をマクロ置き換え後、ソースプログラム以外で表現すれば良く、ここではマクロ置き換えに関する情報をマクロ置き換え情報と定義する。
しかし、コンパイラや静的解析ツールが何らかの情報をマクロ置き換え後にソースプログラムから得ようとする場合、その都度マクロ置き換え情報を参照する必要があり、効率的ではない。
【００１０】
本発明は、前記問題を解決するために創案されたものであり、前処理を行った後もマクロの情報が無くならないソースプログラム検証プログラムを提供することを課題とする。
【課題を解決するための手段】
【００１１】
上記課題を達成するために、本発明に係るソースプログラム検証プログラムは、ソースプログラムを翻訳する段階にて、前処理指令の実行を必要とするソースプログラム検証プログラムであって、前記前処理指令の実行段階でのマクロ呼び出しの展開において、その展開前に前記マクロ展開前を示す文字と、前記マクロの展開後にマクロ展開後を示す文字とを埋め込むことを特徴とする。
すなわち、前処理後ソースプログラムでのマクロ置換表示は、置き換えるマクロの置換の並びの前後にマクロを示す文字を埋め込む手段と、そのマクロを示す文字からマクロ定義の情報を得る手段を設けたものである。
【発明の効果】
【００１２】
前処理後ソースプログラムからマクロ置き換えした部分が機械的に判別でき、前処理を行った後もマクロの情報が無くならないソースプログラム検証プログラムを提供することができる。
【発明を実施するための最良の形態】
【００１３】
以下、本発明を適用したソースプログラム検証プログラムの一実施の形態について、図面を参照して詳細に説明する。
図１は、ソースプログラム検証プログラムの構成図である。図１に示すように、ソースプログラム検証プログラム（ソースコード検証プログラム）２は、コンピュータ１０１のメモリ１０２上に記憶される。このソースプログラム検証プログラム２の目的は、ソースプログラム１を入力して、前処理後ソースプログラム６を出力することである。このソースプログラム検証プログラム２は幾つかの機能をもっているが、本発明の実施例としてマクロ定義処理部３とマクロ置き換え処理部４に特化して記述する。マクロ定義処理部３では、マクロ名とその置換の並びをマクロ定義テーブル５に出力する。
マクロ置き換え処理部４は、マクロ呼び出しによるマクロ名からマクロ定義テーブル５を走査し、その置換の並びを取り出す。そして、マクロの置換の並びをマクロ使用情報７に出力する。
【００１４】
図２は、マクロ定義処理部が処理するマクロ定義テーブルの内容を示す図である。図２に示すように、このテーブルは、マクロ番号８、マクロ名９および置換の並び１０から構成される。
図１に示すマクロ定義処理部３は、ソースプログラム１からマクロ定義を入力する毎に、マクロ定義テーブル５に１行を追加する。その１行に、ユニークな番号をマクロ番号８に、そのマクロ名をマクロ名９に、そして、その置換の並びを置換の並び１０に格納する。
マクロ置き換え処理部４は、処理するマクロ名に対して、マクロ定義テーブル５からそのマクロ名のマクロ番号８と置換の並び１０を抽出する。
【００１５】
図３は、本実施例によるマクロ置換の並びの出力例である。図３に示すように、この形式は、特殊文字１１でマクロ番号１２を囲む文字列をマクロ展開前１４とし、マクロ展開前と同じ特殊文字を配した文字列をマクロ展開後１５として置換の並び１３の左右に配置する。さらに、前処理の後続の翻訳段階で、展開したマクロの照会情報として、マクロ定義テーブル５の内容をマクロ使用情報７に出力する。ここで使用する特殊文字は、マクロの位置をわかりやすくするためのものなので、ユーザがマクロの位置を判別できる文字であれば特殊文字にかかわらず何の文字でも良い。
【００１６】
図４は、マクロ定義処理の動作を示すフローチャートである。図４に示すように、マクロ定義処理部３は前処理制御プログラム（ソースプログラム検証プログラム）２の中にある制御から、マクロを定義する前処理指令の入力に基づいて、マクロ定義処理をする（ステップ４０１）。ここでは、マクロ展開前１４とマクロ展開後１５に使用するユニークなマクロ番号８を決定する（ステップ４０２）。そして、マクロ定義テーブル５にマクロ番号８、マクロ名９および置換の並び１０をマクロ定義テーブル５に追加する（ステップ４０３）。そして、マクロ定義処理部３の呼び出し元に戻る（ステップ４０４）。
【００１７】
図５は、マクロ置き換え処理の動作を示すフローチャートである。図５に示すように、マクロ置き換え処理部４は前処理制御プログラム２の中にある制御から、マクロの呼び出しに基づいて、マクロ置き換え処理をする（ステップ５０１）。ここでは、置き換えるマクロ名からマクロ定義テーブル５を走査し、そのマクロのマクロ番号８、及び、置換の並び１０を取り出す（ステップ５０２）。そして、マクロ展開前１４の文字を作成し、出力する（ステップ５０３）。次に、置換の並び１０を出力する（ステップ５０４）。そして、マクロ展開後１５の文字を作成し、出力する（ステップ５０５）。次に、置き換えたマクロの情報として、マクロ番号８、マクロ名９、及び、置換の並び１０をマクロ使用情報７に出力する（ステップ５０６）。最後に、マクロ置き換え処理部４の呼び出し元に戻る（ステップ５０７）。
【００１８】
このあと、後続の翻訳段階では、前処理後ソースプログラム６とマクロ使用情報７を入力することによって、どのマクロを使用したかが判断できる。
このように前処理したものを図６に示す。
図６に示すように、ｉｆ文１６の条件式は、ｆｌｇ＝＝ＴＲＵＥとなっているため、通常に前処理を行った場合は、これは、ｆｌｇ＝＝１  と処理されるだけである。本発明では、マクロ名ＴＲＵＥのマクロ番号を値２とした場合、ｉｆ文１８の条件式に示す通り、特殊文字１９で値２を囲んだマクロ展開前と、次にマクロの置換の並び２０と、最後にマクロ展開後の文字列を展開する。
【００１９】
これによって、前処理後ソースプログラムに示すように、このｉｆ文１８の条件式ではｆｌｇ変数２１を等式でＴＲＵＥマクロ１７で比較していることが判断できる。
ここで本発明を静的解析ツールに応用した場合、ＴＲＵＥマクロにより論理値を等式で比較していることが判明し、このコーディングを指摘することができる。
【００２０】
このように本発明による処理を行った後にコンパイルする場合には、コンパイラは特殊文字を一律にパターンとして認識する実装ができるので、この特殊文字をマクロ使用情報として記録し、メッセージを出力する場合など、マクロ名をメッセージに付加することができる。
【００２１】
また、特殊文字に１バイトで１６進数７Ｆを用いた場合、図６の前処理後ソースプログラムでは、これをプログラム編集エディタなどで見たときに、そのエディタの設定によっては図７や図８に示すような見え方をするのでマクロ使用箇所を判断し易い。
図７、図８は、エディタ画面を示している。
【００２２】
以上のように、本実施の形態のマクロ置換表示を使用した場合、次のような効果がある。
（１）前処理後のソースプログラムを眺めた場合、どこにマクロ呼び出しがあったかを明示的に表現することができる。
（２）コンパイラや静的解析ツールなどに応用した場合、マクロ呼び出しを前処理後ソースプログラムから効率的に得ることができる。
【００２３】
以上、好ましい実施の形態について説明したが、本発明は前記実施の形態に限定されるものではなく、本発明の要旨を逸脱することのない範囲内において適宜の変更が可能なものである。例えば、本実施の形態ではＣ言語のソースプログラムを取り上げたがＣ言語から派生するＣ＋＋言語などにも本発明は適用可能である。
【図面の簡単な説明】
【００２４】
【図１】本発明の一実施形態に係る前処理の構成を示す構成図である。
【図２】マクロ定義テーブルに格納されているデータの内容を示す図である。
【図３】マクロ置き換え処理によるマクロ置換の並びの形式を示す構成図である。
【図４】マクロ定義処理の動作を示すフローチャートである。
【図５】マクロ置き換え処理の動作を示すフローチャートである。
【図６】本発明による前処理実施例を示す図である。
【図７】本発明による前処理実施例をエディタで参照をした例を示す図である。
【図８】本発明による前処理実施例をエディタで参照をした例を示す図である。
【図９】従来例に係るプログラムファイルの構成図である。
【符号の説明】
【００２５】
１    ソースプログラム
２    ソースコード検証プログラム（ソースプログラム検証プログラム）
３    マクロ定義処理部
４    マクロ置き換え処理部
５    マクロ定義テーブル
６    前処理後ソースプログラム
７    マクロ使用情報
８，１２    マクロ番号
９    マクロ名
１０，１３    置換の並び
１１，１９    特殊文字
１４    マクロ展開前
１５    マクロ展開後
１６，１８    ｉｆ文
１７    ＴＲＵＥマクロ
２０    置換の並び
２１    ｆｌｇ変数
２２，２３    特殊文字
【図１】
2007265095.tif 000003
【図２】
2007265095.tif 000004
【図３】
2007265095.tif 000005
【図４】
2007265095.tif 000006
【図５】
2007265095.tif 000007
【図６】
2007265095.tif 000008
【図７】
2007265095.tif 000009
【図８】
2007265095.tif 000010
【図９】
2007265095.tif 000011