(57)【要約】複数のソースファイルおよび１つかまたはそれ以上のヘッダーファイルが、提供される。ヘッダーファイルは、ソースファイルの中のいくつかが参照する情報を含む。オリジナルファイルは、前処理され、そのそれぞれが、それぞれの前処理ファイルを生成し、前記前処理は、第１のヘッダーファイルからの情報によって、ソースファイルの中のいくつかを拡張することを含む。全体的処理ステップが、施され、統合的な変更を前処理ファイルからの情報に対して行う。変更された前処理ファイルは、修正されたソースファイルおよびヘッダーファイルを再生成するのに使用される。第１のヘッダーファイルを再生成するために、前処理ファイルの中の１つが、選択されたファイルが第１のヘッダーファイルからの情報を詳述することを検出することに基づいて選択される。第１のヘッダーファイルは、選択されたファイル内の情報から再生成される。
2006523887.tif 000002
【特許請求の範囲】
【請求項１】
ファイルを処理するための機械によって実行される方法であって、
複数のオリジナルファイルを提供するステップと、
前記オリジナルファイルの中のいくつかが参照する情報を含む１つかまたはそれ以上の共通ファイルを提供するステップと、
前記オリジナルファイルを前処理して、それぞれの前記オリジナルファイルが、それぞれの前処理ファイルを生成するステップであり、前記前処理が、第１の共通ファイルからの情報によって、前記オリジナルファイルの中のいくつかを拡張することを備える、前記生成するステップと、
全体的処理ステップを施して、統合的な変更を前記前処理ファイルからの情報に対して行うステップと、
選択されたファイルが前記第１の共通ファイルからの情報を詳述することを検出することに基づいて、前記前処理ファイルの中の１つを選択するステップと、
全体的処理ステップによって影響を受けた前記オリジナルファイルおよび前記第１の共通ファイルの再生成ファイルを再生成するステップであり、前記第１の共通ファイルのための前記再生成ファイルの前記再生成が、選択された前処理ファイルからの情報を用いて制御され、それによって、選択された前処理ファイル内の情報が、前記第１の共通ファイルの前記再生成ファイル内にどれだけ含められるかを制御する、前記再生成するステップと、
を備えた方法。
【請求項２】
まず最初に、前記第１の共通ファイルのための前記再生成ファイルからの情報を用いて、前記オリジナルファイルのための前記再生成ファイルを個々に処理し、それに続いて、前記オリジナルファイルのための前記再生成ファイルから得られた情報をリンクすることによって、機械命令のプログラムをリンクする第１のステップを備えた、請求項１に記載の方法。
【請求項３】
前記全体的処理ステージによって影響を受けたこれらオリジナルファイルおよび共通ファイルだけについて再生成ファイルを選択的に再生成し、影響を受けていないオリジナルファイルおよび共通ファイルを前記個々に処理するステップに使用するステップを備えた、請求項２に記載の方法。
【請求項４】
前記オリジナルファイルの中のいくつかが参照する情報が、ソフトウェアコンポーネントの構造の定義であり、前記選択されたファイルが、実装するプログラムを前記ソフトウェアコンポーネントの要素に提供することによって情報を詳述する、請求項１に記載の方法。
【請求項５】
前記選択するステップを実行するために、前処理ファイルを一回目に読み込むステップと、
前処理ファイルを二回目に読み込むステップであり、全体的処理を施すときに使用するために、第１の共通ファイルの拡張された情報のうち、選択された前処理ファイルからの拡張された情報だけが、コンピュータメモリに保持される、前記二回目に読み込むステップと、
を備えた、請求項１に記載の方法。
【請求項６】
前記選択するステップが、
前処理ファイル内におけるソフトウェアコンポーネントの実装を検出するステップと、
特定の前処理ファイルが、ソフトウェアコンポーネントの実装を含める場合、前記第１の共通ファイルからの情報を前記メモリに保持するために、その特定の前処理ファイルを選択するステップと、
を備えた、請求項５に記載の方法。
【請求項７】
前記二回目に読み込むときの前記前処理ファイルを読み込む順序が、前記一回目に読み込むときに予め選択され、前記順序内における特定の前処理ファイルの位置が、前記特定の前処理ファイルが１つかまたはそれ以上のさらなるソフトウェアコンポーネントを参照するソフトウェアコンポーネントの実装を含む場合には、その１つかまたはそれ以上のさらなるソフトウェアコンポーネントのすべての実装を含む１つかまたは複数の前処理ファイルの後に、特定の前処理ファイルが前記読み込む順序内に配置されるように、選択される請求項６に記載の方法。
【請求項８】
実装する前処理ファイルが検出されなかったそれぞれのソフトウェアコンポーネントごとに、前記ダミーファイルを生成し、前記二回目の読み込みの一部として、前記ダミーファイルを読み込むステップを備え、前記ダミーファイルを生成するステップが、前記ダミーファイルが生成される前記ソフトウェアコンポーネントを定義する前記共通ファイルを含めるための命令をそれぞれの特定の前記ダミーファイルに挿入し、かつ、前記ダミーファイルを前処理し、あるいは、前記挿入および前処理する代わりに、前記共通ファイルの拡張を前記ダミーファイルに挿入するステップを備えた、請求項７に記載の方法。
【請求項９】
前記前処理するステップが、
情報が前記前処理ファイル内に拡張された前記第１の共通ファイルおよび拡張された情報を識別するために、マーク情報を前記前処理ファイルに含めるステップを備え、
前記再生成するステップが、拡張された前記情報の代わりに命令を前記オリジナルファイルの前記再生成ファイルに挿入するために、前記マーク情報を使用するステップを備え、命令が、前記第１の共通ファイルの前記再生成ファイルを含めることを命令し、前記第１の共通ファイルは、前記前処理ファイル内に拡張されたものであり、
前記第１の共通ファイルの前記再生成ファイルが、選択された前記前処理ファイル内の前記マーク情報によってマークを付された拡張された情報から再生成される、
請求項１に記載の方法。
【請求項１０】
前記オリジナルファイルの中のいくつかが参照する情報が、ソフトウェアコンポーネントの構造の定義であり、前記選択されたファイルが、実装するプログラムを前記ソフトウェアコンポーネントの要素に提供することによって、前記情報を詳述し、
選択された前記前処理ファイルが生成された前記オリジナルファイルの中の１つが、前記第１の共通ファイルからの情報を拡張するための第１の命令に先行して、さらなる共通ファイルからの情報を拡張するための先行命令を含んでいるかどうかを前処理ファイルごとに検出するステップと、
前記第１の共通ファイルを拡張するための命令が挿入されたそれぞれの再生成ファイル内において先行する前記命令の等価なコピーを生成するステップであり、前記等価なコピーが、前記第１の共通ファイルを拡張するための前記命令に先行して、挿入される、前記生成するステップと、
を備えた、請求項９に記載の方法。
【請求項１１】
請求項１から請求項１０までのいずれかに記載の前記方法を実行するための機械命令を含む、コンピュータプログラムプロダクト。
【請求項１２】
複数のオリジナルファイルと前記オリジナルファイルのいくつかが参照する情報を含む１つかまたはそれ以上の共通ファイルとを記憶するための記憶システムと、プログラムされた処理システムとを備えた、ファイルを処理するようにプログラムされた機械であって、
前記処理システムが、
前記オリジナルファイルを前処理して、それぞれの前記オリジナルファイルが、それぞれの前処理ファイルを生成し、前記前処理が、第１の共通ファイルからの前記情報によって、前記オリジナルファイルの中のいくつかを拡張することを備え、
全体的処理ステップを施して、統合的な変更を前処理ファイルからの情報に対して行い、
選択された前記ファイルが前記第１の共通ファイルからの情報を詳述することを検出することに基づいて、前記前処理ファイルの中の１つを選択し、
前記全体的処理ステージによって影響を受けた前記オリジナルファイルおよび前記第１の共通ファイルの再生成ファイルを再生成し、前記第１の共通ファイルの前記再生成ファイルの前記再生成が、選択された前記前処理ファイルからの情報を用いて制御され、それによって、選択された前記前処理ファイル内の情報が、前記第１の共通ファイルの前記再生成ファイル内にどれだけ含められるかを制御するようにプログラムされた、機械。
【請求項１３】
前記全体的処理ステップを施すために前記前処理されたファイルからの情報を記憶するためのメモリを備え、機械が、
前記選択を実行するために、前記前処理ファイルを一回目に読み込み、
その次に、前記全体的処理ステージのために、前記前処理ファイルを読み込み、全体的処理を施すときに使用するために、前記第１の共通ファイルの拡張された情報のうち、選択された前記前処理ファイルからの拡張された情報だけが、前記メモリに保持されるように構成された、
請求項１２に記載の機械。
【請求項１４】
前記選択が、
前記前処理ファイル内におけるソフトウェアコンポーネントの実装を検出するステップと、
その特定の前処理ファイルが、ソフトウェアコンポーネントの実装を含む場合、前記第１の共通ファイルからの情報を前記メモリに保持するために、その特定の前処理ファイルを選択するステップと、
を備えた、請求項１３に記載の機械。
【請求項１５】
前記二回目に読み込むときの前記前処理ファイルを読み込む順序が、前記一回目に読み込むときに予め選択され、前記順序内における特定の前処理ファイルの位置が、前記特定の前処理ファイルが１つかまたはそれ以上のさらなるソフトウェアコンポーネントを参照するソフトウェアコンポーネントの実装を含む場合には、その１つかまたはそれ以上のさらなるソフトウェアコンポーネントのすべての実装を含む１つかまたは複数の前処理ファイルの後に、前記特定の前処理ファイルが前記読み込む順序内に配置されるように、選択される請求項１４に記載の機械。
【請求項１６】
前処理が、
情報が前記前処理ファイル内に拡張された前記第１の共通ファイルおよび前記拡張された情報を識別するために、マーク情報を前処理ファイルに含めるステップを備え、
前記再生成するステップが、前記拡張された情報の代わりに命令を前記オリジナルファイルの再生成ファイルに挿入するために、マーク情報を使用するステップを備え、命令が、前記第１の共通ファイルの前記再生成ファイルを含めることを命令し、前記第１の共通ファイルは、前記前処理ファイル内に拡張されたものであり、
前記第１の共通ファイルの前記再生成ファイルが、選択された前記前処理ファイル内の前記マーク情報によってマークを付された拡張された情報から再生成される、
請求項１２に記載の機械。
【請求項１７】
前記オリジナルファイルの中のいくつかが参照する前記情報が、ソフトウェアコンポーネントの構造の定義であり、選択された前記ファイルが、実装するプログラムを前記ソフトウェアコンポーネントの要素に提供することによって、前記情報を詳述し、
前記処理システムが、
選択された前記前処理ファイルが生成された前記オリジナルファイルの中の１つが、前記第１の共通ファイルからの前記情報を拡張するための第１の命令に先行して、さらなる共通ファイルからの情報を拡張するための先行命令を含んでいるかどうかを前処理ファイルごとに検出し、
前記第１の共通ファイルを拡張するための命令が挿入されたそれぞれの再生成ファイル内の先行命令の等価なコピーを生成し、前記等価なコピーが、前記第１の共通ファイルを拡張するための命令に先行して、挿入される、
ように構成された、請求項１６に記載の機械。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、例えば、ソースファイルおよびヘッダファイルのような複数のファイルからなるコンパイル可能なコンピュータプログラムの処理に関し、あるいは、より一般的には、複数のファイルからなるコンパイル可能な関数システム記述の処理に関する。
【背景技術】
【０００２】
大きなコンピュータプログラムの生成は、一般的には、多くの数のファイルを結合しなければならない。管理可能な状態に設計を維持するために、ソースコードのモジュールは、個々に設計および処理することのできる様々なファイルにある程度まで分割される。Ｃ＋＋プログラミングは、例えば、複数のソースファイルに分割されるかもしれない多くの数のクラスを使用しなければならない。ソースファイルは、お互いに独立して、構文エラーを検査され、そして、オブジェクトコードとしてコンパイルされてもよい。様々なソースファイルから得られた情報は、機械実行可能コンピュータプログラムを生成するために、最後のステージすなわちリンクステージでしか結合されない。
【０００３】
ソースファイルを個々に処理しているとき、設計情報の要素を複数のソースファイルが利用できることが必要となる場合がある。Ｃ＋＋プログラミングにおいては、例えば、クラス定義は、クラスを使用するために、あるいは、クラスを実装するために、様々なソースファイルが利用できるものでなければならない。このために、共有可能な設計要素を含むヘッダファイルが、使用される。設計情報の要素を使用するこれらのソースファイルは、要素を含むヘッダファイルを参照する「ｉｎｃｌｕｄｅ文」を含む。そして、ヘッダファイルもまた、ｉｎｃｌｕｄｅ文を含んでもよい。
【０００４】
構文検査およびコンパイルする前に、それぞれのソースファイルは、プリプロセッサによって前処理され、そのプリプロセッサは、ソースファイルからのコードを含む前処理ファイルを生成するが、ｉｎｃｌｕｄｅ文は、ｉｎｃｌｕｄｅ文が参照するヘッダファイルからの情報を代入することによって、拡張される。プリプロセッサは、これを再帰的に実行する。そして、ヘッダファイルが、ｉｎｃｌｕｄｅ文を含む場合、参照される情報は、前処理ファイルに拡張され、以下、同様に実行される。これは、１回以上参照されるヘッダファイルからの情報の重複を含むことがある。プログラマは、通常、プリプロセッサにそのような重複を抑制させる条件付きｉｎｃｌｕｄｅ文を追加する。条件付きｉｎｃｌｕｄｅ文は、ヘッダファイルが以前に拡張されていないことを条件として、ヘッダファイルを含める。多くの場合、この抑制は、まさに必要とされるものである。なぜなら、さもなければ、重複定義が、挿入され、それは、コンパイルを中断するからである。
【０００５】
前処理ファイルは、構文検査およびオブジェクトファイルの生成に使用される。リンクステージにおいて、オブジェクトファイルは、結合され、実行可能プログラムが、生成される。したがって、最初の個々のファイル処理ステージと最後の全体的ファイル処理ステージとに厳格に分離される。最初のステージにおいては、それぞれのソースファイルは、個々に処理され、最後のステージにおいては、ソースファイルから得られるすべてのファイルは、全体的に処理される。個々のソースファイル処理ステージが、全体的ファイル処理ステージの後にくることはない。
【０００６】
しかしながら、様々な理由から、個々のファイル処理ステージと全体的ファイル処理ステージとが交互に何回か起こることを用いることによって、この厳格な分離から逸脱することが提案されている。米国特許第５，９２０，７２３号は、全体的ソースファイル最適化処理ステージがリンクの前に実行される処理を記載している。最適化ステージは、リンクステージの前に、様々なソースファイルから得られた情報を結合し、プログラムコードを最適化する。最適化は、命令の変更、命令の移動、不必要な命令の除去、補充命令の追加、などを含んでもよい。最適化ステージは、最適化されたそれぞれの中間ファイルを生成し、それらのそれぞれは、ソースファイルのそれぞれに対応する。最適化ステージの後に、中間ファイルは、もう一度、個々の処理を施され、オブジェクトファイルが、生成される。オブジェクトファイルは、最後に、全体的処理を施され、オブジェクトファイルを実行可能プログラムとしてリンクする。
【０００７】
基本的には、中間ファイルは、ソースファイルと同じ構文で表現されてもよい。したがって、ソースファイルおよび中間ファイルの両方は、同じコンパイラプログラムによって処理されてもよく、そのために、個々のコンパイラは、必要とされない。個々の処理ステージが、全体的処理ステージと交替するとき、処理された情報をどのように個々のファイルに分配すべきかという問題が発生することがある。米国特許第５，９２０，７２３号の場合、この問題は、ほとんど存在しない。なぜなら、ソースファイルと中間ファイルとの間には、１対１の関係が存在するからである。中間ファイルは、オリジナルヘッダファイルを用いて、個々にコンパイルされてもよい。
【０００８】
一般的な最適化の域を越えるプログラムの再編成が必要とされる場合、例えば、そのために、また、ヘッダファイルが、変更される場合、問題が発生する。この種類の再編成は、例えば、異なるプログラム要素間において通信チャンネルを取り替えるために、例えば、プログラムを再設計して異なる種類の（マルチ）プロセッサ上で実行するために、必要とされることがある。この場合、ソースファイルおよびヘッダファイルは、プリプロセッサによって前処理される。前処理の結果として、ヘッダファイルからの同一情報の複数コピーが、異なる前処理ファイルにおいて発生することがある。ヘッダファイルからのそのような情報が、変更される場合、まず第一に、異なる前処理ファイルにおいて発生する同一ヘッダファイルからの情報は一貫性をもって変更されることが保証されなければならない。さらに、全体的処理ステージの最後においてヘッダファイルを再生成すること、および、再生成ヘッダファイルを参照するｉｎｃｌｕｄｅ文を再導入することが望ましい（「再生成」ファイルという用語は、オリジナルファイルに対応するファイルを意味し、全体的処理ステージの結果としての変更を備える）。したがって、再生成ソースファイルおよび再生成ヘッダファイルは、オリジナルソースファイルおよびオリジナルヘッダファイルに利用可能なツールによって処理されてもよい。これは、ヘッダファイルの生成のさらなる問題を発生させる。
【０００９】
前処理ファイルにおいてオリジナルヘッダファイルを識別できれば、その情報から新しいヘッダファイルおよび新しいｉｎｃｌｕｄｅ文を変更されたものとして再生成できることが一見して分かる。しかしながら、これは、不可能である。なぜなら、前処理中のヘッダファイルの拡張は、条件付きｉｎｃｌｕｄｅ文のために、不完全なものであるかもしれないからである。したがって、異なるソースファイルが、それぞれ、ヘッダファイルのような共通ファイルからの情報を用いて個々に前処理され、それに続いて、全体的に変更され、そして、変更の後に、新しいソースファイルおよび共通ファイルが、再生成されなければならない場合、問題は、マルチファイル処理に存在する。
【発明の開示】
【発明が解決しようとする課題】
【００１０】
とりわけ、本発明の目的は、変更された前処理ファイルからソースファイルおよび共通ファイルを再生成するための方法およびシステムを提供することである。
【００１１】
本発明のさらなる目的は、共通ファイルからの情報の拡張を含むソースファイルのバージョンから共通ファイルを再生成することである。
【課題を解決するための手段】
【００１２】
本発明による方法が、請求項１に記載される。１つかまたはそれ以上の共通ファイル（例えば、ヘッダファイル）から拡張された情報を付加することによってそれぞれがそれぞれのオリジナルファイル（例えば、ソースファイル）から生成された前処理ファイルは、統合的な変更を施される。変更された後、前処理ファイルは、オリジナルファイルの再生成ファイル（例えば、再生成ソースファイル）および共通ファイルの再生成ファイル（例えば、再生成ヘッダファイル）の両方を再生成するのに使用される。共通ファイルから異なる前処理ファイル内に拡張される情報量は、異なる場合があるので、生成ファイルが十分に完全なものであることを保証するために、特別の注意が必要とされる。したがって、十分に完全なヘッダファイル情報を含むことが予想される前処理ファイルが、共通ファイルを再生成するために選択され、あるいは、少なくとも、完全性を決定する再生成の一部に使用される。共通ファイルの再生成のために選択される前処理ファイルは、オリジナルファイルがヘッダファイルに対してなす参照の種類に基づいて選択される。共通ファイル内において定義されたソフトウェアコンポーネントの実装を含む前処理ファイルが、ヘッダファイルを生成するのに使用される。ソースファイルおよびヘッダファイルを生成した後、ファイルは、例えば、それらをオブジェクトファイルにコンパイルすることによって、個々に処理されてもよく、それに続いて、例えば、実行可能プログラムを生成するために、リンクされる。それに続いて、コンピュータは、そのような実行可能なプログラムの命令を実行してもよい。
【００１３】
上述したように、前処理ファイルは、好ましくは、共通ファイルを再生成するために、共通ファイル内において宣言されているソフトウェアコンポーネントの実装を検出することに基づいて選択される。好ましくは、選択は、統合された全体的処理の前に実行され、そのために、共通ファイルの場合、選択された前処理ファイルからの情報だけが、統合された処理のために、コンピュータメモリに保持されればよい。好ましくは、２パス処理が、使用される。第１のパスは、どの前処理ファイルをどの共通ファイルに使用すべきかを決定する。第２のパスは、選択された前処理ファイルから共通ファイル情報を得る。第１のパスは、前処理ファイルを読み込む順序を決定し、それによって、前記順序内における特定の前処理ファイルの位置が、選択され、それによって、その特定の前処理ファイルが、１つかまたはそれ以上のさらなるソフトウェアコンポーネントを参照するソフトウェアコンポーネントの実装を含む場合、特定の前処理ファイルは、１つかまたはそれ以上のさらなるソフトウェアコンポーネントのすべての実装を含む１つかまたは複数の前処理ファイルの後に読み込むように前記順序内に配置される。換言すれば、読み込みは、下から上に実行され、それによって、まず最初に、ソフトウェアコンポーネントの参照階層において最下位のコンポーネントを定義するファイルが、読み込まれる（第１のコンポーネントの定義が、第２のコンポーネントを参照する場合、その第１のコンポーネントは、階層においてより高いと言われる）。したがって、共通ファイルの検出された第１の拡張だけが、保持されればよい。好ましくは、情報が前処理ファイル内に拡張された共通ファイルおよび拡張された情報自身の両方を識別するために、マーク情報が、前処理ファイル内に含められる。再生成中、マーク情報は、オリジナルファイルの再生成ファイル内に存在する拡張された情報の代わりに命令を挿入するのに使用される。挿入命令は、第１の共通ファイルが前処理ファイル内に拡張された第１の共通ファイルの再生成ファイルを含めることを命令する。共通ファイルの再生成ファイルは、選択された前処理ファイル内のマーク情報によってマークを付された拡張された情報から再生成される。したがって、再生成ファイルは、オリジナルファイルと同じように使用されてもよい。
【００１４】
好ましくは、オリジナルファイルのいくつかが参照する情報は、ソフトウェアコンポーネントの構造の定義であり、選択されたファイルは、実装するプログラムをソフトウェアコンポーネントの要素に提供することによって、情報を詳述する。この場合、好ましくは、選択された前処理ファイルが生成されたオリジナルファイルの中の１つが、第１の共通ファイルからの情報を拡張するための第１の命令に先行して、さらなる共通ファイルからの情報を拡張するための先行命令を含んでいるかどうかが、前処理ファイルごとに検出され、先行命令の等価なコピーが、第１の共通ファイルを拡張するための命令が挿入されたそれぞれの再生成ファイル内に生成され、等価なコピーは、第１の共通ファイルを拡張するための命令に先行して、挿入される。
【００１５】
以下、添付の図面を参照して、本発明のこれらのおよびその他の目的および有益な側面を説明する。
【発明を実施するための最良の形態】
【００１６】
図１は、ファイルを処理するためのシステムを示す。システムは、磁気ディスクまたはそのようなディスクを組み合わせたもののような、ソースファイルおよびヘッダファイルを記憶するための記憶装置１０、プロセッサメモリ１１、ターゲットプログラムメモリ１７およびターゲットプロセッサ１８を備えたターゲットコンピュータ１６、および、生成された機械命令のプログラムをプログラムメモリ１７に記憶するための装置１４を含む。本発明から逸脱することなく、ターゲットプロセッサ１８は、プロセッサ１２であってもよく、ターゲットプログラムメモリ１７は、プロセッサメモリ１１である。
【００１７】
プロセッサ１２は、オリジナルソースファイルおよびオリジナルヘッダファイルを記憶装置１０からプロセッサメモリ１１に読み込むために、記憶装置１０に結合される。装置１４は、プロセッサ１２とターゲットプログラムメモリ１７との間に結合される。装置１４は、機械命令のプログラムをターゲットプログラムメモリ１７に書き込むように構成されてもよく、あるいは、ターゲットコンピュータが集積回路の一部であるならば、プログラムによってプログラムされたプログラムメモリ１７を製造するように構成されてもよい。しかしながら、プロセッサ１２と装置１４との間の結合は、実際には、記憶装置１０または何らかの記憶装置（図示しない）を介して実現されてもよいことが分かる。
【００１８】
図２は、処理中の情報の流れを示す。記憶装置１０に記憶されたオリジナルソースファイル２０ａ〜２０ｃが、プリプロセッサ２２に提供される。例として、３つのオリジナルソースファイル２０ａ〜２０ｃが、示されているが、どのような数のオリジナルソースファイル２０ａ〜２０ｃが使用されてもよいことが分かるはずである。プリプロセッサ２２は、例えば、コンピュータ１２上で実行されるプログラムとして実施され、それは、オリジナルソースファイル２０ａ〜２０ｃごとに、毎回、反復して実行される。プリプロセッサ２２は、前処理中に、オリジナルヘッダファイル２１からなるグループからのファイルを使用し、それぞれのオリジナルソースファイル２０ａ〜２０ｃごとに、前処理ファイル２３ａ〜２３ｃを生成する。
【００１９】
プリプロセッサは、典型的には、オリジナルソースファイル２０ａ〜２０ｃからの命令コードを前処理ファイル２３ａ〜２３ｃのそれぞれにコピーし、オリジナルソースファイル２０ａ〜２０ｃからのある種の文に応じて、オリジナルヘッダファイル２１からの情報を前処理ファイル２３ａ〜２３ｃ内に挿入する。挿入された情報は、その情報が得られたオリジナルヘッダファイル２１を指示するために、マークを付される。プリプロセッサ２２によって生成された前処理ファイル２３ａ〜２３ｃは、例えば、プロセッサメモリまたは記憶装置１０に記憶される。
【００２０】
表１は、オリジナルソースファイル、オリジナルヘッダファイル、および、前処理ファイルの例を示し、ｉｎｃｌｕｄｅ文が、オリジナルヘッダファイルからの情報によってオリジナルソースファイルを拡張するのに使用されており、また、マーク情報が、付加されている。さらに、前処理ファイルの上部において、ソースファイルを識別するためのマークが、付加されている。
【表１】
2006523887.tif 000003
【００２１】
マークする形式はただ単に例として示されることが分かる。都合の良いものであれば、識別されたオリジナルヘッダファイルから発生するどのようなマーク情報の形式でも使用されてよい。
【００２２】
オリジナルヘッダファイルは、さらなるオリジナルヘッダファイルを得るためのｉｎｃｌｕｄｅ文を含んでもよい。この場合には、プリプロセッサ２２は、これらのさらなるオリジナルヘッダファイルから前処理ファイル２３ａ〜２３ｃ内に情報を拡張し、対応するマーク情報を前処理ファイル２３ａ〜２３ｃに付加する。そして、これらのさらなるオリジナルヘッダファイルが、ｉｎｃｌｕｄｅ文を含む場合、またさらなるオリジナルヘッダファイルからの情報が、前処理ファイル２３ａ〜２３ｃに含められ、以下、同様である。
【００２３】
オリジナルヘッダファイル２１は、条件文、例えば、変数Ｘがすでに定義されていれば、プリプロセッサ２２にオリジナルヘッダファイル２１の一部の拡張をスキップさせる「＃ｉｆｎｄｅｆ  Ｘ」を含んでもよい。例えば、オリジナルヘッダファイル２１が、次の文を含むと仮定する。
．．．
＃ｅｎｄｉｆ
【００２４】
変数Ｘの名前は、このオリジナルヘッダファイルに特有のものである。この場合、「ｉｆｎｄｅｆ」と「ｅｎｄｉｆ」との間に存在するオリジナルヘッダファイルの部分は、変数Ｘがすでに定義されていれば、オリジナルヘッダファイル２１を得るためのｉｎｃｌｕｄｅ文が検出されたとき、前処理ファイル２３ａ〜２３ｃ内に拡張されない。
【００２５】
全体的処理ステージ２４ａは、前処理ファイル２３ａ〜２３ｃの組み合わせを処理する。全体的処理ステージ２４ａは、例えば、コンピュータ１２上で実行されるプログラムとして実施される。全体的処理ステージ２４ａは、前処理ファイル２３ａ〜２３ｃからの情報を変更する。これは、オリジナルソースファイル２０ａ〜２０ｃから得られた情報および／またはオリジナルヘッダファイル２１から得られた情報を含んでもよい。
【００２６】
本発明は、全体的処理ステージ２４ａが前処理ファイル２３ａ〜２３ｃからの情報に施す変更の種類に依存しない。典型的な変更は、前処理ファイルの合同再設計であり、オリジナルヘッダファイルからの共通クラス定義の変更、および、変更されたクラスのメンバーを実装しあるいはクラス定義を利用するオリジナルソースファイル２０ａ〜２０ｃからの命令の対応する変更を含む。これは、例えば、並列プロセッサ間におけるデータ転送のための命令を挿入することによって、例えば、オリジナルソースファイル２０ａ〜２０ｃからのプログラムをそれらが元々設計されたターゲットコンピュータと異なる別の種類のターゲットコンピュータ１６上で実行するのに適したものにするために、適用されてもよい。
【００２７】
分離器ステージ２４ｂは、全体的処理ステージ２４ａの結果を、生成ソースファイル２５ａ〜２５ｃおよび生成ヘッダファイル２６ａ〜２６ｃに分配する。生成ソースファイル２５ａ〜２５ｃおよび生成ヘッダファイル２６ａ〜２６ｃは、あたかもそれらがそれぞれオリジナルソースファイル２０ａ〜２０ｃおよびオリジナルヘッダファイル２１であるかのように使用されてもよい。すなわち、それらは、さらなる前処理ファイル２７ａ〜２７ｃを生成するために、プリプロセッサ２２に使用されてもよい。
【００２８】
さらなる前処理ファイル２７ａ〜２７ｃは、コンパイラー２８に使用されてもよい。コンパイラー２８は、例えば、コンピュータ１２上で実行されるプログラムとして実施され、そのプログラムは、それぞれのさらなる前処理ファイル２７ａ〜２７ｃごとに、毎回、反復して実行される。コンパイラー２８は、オブジェクトファイル２９ａ〜２９ｃを生成し、そのオブジェクトファイル２９ａ〜２９ｃは、ターゲットプロセッサ１８に使用される機械命令の実行可能プログラム２１０を生成するために、リンカー２００によって使用される。リンカーは、例えば、コンピュータ１２上で実行されるプログラムとして実施されてもよい。
【００２９】
分離器ステージ２４ｂは、変更後の前処理ファイル２３ａ〜２３ｃから得られたコードを使用することによって、ソースファイル２５ａ〜２５ｃを生成する。前処理ファイル内の最上位マーカー情報の位置に対応するコード内の位置において、分離器ステージ２４ｂは、生成ソースファイル２５ａ〜２５ｃ内にｉｎｃｌｕｄｅ文を挿入し、ｉｎｃｌｕｄｅ文は、マーカー情報で識別されるヘッダファイル２１の生成されたバージョンを参照する。分離器ステージ２４ｂは、マーカー情報によってそれ自身がマークを付されたヘッダファイル２１からの拡張された情報を生成ソースファイル２５ａ〜２５ｃ内に挿入することはない。また、分離器ステージ２４ｂは、ｉｎｃｌｕｄｅ文を挿入するために、拡張された情報内のネスティングされたマーカー情報を使用することもない。したがって、最上位マーカー情報のみ（マークを付されたその他の情報の一部ではなく）が、ｉｎｃｌｕｄｅ文を挿入するのに使用される。表２は、ソースファイルの再生成を説明するものである。
【表２】
2006523887.tif 000004
【００３０】
また、分離器ステージ２４ｂは、前処理ファイル２３ａ〜２３ｃ内の情報からヘッダファイル２６ａ〜２６ｃを生成する。一般的には、異なる前処理ファイル２３ａ〜２３ｃは、それぞれ、同じヘッダファイル２１からの拡張を含んでもよい。それにもかかわらず、異なる前処理ファイル２３ａ〜２３ｃ内の拡張は、プリプロセッサ２２が条件付きｉｎｃｌｕｄｅ文を与えることによって、異なってもよい。これは、前処理ファイル２３ａ〜２３ｃの一部だけがヘッダファイル２６ａ〜２６ｃを生成するのに適していることを意味する。その他の前処理ファイル２３ａ〜２３ｃは、十分に完全なものではない。
【００３１】
図３は、前処理ファイル２３ａ〜２３ｃの不完全性を示す。第１のソースファイルＳ１内には、第１のヘッダファイルＨ１を参照するｉｎｃｌｕｄｅ文が、含まれている。第１のヘッダファイルＨ１は、基本的なヘッダファイルＨ０を参照するｉｎｃｌｕｄｅ文を含む。第２のソースファイルＳ２は、第１のヘッダファイルＨ１を参照するｉｎｃｌｕｄｅ文を含み、第２のヘッダファイルＨ２を参照するｉｎｃｌｕｄｅ文が、先行する。また、第２のヘッダファイルＨ１は、基本的なヘッダファイルＨ０を参照するｉｎｃｌｕｄｅ文を含む。ここで、第１のソースファイルＳ１が、前処理されるとき、第１のヘッダファイルＨ１は、完全に拡張され、Ｈ０の拡張を含む。しかしながら、第２のソースファイルＳ２が、前処理されるときには、第１のヘッダファイルＨ１は、完全には拡張されない。なぜなら、Ｈ０の参照は、それが、第２のヘッダファイルＨ２の拡張中にすでに拡張されているので、拡張されないからである。その結果として、第２のソースファイルＳ２から得られた前処理ファイルからヘッダファイルＨ１′を生成することは、十分に完全な生成ヘッダファイルＨ１′をもたらさない。
【００３２】
ヘッダファイル２６ａ〜２６ｃを生成するために適切な前処理ファイルを選択することは、前処理ファイル２３ａ〜２３ｃ内にソフトウェアコンポーネントが存在することを分析することを必要とする。分析のために、前処理ファイル２３ａ〜２３ｃから得られたデータ構造が、使用される。このデータ構造は、ソフトウェアコンポーネント、前処理ファイル２３ａ〜２３ｄ、および、前処理ファイル２３ａ〜２３ｄ内においてエンティティーとして識別されたヘッダファイルの識別情報を使用する。１つの例においては、ソフトウェアコンポーネントは、Ｃ＋＋クラス定義である。データ構造は、ソフトウェアコンポーネントおよびヘッダファイルの識別子間の「ｄｅｆｉｎｅｄ＿ｉｎ」の関係、および、ソフトウェアコンポーネントおよび前処理ファイル２３ａ〜２３ｄの識別子間の「ｉｍｐｌｅｍｅｎｔｅｄ＿ｉｎ」の関係を表現する。
【００３３】
表３に示されるソースファイルＭａｉｎ、Ｆ１、Ｆ２の例を用いて、ヘッダファイルの生成を説明する。
【表３】
2006523887.tif 000005
【００３４】
ソースファイルは、ヘッダファイルＦ１、Ｆ２、ｓｙｓを含む。例として、ヘッダファイルＦ１は、ライブラリヘッダファイルＬおよびヘッダファイルＦ０を得るためのｉｎｃｌｕｄｅ文を含むと仮定する（ソースファイルは、ｓｙｓ、Ｌ、および、Ｆ０には提供されない）。さらに、ヘッダファイルＦ２は、ヘッダファイルＬ、Ｆ０、Ｆ１を得るためのｉｎｃｌｕｄｅ文を含むと仮定する。ヘッダファイルＦ０は、ヘッダファイルＬおよびｓｙｓのｉｎｃｌｕｄｅ文を含む。ヘッダファイルＬは、ヘッダファイルｓｙｓを得るためのｉｎｃｌｕｄｅ文を含む。
【００３５】
これは、表４に記載された前処理ファイル２３ａ〜２３ｃをもたらす。
【表４】
2006523887.tif 000006
【００３６】
前処理ファイルは、ネスティングされたマーク情報を含むことが分かる（第１のマークに続いて、その第１のマークに対応するエンドマークの前に、第２のマークが存在する）。また、同じヘッダファイル（例えば、Ｆ１）の拡張は異なる前処理ファイルにおいては異なることが分かる。なぜなら、場合によっては、ネスティングされたヘッダファイルは、それらが以前に前処理されていれば、前処理されないからである。
【００３７】
全体的処理ステージ２４ａまたは分離器ステージ２４ｂは、前処理ファイルから読み込まれた情報を用いて、データ構造を構築する。ファイル自身は、前処理ファイルの識別子を定義する。マーク情報が新しいヘッダファイルを挙げるたびに、ヘッダファイル識別子が、付加される。例えば、クラス定義を検出するために、前処理ファイルを構文解析することによって、ソフトウェアコンポーネントが、検出される。そのようなクラス定義が、前処理ファイル内において検出されると、ソフトウェアコンポーネント識別情報が、そのために生成され、ｄｅｆｉｎｅｄ＿ｉｎ関係が、定義が発生することを指示されたヘッダファイルに付加される。同様に、前処理ファイルは、例えば、クラスのメンバー関数を実装するために、構文解析され、クラスのメンバーの実装が前処理ファイル内において検出されかつ対応するｉｍｐｌｅｍｅｎｔｅｄ＿ｉｎ関係がまだ記録されていなければ、そのたびに、ｉｍｐｌｅｍｅｎｔｅｄ＿ｉｎ関係が、付加される。識別情報およびこれらの識別情報間の関係は、都合の良いやり方で、例えば、ヘッダファイル、前処理ファイル、および、ソフトウェアコンポーネントのようなエンティティーのテーブル、および、関係づけられたそのようなエンティティーの対のエントリーとの関係ごとのテーブルを用いて、記録されてもよい。
【００３８】
分離器ステージ２４ｂは、データ構造からの情報によって、ヘッダファイル２６ａ〜２６ｃを生成する。ソフトウェアコンポーネントごとに、分離器ステージ２４ｂは、ソフトウェアコンポーネントとｄｅｆｉｎｅｄ＿ｉｎ関係にあるヘッダファイル、および、ソフトウェアコンポーネントとｉｍｐｌｅｍｅｎｔｅｄ＿ｉｎ関係にある前処理ファイルを決定する。それに続いて、ヘッダファイルが、ｉｍｐｌｅｍｅｎｔｅｄ＿ｉｎ関係にある前処理ファイルから生成される。
【００３９】
この処理は、特定のヘッダファイル２１内において定義されたソフトウェアコンポーネントの実装を含むソースファイル２０ａ〜２０ｃが、ｉｎｃｌｕｄｅ文が完全に拡張されるような形で、その特定のヘッダファイルを得るためのｉｎｃｌｕｄｅ文を含むと仮定する。これは、例えば、特定のヘッダファイルを得るためのｉｎｃｌｕｄｅ文がプログラムファイル内の最初のｉｎｃｌｕｄｅ文であれば、保証される（特定のヘッダファイルに必要とされるその他のヘッダファイルは、その特定のヘッダファイル自身に含められる）。プログラムファイルが、この要件を満足する設計スタイルを用いて展開される場合、さらなる手段は、必要とされない（この場合、ｒｅｆｅｒｓ＿ｔｏ関係は、必要とされない）。
【００４０】
そのようなスタイルが、規定されていなければ、分離器ステージ２４ｂの実施形態は、好ましくは、特定のヘッダファイルを生成するのに使用される前処理ファイル内における特定のヘッダファイルを得るためのｉｎｃｌｕｄｅ文に先行するそれらのマークを付された最上位ｉｎｃｌｕｄｅ文をマーク情報から抽出するように構成される。分離器ステージ２４ｂは、抽出されたｉｎｃｌｕｄｅ文を、特定のヘッダファイルを得るためのｉｎｃｌｕｄｅ文を含むそれぞれの生成ソースファイルに挿入し、そのヘッダファイルに先行する。したがって、特定のヘッダファイルが含められるとき、同じ環境が、毎回、生成される。
【００４１】
表５は、この技術の結果の例を示す。
【表５】
2006523887.tif 000007
【００４２】
この例においては、ファイル「ａ」を参照するｉｎｃｌｕｄｅ文は、ソースファイルｂにおいて、ヘッダファイル「ｂ．ｈ」を得るためのｉｎｃｌｕｄｅ文の前に発生する。ヘッダファイルｃは、ヘッダファイル「ｂ．ｈ」を得るためのｉｎｃｌｕｄｅ文を含むが、ファイル「ａ」を得るためのｉｎｃｌｕｄｅ文は、含まない。ファイルを得るためのｉｎｃｌｕｄｅ文は、生成ソース「ｂ」および生成ヘッダファイル「ｃ」の両方において、生成ヘッダファイル「ｂ１．ｈ」を得るためのｉｎｃｌｕｄｅ文の前に、「ａ」を得るためのｉｎｃｌｕｄｅ文を分離器ステージ２４ｂに挿入させる。すなわち、さらなるｉｎｃｌｕｄｅ文が、ヘッダファイル「ｃ」内に生成される。基本的には、分離器ステージ２４ｂは、生成ヘッダファイル「ｂ１．ｈ」を得るためのｉｎｃｌｕｄｅ文が挿入されるすべてのファイルにそのようなさらなるｉｎｃｌｕｄｅ文を挿入する。オプションとして、ファイル「ａ」を得るためのｉｎｃｌｕｄｅ文がすでに存在するファイルの場合、分離器ステージ２４ｂは、さらなるｉｎｃｌｕｄｅ文を挿入するのを抑制してもよい。
【００４３】
別の実施形態においては、マーカー情報が、前処理ファイル２３ａ〜２３ｃの一部が別のプリプロセッサファイル２３ａ〜２３ｃの一部としてすでに読み込まれているヘッダファイルを得るためのｉｎｃｌｕｄｅ文から発生することを指示する場合、全体的処理ステージ２４ａは、前処理ファイル２３ａ〜２３ｃのそれらの部分をスキップするように構成されてもよい。スキップすることによって、結果的に、スキップされた部分は、変更されないことになり、および／または、全体的処理には使用されないことになる。一般的には、全体的処理中にメモリ１１においてスキップされた部分が占めるメモリ空間（もしあれば）は、再利用され、そのために、これらの部分のコピーまたはこれらの部分から得られる情報は、処理中、メモリ１１に保持されない。全体的処理ステージ２４ａが、前処理ファイル２３ａ〜２３ｃを読み込み、マーカー情報を検出すると、全体的処理ステージ２４ａは、マーカー情報において識別されたヘッダファイルを決定し、ヘッダ識別情報を、マーカー情報においてすでに検出されているヘッダファイル識別情報のリストと比較し、識別情報がすでに検出されていれば、スキップする。
【００４４】
一実施形態においては、全体的処理ステージは、第１の構文解析器および第２の構文解析器（例えば、異なるプログラム部分として実施される）を含む。構文解析器は、それ自身が知られており、前処理ファイルを読み込み、これらのファイルの構文的構造を決定し、そして、構文的位置に基づいて情報を抽出するのに役立つ。第１の構文解析器は、精密な文法を用いて構文解析するように構成され、その詳細な文法は、マークを付された情報の開始点と終了点との間に存在する詳細な情報を分析する。第２の構文解析器は、あまり精密ではない文法を構文解析するように構成され、そのあまり精密ではない文法は、マークを付された情報の開始点と終了点との間に存在するすべての情報を、廃棄された非構造化ブロックとして処理する。
【００４５】
全体的処理ステージ２４ａが、ヘッダファイルからの情報の反復をスキップするような実施形態を使用する場合、それぞれのヘッダファイルから最初に検出された情報は完全なものであることが保証されるべきである。このために、前処理ファイルを全体的処理ステージ２４ａによって処理する順序は、好ましくは、ヘッダファイルを（上述したように）生成するのに使用されるべきそれぞれの前処理ファイルが、そのヘッダファイルを含むその他の前処理ファイルの前に処理されるようにうまく計画される。
【００４６】
好ましくは、並べ替えステージが、全体的処理ステージ２４ａにおいて使用される。並べ替えステージは、まず最初に、前処理ファイル２３ａ〜２３ｃを任意の順序で読み込み、前処理ファイルを処理する順序を選択する。それに続いて、全体的処理ステージ２４ａが、選択された順序で、再度、前処理ファイルを読み込む。並べ替えのために、好ましくは、ソフトウェアコンポーネント間のさらなる「ｒｅｆｅｒｓ＿ｔｏ」関係に関する情報が、収集される。第１のソフトウェアコンポーネントが、第２のソフトウェアコンポーネントを使用するならば（例えば、第１のコンポーネントが、第２のコンポーネントによって定義された第２のクラスの変数を含む第１のクラスであれば）、その第１のソフトウェアコンポーネントは、第２のソフトウェアコンポーネントを参照すると言われる。
【００４７】
図４は、表３および表４に示される例の前処理ファイルから得られたデータ構造におけるエンティティーおよび関係の例を示す。３つのソフトウェアコンポーネントＦ２、Ｆ１、および、Ｆ０が、定義されると仮定する（長方形として示される）。ソフトウェアコンポーネント間の矢印は、ｒｅｆｅｒｓ＿ｔｏ関係を示す。前処理ファイルＦ１およびＦ２は、円として示され、これらの前処理ファイルが実装を含むソフトウェアコンポーネントへのリンクを備える。マークを付されたファイルは、楕円として示され、ヘッダファイルが定義を含むソフトウェアコンポーネントへのリンクを備える。ソフトウェアコンポーネントにリンクされた前処理ファイルおよびヘッダファイルだけが、示される。したがって、例えば、前処理ファイルＭａｉｎは、示されない。
【００４８】
図４を参照して説明したように、並べ替えステージは、データ構造を構築する。ソースファイルの使用可能な順序を決定するために、並べ替えステージは、ソフトウェアコンポーネントを指示する順序リストを効果的に使用する。最初は、リストは、空である。並べ替えステージは、リストにまだ存在しておらずかつリストにまだ存在していないその他のソフトウェアコンポーネントによって参照されていない「遊離した」ソフトウェアコンポーネントを反復的に探索する。並べ替えステージは、遊離したソフトウェアコンポーネントをリストに加え、すべてのソフトウェアコンポーネントがリストに登録されてしまうまで、反復的に、次の遊離したソフトウェアコンポーネントの探索を繰り返す。ソフトウェアコンポーネントごとに、関連する前処理ファイル２３ａ〜２３ｄが、識別され、それがソフトウェアコンポーネントとｉｍｐｌｅｍｅｎｔｅｄ＿ｉｎ関係にあれば、それは、関連すると言われる。
【００４９】
全体的処理ステージ２４ａは、再度、前処理ファイル２３ａ〜２３ｃを読み込み、前処理ファイル２３ａ〜２３ｃは、リスト内における関連するソフトウェアコンポーネントの順序で読み込まれる。ソフトウェアコンポーネントに関連するものとして選択されなかったが特定のソフトウェアコンポーネントを実装する前処理ファイルは、いかなる時点においても読み込まれてよいが、特定のソフトウェアコンポーネントが参照するさらなるソフトウェアコンポーネントを実装する前処理ファイルの前には読み込まれない。
【００５０】
例えば、図４に示される例の場合、並べ替えられた順序で、共通処理ステージ２４ａは、まず最初に、オリジナルファイルＦ２の前処理ファイルを読み込み、それに続いて、オリジナルファイルＦ１の前処理ファイルを読み込む。Ｍａｉｎのような、特定のコンポーネントを実装しないと確認されたその他のファイルは、その後に読み込まれる。
【００５１】
好ましくは、上述したように、生成されたバージョンが作成されるファイル（例えば、Ｆ１およびＦ２）を得るための元々のｉｎｃｌｕｄｅ文に先行する先行ｉｎｃｌｕｄｅ文（例えば、Ｆ０を得るための）は、自動的に、元々のｉｎｃｌｕｄｅ文（例えば、Ｆ１およびＦ２を得るための）に対応するｉｎｃｌｕｄｅ文が発生するすべての生成ファイルにコピーされる。
【００５２】
別の方法として、あるいは、それに加えて、全体的ソース処理ステージ２４ａは、実装する前処理ファイルが検出されなかったソフトウェアコンポーネント（例えば、Ｆ０）のための補助的なダミー実装ソースファイルを生成してもよい。ダミー実装ソースファイルは、プリプロセッサ２２に提供され、結果として得られた前処理ファイルは、全体的ソース処理ステージが前処理ファイルを選択された順序で読み込むときに、第２のパスにおいて使用される。ダミー実装ソースファイル（例えば、Ｆ０のソースファイル）は、関係のあるソフトウェアコンポーネントを定義するヘッダファイルを得るためのｉｎｃｌｕｄｅ文を含むにすぎない。第２のパスにおいて全体的処理ステージ２４ｂによって読み込まれる順序内におけるダミー実装ソースファイルの位置が、生成ソースファイルに関して決定される。したがって、第２のパスにおいて、ヘッダファイルが初めて読み込まれるときに、関係のあるヘッダファイルの完全な拡張が前処理ファイルから読み込まれることが保証される。
【００５３】
全体的処理ステージ２４ａが、毎回、読み込む順序を第２のパスのために選択する第１のパスとともに、２パス読み込み処理を使用することは好ましいことであるが、選択された順序は、並べ替えることなく、異なる第２のパスのために何回でも再利用されてよいことが分かる。これは、例えば、共通処理ステージ２４ａの次の実行のために、例えば、ソースファイル２０ａ〜２０ｃが変更された後に実施される実行のために選択された読み込み順序を記述する作成ファイルを生成することによって、実現されてもよい。
【００５４】
さらに、前処理ファイルを読み込む順序を並べ替えること、および、ヘッダファイルの最初に検出された拡張だけを保持することは、好ましい実施形態ではあるが、保持されるべき拡張を選択するための別の実現可能な方法が、存在することを理解すべきである。例えば、修正された前処理ファイルが、生成されてもよく、ヘッダファイルから拡張された情報のための指示情報を備え、拡張された情報を保持すべきかどうかを指定する。それに続いて、修正された前処理ファイルが、全体的処理ステージ２４ａの次の実行において読み込まれ、ヘッダファイルからの指示された情報だけが、メモリ１１に保持される。別の例として、ヘッダファイルの選択された前処理ファイルに関する識別情報が、２つの実行間の全体的処理ステージ２４ａにおいて保持されてもよく、それによって、第２の実行において、識別された前処理ファイルからのヘッダファイルからの情報だけが、メモリ１１に保持される。
【００５５】
さらに、読み込む順序を選択するのに使用されるデータ構造は、並べ替えと異なるその他の目的に使用されてもよいことが分かる。実際には、関連するデータ構造は、全体的処理ステージ２４ａによる処理の副産物であってもよい。
【００５６】
Ｃ＋＋ソースファイルおよびＣ＋＋ヘッダファイルによって本発明を説明したが、ソースファイルのような複数のオリジナルファイルが、前処理され、それによって、ヘッダファイルのような共通ファイルからの情報が、前処理ファイル内に拡張されるのであれば、また、オリジナルファイルおよび共通ファイルのいくつかのバージョンが、前処理ファイルから生成されるのであれば、どのような処理にでも本発明が適用されてよいことが分かる。
【００５７】
図５は、情報の流れを示し、すべてのファイルが、再利用のために生成されるとは限らない。例として、ソースファイル２０ｃの１つは、生成ファイル２５ｃ（図示しない）の代わりに使用されるように示され、ヘッダファイル２１の１つは、生成ヘッダファイル２６ｃ（図示しない）の代わりに使用されるように示される。ヘッダファイルの選択は、全体的処理ステージ２４ａに供給される命令に基づいてなされてもよい。命令は、例えば、ある種のクラスを識別してもよく、そのクラスの使用は、前処理ファイル２３ａ〜２３ｃにおけるクラスから修正されなければならない。この場合、全体的処理ステージ２４ａは、ソフトウェアコンポーネントのどちらが修正によって影響を受けるかを決定するためにｒｅｆｅｒｓ＿ｔｏ関係を使用し（それ自身が修正され、あるいは、影響を受けたコンポーネントを直接的または間接的に参照する）、そして、影響を受けたファイルのために、ソースファイル２５ａ、２５ｂ、および、ヘッダファイル２６ａ、２６ｂだけを生成するように分離器ステージ２４ｂに命令する。ヘッダファイルの新しいバージョンが生成されない場合、ｉｎｃｌｕｄｅ文は、影響を受けていないヘッダファイル（のコピー）を参照して生成される。
【００５８】
上述したように、本発明は、基本的には、複数の前処理ファイルに対して統合的な修正を自動的に行う全体的処理ステージ２４ａと組み合わせると有益であるが、本発明は、全体的処理ステージが人手による前処理ファイルの編集を可能にする場合に適用されてもよいことを理解すべきである。
【図面の簡単な説明】
【００５９】
【図１】プログラムファイルを処理するためのシステムを示す図である。
【図２】情報処理構造を示す図である。
【図３】ファイル間の参照関係を示す図である。
【図４】データ構造を表現する図である。
【図５】情報処理構造を示す図である。
【符号の説明】
【００６０】
１０  記憶装置
１１  プロセッサメモリ
１２  プロセッサ
１４  装置
１６  ターゲットコンピュータ
１７  ターゲットプログラムメモリ
１８  ターゲットプロセッサ
２０ａ〜２０ｃ  オリジナルソースファイル
２１  オリジナルヘッダファイル
２２  プリプロセッサ
２３ａ〜２３ｃ  前処理ファイル
２４ａ  全体的処理ステージ
２４ｂ  分離器ステージ
２５ａ〜２５ｃ  生成ソースファイル
２６ａ〜２６ｃ  生成ヘッダファイル
２７ａ〜２７ｃ  前処理ファイル
２８  コンパイラ
２９ａ〜２９ｃ  オブジェクトファイル
２００  リンカー
２１０  実行可能プログラム
【図１】
2006523887.tif 000008
【図３】
2006523887.tif 000009
【図４】
2006523887.tif 000010
【図２】
2006523887.tif 000011
【図５】
2006523887.tif 000012
【国際調査報告】
2006523887.tif 000013
2006523887.tif 000014
2006523887.tif 000015