(57)【要約】【課題】マクロ定義情報取得装置に関し、特に実際に使用するのと同じ状態におけるマクロ定義情報が得られるようにしたマクロ定義情報取得装置を提供する。【解決手段】サブプログラムを含むメインプログラムを読み込み、該メインプログラムに含まれるすべてのサブプログラム情報を取得するサブプログラム情報取得手段と、前記手段で取得したサブプログラム情報を、前記メインプログラムにおけるサブプログラムの後に、コンパイラ・実行環境に適合するサブプログラム情報出力命令として挿入するサブプログラム情報出力命令挿入手段と、前記手段によりサブプログラム情報出力命令が挿入されたメインプログラムを、あらかじめ指定したコンパイラによってコンパイルし、取得した実行体を実行することで、挿入した命令により出力されたサブプログラム情報を記憶装置に記録するサブプログラム情報記録手段とを具備する。【選択図】図１
2007265098.tif 000002
【特許請求の範囲】
【請求項１】
サブプログラムを含むメインプログラムを読み込み、該メインプログラムに含まれるすべてのサブプログラム情報を取得するサブプログラム情報取得手段と、
前記サブプログラム情報取得手段で取得したサブプログラム情報を、前記メインプログラムにおけるサブプログラムの後に、コンパイラ・実行環境に適合するサブプログラム情報出力命令として挿入するサブプログラム情報出力命令挿入手段と、
前記情報出力命令挿入手段によりサブプログラム情報出力命令が挿入されたメインプログラムを、あらかじめ指定したコンパイラによってコンパイルし、取得した実行体を実行することで、挿入したサブプログラム情報出力命令により出力されたサブプログラム情報を記憶装置に記録するサブプログラム情報記録手段と、
を備えたことを特徴とするサブプログラム情報取得装置。
【請求項２】
マクロ定義を含むソースコードを読み込み、すべてのマクロ定義情報を取得するマクロ定義情報取得手段と、
前記マクロ定義情報取得手段で得たマクロ定義情報を、前記ソースコードにおけるマクロ定義の後に、コンパイラ・実行環境に適合するマクロ定義情報出力命令として挿入するマクロ定義情報出力命令挿入手段と、
前記マクロ定義情報出力命令挿入手段によりマクロ定義情報出力命令が挿入されたソースコードを、あらかじめ指定したコンパイラによってコンパイルし、実行体を実行することで、挿入したマクロ定義情報出力命令により出力されたマクロ定義情報を記憶装置に記録するマクロ定義情報記録手段と、
を備えたことを特徴とするマクロ定義情報取得装置。
【請求項３】
マクロ定義を含むソースコードを読み込み、
前記ソースコードに含まれるすべてのマクロ定義情報を取得して、
前記マクロ定義情報を、前記ソースコードにおけるマクロ定義の後に、コンパイラ・実行環境に適合するマクロ定義情報出力命令として挿入し、
前記マクロ定義情報出力命令が挿入された前記ソースコードを、あらかじめ指定したコンパイラによってコンパイルし、取得した実行体を実行することで、挿入したマクロ定義情報出力命令により出力されるマクロ定義情報を取得し、
前記出力され取得したマクロ定義情報を含めたプログラムを製造する
ことを特徴とするプログラム製造方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明はマクロ定義情報取得装置に関し、特に特定のコンパイラ使用時にそのプリプロセッサによって有効となるマクロ情報を出力させることで、実際に使用するのと同じ状態でのマクロ定義情報が得られるようにしたマクロ定義情報取得装置に関するものである。
【背景技術】
【０００２】
コンパイルの時に行われるプリプロセッサにより、１つのソースコードから複数の異なる動きをするコードを得ることができる。この場合、どのようにプリプロセッサが行われたかは、プリプロセッサの条件判断の処理結果により有効になるマクロ定義の一覧を利用してソースコード作成者が把握していた。
【０００３】
有効なマクロ定義の一覧を得るには、人間の手によってマクロ定義の一覧を作成する以外に、コンパイラが持つマクロ定義一覧出力機能を使うか、またはコンパイラと同じようにプリプロセッサ処理を行い有効になるマクロの定義情報を得る装置を使う、という方法があった。
例えば、プリプロセッサ構文のマクロ定義文及び条件文を含むソースコードを読み込み、そのソースコードからマクロ定義文抽出する例が開示されている（引用文献１参照）。また、プリプロセッサがソースプログラムを入力としてマクロを展開する例が開示されている（引用文献２参照）。さらに、テーブルにマクロを保存し、構文テキスト作成時に命令に対応するマクロを併せて出力する例が開示されている（引用文献３参照）。
【０００４】
【特許文献１】特開２００２−３６６３６８号公報
【特許文献２】特開平５−６１６５３号公報
【特許文献３】特開平１１−１４３７０５号公報
【発明の開示】
【発明が解決しようとする課題】
【０００５】
しかしながら、すべてのコンパイラがマクロ定義の一覧を出力するわけではないので、開発に使用するコンパイラがマクロ定義の一覧を出力しないコンパイラの場合には、人間の手によってマクロ定義の一覧を作成するか、マクロ定義の一覧を出力する他のコンパイラか装置を使っていた。
【０００６】
例えば、Ｃ言語ではプリプロセッサにより１つのソースファイルから複数の実行コードを得ることができるが、その際にどのようにプリプロセッサ処理が行われたかをプログラム作成者が把握するために、プリプロセッサにより有効となる＃define マクロ命令の一覧を利用していた。この場合、有効な＃defineマクロの一覧を出力するコンパイラがある一方で、マクロの一覧を出力しないコンパイラも存在しており、後者の場合には人手によってマクロの一覧を作成せざるをえないという問題があった。
【０００７】
また、実際に使用するものとは別のコンパイラや装置によりマクロ定義の一覧を得ると、実際に使用するコンパイラではないのでプリプロセッサの処理が完全に同じものとはならず、またそこで得られるマクロ定義の一覧も実際に使用するコンパイラが有効と判断したものと同じとは限らないという問題があった。
【０００８】
なお、上記引用例１〜３は、単にプリプロセッサ構文のマクロ定義文及び条件文を含むソースコードを読み込み、そのソースコードからマクロ定義文を抽出して記録する技術を開示しているにすぎなかった。
【０００９】
そこで本発明の目的は、上記問題点に鑑み、実際の開発で使用するコンパイラで有効になるマクロ定義の一覧を得るため、ソースコードにあるすべてのマクロ定義の後に、そのマクロ定義に関する情報を出力する命令を挿入する手段を設けてソースコードを加工し、その後加工したソースコードを開発に使用するコンパイラでコンパイルし、得られた実行体を実行することで、挿入された出力命令により実行時に有効となるマクロ定義に関する情報を得るもことができるようにしたマクロ定義情報取得装置を提供することにある。
【００１０】
本発明による装置では、ソースコードにある全ての＃defineマクロの後に、そのマクロに関する情報を出力する命令を挿入してソースコードを加工し、その加工したソースコードを自動的にコンパイルして実行することにより、プリプロセッサで処理されたマクロに関する情報を出力することで有効な＃defineマクロの情報を得ることができる。
【００１１】
また、本発明による装置では、実際に使用するコンパイラのプリプロセッサを用いているので、他のコンパイラや装置を用いる場合とは異なり、実際に使用するのと同じ状態で有効なマクロ定義情報を得ることができ、正確で容易な開発プログラムの検証が可能となる。そして、最終製品の生成時には、挿入したマクロ定義に関する出力命令を削除した検証後のプログラム製品を生成させる。
【課題を解決するための手段】
【００１２】
サブプログラムを含むメインプログラムを読み込み、該メインプログラムに含まれるすべてのサブプログラム情報を取得するサブプログラム情報取得手段と、前記サブプログラム情報取得手段で取得したサブプログラム情報を、前記メインプログラムにおけるサブプログラムの後に、コンパイラ・実行環境に適合するサブプログラム情報出力命令として挿入するサブプログラム情報出力命令挿入手段と、前記情報出力命令挿入手段によりサブプログラム情報出力命令が挿入されたメインプログラムを、あらかじめ指定したコンパイラによってコンパイルし、取得した実行体を実行することで、挿入したサブプログラム情報出力命令により出力されたサブプログラム情報を記憶装置に記録するサブプログラム情報記録手段とを備える。
【発明の効果】
【００１３】
本発明では実際に使用するコンパイラを用いているので、他のコンパイラや装置を用いた場合とは異なり、実際に使用するコンパイラでプリプロセッサの処理が終わった段階で有効となったマクロ定義の情報を得ることができ、より正確で容易な開発プログラムの検証が可能となる。なお、最終プログラム製品の生成時には、挿入したマクロ定義に関する出力命令を削除したものを生成させる。
【発明を実施するための最良の形態】
【００１４】
以下、本発明の実施の形態を示すマクロ定義情報取得装置について、図面を参照しながら具体的に説明する。
図１は本発明の実施の形態のマクロ定義情報取得装置の構成を示すブロック図である。このマクロ定義情報取得装置は、図１に示すように、取得対象となるソースコード２１と、マクロ定義情報取得手段１０と、マクロ定義情報取得手段１０により出力命令が挿入された出力命令入りソースコード２２と、出力命令入りソースコードをコンパイルするコンパイラ２３と、コンパイラ２３により作成された実行体２４と、実行体２４からマクロ定義情報取得手段１０により得られるマクロ定義情報３１とから構成される。
さらにマクロ定義情報取得手段１０は、マクロ定義情報解析部１１と、情報出力命令挿入部１２と、マクロ定義情報記録部１３とから構成される。
【００１５】
以上のように構成されたマクロ定義情報取得装置について、その動作を以下に説明する。図２は本実施の形態のマクロ定義情報取得装置における動作を示すフローチャートである。まずステップＳ２０１では、ソースコード２１の先頭に関数を構成するための命令を挿入する。
【００１６】
次にステップＳ２０２では、ソースコード２１から１行ソースコードを読み込む。
次にステップＳ２０３では、読み込んだソースコードにマクロ定義文（＃define文等）が含まれているか否か判定をする。マクロ定義文が含まれている場合、ステップＳ２０４にてマクロの情報を得るべく解析を行う（図１の１１）。解析後、ステップＳ２０５にて、解析の結果得られたマクロの情報を、マクロ定義より後の行に、具体的なコンパイラ・実行環境などに合わせた適切な命令としてソースコードに挿入する。
【００１７】
次にステップＳ２０６では、ソースコードの読み込みにより、ソースコードの終端に達したか否かを判定する。終端に達していない場合、再度ステップＳ２０２を実施する。終端に達した場合、ステップＳ２０７に進む。
【００１８】
次にステップＳ２０７では、ソースコードの最後に関数を構成するための命令を挿入する。
次にステップＳ２０８では、出力命令が挿入されている出力命令入りソースコード２２（図１の２２）を、実際に開発で使用するコンパイラ２３でコンパイルし（図１の２３）、実行体２４を得る（図１の２４）。
【００１９】
次にステップＳ２０９では、実行体２４を実行し、実行体２４に含まれる出力命令により出力されるマクロの定義情報をまとめ、マクロ定義情報（図１の３１）として出力する。このように、コンパイラや実行環境に合わせた、マクロ定義に関する情報を出力する適切な命令を挿入したソースコードを、実際に使用するコンパイラでコンパイルし、作成された実行体を実行してマクロの定義情報を得るため、どのようなコンパイラでもマクロの定義情報を得ることができる。
実際に使用するコンパイラにてプリプロセッサの処理を行うので、他のコンパイラや装置を利用した場合に起こりうる、プリプロセッサの処理の違いによる誤った定義情報を得ることはなくなる。
【００２０】
図３には、出力命令入りソースコードの一例を示している。
図３（ａ）にはマクロ定義文（＃define文）の出力命令を挿入する前のソースコードの一例を、そして図３（ｂ）にはマクロ定義文（＃define文）の出力命令（情報出力命令）を挿入した後のソースコードの一例をそれぞれ示している。実際に用いられるプリプロセッサが上記マクロを具体的に展開１１、１２し、実際に用いられるコンパイラ２３がそれから実行体２４を生成する。コンパルされたプログラムの実行時にマクロ定義情報が出力（記録）１３及び３１されることから、プログラム作成者は、プログラム運用時のマクロ種別やその展開を容易に知ることができる。なお、この検証後に最終的に生成されるプログラム実行体２４の生成には、情報出力命令が削除されたソースコード（図３（ａ））が使用される。
【００２１】
ところで、複数のソースコードが存在する場合には、装置が保持している規則により、ソースコードの読み込む順番を定める。そして、その順番に従ってソースコードを読み込み、上述したマクロ定義情報の解析、および以降の処理を行う。この場合、複数のソースコードから、一度にマクロ定義に関する情報を入手することができるので、１つ１つを実行することによる作業漏れを防ぐことができる。
【００２２】
また、利用者が処理順番を指定しているときは、その指定順番に従って、ソースコードの読み込みを行う。そして、その順番に従って、マクロ情報の解析、および以降の処理を行う。利用者が定義した順番で実行することができるので、必要に応じてマクロ定義情報の取得を行うことができる。
【００２３】
さらに、情報出力命令挿入部１２では、装置が保持している出力命令ではなく、利用者が指定した出力命令を代わりにソースコードに挿入させることができる。利用者が設定した命令を用いることにより、同じ装置を用いてさまざまなコンパイラに対応させることができる。
【００２４】
なお、装置にはあらかじめ利用環境に応じた特定のコンパイラを使うように指定されているが、複数のコンパイラが利用可能な場合には、利用可能なコンパイラの中から利用者がひとつ選択し、選択したコンパイラをマクロ定義情報記録手段において実行体の生成に用いるコンパイラとすることができる。複数のコンパイラの中から利用者が設定したコンパイラを用いることにより、複数のコンパイラが使用可能な環境においても、使用者が意図したコンパイラによる有効なマクロ定義情報を得ることができるようになる。
【００２５】
ところで、マクロ定義情報記録手段にてファイルに記録する定義情報と同じものを、装置からアクセス可能なメモリにも記録するようにもできる。メモリに取得結果を記録することにより、ファイルを扱えない他の装置でも、メモリにアクセスすることでマクロ定義情報を扱うことができるようになる。
【００２６】
さらにまた、定義情報としてファイルに記録する際には、装置が保持しているフォーマット以外に利用者が指定したフォーマットを代わりに用いてファイルへの記録を行うようにすることもできる。マクロ定義情報を記録するフォーマットを任意に指定できることにより、生成されるマクロ定義情報を他の装置から使いやすくできる。
【図面の簡単な説明】
【００２７】
【図１】本発明によるマクロ定義情報取得装置の一構成例を示すブロック図である。
【図２】図１のマクロ定義情報取得装置の一動作例を示すフローチャートである。
【図３】図１のマクロ定義情報取得装置により情報出力命令が挿入されたソースコードの一例を示した図である。
【符号の説明】
【００２８】
１０    マクロ定義情報取得手段
１１    マクロ定義情報解析部
１２    情報出力命令挿入部
１３    マクロ情報取得部
２１    ソースコード
２２    出力命令入りソースコード
２３    コンパイラ
２４    実行体
３１    マクロ定義情報
【図１】
2007265098.tif 000003
【図２】
2007265098.tif 000004
【図３】
2007265098.tif 000005