(57)【要約】【課題】  複数のソースファイルのヘッダ情報を効率よく解析することができるようにする。【解決手段】  コンピュータは、マクロファイル２の読み込みを指示するインクルード文を抽出する（ステップＳ１）。次に、抽出されたインクルード文に基づいて、複数のソースファイルの解析の際に解析結果を共有可能なマクロファイル群を示す少なくとも１つの共通化候補４を生成する（ステップＳ２）。更に、共通化候補４同士の組み合わせパターンを生成し、（ステップＳ３）、組み合わせパターンに従って解析結果を共有したときの複数のソースファイルで読み込まれるマクロファイルの解析に要する処理量を、生成された組み合わせパターン毎に計算する（ステップＳ４）。そして、処理量が最も少なくなる組み合わせパターンに含まれる共通化候補に従ってマクロファイルの解析処理を共通化し、複数のソースファイル１のヘッダ情報を解析する（ステップＳ５）。【選択図】  図１
2005135129.tif 000002
【特許請求の範囲】
【請求項１】
ソースファイルのヘッダ情報を解析するためのヘッダ情報解析プログラムにおいて、
コンピュータに、
複数のソースファイルそれぞれのヘッダ情報から、マクロファイルの読み込みを指示するインクルード文を抽出し、
抽出された前記インクルード文に基づいて、前記複数のソースファイルの解析の際に解析結果を共有可能なマクロファイル群を示す少なくとも１つの共通化候補を生成し、
前記共通化候補同士の組み合わせパターンを生成し、
前記組み合わせパターンに従って解析結果を共有したときの前記複数のソースファイルで読み込まれる前記マクロファイルの解析に要する処理量を、生成された前記組み合わせパターン毎に計算し、
処理量が最も少なくなる前記組み合わせパターンに含まれる前記共通化候補に従って前記マクロファイルの解析処理を共通化し、前記複数のソースファイルのヘッダ情報を解析する、
処理を実行させることを特徴とするヘッダ情報解析プログラム。
【請求項２】
前記共通化候補として、異なる前記ソースファイルで読み込みを指定する前記インクルード文の記述順序が、前記ソースファイルの先頭から共通である前記マクロファイルの１以上の配列を抽出することを特徴とする請求項１記載のヘッダ情報解析プログラム。
【請求項３】
前記ヘッダ情報の解析の際には、前記マクロファイルそれぞれの解析処理を１度だけ行い、前記複数のソースファイルの解析結果において、前記マクロファイルの解析結果を参照することで、前記マクロファイルの解析処理の共通化を図ることを特徴とする請求項１記載のヘッダ情報解析プログラム。
【請求項４】
ソースファイルのヘッダ情報を解析するためのヘッダ情報解析方法において、
コンピュータが、
複数のソースファイルそれぞれのヘッダ情報から、マクロファイルの読み込みを指示するインクルード文を抽出し、
抽出された前記インクルード文に基づいて、前記複数のソースファイルの解析の際に解析結果を共有可能なマクロファイル群を示す少なくとも１つの共通化候補を生成し、
前記共通化候補同士の組み合わせパターンを生成し、
前記組み合わせパターンに従って解析結果を共有したときの前記複数のソースファイルで読み込まれる前記マクロファイルの解析に要する処理量を、生成された前記組み合わせパターン毎に計算し、
処理量が最も少なくなる前記組み合わせパターンに含まれる前記共通化候補に従って前記マクロファイルの解析処理を共通化し、前記複数のソースファイルのヘッダ情報を解析する、
ことを特徴とするヘッダ情報解析方法。
【請求項５】
ソースファイルのヘッダ情報を解析するためのヘッダ情報解析装置において、
複数のソースファイルそれぞれのヘッダ情報から、マクロファイルの読み込みを指示するインクルード文を抽出するインクルード文抽出手段と、
抽出された前記インクルード文に基づいて、前記複数のソースファイルの解析の際に解析結果を共有可能なマクロファイル群を示す少なくとも１つの共通化候補を生成する共通化候補生成手段と、
前記共通化候補同士の組み合わせパターンを生成する組み合わせパターン生成手段と、
前記組み合わせパターンに従って解析結果を共有したときの前記複数のソースファイルで読み込まれる前記マクロファイルの解析に要する処理量を、生成された前記組み合わせパターン毎に計算する処理量計算手段と、
処理量が最も少なくなる前記組み合わせパターンに含まれる前記共通化候補に従って前記マクロファイルの解析処理を共通化し、前記複数のソースファイルのヘッダ情報を解析する解析手段と、
を有することを特徴とするヘッダ情報解析装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明はプログラムが記述されたソースファイルのヘッダを解析するためのヘッダ解析プログラムに関し、特に大規模なソフトウェア開発によって作成されたソースファイルのヘッダ解析プログラムに関する。
【背景技術】
【０００２】
コンピュータの高機能化に伴い、コンピュータに実行させるソフトウェアも複雑化している。従って、多くの業務用ソフトウェアでは、予め用意されたライブラリを利用することで、開発の手間を省いている。ライブラリとは、複数のソフトウェアで使用可能な汎用性のある関数やデータの集合である。
【０００３】
ライブラリを利用して開発されたソフトウェアのソースファイルには、使用するライブラリを指定する記述が含まれている。たとえば、Ｃ言語およびＣ＋＋言語のソースファイルは、先頭部分にヘッダと呼ばれる各ソースファイルで共通で使用する宣言群を取り組む記述と、ソースファイル固有の記述から構成されている。
【０００４】
具体的には、Ｃ言語およびＣ＋＋言語のソースファイルのヘッダには、以下の種類がある。
・Ｃ言語ライブラリを利用するためのヘッダ
・ＧＵＩ（Graphical User Interface）を利用するためのヘッダ
・データベースを利用するためのヘッダ
・他ソースファイルのクラスや関数を利用するためのヘッダ
最近のアプリケーションでは、上記ヘッダで指定されるライブラリを含む処理の行数は、数千万ステップから数億ステップに及ぶ。一方、ソースファイル固有部分の行数は、数百ステップ程度の場合が多い。したがって、ソースファイルを解析する場合、ヘッダを解析するための処理の行数がかなりの量を占めることが分かる。
【０００５】
このようなソースファイルをコンパイルしたり、ソースファイルに基づいて仕様書を作成したりするとき、ヘッダ情報を解析する必要がある。このとき、ライブラリを利用して作成されたソースファイルは、そのソースファイルの解析に要する時間のほとんどが、ヘッダの解析に費やされてしまう。そこで、ヘッダ解析の時間を短縮する技術が考えられている。たとえば、ヘッダ情報が不足した状況及びライブラリ群を含めた全てのインクルードファイルのソースコードの解析を不要にしながらＣ＋＋ソースコードの解析ができるようにした解析方法がある（例えば、特許文献１参照）。
【特許文献１】特開平１１−１４３６９６号公報
【発明の開示】
【発明が解決しようとする課題】
【０００６】
ところで、規模が大きなソフトウェアは、複数の作業者で分担してプログラミングが行われる。その際、複数のソースファイルが作成され、各ソースファイルのヘッダ内に、ライブラリを指定する情報が含まれる。
【０００７】
このように、１つのソフトウェアの開発に複数のソースファイルが作成されるとき、異なるソースファイルで共通のライブラリを利用している場合がある。この場合、各ソースファイルの先頭に記述されている同じライブラリについては、一度の解析で済ませることができる。
【０００８】
しかし、従来は、どのライブラリが共通なのかを、予めユーザが定義しておく必要があった。しかも、プログラムの内容が複雑化するのに伴い、共通するライブラリをユーザが把握するのが困難となっていた。そのため、ユーザへの負担が大きくなっていた。
【０００９】
さらに、共通化する部分は、翻訳群単位（ＭＡＫＥファイル単位）で１つであるという制約がある場合もあり、共通化される部分が狭く、十分な解析時間の短縮効果が得られなかった。
【００１０】
本発明はこのような点に鑑みてなされたものであり、複数のソースファイルのヘッダ情報を効率よく解析することができるヘッダ情報解析プログラム、ヘッダ情報解析方法、およびヘッダ情報解析装置を提供することを目的とする。
【課題を解決するための手段】
【００１１】
本発明では上記課題を解決するために、図１に示すようなヘッダ情報解析プログラムが提供される。本発明に係るヘッダ情報解析プログラムは、ソースファイルのヘッダ情報を解析するためのものである。このヘッダ情報解析プログラムに基づいて、コンピュータが以下の処理を実行する。
【００１２】
コンピュータは、複数のソースファイル１それぞれのヘッダ情報から、マクロファイル２の読み込みを指示するインクルード文を抽出する（ステップＳ１）。次に、コンピュータは、抽出されたインクルード文に基づいて、複数のソースファイル１の解析の際に解析結果を共有可能なマクロファイル群を示す少なくとも１つの共通化候補４を生成する（ステップＳ２）。更に、コンピュータは、共通化候補４同士の組み合わせパターンを生成し、（ステップＳ３）、組み合わせパターンに従って解析結果を共有したときの複数のソースファイル１で読み込まれるマクロファイル２の解析に要する処理量を、生成された組み合わせパターン毎に計算する（ステップＳ４）。そして、コンピュータは、処理量が最も少なくなる組み合わせパターンに含まれる共通化候補４に従ってマクロファイル２の解析処理を共通化し、複数のソースファイル１のヘッダ情報を解析する（ステップＳ５）。
【００１３】
これにより、ソースファイル１からインクルード文が抽出され、共通化候補４が生成される。そして、処理量が最も少なくなる共通化候補４の組み合わせパターンに従って、マクロファイル２の解析処理を共通化したヘッダ情報の解析が行われる。
【００１４】
また、本発明では上記課題を解決するために、ソースファイルのヘッダ情報を解析するためのヘッダ情報解析方法において、コンピュータが、複数のソースファイルそれぞれのヘッダ情報から、マクロファイルの読み込みを指示するインクルード文を抽出し、抽出された前記インクルード文に基づいて、前記複数のソースファイルの解析の際に解析結果を共有可能なマクロファイル群を示す少なくとも１つの共通化候補を生成し、前記共通化候補同士の組み合わせパターンを生成し、前記組み合わせパターンに従って解析結果を共有したときの前記複数のソースファイルで読み込まれる前記マクロファイルの解析に要する処理量を、生成された前記組み合わせパターン毎に計算し、処理量が最も少なくなる前記組み合わせパターンに含まれる前記共通化候補に従って前記マクロファイルの解析処理を共通化し、前記複数のソースファイルのヘッダ情報を解析する、ことを特徴とするヘッダ情報解析方法が提供される。
【００１５】
このようなヘッダ情報解析方法により、ソースファイル１からインクルード文が抽出され、共通化候補が生成される。そして、処理量が最も少なくなる共通化候補の組み合わせパターンに従って、マクロファイルの解析処理を共通化したヘッダ情報の解析が行われる。
【００１６】
また、本発明では上記課題を解決するために、ソースファイルのヘッダ情報を解析するためのヘッダ情報解析装置において、複数のソースファイルそれぞれのヘッダ情報から、マクロファイルの読み込みを指示するインクルード文を抽出するインクルード文抽出手段と、抽出された前記インクルード文に基づいて、前記複数のソースファイルの解析の際に解析結果を共有可能なマクロファイル群を示す少なくとも１つの共通化候補を生成する共通化候補生成手段と、前記共通化候補同士の組み合わせパターンを生成する組み合わせパターン生成手段と、前記組み合わせパターンに従って解析結果を共有したときの前記複数のソースファイルで読み込まれる前記マクロファイルの解析に要する処理量を、生成された前記組み合わせパターン毎に計算する処理量計算手段と、処理量が最も少なくなる前記組み合わせパターンに含まれる前記共通化候補に従って前記マクロファイルの解析処理を共通化し、前記複数のソースファイルのヘッダ情報を解析する解析手段と、を有することを特徴とするヘッダ情報解析装置が提供される。
【００１７】
このようなヘッダ情報解析装置により、ソースファイル１からインクルード文が抽出され、共通化候補が生成される。そして、処理量が最も少なくなる共通化候補の組み合わせパターンに従って、マクロファイルの解析処理を共通化したヘッダ情報の解析が行われる。
【発明の効果】
【００１８】
以上説明したように本発明では、マクロファイルの共通化候補を生成し、処理量が最も少なくなる共通化候補の組み合わせパターンに従って、マクロファイルの解析処理を共通化するようにしたため、ヘッダ情報の解析処理の効率化が図れる。
【発明を実施するための最良の形態】
【００１９】
以下、本発明の実施の形態を図面を参照して説明する。
まず、実施の形態に適用される発明の概要について説明し、その後、実施の形態の具体的な内容を説明する。
【００２０】
図１は、実施の形態に適用される発明の概念図である。本発明に係るヘッダ情報解析プログラムは、コンピュータに、複数のソースファイル１のヘッダ情報の解析処理を実行させる。図１には、本発明に係るヘッダ情報解析プログラムに基づいて、コンピュータが実行する処理が示されている。なお、複数のソースファイル１のヘッダ情報の解析は、仕様書の自動作成や、コンパイルの際に実行される。
【００２１】
コンピュータは、複数のソースファイル１それぞれのヘッダ情報から、マクロファイル２の読み込みを指示するインクルード文を抽出する（ステップＳ１）。マクロファイル２には、たとえば、汎用的な処理の実行内容や、変数等の定義文等が含まれている。このとき、たとえば、抽出されたインクルード文に基づいてインクルードリスト３が生成される。インクルードリスト３には、各ソースファイル１内のインクルード文で読み込みが指定されたマクロファイル２のファイル名のリストが登録される。
【００２２】
次に、コンピュータは、抽出されたインクルード文に基づいて、複数のソースファイル１の解析の際に解析結果を共有可能なマクロファイル群を示す少なくとも１つの共通化候補４を生成する（ステップＳ２）。このとき、異なるソースファイル１で読み込みを指定するインクルード文の記述順序が、ソースファイル１の先頭から共通である場合に、共通化候補４として抽出することができる。
【００２３】
更に、コンピュータは、共通化候補４同士の組み合わせパターンを生成する（ステップＳ３）。生成された組み合わせパターンは、組み合わせ表５に順次登録される。
コンピュータは、生成された組み合わせパターンに従って解析結果を共有したときの複数のソースファイル１で読み込まれるマクロファイル２の解析に要する処理量６を、生成された組み合わせパターン毎に計算する（ステップＳ４）。
【００２４】
そして、コンピュータは、処理量が最も少なくなる組み合わせパターンに含まれる共通化候補４に従ってマクロファイル２の解析処理を共通化し、複数のソースファイル１のヘッダ情報を解析する（ステップＳ５）。その結果、解析結果７が得られる。
【００２５】
これにより、ソースファイル１からインクルード文が抽出され、共通化候補４が生成される。そして、処理量が最も少なくなる共通化候補４の組み合わせパターンに従って、マクロファイル２の解析処理を共通化したヘッダ情報の解析が行われる。その結果、複数のソースファイル１のヘッダ情報を効率よく解析することができ、処理時間の短縮が可能となる。
【００２６】
以上のようなヘッダ解析技術は、コンパイル処理や仕様書作成処理に適用できる。以下、本発明に係るヘッダ解析プログラムを含む仕様書作成プログラムをコンピュータに実行させることで実現する仕様書作成方法を具体的に説明する。
【００２７】
図２は、本発明の実施の形態に用いるコンピュータのハードウェア構成例を示す図である。コンピュータ１００は、ＣＰＵ（Central Processing Unit）１０１によって装置全体が制御されている。ＣＰＵ１０１には、バス１０７を介してＲＡＭ（Random Access Memory）１０２、ハードディスクドライブ（ＨＤＤ:Hard Disk Drive）１０３、グラフィック処理装置１０４、入力インタフェース１０５、および通信インタフェース１０６が接続されている。
【００２８】
ＲＡＭ１０２には、ＣＰＵ１０１に実行させるＯＳ（Operating System）のプログラムやアプリケーションプログラムの少なくとも一部が一時的に格納される。また、ＲＡＭ１０２には、ＣＰＵ１０１による処理に必要な各種データが格納される。ＨＤＤ１０３には、ＯＳやアプリケーションプログラムが格納される。
【００２９】
グラフィック処理装置１０４には、モニタ１１が接続されている。グラフィック処理装置１０４は、ＣＰＵ１０１からの命令に従って、画像をモニタ１１の画面に表示させる。入力インタフェース１０５には、キーボード１２とマウス１３とが接続されている。入力インタフェース１０５は、キーボード１２やマウス１３から送られてくる信号を、バス１０７を介してＣＰＵ１０１に送信する。
【００３０】
通信インタフェース１０６は、ネットワーク１０に接続されている。通信インタフェース１０６は、ネットワーク１０を介して、他のコンピュータとの間でデータの送受信を行う。
【００３１】
以上のようなハードウェア構成によって、本実施の形態の処理機能を実現することができる。すなわち、図２に示したハードウェア構成のコンピュータ１００に、仕様書作成プログラムを実行させることで、効率の良いヘッダ解析を伴う仕様書作成機能がコンピュータ１００によって実現される。
【００３２】
図３は、仕様書作成機能を示す機能ブロック図である。図に示すように、コンピュータ１００は、インクルードリスト生成部１１０、プリプロセス処理部１２０、組み合わせ決定部１３０、ソースファイル解析部１４０、および仕様書作成部１５０を有する。また、コンピュータ１００からアクセス可能な装置（内蔵のＨＤＤ１０３でもよいし、ネットワーク１０経由で接続された装置でもよい）には、翻訳対象ソースファイル群２０とライブラリ３０とが設けられている。翻訳対象ソースファイル群２０は、１つのプロジェクトに関連して作成されたプログラムが格納されたソースファイル２１の集合である。ライブラリ３０は、予め用意されたマクロファイル３１の集合である。各マクロファイル３１には、汎用的な処理内容が記述されている。
【００３３】
インクルードリスト生成部１１０は、同一プロジェクト用として作成された全ソースファイルの先頭から順に「#include」文の記述を取り出し、１以上のマクロファイルのファイル名を抽出する。「#include」文は、ファイルの読み込みを指示する処理の命令文である。以下、「#include」文で読み込まれるマクロファイル３１を、特にインクルードファイルと呼ぶこととする。
【００３４】
また、インクルードリスト生成部１１０は、各ソースファイルから抽出したインクルードファイルのファイル名に基づいてインクルードリスト４０を作成する。インクルードリスト４０は、共通化候補を構成するインクルードファイルのリストであり、共通化候補の生成元として使用される。生成されたインクルードリスト４０は、プリプロセス処理部１２０に渡される。
【００３５】
プリプロセス処理部１２０は、インクルードリスト４０で示されるインクルードファイルに対してプリプロセス処理を実施し、プリプロセス処理行数を求める。プリプロセス処理行数とは、プリプロセス処理が記述された行（「#include」や「#define」などで始まる行）の処理行数（「#include」で指定されたマクロファイル内の処理行数も含む）である。具体的には、プリプロセス処理では、共通化候補において「#include」で指定されている各マクロファイル３１内のプリプロセス処理行の行数を計数し、合算する。なお、１つのマクロファイルに対して実行するプリプロセス処理は１回だけである。プリプロセス処理により、ソースファイル２１毎のＰＣＨ（プレコンパイルヘッダ）情報６０が生成される。
【００３６】
ＰＣＨ情報６０は、共通化されたインクルードファイル名、プリプロセス処理行数、解析情報等を有する。解析情報は、プリプロセス処理で解析したマクロ情報、展開したソース情報を有する。生成されたＰＣＨ情報６０は、組み合わせ決定部１３０に渡される。
【００３７】
組み合わせ決定部１３０は、インクルードリスト４０に基づいて、共通化可能な全ての組み合わせを判断し、共通化候補を生成する。次に、組み合わせ決定部１３０は、生成した共通化候補の組み合わせを判断し、共通化候補の組み合わせ表７０を作成する。そして、組み合わせ決定部１３０は、プリプロセス実行時に求めたプリプロセス処理行数を利用して、最もソース量（プリプロセス処理行数）が少なくなる共通化候補の組み合わせを求める。決定した共通化候補の組み合わせは、ソースファイル解析部１４０に通知される。
【００３８】
ソースファイル解析部１４０は、ソースファイルの解析機能を有する。ソースファイルの解析では、ソースファイル２１およびそのソースファイル２１で利用するマクロファイル３１の行解析が行われる。行解析とは、ソースファイル２１を１行ずつ、内容を解析することである。行解析により、プリプロセス処理行や実行行などから行解析情報が得られる。なお、実行行とは、プリプロセス処理行を除いたプログラム行のことである。最適な共通化候補の組み合わせに対応するＰＣＨ情報６０を利用し、全てのソースファイルの解析を行う。解析結果は、仕様書作成部１５０に渡される。
【００３９】
仕様書作成部１５０は、ソースファイル解析部１４０の解析結果に基づいて、ユーザによって指定された形式の仕様書８０を作成する。作成された仕様書８０は、ファイルとしてＨＤＤ１０３等に保存されると共に、モニタ１１に表示される。
【００４０】
なお、図３に示すインクルードリスト生成部１１０、プリプロセス処理部１２０、および組み合わせ決定部１３０で行われる処理が、仕様書作成やコンパイル等の前処理である。このような前処理を行う機能を、一般にプリプロセッサ１００ａと呼ぶ。
【００４１】
図４は、翻訳対象ソースファイル群の内容を示す図である。翻訳対象ソースファイル群２０には複数のソースファイル２１〜２５が含まれている。
ソースファイル２１は、ファイル名が「ＳＲＣ１．Ｃ」である。このソースファイル２１には、「#include "A.H"」というプリプロセス処理行が含まれている。それ以外は、実行行である。
【００４２】
ソースファイル２２は、ファイル名が「ＳＲＣ２．Ｃ」である。このソースファイル２２には、「#include "A.H"」、「#include "B.H"」というプリプロセス処理行が含まれている。それ以外は、実行行である。
【００４３】
ソースファイル２３は、ファイル名が「ＳＲＣ３．Ｃ」である。このソースファイル２３には、「#include "A.H"」、「#include "B.H"」、「#include "C.H"」というプリプロセス処理行が含まれている。それ以外は、実行行である。
【００４４】
ソースファイル２４は、ファイル名が「ＳＲＣ４．Ｃ」である。このソースファイル２４には、「#include "A.H"」、「#include "B.H"」、「#include "C.H"」というプリプロセス処理行が含まれている。それ以外は、実行行である。
【００４５】
ソースファイル２５は、ファイル名が「ＳＲＣ５．Ｃ」である。このソースファイル２５には、「#include "B.H"」、「#include "C.H"」というプリプロセス処理行が含まれている。それ以外は、実行行である。
【００４６】
図５は、ライブラリの内容を示す図である。ライブラリ３０には、複数のマクロファイル３１〜３４が含まれている。
マクロファイル３１のファイル名は「Ａ．Ｈ」であり、１０行の処理行が記述されている。マクロファイル３２のファイル名は「Ｂ．Ｈ」であり、５０行の処理行が記述されている。マクロファイル３３のファイル名は「Ｃ．Ｈ」であり、「#include "CC.H"」というプリプロセス処理行を含む処理行が記述されている。このマクロファイル３３は、「CC.H」を展開したときの行数を含め１００行の処理行が記述されている。マクロファイル３４のファイル名は「ＣＣ．Ｈ」である。
【００４７】
以上のような構成のコンピュータ１００において、ユーザからの操作入力等に応答して、仕様書作成処理が開始される。たとえば、ユーザが、翻訳対象ソースファイル群２０を指定した仕様書作成指示を入力したときに、仕様書作成処理が開始される。
【００４８】
図６は、仕様書作成処理全体の手順を示すフローチャートである。以下、図６に示す処理をステップ番号に沿って説明する。
［ステップＳ１１］インクルードリスト生成部１１０がソースファイルからインクルードファイルのファイル名を抽出し、インクルードリストを生成する。
【００４９】
［ステップＳ１２］プリプロセス処理部１２０がプリプロセス処理を実行する。
［ステップＳ１３］組み合わせ決定部１３０が共通化候補の中から最適な組み合わせを決定する。
【００５０】
［ステップＳ１４］ソースファイル解析部１４０が、最適な組み合わせの共通化候補に基づいてマクロファイルの解析を共通化し、翻訳対象ソースファイル群２０の各ソースファイル２１〜２５それぞれの解析を行う。
【００５１】
［ステップＳ１５］仕様書作成部１５０が、各ソースファイル２１〜２５それぞれの解析結果に基づいて、仕様書を作成する。
次に、図６に示した各処理について詳細に説明する。
【００５２】
まず、インクルードリスト生成処理（図６のステップＳ１１）について説明する。インクルードリスト生成処理では、共通化候補抽出の条件を満たすことができるインクルードファイルのファイル名が抽出される。共通化候補抽出の条件とは、以下の２つである。
【００５３】
第１の条件は、先頭からのインクルードファイルの出現順が共通であることである。すなわち、異なるソースファイル間で、「#include」文により指定されるマクロファイルの出現順が先頭から共通である場合に、共通化が可能である。第１の前提条件が定められているのは、定義（マクロ定義など）によってそれ以降の処理が異なった結果となる場合があるためである。
【００５４】
第２の条件は、異なるソースファイル間で、先頭から「#include」以外が出現するまでのインクルードファイルの出現順が共通な部分について共通化候補とすることである。ただし、コメント行や空行は無視される。
【００５５】
したがって、インクルードリスト生成部１１０は、必ず先頭のインクルードを含むこと、かつ同じ順序でインクルードファイルが出現することを共通化の条件としている。
このような条件の下、インクルードリスト生成処理が行われる。
【００５６】
図７は、インクルードリスト生成処理の手順を示すフローチャートである。以下、図７に示す処理をステップ番号に沿って説明する。
［ステップＳ２１］インクルードリスト生成部１１０は、翻訳対象ソースファイル群２０内の未処理のソースファイルの１つを開く（ＲＡＭ１０２上にソースファイルの内容を展開する処理）。
【００５７】
［ステップＳ２２］インクルードリスト生成部１１０は、開いたソースファイルから処理行を１行抽出する。
［ステップＳ２３］インクルードリスト生成部１１０は、抽出した処理行が「#include」文か否かを判断する。「#include」文であれば、処理がステップＳ２４に進められる。「#include」文でなければ、処理がステップＳ２５に進められる。
【００５８】
［ステップＳ２４］抽出した処理行が「#include」文の場合、インクルードリスト生成部１１０は、インクルードファイル（「#include」文で指定されているマクロファイル）の識別情報をインクルードリスト４０に登録する。その後、処理がステップＳ２２に進められ、同じソースファイル内の次の処理行に対する処理が行われる。
【００５９】
［ステップＳ２５］抽出した処理行が「#include」文ではない場合、インクルードリスト生成部１１０は、ソースファイルを閉じる（ソースファイルの内容が格納されたＲＡＭ１０２上の記憶領域を開放する処理）。
【００６０】
［ステップＳ２６］インクルードリスト生成部１１０は、翻訳対象ソースファイル群２０内に、未処理のソースファイルがあるか否かを判断する。未処理のソースファイルがあれば、処理がステップＳ２１に進められる。未処理のソースファイルがなければ、処理が終了する。
【００６１】
このようにして、翻訳対象ソースファイル群２０内の全てのソースファイルからインクルードファイルのファイル名が抽出され、インクルードリスト４０に登録される。
図８は、インクルードリストのデータ構造例を示す図である。図８に示すように、インクルードリスト４０では、ソースファイルのファイル名に対応付けて、そのソースファイルから抽出されたインクルードファイルのファイル名が登録されている。インクルードファイルのファイル名は、抽出される毎に、インクルードリスト４０内の格納領域の上位から順に登録される。
【００６２】
図８の例では、「ＳＲＣ１．Ｃ」のソースファイル２１からは、マクロファイル３１のファイル名「Ａ．Ｈ」が抽出され、登録されている。「ＳＲＣ２．Ｃ」のソースファイル２２からは、マクロファイル３１のファイル名「Ａ．Ｈ」、およびマクロファイル３２のファイル名「Ｂ．Ｈ」が抽出され、順次登録されている。「ＳＲＣ３．Ｃ」のソースファイル２３からは、マクロファイル３１のファイル名「Ａ．Ｈ」、マクロファイル３２のファイル名「Ｂ．Ｈ」、およびマクロファイル３３のファイル名「Ｃ．Ｈ」が抽出され、順次登録されている。「ＳＲＣ４．Ｃ」のソースファイル２４からは、マクロファイル３１のファイル名「Ａ．Ｈ」、マクロファイル３２のファイル名「Ｂ．Ｈ」、およびマクロファイル３３のファイル名「Ｃ．Ｈ」が抽出され、順次登録されている。「ＳＲＣ５．Ｃ」のソースファイル２５からは、マクロファイル３２のファイル名「Ｂ．Ｈ」、およびマクロファイル３３のファイル名「Ｃ．Ｈ」が抽出され、順次登録されている。
【００６３】
ここで、共通化候補抽出の第１の条件を適用した場合、「ＳＲＣ１．Ｃ」、「ＳＲＣ２．Ｃ」、「ＳＲＣ３．Ｃ」、「ＳＲＣ４．Ｃ」の最初に登録されているファイル名「Ａ．Ｈ」に対応するマクロファイル３１は、共通化候補にすることが可能である。しかし、「ＳＲＣ２．Ｃ」、「ＳＲＣ３．Ｃ」、「ＳＲＣ４．Ｃ」の２番目に登録されているファイル名「Ｂ．Ｈ」に対応するマクロファイル３２は、単独で共通化候補にすることはできない（ファイル名「Ａ．Ｈ」のマクロファイル３１と組み合わせて共通化候補にすることは可能）。同様に、「ＳＲＣ３．Ｃ」、「ＳＲＣ４．Ｃ」の３番目に登録されているファイル名「Ｃ．Ｈ」に対応するマクロファイル３３は、単独で共通化候補にすることはできない（ファイル名「Ａ．Ｈ」のマクロファイル３１およびファイル名「Ｂ．Ｈ」のマクロファイル３２と組み合わせて共通化候補にすることは可能）。
【００６４】
作成されたインクルードリスト４０がプリプロセス処理部１２０に渡されると、プリプロセス処理部１２０により、プリプロセス処理（図６のステップＳ１２）が行われる。
図９は、プリプロセス処理の手順を示すフローチャートである。以下、図９に示す処理をステップ番号に沿って説明する。
【００６５】
［ステップＳ３１］プリプロセス処理部１２０は、翻訳対象ソースファイル群２０内の未処理のソースファイルの１つを開く。
［ステップＳ３２］プリプロセス処理部１２０は、開いたソースファイルから処理行を１行抽出し、抽出した行に対する行解析を行う。行解析とは、ソースファイルの処理行の処理内容を解析する処理である。行解析により、行解析情報が生成される。
【００６６】
［ステップＳ３３］プリプロセス処理部１２０は、行解析情報が何かを判別する。行解析情報が「#include」であれば、処理がステップＳ３４に進められる。行解析情報が「#include」以外のプリプロセッサマクロであれば、処理がステップＳ３５に進められる。行解析情報が実行行であれば、処理がステップＳ３６に進められる。
【００６７】
［ステップＳ３４］プリプロセス処理部１２０は、インクルードファイルのプリプロセス処理を実行する。この際、既にプリプロセス処理が行われているマクロファイルに対しては、プリプロセス処理を重複して行わない。この処理の詳細は、後述する（図１０参照）。その後、処理がステップＳ３２に進められ、次の行に対する行解析が行われる。
【００６８】
［ステップＳ３５］プリプロセス処理部１２０は、マクロ情報を展開する。その後、処理がステップＳ３２に進められ、次の行に対する行解析が行われる。
［ステップＳ３６］プリプロセス処理部１２０は、ソースファイルを閉じる。
【００６９】
［ステップＳ３７］プリプロセス処理部１２０は、解析結果に基づいてＰＣＨ情報を作成し、ＲＡＭ１０２等に保存する。
［ステップＳ３８］プリプロセス処理部は、翻訳対象ソースファイル群２０内に、未処理のソースファイルがあるか否かを判断する。未処理のソースファイルがあれば、処理がステップＳ３１に進められる。未処理のソースファイルがなければ、処理が終了する。
【００７０】
ところで、インクルードファイルに対するプリプロセス処理では、同じプリプロセス処理を２回実行しないようにするため、以下のような処理を行う。
図１０は、インクルードファイルに対するプリプロセス処理の手順を示すフローチャートである。以下、図１０に示す処理をステップ番号に沿って説明する。
【００７１】
［ステップＳ４１］プリプロセス処理部１２０は、「#include」で指定されたインクルードファイルの解析情報が既に作成されているか否かを判断する。具体的には、既に作成されているＰＣＨ情報から、該当するインクルードファイルの解析情報を検索する。検出されれば、解析情報が既に作成されているものと判断する。既に解析情報が作成されている場合、処理がステップＳ４２に進められる。解析情報が作成されていない場合、処理がステップＳ４３に進められる。
【００７２】
［ステップＳ４２］プリプロセス処理部１２０は、ステップＳ４１で見つけだした解析情報を、現在処理中のソースファイルに対するＰＣＨ情報に登録する。その後、図９のステップＳ３２に進められる。
【００７３】
［ステップＳ４３］プリプロセス処理部１２０は、インクルードファイルに対するプリプロセス処理を実行する。
［ステップＳ４４］プリプロセス処理部１２０は、ステップＳ４３での処理によって得られた解析情報を、現在処理中のソースファイルに対するＰＣＨ情報に登録する。その後、図９のステップＳ３２に進められる。
【００７４】
このように、既に解析情報が作成されている場合、その解析情報を参照することで、重複したプリプロセス処理を回避できる。
図１１は、解析情報登録の第１の例を示す図である。図１１の例では、ソースファイル２１、ソースファイル２２の順でプリプロセス処理が行われるものとする。
【００７５】
ソースファイル２１にはファイル名「Ａ．Ｈ」のマクロファイル３１が「#include」で指定されている。そのため、ソースファイル２１のプリプロセス処理により、Ａ．Ｈの解析情報５１が生成され、ＲＡＭ１０２に格納される。そして、ソースファイル２１に対応するＰＣＨ情報６１には、Ａ．Ｈの解析情報５１の格納領域の先頭を示すポインタが登録される。
【００７６】
一方、ソースファイル２２にはファイル名「Ａ．Ｈ」のマクロファイル３１とファイル名「Ｂ．Ｈ」のマクロファイル３２とが「#include」で指定されている。このとき、Ａ．Ｈの解析情報５１が既に生成され、ＰＣＨ情報６１にはＡ．Ｈの解析情報５１に対するポインタが登録されている。そのため、ソースファイル２２のプリプロセス処理では、マクロファイル３１の解析処理は行われず、ＰＣＨ情報６１内のＡ．Ｈの解析情報５１に対するポインタのコピーが生成される。コピーされたＡ．Ｈの解析情報５１に対するポインタは、ソースファイル２２に対応するＰＣＨ情報６２に登録される。
【００７７】
その後、Ｂ．Ｈの解析情報５２が生成され、ＲＡＭ１０２に格納される。そして、ソースファイル２２に対応するＰＣＨ情報６２には、Ｂ．Ｈの解析情報５２の格納領域の先頭を示すポインタが登録される。
【００７８】
このように、１つのマクロファイルに対するプリプロセス処理は、１度だけ実行される。すなわち、ＳＲＣ１．Ｃを解析した後に、ＳＲＣ２．Ｃを解析する場合には、ＳＲＣ１．Ｃのプリプロセス処理で作成したＡ．Ｈの解析情報を参照することによって、同じプリプロセス処理は行わず、Ｂ．Ｈのプリプロセス処理を行うだけで済むようになる。ただし、定義（マクロ定義など）によってそれ以降の処理が異なった結果となる場合があるため、解析順序が同一であるという条件でのみ参照することができる。
【００７９】
また、ＳＲＣ３．Ｃのプリプロセス処理後、ＳＲＣ１．Ｃのプリプロセス処理を行う場合は、ＳＲＣ３．Ｃのプリプロセス処理で作成したＡ．Ｈの解析情報を参照するだけで済むようになる。
【００８０】
図１２は、解析情報登録の第２の例を示す図である。図１２の例では、ソースファイル２３、ソースファイル２１の順でプリプロセス処理が行われるものとする。
ソースファイル２３にはファイル名「Ａ．Ｈ」のマクロファイル３１、ファイル名「Ｂ．Ｈ」のマクロファイル３２、およびファイル名「Ｃ．Ｈ」のマクロファイル３３が「#include」で指定されている。そのため、ソースファイル２３のプリプロセス処理により、Ａ．Ｈの解析情報５１、Ｂ．Ｈの解析情報５２、Ｃ．Ｈの解析情報５３が生成され、ＲＡＭ１０２に格納される。そして、ソースファイル２３に対応するＰＣＨ情報６３には、Ａ．Ｈの解析情報５１の格納領域の先頭を示すポインタ、Ｂ．Ｈの解析情報５２の格納領域の先頭を示すポインタおよびＣ．Ｈの解析情報５３の格納領域の先頭を示すポインタが登録される。
【００８１】
一方、ソースファイル２１にはファイル名「Ａ．Ｈ」のマクロファイル３１が「#include」で指定されている。このとき、Ａ．Ｈの解析情報５１が既に生成され、ＰＣＨ情報６３にはＡ．Ｈの解析情報５１に対するポインタが登録されている。そのため、ソースファイル２１のプリプロセス処理では、マクロファイル３１の解析処理は行われず、ＰＣＨ情報６３内のＡ．Ｈの解析情報５１に対するポインタのコピーが生成される。コピーされたＡ．Ｈの解析情報５１に対するポインタは、ソースファイル２１に対応するＰＣＨ情報６１に登録される。
【００８２】
以上のようにして各マクロファイルに対するプリプロセス処理が実行されると、マクロファイル毎のＰＣＨ情報が生成される。以下、図１３〜図１７に、ＰＣＨ情報の例を示す。なお、これらの図では、各ＰＣＨ情報においてポインタによって指定されている解析情報は、ＰＣＨ情報の一部として示している。
【００８３】
図１３は、「ＳＲＣ１．Ｃ」に対するＰＣＨ情報の例を示す図である。「ＳＲＣ１．Ｃ」のソースファイル２１に対するＰＣＨ情報６１には、インクルードファイルのファイル名６１ａとして「Ａ．Ｈ」が登録されており、プリプロセッサ処理行数６１ｂとして「１０」が登録されている。また、ＰＣＨ情報６１には、解析情報５１へのポインタが登録されている。解析情報５１には、マクロ情報５１ａと展開ソース情報５１ｂとが登録されている。
【００８４】
図１４は、「ＳＲＣ２．Ｃ」に対するＰＣＨ情報の例を示す図である。「ＳＲＣ２．Ｃ」のソースファイル２２に対するＰＣＨ情報６２には、インクルードファイルのファイル名６２ａとして「Ａ．Ｈ」、「Ｂ．Ｈ」が登録されており、プリプロセッサ処理行数６２ｂとして「６０」が登録されている。また、ＰＣＨ情報６２には、解析情報５１や解析情報５２へのポインタが登録されている。解析情報５１には、マクロ情報５１ａと展開ソース情報５１ｂとが登録されている。解析情報５２には、マクロ情報５２ａと展開ソース情報５２ｂとが登録されている。
【００８５】
図１５は、「ＳＲＣ３．Ｃ」に対するＰＣＨ情報の例を示す図である。「ＳＲＣ３．Ｃ」のソースファイル２３に対するＰＣＨ情報６３には、インクルードファイルのファイル名６３ａとして「Ａ．Ｈ」、「Ｂ．Ｈ」、「Ｃ．Ｈ」が登録されており、プリプロセッサ処理行数６３ｂとして「１６０」が登録されている。また、ＰＣＨ情報６３には、解析情報５１、解析情報５２、および解析情報５３へのポインタが登録されている。解析情報５１には、マクロ情報５１ａと展開ソース情報５１ｂとが登録されている。解析情報５２には、マクロ情報５２ａと展開ソース情報５２ｂとが登録されている。解析情報５３には、マクロ情報５３ａと展開ソース情報５３ｂとが登録されている。
【００８６】
図１６は、「ＳＲＣ４．Ｃ」に対するＰＣＨ情報の例を示す図である。「ＳＲＣ４．Ｃ」のソースファイル２４に対するＰＣＨ情報６４には、インクルードファイルのファイル名６４ａとして「Ａ．Ｈ」、「Ｂ．Ｈ」、「Ｃ．Ｈ」が登録されており、プリプロセッサ処理行数６４ｂとして「１６０」が登録されている。
【００８７】
図１７は、「ＳＲＣ５．Ｃ」に対するＰＣＨ情報の例を示す図である。「ＳＲＣ５．Ｃ」のソースファイル２５に対するＰＣＨ情報６５には、インクルードファイルのファイル名６５ａとして「Ｂ．Ｈ」、「Ｃ．Ｈ」が登録されており、プリプロセッサ処理行数６５ｂとして「１５０」が登録されている。また、ＰＣＨ情報６５には、解析情報５２、および解析情報５３へのポインタが登録されている。解析情報５２には、マクロ情報５２ａと展開ソース情報５２ｂとが登録されている。解析情報５３には、マクロ情報５３ａと展開ソース情報５３ｂとが登録されている。
【００８８】
以上のようにして、ソースファイル毎のＰＣＨ情報が生成されると、組み合わせ決定部１３０によって最適な組み合わせの決定処理（図６のステップＳ１３）が行われる。
図１８は、最適な組み合わせ決定処理の手順を示すフローチャートである。以下、図１８に示す処理をステップ番号に沿って説明する。
【００８９】
［ステップＳ５１］組み合わせ決定部１３０は、インクルードリスト４０を参照して共通化候補を抽出し、共通化候補の組み合わせ表を作成する。
［ステップＳ５２］組み合わせ決定部１３０は、共通化候補の組み合わせ表とＰＣＨ情報とを参照し、共通化候補の組み合わせ毎のソース量を計算する。
【００９０】
［ステップＳ５３］組み合わせ決定部１３０は、共通化候補の組み合わせのうち、ソース量が最も少なくなる組み合わせを、最適な組み合わせとして決定する。
図１９は、共通化候補の抽出状況を示す図である。共通化候補の抽出処理では、ソースファイルから抽出されたインクルードファイルのファイル名の同一性が、抽出順に沿って１番目から順に検討される。
【００９１】
まず、１番目に抽出されたインクルードファイルのファイル名同士を比較する（状態［ＳＴ１］）。このとき、マクロファイル３１のファイル名「Ａ．Ｈ」が複数のソースファイル（「ＳＲＣ１．Ｃ」、「ＳＲＣ２．Ｃ」、「ＳＲＣ３．Ｃ」、「ＳＲＣ４．Ｃ」）に対応付けて登録されている。そこで、共通化候補７１として、ファイル名「Ａ．Ｈ」が抽出される。
【００９２】
次に、１番目と２番目とに抽出されたインクルードファイルのファイル名の配列を比較する（状態［ＳＴ２］）。このとき、マクロファイル３１のファイル名「Ａ．Ｈ」、マクロファイル３２のファイル名「Ｂ．Ｈ」の配列が複数のソースファイル（「ＳＲＣ２．Ｃ」、「ＳＲＣ３．Ｃ」、「ＳＲＣ４．Ｃ」）に対応付けて登録されている。そこで、共通化候補７２として、ファイル名の配列「Ａ．Ｈ」、「Ｂ．Ｈ」が抽出される。
【００９３】
さらに、１番目〜３番目に抽出されたインクルードファイルのファイル名の配列を比較する（状態［ＳＴ３］）。このとき、マクロファイル３１のファイル名「Ａ．Ｈ」、マクロファイル３２のファイル名「Ｂ．Ｈ」、マクロファイル３３のファイル名「Ｃ．Ｈ」の配列が複数のソースファイル（「ＳＲＣ３．Ｃ」、「ＳＲＣ４．Ｃ」）に対応付けて登録されている。そこで、共通化候補７３として、ファイル名の配列「Ａ．Ｈ」、「Ｂ．Ｈ」、「Ｃ．Ｈ」が抽出される。
【００９４】
このようにして抽出された共通化候補７１〜７３に基づいて、共通化候補の組み合わせパターンを登録した共通化候補の組み合わせ表が作成される。以下、図２０〜図２３に、共通化候補の組み合わせ表７０の作成手順を示す。
【００９５】
図２０は、共通化候補の組み合わせ表作成手順を示す第１の図である。図２０の例では、共通化候補７３を選択した上で、その他の共通化候補との組み合わせを検討している。共通化候補７３を適用すると、ファイル名「ＳＲＣ３．Ｃ」、「ＳＲＣ４．Ｃ」のソースファイル２３，２４から抽出されたインクルードファイル「Ａ．Ｈ」、「Ｂ．Ｈ」、「Ｃ．Ｈ」が共通化される。すると、ファイル名「ＳＲＣ１．Ｃ」、「ＳＲＣ２．Ｃ」のソースファイル２１，２２から抽出されたインクルードファイル「Ａ．Ｈ」が、共通化候補７１を適用して共通化可能である。そこで、共通化候補の組み合わせ表７０に、共通化候補７１と共通化候補７３との組み合わせが登録される。
【００９６】
図２１は、共通化候補の組み合わせ表作成手順を示す第２の図である。図２１の例では、共通化候補７２を選択した上で、その他の共通化候補との組み合わせを検討している。この場合、他の共通化候補の選択の余地が無いため、共通化候補７２のみが共通化候補の組み合わせ表７０に登録される。
【００９７】
図２２は、共通化候補の組み合わせ表作成手順を示す第３の図である。図２２の例では、共通化候補７１を選択した上で、その他の共通化候補との組み合わせを検討している。この場合、他の共通化候補の選択の余地が無いため、共通化候補７１のみが共通化候補の組み合わせ表７０に登録される。
【００９８】
作成された共通化候補の組み合わせ表７０とＰＣＨ情報とに基づいて、組み合わせ毎のソース量を計算する。ここで、共通化候補の組み合わせに含まれる共通化候補の数をｎ（ｎは自然数）としたとき、各共通化候補をＸ１，・・・，Ｘｎと表すものとする。また、共通化対象外のインクルードファイルの数をｍ（ｍは自然数）としたとき、各共通化対象外のインクルードファイルをＹ１，・・・，Ｙｍと表すものとする。このときの、組み合わせのソース量は、
「組み合わせのソース量＝（共通化候補Ｘ１の行数）＋・・・＋（共通化候補Ｘｎの行数）＋（共通化対象外インクルードＹ１の行数×共通化対象外インクルードＹ１の解析回数）＋・・・＋（共通化対象外インクルードＹｍの行数×共通化対象外インクルードＹｍの解析回数）」
で計算できる。なお、本実施の形態では、インクルードファイルの共通化を行わない場合も、共通化候補の組み合わせの一形態として捉え、ソース量が計算される。
【００９９】
共通化候補の全ての組み合わせに対応するソース量が計算されると、ソース量の最も少ない組み合わせが、最適な組み合わせとして決定される。
たとえば、本実施の形態では、「Ａ．Ｈ」のマクロファイル３１の処理行数が１０行、「Ｂ．Ｈ」のマクロファイル３２の処理行数が５０行、「Ｃ．Ｈ」のマクロファイル３３の処理行数が１００行である（図５参照）。そのため、共通化候補７１の処理行数は１０行、共通化候補７２の処理行数は６０行、共通化候補７３の処理行数は１６０行である。これらの値を、上記の組み合わせのソース量を算出する式に代入すると、共通化候補の組み合わせ毎のソース量が計算できる。
【０１００】
図２３は、ソース量の計算結果を示す図である。図２３に示すように、共通化候補の組み合わせが無い場合、ソース量は５４０行である（１０（Ａ．Ｈの行数）×４＋５０（Ｂ．Ｈの行数）×４＋１００（Ｃ．Ｈの行数）×３＝５４０）。
【０１０１】
ファイル名「Ａ．Ｈ」のマクロファイル３１のみを共通化する場合、ソース量は５１０行である（１０（Ａ．Ｈの行数）×１＋５０（Ｂ．Ｈの行数）×４＋１００（Ｃ．Ｈの行数）×３＝５１０）。
【０１０２】
ファイル名「Ａ．Ｈ」のマクロファイル３１とファイル名「Ｂ．Ｈ」のマクロファイル３２との配列を共通化する場合、ソース量は４２０行である（６０（Ａ．Ｈ→Ｂ．Ｈの行数）×１＋１０（Ａ．Ｈの行数）×１＋５０（Ｂ．Ｈの行数）×１＋１００（Ｃ．Ｈの行数）×３＝４２０）。
【０１０３】
ファイル名「Ａ．Ｈ」のマクロファイル３１、ファイル名「Ｂ．Ｈ」のマクロファイル３２、およびファイル名「Ｃ．Ｈ」のマクロファイル３３の配列を共通化し、さらにファイル名「Ａ．Ｈ」のマクロファイル３１を共通化する場合、ソース量は３７０行である（１６０（Ａ．Ｈ→Ｂ．Ｈ→Ｃ．Ｈの行数）×１＋１０（Ａ．Ｈの行数）×１＋５０（Ｂ．Ｈの行数）×２＋１００（Ｃ．Ｈの行数）×１＝３７０）。
【０１０４】
この例では、ファイル名「Ａ．Ｈ」のマクロファイル３１、ファイル名「Ｂ．Ｈ」のマクロファイル３２、およびファイル名「Ｃ．Ｈ」のマクロファイル３３の配列を共通化し、さらにファイル名「Ａ．Ｈ」のマクロファイル３１を共通化する場合が最もソール量が少ない。したがって、このような共通化候補の組み合わせ（共通化候補７１と共通化候補７３との組み合わせ）が、最適な組み合わせとして決定される。
【０１０５】
共通化候補の最適な組み合わせが決定されると、最適な組み合わせでソースファイルの解析処理（図６のステップＳ１４）が行われる。このとき、共通化部分については、展開したプリプロセス処理後の解析情報を元に、ヘッダ情報のパーサ処理（ソースコードの単語列から、その文の意味を解釈する処理）が実行される。その後、各ソースファイルに対するプリプロセス処理とパーサ処理とが行われる。この際、共通化されている部分とソース固有部分を判定し、共通部分は先に解析した情報が参照される。
【０１０６】
図２４は、解析処理の手順を示すフローチャートである。以下、図２４に示す処理をステップ番号に沿って説明する。
［ステップＳ６１］ソースファイル解析部１４０は、共通化候補の最適な組み合わせに含まれる共通化候補を１つ選択する。
【０１０７】
［ステップＳ６２］ソースファイル解析部１４０は、選択した共通化候補に対応する部分（共通化候補で指定されるマクロファイルの内容）を解析する。ソースファイル解析部１４０は、解析結果をＲＡＭ１０２等に保存する。
【０１０８】
［ステップＳ６３］ソースファイル解析部１４０は、他の共通化候補があるか否かを判断する。他の共通化候補がある場合、処理がステップＳ６１に進められる。最適な組み合わせに含まれる全ての共通化候補の解析が終了した場合、処理がステップＳ６４に進められる。
【０１０９】
［ステップＳ６４］ソースファイル解析部１４０は、翻訳対象ソースファイル群２０内の未処理のソースファイルを１つ選択する。
［ステップＳ６５］ソースファイル解析部１４０は、共通化された部分の解析結果をＲＡＭ１０２等から取得する。
【０１１０】
［ステップＳ６６］ソースファイル解析部１４０は、共通化されていない部分を解析する。このときの共通化されていない部分には、共通化されていないインクルードファイルや、その他の実行行等を含む。
【０１１１】
［ステップＳ６７］ソースファイル解析部１４０は、翻訳対象ソースファイル群２０内に未処理のソースファイルがあるか否かを判断する。未処理のソースファイルがある場合、処理がステップＳ６４に進められる。翻訳対象ソースファイル群２０内の全てのソースファイルの処理が終了した場合、解析処理が終了する。
【０１１２】
このようにして、ヘッダ情報内のインクルードファイルの解析を共通化して、効率の良い解析が可能となる。ソースファイルの解析結果は、仕様書作成部１５０に渡され、ユーザが操作入力等により要求した形式の仕様書が、仕様書作成部１５０によって生成される。たとえば、メソッド呼び出しツリーなどが作成され、表示される。
【０１１３】
図２５は、表示されるメソッド呼び出しツリーの一例を示す図である。メソッド呼び出しツリー９０には、各ソースファイル内で定義されているメソッドの呼び出し関係が、木構造で示されている。
【０１１４】
なお、上記の説明では、ソースファイルの解析結果に基づいて仕様書を作成するものとしたが、本実施の形態によるソースファイルの解析結果をコンパイルに使用することもできる。その場合、コンピュータ１００にコンパイラを実装し、ソースファイルの解析結果をコンパイラに渡せばよい。これにより、コンパイルの際のヘッダ情報解析時間が短縮され、コンパイルの効率化が図られる。
【０１１５】
なお、上記の処理機能をコンピュータによって実現するためには、上記処理内容を記述したプログラムが提供される。そのプログラムをコンピュータで実行することにより、上記処理機能がコンピュータ上で実現される。処理内容を記述したプログラムは、コンピュータで読み取り可能な記録媒体に記録しておくことができる。コンピュータで読み取り可能な記録媒体としては、磁気記録装置、光ディスク、光磁気記録媒体、半導体メモリなどがある。磁気記録装置には、ハードディスク装置（ＨＤＤ）、フレキシブルディスク（ＦＤ）、磁気テープなどがある。光ディスクには、ＤＶＤ（Digital Versatile Disc）、ＤＶＤ−ＲＡＭ（Random Access Memory）、ＣＤ−ＲＯＭ（Compact Disc Read Only Memory）、ＣＤ−Ｒ（Recordable）／ＲＷ（ReWritable）などがある。光磁気記録媒体には、ＭＯ（Magneto-Optical disk）などがある。
【０１１６】
プログラムを流通させる場合には、たとえば、そのプログラムが記録されたＤＶＤ、ＣＤ−ＲＯＭなどの可搬型記録媒体が販売される。また、プログラムをサーバコンピュータの記憶装置に格納しておき、ネットワークを介して、サーバコンピュータから他のコンピュータにそのプログラムを転送することもできる。
【０１１７】
プログラムを実行するコンピュータは、たとえば、可搬型記録媒体に記録されたプログラムもしくはサーバコンピュータから転送されたプログラムを、自己の記憶装置に格納する。そして、コンピュータは、自己の記憶装置からプログラムを読み取り、プログラムに従った処理を実行する。なお、コンピュータは、可搬型記録媒体から直接プログラムを読み取り、そのプログラムに従った処理を実行することもできる。また、コンピュータは、サーバコンピュータからプログラムが転送される毎に、逐次、受け取ったプログラムに従った処理を実行することもできる。
【０１１８】
（付記１）  ソースファイルのヘッダ情報を解析するためのヘッダ情報解析プログラムにおいて、
コンピュータに、
複数のソースファイルそれぞれのヘッダ情報から、マクロファイルの読み込みを指示するインクルード文を抽出し、
抽出された前記インクルード文に基づいて、前記複数のソースファイルの解析の際に解析結果を共有可能なマクロファイル群を示す少なくとも１つの共通化候補を生成し、
前記共通化候補同士の組み合わせパターンを生成し、
前記組み合わせパターンに従って解析結果を共有したときの前記複数のソースファイルで読み込まれる前記マクロファイルの解析に要する処理量を、生成された前記組み合わせパターン毎に計算し、
処理量が最も少なくなる前記組み合わせパターンに含まれる前記共通化候補に従って前記マクロファイルの解析処理を共通化し、前記複数のソースファイルのヘッダ情報を解析する、
処理を実行させることを特徴とするヘッダ情報解析プログラム。
【０１１９】
（付記２）  前記共通化候補として、異なる前記ソースファイルで読み込みを指定する前記インクルード文の記述順序が、前記ソースファイルの先頭から共通である前記マクロファイルの１以上の配列を抽出することを特徴とする付記１記載のヘッダ情報解析プログラム。
【０１２０】
（付記３）  前記ヘッダ情報の解析の際には、前記マクロファイルそれぞれの解析処理を１度だけ行い、前記複数のソースファイルの解析結果において、前記マクロファイルの解析結果を参照することで、前記マクロファイルの解析処理の共通化を図ることを特徴とする付記１記載のヘッダ情報解析プログラム。
【０１２１】
（付記４）  前記複数のソースファイルのヘッダ情報の解析結果を利用して、前記複数のソースファイルに記述されている処理機能の仕様書を作成する処理を、前記コンピュータに実行させることを特徴とする付記１記載のヘッダ情報解析プログラム。
【０１２２】
（付記５）  前記複数のソースファイルのヘッダ情報の解析結果を利用して、前記複数のソースファイルをコンパイルする処理を、前記コンピュータに実行させることを特徴とする付記１記載のヘッダ情報解析プログラム。
【０１２３】
（付記６）  ソースファイルのヘッダ情報を解析するためのヘッダ情報解析方法において、
コンピュータが、
複数のソースファイルそれぞれのヘッダ情報から、マクロファイルの読み込みを指示するインクルード文を抽出し、
抽出された前記インクルード文に基づいて、前記複数のソースファイルの解析の際に解析結果を共有可能なマクロファイル群を示す少なくとも１つの共通化候補を生成し、
前記共通化候補同士の組み合わせパターンを生成し、
前記組み合わせパターンに従って解析結果を共有したときの前記複数のソースファイルで読み込まれる前記マクロファイルの解析に要する処理量を、生成された前記組み合わせパターン毎に計算し、
処理量が最も少なくなる前記組み合わせパターンに含まれる前記共通化候補に従って前記マクロファイルの解析処理を共通化し、前記複数のソースファイルのヘッダ情報を解析する、
ことを特徴とするヘッダ情報解析方法。
【０１２４】
（付記７）  ソースファイルのヘッダ情報を解析するためのヘッダ情報解析装置において、
複数のソースファイルそれぞれのヘッダ情報から、マクロファイルの読み込みを指示するインクルード文を抽出するインクルード文抽出手段と、
抽出された前記インクルード文に基づいて、前記複数のソースファイルの解析の際に解析結果を共有可能なマクロファイル群を示す少なくとも１つの共通化候補を生成する共通化候補生成手段と、
前記共通化候補同士の組み合わせパターンを生成する組み合わせパターン生成手段と、
前記組み合わせパターンに従って解析結果を共有したときの前記複数のソースファイルで読み込まれる前記マクロファイルの解析に要する処理量を、生成された前記組み合わせパターン毎に計算する処理量計算手段と、
処理量が最も少なくなる前記組み合わせパターンに含まれる前記共通化候補に従って前記マクロファイルの解析処理を共通化し、前記複数のソースファイルのヘッダ情報を解析する解析手段と、
を有することを特徴とするヘッダ情報解析装置。
【０１２５】
（付記８）  ソースファイルのヘッダ情報を解析するためのヘッダ情報解析プログラムを記録したコンピュータ読み取り可能な記録媒体において、
前記コンピュータに、
複数のソースファイルそれぞれのヘッダ情報から、マクロファイルの読み込みを指示するインクルード文を抽出し、
抽出された前記インクルード文に基づいて、前記複数のソースファイルの解析の際に解析結果を共有可能なマクロファイル群を示す少なくとも１つの共通化候補を生成し、
前記共通化候補同士の組み合わせパターンを生成し、
前記組み合わせパターンに従って解析結果を共有したときの前記複数のソースファイルで読み込まれる前記マクロファイルの解析に要する処理量を、生成された前記組み合わせパターン毎に計算し、
処理量が最も少なくなる前記組み合わせパターンに含まれる前記共通化候補に従って前記マクロファイルの解析処理を共通化し、前記複数のソースファイルのヘッダ情報を解析する、
処理を実行させることを特徴とするヘッダ情報解析プログラムを記録したコンピュータ読み取り可能な記録媒体。
【図面の簡単な説明】
【０１２６】
【図１】実施の形態に適用される発明の概念図である。
【図２】本発明の実施の形態に用いるコンピュータのハードウェア構成例を示す図である。
【図３】仕様書作成機能を示す機能ブロック図である。
【図４】翻訳対象ソースファイル群の内容を示す図である。
【図５】ライブラリの内容を示す図である。
【図６】仕様書作成処理全体の手順を示すフローチャートである。
【図７】インクルードリスト生成処理の手順を示すフローチャートである。
【図８】インクルードリストのデータ構造例を示す図である。
【図９】プリプロセス処理の手順を示すフローチャートである。
【図１０】インクルードファイルに対するプリプロセス処理の手順を示すフローチャートである。
【図１１】解析情報登録の第１の例を示す図である。
【図１２】解析情報登録の第２の例を示す図である。
【図１３】「ＳＲＣ１．Ｃ」に対するＰＣＨ情報の例を示す図である。
【図１４】「ＳＲＣ２．Ｃ」に対するＰＣＨ情報の例を示す図である。
【図１５】「ＳＲＣ３．Ｃ」に対するＰＣＨ情報の例を示す図である。
【図１６】「ＳＲＣ４．Ｃ」に対するＰＣＨ情報の例を示す図である。
【図１７】「ＳＲＣ５．Ｃ」に対するＰＣＨ情報の例を示す図である。
【図１８】最適な組み合わせ決定処理の手順を示すフローチャートである。
【図１９】共通化候補の抽出状況を示す図である。
【図２０】共通化候補の組み合わせ表作成手順を示す第１の図である。
【図２１】共通化候補の組み合わせ表作成手順を示す第２の図である。
【図２２】共通化候補の組み合わせ表作成手順を示す第３の図である。
【図２３】ソース量の計算結果を示す図である。
【図２４】解析処理の手順を示すフローチャートである。
【図２５】表示されるメソッド呼び出しツリーの一例を示す図である。
【符号の説明】
【０１２７】
１  ソースファイル
２  マクロファイル
３  インクルードリスト
４  共通化候補
５  組み合わせ表
６  処理量
７  解析結果
２０  翻訳対象ソースファイル群
３０  ライブラリ
４０  インクルードリスト
６０  ＰＣＨ情報
７０  共通化候補の組み合わせ表
８０  仕様書
１００  コンピュータ
１１０  インクルードリスト生成部
１２０  プリプロセス処理部
１３０  組み合わせ決定部
１４０  ソースファイル解析部
１５０  仕様書作成部
【図１】
2005135129.tif 000003
【図２】
2005135129.tif 000004
【図３】
2005135129.tif 000005
【図４】
2005135129.tif 000006
【図５】
2005135129.tif 000007
【図６】
2005135129.tif 000008
【図７】
2005135129.tif 000009
【図８】
2005135129.tif 000010
【図９】
2005135129.tif 000011
【図１０】
2005135129.tif 000012
【図１１】
2005135129.tif 000013
【図１２】
2005135129.tif 000014
【図１３】
2005135129.tif 000015
【図１４】
2005135129.tif 000016
【図１５】
2005135129.tif 000017
【図１６】
2005135129.tif 000018
【図１７】
2005135129.tif 000019
【図１８】
2005135129.tif 000020
【図１９】
2005135129.tif 000021
【図２０】
2005135129.tif 000022
【図２１】
2005135129.tif 000023
【図２２】
2005135129.tif 000024
【図２３】
2005135129.tif 000025
【図２４】
2005135129.tif 000026
【図２５】
2005135129.tif 000027