(57)【要約】【課題】従来、各プロセッサ毎にコンパイラを修正し、コンパイラによってＰＩＣ対応したコードを生成していた。そのため、コンパイラが対応していないと動的リンク可能なコードを生成できず、コンパイラの対応はプロセッサ毎に必要であるため、大きな労力を要し、その仕組みも複雑で家庭用の電気機器等には不向きであった。【解決手段】モジュール内のグローバル変数を構造体に閉じ込め、レジスター相対オフセットアクセスを行う。差分検出法により即値相対アドレスをシンボル名に変換し、リンカはこれを判断して不使用変数のリンクを行わない。これによって動的リンクに対応していないコンパイラでもコンパイラの修正を行うことなく、動的リンクに対応したコードを生成することができる。この方式は移植性が高く、多くのコンパイラに容易に適用でき、コンパイラのメンテナンス労力も削減できる。【選択図】図２
2005196436.tif 000002
【特許請求の範囲】
【請求項１】
変数をシンボルで宣言するステップと前記シンボルで宣言された変数に対してアクセスするステップとを含むコンピュータプログラムを処理するステップを有するコンピュータプログラムであって、
前記シンボルで宣言された変数に相対アドレスを設定する第１のステップと、
前記シンボルで宣言された変数に対してアクセスするステップを前記第１のステップで設定された相対アドレスによって前記シンボルで宣言された変数にアクセスするステップに変換する第２のステップと、
前記シンボルで宣言された変数の前にシンボルで宣言された別の変数を追加する第３のステップと、
前記追加された変数を含めて前記シンボルで宣言された変数に相対アドレスを設定する第４のステップと、
前記シンボルで宣言された変数に対してアクセスするステップを前記第４のステップで設定された相対アドレスによって前記シンボルで宣言された変数にアクセスするステップに変換する第５のステップと、
前記第２のステップと前記第５のステップとで変換されたアクセスするステップの相対アドレスが異なる前記アクセスするステップを検出する第６のステップと、
前記第６のステップで検出した相対アドレスが異なるアクセスするステップを前記アクセスする対象である変数を宣言しているシンボルによってアクセスするステップに変換する第７のステップと、
を有する、
プログラム処理プログラム。
【請求項２】
変数をシンボルで宣言するステップと前記シンボルで宣言された変数に対してアクセスするステップとを含むコンピュータプログラムを処理するステップを有するコンピュータプログラムであって、
前記シンボルで宣言された変数の前にシンボルで宣言された別の変数を追加する第１のステップと、
前記追加された変数を含めずに前記シンボルで宣言された変数に対してアクセスするステップが前記宣言された変数の相対アドレスでアクセスするステップに変換された時の第１の相対値と前記追加された変数を含めて前記シンボルで宣言された変数に対してアクセスするステップが前記宣言された変数の相対アドレスでアクセスするステップに変換された時の第２の相対値との比較を行う第２のステップと、
前記比較された第１の相対値と第２の相対値とが異なる前記シンボルで宣言された変数にアクセスするステップを前記シンボルで宣言された変数に対してシンボルでアクセスするステップに変換する第３のステップと、
を有する、
プログラム処理プログラム。
【請求項３】
前記相対アドレスによって前記シンボルで宣言された変数にアクセスするステップは、相対アドレスと間接アドレス指定とによって前記シンボルで宣言された変数にアクセスするステップである、
請求項１に記載のプログラム処理プログラム。
【請求項４】
前記シンボルで宣言された変数に対してシンボルでアクセスするステップは、相対アドレスと間接アドレス指定とによって前記シンボルで宣言された変数に対してアクセスするステップである、
請求項２に記載のプログラム処理プログラム。
【請求項５】
前記間接アドレス指定のためのアドレス変数領域を設定するステップを有する、
請求項３又は請求項４に記載のプログラム処理プログラム。
【請求項６】
前記変数をシンボルで宣言するステップと前記シンボルで宣言された変数に対して処理を行うステップとを含むプログラムは、
Ｃ言語、またはＣ＋＋言語、またはＪＡＶＡ（登録商標）言語、またはＦＯＲＴＲＡＮ言語、またはＣＯＢＯＬ言語、またはＢＡＳＩＣ言語、またはＡＰＬ言語、またはＰＬ／１言語、またはＬＩＳＰ言語、またはＰｒｏｌｏｇ言語、またはこれら以外のコンパイラ言語、またはこれら以外のインタープリタ言語、またはアセンブラ言語、のいずれか１つまたは複数で記述されたプログラムである請求項１から請求項５の何れか１項に記載のプログラム処理プログラム。
【請求項７】
前記アクセスする対象である変数を宣言しているシンボルによってアクセスするステップは、
コンパイラ言語、またはインタープリタ言語、またはアセンブラ言語、または機械語、または中間言語、のいずれか１つまたは複数で記述されたステップである請求項１から請求項６の何れか１項に記載のプログラム処理プログラム。
【請求項８】
コンピュータ読み取り可能な記録媒体であって、
請求項１から請求項７の何れか１項に記載のプログラム処理プログラムを記録した記録媒体。
【請求項９】
変数をシンボルで宣言するステップと前記シンボルで宣言された変数に対してアクセスするステップとを含むコンピュータプログラムを処理するプログラム処理装置であって、
前記シンボルで宣言された変数に相対アドレスを設定する第１の手段と、
前記シンボルで宣言された変数に対してアクセスするステップを前記第１のステップで設定された相対アドレスによって前記シンボルで宣言された変数にアクセスするステップに変換する第２の手段と、
前記シンボルで宣言された変数の前にシンボルで宣言された別の変数を追加する第３の手段と、
前記追加された変数を含めて前記シンボルで宣言された変数に相対アドレスを設定する第４の手段と、
前記シンボルで宣言された変数に対してアクセスするステップを前記第４のステップで設定された相対アドレスによって前記シンボルで宣言された変数にアクセスするステップに変換する第５の手段と、
前記第２のステップと前記第５のステップとで変換されたアクセスするステップの相対アドレスが異なる前記アクセスするステップを検出する第６の手段と、
前記第６のステップで検出した相対アドレスが異なるアクセスするステップを前記アクセスする対象である変数を宣言しているシンボルによってアクセスするステップに変換する第７の手段と、
を有する、
プログラム処理装置。
【請求項１０】
変数をシンボルで宣言するステップと前記シンボルで宣言された変数に対してアクセスするステップとを含むコンピュータプログラムを処理するプログラム処理方法であって、
前記シンボルで宣言された変数に相対アドレスを設定する第１の工程と、
前記シンボルで宣言された変数に対してアクセスするステップを前記第１のステップで設定された相対アドレスによって前記シンボルで宣言された変数にアクセスするステップに変換する第２の工程と、
前記シンボルで宣言された変数の前にシンボルで宣言された別の変数を追加する第３の工程と、
前記追加された変数を含めて前記シンボルで宣言された変数に相対アドレスを設定する第４の工程と、
前記シンボルで宣言された変数に対してアクセスするステップを前記第４のステップで設定された相対アドレスによって前記シンボルで宣言された変数にアクセスするステップに変換する第５の工程と、
前記第２のステップと前記第５のステップとで変換されたアクセスするステップの相対アドレスが異なる前記アクセスするステップを検出する第６の工程と、
前記第６のステップで検出した相対アドレスが異なるアクセスするステップを前記アクセスする対象である変数を宣言しているシンボルによってアクセスするステップに変換する第７の工程と、
を有する、
プログラム処理方法。
【発明の詳細な説明】
【技術分野】
【０００１】
コンピュータに何らかの作用を行わせるためにはコンピュータプログラムを必要とする。このコンピュータプログラムは種々の言語で記述される。これらの言語にはコンピュータに行わせるその作用内容を人間が理解しやすいような言語や、その作用内容をコンピュータが実行する時に負荷が軽いような言語がある。
【０００２】
コンピュータが行う作用内容を人間が確認したり、コンピュータに行わせる作用内容を記述するには、その作用内容を人間が理解しやすい言語が必要になるし、その作用内容をコンピュータに実行させる時には、その作用内容をコンピュータが実行する時に、コンピュータにとって負荷が軽い言語で記述されていることが望ましいからである。
【０００３】
そして人間が確認したコンピュータに行わせる作用内容はそのままコンピュータに実行させなければならないので、人間が理解しやすい言語で記述された内容をそのまま変えることなくコンピュータにとって負荷が軽い言語での記述に変更処理することが必要になる。
【０００４】
更にこの時、人間が理解しやすい言語で記述された内容をそのまま全く変えることなくコンピュータにとって負荷が軽い言語での記述に変更処理するだけでなく、少しでもコンピュータが実行する時の効率が改善されるような記述に変更処理することが要求される。
【０００５】
ここでのコンピュータが実行する時の効率の改善とは例えば、コンピュータが実行するスピードが早くなることや、コンピュータが実行するのに必要となるメモリサイズが小さくなることや、その他を言う。
【０００６】
そしてこのような、人間が理解しやすい言語で記述された内容をそのまま変えることなくコンピュータにとって負荷が軽い言語での記述に変更処理は、プログラム処理プログラムによってコンピュータで実行される。
【０００７】
本発明は、このようなプログラム処理プログラム及びプログラム処理プログラムを記録した記録媒体及びプログラム処理装置及びプログラム処理方法に関するものである。
【０００８】
更に近年、１つのコンピュータのメモリーに複数のプログラムをロードし、これらのプログラムを順次或いは並列に実行させることが行われる。これらの複数のプログラムはＯＳ等の管理プログラムであることも、アプリケーション・プログラムであることも、その他の各種プログラムであることも、これらの任意の組み合わせであることもある。
【０００９】
これらのプログラムはユーザーのニーズに応じて、自由な組み合わせでメモリー上にロードして実行できることが望まれ、これが可能であるための条件の１つとして、各プログラムモジュールは、メモリー上のどのアドレスにロードされても実行できなければならない。
【００１０】
これを動的プログラムモジュール配置、或いはこのように複数のプログラムモジュールを任意の組み合わせでメモリー上の自由なアドレスで実行可能な１つのプログラムとしてまとめることを、動的プログラムモジュールリンク、或いは、動的プログラムリンク、或いは、動的モジュールリンク等と呼ぶ。
【００１１】
そしてこのような動的モジュールリンクが可能であるためには、上記プログラム処理プログラムが、人間が理解しやすい言語で記述された内容をコンピュータにとって負荷が軽い言語での記述に変更処理する時、この動的モジュールリンクが可能であるような処理を行うことが必要になる。
【００１２】
本発明は、このような動的モジュールリンクが可能であるコンピュータにとって負荷が軽い言語で記述されたプログラムに変更処理するプログラム処理プログラム及びプログラム処理プログラムを記録した記録媒体及びプログラム処理装置及びプログラム処理方法に関するものである。
【背景技術】
【００１３】
従来の、動的モジュールリンクが可能であるコンピュータにとって負荷が軽い言語で記述されたプログラムに変更処理するプログラム処理プログラム及びプログラム処理プログラムを記録した記録媒体及びプログラム処理装置及びプログラム処理方法には、例えば下記特許文献１に記載された「動的リンク・ライブラリをプログラムにリンクする方法」があった。
【００１４】
この従来の方法は、コンパイラ、プレリンカ及び実行時ライブラリの使用により、アプリケーション実行時に別のプログラムを動的にロードするためにプログラムを部分的にリンクし、システム・リンカまたはローダのサポートを要求せずに、部分的にリンクされたプログラム内のアドレスを解決する方法を提供することを主たる目的とするものであった。
【００１５】
そしてこれは、アプリケーション・プログラムのソース・コードの変更無しに達成されうるものであった。
【００１６】
この従来の方法は、上記目的を達成するため、動的にリンクされるライブラリをデータ処理システム上で実行されるプログラムにリンクする方法を提案するものであり、データ処理システムがコンパイラ、プレリンカ、実行時ライブラリ、システム・リンカ及びシステム・ローダを有していた。
【００１７】
そしてこの従来の方法は、次のステップを含んでいる。
【００１８】
第１には、各動的リンク・ライブラリに対応して、プレリンカにより、ライブラリ内で使用可能な外部記号のセットに関する情報を含む定義ファイルを生成するステップであって、前記プレリンカが前記定義ファイルを前記動的リンク・ライブラリ内の任意の変更を反映して最新に維持する前記生成ステップである。
【００１９】
第２には、前記コンパイラにより、アプリケーション・プログラム・コードをコンパイルするステップであって、前記コンパイル・コードがトリガ・ルーチンを呼び出すコードを含む前記コンパイル・ステップである。
【００２０】
第３には、前記アプリケーション・プログラム・コードを前記定義ファイルにプレリンクするステップであって、エクスポート定義セクションを含み、前記システム・リンカによりリンクされるオブジェクト・デックを生成する前記プレリンク・ステップである。
【００２１】
第４には、前記システム・リンカにより前記アプリケーション・プログラム・コードをリンクするステップである。
【００２２】
第５には、前記コードを実行し、前記トリガ・ルーチンにより前記コード内の未解決記号の参照を解決するステップであって、前記トリガ・ルーチンが前記プレリンカにより生成された前記エクスポート定義セクションをアクセスすることにより、前記実行時ライブラリが前記未解決記号を含む前記動的リンク・ライブラリをアクセスし、前記動的リンク・ライブラリをロードし、前記記号参照を解決することを可能にし、前記システム・リンカまたはローダの支援を必要とせずに前記アプリケーション・プログラムに前記記号を提供する、前記実行及び解決ステップである。
【特許文献１】特開平８−３３９２９６号公報
【発明の開示】
【発明が解決しようとする課題】
【００２３】
前記従来の動的モジュールリンクが可能であるコンピュータにとって負荷が軽い言語で記述されたプログラムに変更処理するプログラム処理プログラム及びプログラム処理プログラムを記録した記録媒体及びプログラム処理装置及びプログラム処理方法では、動的モジュールを実行時にリンクするため、各プロセッサ毎にコンパイラを修正し、コンパイラにより実行時リンクが可能な位置独立コードを生成していた。
【００２４】
しかしながらこの従来の方法では、コンパイラが対応していない限り、動的モジュールリンクに対応した位置独立コードを生成することができなかった。
【００２５】
従って、動的モジュールリンク可能な位置独立コードを生成するにはコンパイラ自身の書き換えが必要となり、しかもコンパイラは各プロセッサ毎に存在するので、全体では膨大な量の修正が必要となった。
【００２６】
更に、新しいプロセッサが開発されたり、プロセッサのバージョンアップが行われる毎に、コンパイラの修正を行うことが必要となり、多くの労力を必要とする上に、誤りが発生する確率もそれに伴って上昇することは避けられなかった。
【００２７】
本発明はこれらの課題を解決し、コンパイラやリンカを変更することなく、動的モジュールリンクに対応したデータ領域に付いての位置独立コードを生成することが可能であり、更にこの動的モジュールリンクに対応した位置独立コードをリンクすることによって実行コードを生成することができる、プログラム処理プログラム及びプログラム処理プログラムを記録した記録媒体及びプログラム処理装置及びプログラム処理方法に関するものである。
【課題を解決するための手段】
【００２８】
上記課題を解決するため、本特許出願に係る発明は次のような手段を採る。
【００２９】
本特許出願に係る請求項１に記載の発明は、変数をシンボルで宣言するステップと前記シンボルで宣言された変数に対してアクセスするステップとを含むコンピュータプログラムを処理するステップを有するコンピュータプログラムであって、前記シンボルで宣言された変数に相対アドレスを設定する第１のステップと、前記シンボルで宣言された変数に対してアクセスするステップを前記第１のステップで設定された相対アドレスによって前記シンボルで宣言された変数にアクセスするステップに変換する第２のステップと、前記シンボルで宣言された変数の前にシンボルで宣言された別の変数を追加する第３のステップと、前記追加された変数を含めて前記シンボルで宣言された変数に相対アドレスを設定する第４のステップと、前記シンボルで宣言された変数に対してアクセスするステップを前記第４のステップで設定された相対アドレスによって前記シンボルで宣言された変数にアクセスするステップに変換する第５のステップと、前記第２のステップと前記第５のステップとで変換されたアクセスするステップの相対アドレスが異なる前記アクセスするステップを検出する第６のステップと、前記第６のステップで検出した相対アドレスが異なるアクセスするステップを前記アクセスする対象である変数を宣言しているシンボルによってアクセスするステップに変換する第７のステップと、を有する、プログラム処理プログラムである。
【００３０】
本特許出願に係る請求項２に記載の発明は、変数をシンボルで宣言するステップと前記シンボルで宣言された変数に対してアクセスするステップとを含むコンピュータプログラムを処理するステップを有するコンピュータプログラムであって、前記シンボルで宣言された変数の前にシンボルで宣言された別の変数を追加する第１のステップと、前記追加された変数を含めずに前記シンボルで宣言された変数に対してアクセスするステップが前記宣言された変数の相対アドレスでアクセスするステップに変換された時の第１の相対値と前記追加された変数を含めて前記シンボルで宣言された変数に対してアクセスするステップが前記宣言された変数の相対アドレスでアクセスするステップに変換された時の第２の相対値との比較を行う第２のステップと、前記比較された第１の相対値と第２の相対値とが異なる前記シンボルで宣言された変数にアクセスするステップを前記シンボルで宣言された変数に対してシンボルでアクセスするステップに変換する第３のステップと、を有する、プログラム処理プログラムである。
【００３１】
本特許出願に係る請求項３に記載の発明は、前記シンボルで宣言された変数に対してアクセスするステップは、前記シンボルで宣言された変数に対して間接アドレス指定によってアクセスするステップであり、前記相対アドレスによって前記シンボルで宣言された変数にアクセスするステップは、相対アドレスと間接アドレス指定とによって前記シンボルで宣言された変数にアクセスするステップである、請求項１に記載のプログラム処理プログラムである。
【００３２】
本特許出願に係る請求項４に記載の発明は、前記シンボルで宣言された変数に対してシンボルでアクセスするステップは、相対アドレスと間接アドレス指定とによって前記シンボルで宣言された変数に対してアクセスするステップである、請求項２に記載のプログラム処理プログラムである。
【００３３】
本特許出願に係る請求項５に記載の発明は、前記間接アドレス指定のためのアドレス変数領域を設定するステップを有する、請求項３又は請求項４に記載のプログラム処理プログラムである。
【００３４】
本特許出願に係る請求項６に記載の発明は、前記変数をシンボルで宣言するステップと前記シンボルで宣言された変数に対して処理を行うステップとを含むプログラムは、Ｃ言語、またはＣ＋＋言語、またはＪＡＶＡ（登録商標）言語、またはＦＯＲＴＲＡＮ言語、またはＣＯＢＯＬ言語、またはＢＡＳＩＣ言語、またはＡＰＬ言語、またはＰＬ／１言語、またはＬＩＳＰ言語、またはＰｒｏｌｏｇ言語、またはこれら以外のコンパイラ言語、またはこれら以外のインタープリタ言語、またはアセンブラ言語、のいずれか１つまたは複数で記述されたプログラムである請求項１から請求項５の何れか１項に記載のプログラム処理プログラムである。
【００３５】
本特許出願に係る請求項７に記載の発明は、前記アクセスする対象である変数を宣言しているシンボルによってアクセスするステップは、コンパイラ言語、またはインタープリタ言語、またはアセンブラ言語、または機械語、または中間言語、のいずれか１つまたは複数で記述されたステップである請求項１から請求項６の何れか１項に記載のプログラム処理プログラムである。
【００３６】
本特許出願に係る請求項８に記載の発明は、コンピュータ読み取り可能な記録媒体であって、請求項１から請求項７の何れか１項に記載のプログラム処理プログラムを記録した記録媒体である。
【００３７】
本特許出願に係る請求項９に記載の発明は、変数をシンボルで宣言するステップと前記シンボルで宣言された変数に対してアクセスするステップとを含むコンピュータプログラムを処理するプログラム処理装置であって、前記シンボルで宣言された変数に相対アドレスを設定する第１の手段と、前記シンボルで宣言された変数に対してアクセスするステップを前記第１のステップで設定された相対アドレスによって前記シンボルで宣言された変数にアクセスするステップに変換する第２の手段と、前記シンボルで宣言された変数の前にシンボルで宣言された別の変数を追加する第３の手段と、前記追加された変数を含めて前記シンボルで宣言された変数に相対アドレスを設定する第４の手段と、前記シンボルで宣言された変数に対してアクセスするステップを前記第４のステップで設定された相対アドレスによって前記シンボルで宣言された変数にアクセスするステップに変換する第５の手段と、前記第２のステップと前記第５のステップとで変換されたアクセスするステップの相対アドレスが異なる前記アクセスするステップを検出する第６の手段と、前記第６のステップで検出した相対アドレスが異なるアクセスするステップを前記アクセスする対象である変数を宣言しているシンボルによってアクセスするステップに変換する第７の手段と、を有する、プログラム処理装置である。
【００３８】
本特許出願に係る請求項１０に記載の発明は、変数をシンボルで宣言するステップと前記シンボルで宣言された変数に対してアクセスするステップとを含むコンピュータプログラムを処理するプログラム処理方法であって、前記シンボルで宣言された変数に相対アドレスを設定する第１の工程と、前記シンボルで宣言された変数に対してアクセスするステップを前記第１のステップで設定された相対アドレスによって前記シンボルで宣言された変数にアクセスするステップに変換する第２の工程と、前記シンボルで宣言された変数の前にシンボルで宣言された別の変数を追加する第３の工程と、前記追加された変数を含めて前記シンボルで宣言された変数に相対アドレスを設定する第４の工程と、前記シンボルで宣言された変数に対してアクセスするステップを前記第４のステップで設定された相対アドレスによって前記シンボルで宣言された変数にアクセスするステップに変換する第５の工程と、前記第２のステップと前記第５のステップとで変換されたアクセスするステップの相対アドレスが異なる前記アクセスするステップを検出する第６の工程と、前記第６のステップで検出した相対アドレスが異なるアクセスするステップを前記アクセスする対象である変数を宣言しているシンボルによってアクセスするステップに変換する第７の工程と、を有する、プログラム処理方法である。
【発明の効果】
【００３９】
本発明の、プログラム処理プログラム及びプログラム処理プログラムを記録した記録媒体及びプログラム処理装置及びプログラム処理方法によると、コンパイラやリンカを変更することなく、動的モジュールリンクに対応したデータ領域に付いての位置独立コードを生成することが可能であり、更にこの動的モジュールリンクに対応した位置独立コードをリンクすることによって実行コードを生成することができ、その実用的価値は極めて大きい。
【発明を実施するための最良の形態】
【００４０】
以下に本発明の実施の形態について、図面を参照しながら説明する。
【００４１】
（実施の形態１）
図１は、本発明に係るプログラム処理プログラムの１実施の形態であるプリコンパイラ（１３１）とコンパイラ（１３３）とポストコンパイラ（１３５）に対して入力され、これらが処理する対象であるプログラムと、これらが処理した結果であって、これらが出力するプログラムの構成を示す図である。
【００４２】
本発明に係るプログラム処理プログラムのこの実施の形態は、プリコンパイラ（１３１）とコンパイラ（１３３）とポストコンパイラ（１３５）とシンボル情報生成部（１４２）とから構成される。
【００４３】
本発明に係るプログラム処理プログラムのこの実施の形態が処理する対象プログラムは、Ｃ言語ソースプログラム−１（１２１）である。
【００４４】
図１に示すように、この実施の形態のプリコンパイラ（１３１）はＣ言語ソースプログラム−１（１２１）を入力とし、この入力したＣ言語ソースプログラム−１（１２１）を処理し、その処理をした結果として、Ｃ言語ソースプログラム−２（１２２）とＣ言語ソースプログラム−３（１２３）とを出力する。
【００４５】
プリコンパイラ（１３１）が出力したＣ言語ソースプログラム−２（１２２）はコンパイラ（１３３）に入力され、コンパイラ（１３３）によって処理の対象とされる。
【００４６】
同様に、プリコンパイラ（１３１）が出力したＣ言語ソースプログラム−３（１２３）もコンパイラ（１３３）に入力され、コンパイラ（１３３）によって処理の対象とされる。
【００４７】
コンパイラ（１３３）は図１では２つ示しているが、同じ番号を付していることから解る通り、同一のものである。
【００４８】
コンパイラ（１３３）は入力されたＣ言語ソースプログラム−２（１２２）を処理して、アセンブラ言語プログラム−１（１２４）を作成して出力し、入力されたＣ言語ソースプログラム−３（１２３）を処理して、アセンブラ言語プログラム−２（１２５）を作成して出力する。
【００４９】
一方、シンボル情報生成部（１４２）もＣ言語ソースプログラム−１（１２１）を入力とし、この入力したＣ言語ソースプログラム−１（１２１）を処理し、その処理をした結果として、シンボル情報ファイル（１４４）を出力する。
【００５０】
コンパイラ（１３３）が出力したアセンブラ言語プログラム−１（１２４）とアセンブラ言語プログラム−２（１２５）と、シンボル情報生成部（１４２）が出力したシンボル情報ファイル（１４４）とは、ポストコンパイラ（１３５）に対して入力され、処理される。
【００５１】
ポストコンパイラ（１３５）は入力されたアセンブラ言語プログラム−１（１２４）とアセンブラ言語プログラム−２（１２５）とシンボル情報ファイル（１４４）とを処理して、アセンブラ言語プログラム−３（１２６）を作成して出力する。
【００５２】
ポストコンパイラ（１３５）によって作成され出力されたアセンブラ言語プログラム−３（１２６）は、アセンブラ（１３７）に入力され、アセンブラ（１３７）によって翻訳され、翻訳された結果オブジェクトプログラム（１２７）が生成され、これが出力される。
【００５３】
このオブジェクトプログラム（１２７）はリンカ（１３８）に入力され処理される。
【００５４】
リンカ（１３８）は、アセンブラ（１３７）が出力したオブジェクトプログラム（１２７）とその他のオブジェクトプログラム（１２８）とを入力し、これらを処理して、実行プログラム（１２９）を作成し出力する。
【００５５】
尚、オブジェクトプログラム（１２７）とその他のオブジェクトプログラム（１２８）とは、それぞれ１つのオブジェクトプログラムであっても良いし、それぞれ複数のプログラムであっても構わない。
【００５６】
リンカ（１３８）によって作成され出力された実行プログラム（１２９）は、各種のコンピュータの仕様が規定するフォーマットで作成され、それぞれのコンピュータがそのまま実行することのできるプログラムである。
【００５７】
図２は、本発明に係るプログラム処理プログラムのこの実施の形態であるプリコンパイラ（１３１）が処理する対象プログラムであるＣ言語ソースプログラム−１（１２１）の内容の一例と、このＣ言語ソースプログラム−１（１２１）がプリコンパイラ（１３１）に入力され、プリコンパイラ（１３１）によって処理され、プリコンパイラ（１３１）によって出力されるＣ言語ソースプログラム−２（１２２）とＣ言語ソースプログラム−３（１２３）と、Ｃ言語ソースプログラム−１（１２１）がシンボル情報生成部（１４２）に入力され、シンボル情報生成部（１４２）によって処理され、その処理をした結果として出力されるシンボル情報ファイル（１４４）とのそれぞれの内容の一例とを示す図である。
【００５８】
更に図２は、本発明に係るプログラム処理プログラムのこの実施の形態であるコンパイラ（１３３）が処理する対象プログラムであるＣ言語ソースプログラム−２（１２２）とＣ言語ソースプログラム−３（１２３）との内容の一例と、このＣ言語ソースプログラム−２（１２２）とＣ言語ソースプログラム−３（１２３）とがコンパイラ（１３３）に入力され、コンパイラ（１３３）によって処理され、コンパイラ（１３３）によって出力されるアセンブラ言語プログラム−１（１２４）とアセンブラ言語プログラム−２（１２５）とのそれぞれの内容の一例とをも示している。
【００５９】
又、図４には本発明に係るプログラム処理プログラムの実施の形態であるプリコンパイラ（１３１）とコンパイラ（１３３）とポストコンパイラ（１３５）とが行う主な処理だけを「Ｓ」で始まる番号を付し、その時系列に従って示している。
【００６０】
更に図５には本発明に係るプログラム処理プログラムの実施の形態であるプリコンパイラ（１３１）とコンパイラ（１３３）とポストコンパイラ（１３５）とシンボル情報生成部（１４２）とが実行されるコンピュータ環境の主な構成を示している。
【００６１】
これらプリコンパイラ（１３１）、コンパイラ（１３３）、ポストコンパイラ（１３５）、及びＣ言語ソースプログラム−１（１２１）、言語ソースプログラム−２（１２２）、言語ソースプログラム−３（１２３）、アセンブラ言語プログラム−１（１２４）、アセンブラ言語プログラム−２（１２５）、アセンブラ言語プログラム−３（１２６）、或いはアセンブラ（１３７）、リンカ（１３８）、シンボル情報生成部（１４２）、オブジェクトプログラム（１２７）、他のオブジェクトプログラム（１２８）、シンボル情報ファイル（１４４）、実行プログラム（１２９）のそれぞれや、それ以外の必要なプログラムやデータは補助記憶装置（５０３）に記憶され、必要に応じて主記憶装置（５０２）に読み出され、ＣＰＵ（５０１）によって実行や処理が行われる。ＣＰＵが行うこれらの実行や処理は、操作者が入力装置（５０４）を使用することによって選択され起動される。ＣＰＵが行ったこれらの実行や処理の結果は表示装置（５０５）に表示されることもあり、主記憶装置（５０２）に記憶されることもあり、必要に応じて補助記憶装置（５０３）に記憶され、必要に応じて通信装置（５０６）によって通信される。これらプログラムやデータのＣＰＵ（５０１）、主記憶装置（５０２）、補助記憶装置（５０３）、入力装置（５０４）、表示装置（５０５）、通信装置（５０６）、その他の機器や部材間の移動はバス（５０７）を経由して行われる。
【００６２】
このコンピュータ環境はその他の部材や機器を含むこともあるが、その詳細は省略する。
【００６３】
図２に示す例では、本発明に係るプログラム処理プログラムのこの実施の形態の処理対象となる最初のプログラムは、Ｃ言語で記述されたＣ言語ソースプログラム−１（１２１）である。
【００６４】
しかしながら、この実施の形態の処理対象となる最初のプログラムは必ずしもＣ言語で記述されていることが必要ではなく、他の言語、例えば、Ｃ＋＋言語、またはＪＡＶＡ（登録商標）言語、またはＦＯＲＴＲＡＮ言語、またはＣＯＢＯＬ言語、またはＢＡＳＩＣ言語、またはＡＰＬ言語、またはＰＬ／１言語、またはＬＩＳＰ言語、またはＰｒｏｌｏｇ言語、またはこれら以外のコンパイラ言語、またはこれら以外のインタープリタ言語、またはアセンブラ言語、のいずれか１つまたは複数の言語の組み合わせによって記述されたプログラムであっても構わない。
【００６５】
図２に示すように、このＣ言語ソースプログラム−１（１２１）は、このプログラムで使用するグローバル変数（外部変数）を宣言している部分と、これら宣言されたグローバル変数やその他のローカル変数（内部変数）を使って行う処理を記述している関数部分とに分けられる。
【００６６】
このＣ言語ソースプログラム−１（１２１）の例では、グローバル変数（外部変数）を宣言している部分は、「ｉｎｔ  ｖａｒ＿ａ；」と「ｉｎｔ  ｖａｒ＿ｂ；」とである。
【００６７】
これは２つのグローバル変数であるｖａｒ＿ａとｖａｒ＿ｂとを使用することを宣言し、且つこれらの２つのグローバル変数が共に整数データを扱うことを宣言している。
【００６８】
このＣ言語ソースプログラム−１（１２１）の例では、処理を記述している関数部分は、「ｖｏｉｄ  ｆｕｎｃ１（ｖｏｉｄ）｛  」から「  ｝  」までである。
【００６９】
この関数部分では、「ｆｕｎｃ１」という名前の関数について、その処理内容を記述しており、具体的には、この関数は返り値を有さず（ｖｏｉｄ）、引き数をも有さない（ｖｏｉｄ）ことが宣言される。
【００７０】
具体的な処理の内容としては、「ｖａｒ＿ｂ」という名前のグローバル変数に値「４０」を代入する処理だけが記述されている。
【００７１】
この例では簡単にこれだけの具体的な処理内容しか挙げていないが、実際にはより多くの種々の処理を含んでおり、それらは記号「：」によって省略して表現している。
【００７２】
図２に示すように、本発明に係るプログラム処理プログラムのこの実施の形態であるプリコンパイラ（１３１）は、このＣ言語ソースプログラム−１（１２１）を入力情報として読み込み（図４のＳ４０１）、処理を行い、Ｃ言語ソースプログラム−２（１２２）とＣ言語ソースプログラム−３（１２３）とを生成して出力する。
【００７３】
即ち、ここで言うプリコンパイラ（１３１）が行う処理とは、Ｃ言語ソースプログラム−１（１２１）から、Ｃ言語ソースプログラム−２（１２２）とＣ言語ソースプログラム−３（１２３）とを生成する処理である。
【００７４】
そのより具体的な処理内容を次に説明する。
【００７５】
Ｃ言語ソースプログラム−２（１２２）は、Ｃ言語ソースプログラム−１（１２１）において、外部変数として宣言されていたものを、グローバル構造体（外部構造体と呼ぶこともある）のメンバーとして宣言し直したものである。そしてこの変数にアクセスする処理の記述を外部変数へのアクセスから、グローバル構造体のメンバーにアクセスする処理の記述に変更したものである。
【００７６】
尚、ここでは外部変数として宣言されていた変数だけについて説明するが、ｓｔａｔｉｃ宣言された内部変数及び外部変数を含むものであっても構わない。
【００７７】
即ち、Ｃ言語ソースプログラム−２（１２２）ではまず、グローバル構造体として「＿ｇｌｏｂａｌｓ」という名前の構造体を宣言する。
【００７８】
尚、この構造体の名前は一例であってこれに限るものでは無く、他の名前と重複しない限り何であっても構わない。
【００７９】
次に、Ｃ言語ソースプログラム−１（１２１）において外部変数として宣言する記述である「ｉｎｔ  ｖａｒ＿ａ；」と「ｉｎｔ  ｖａｒ＿ｂ；」との記述を、前記宣言したグローバル構造体（＿ｇｌｏｂａｌｓ）のメンバーとしての宣言である、「ｉｎｔ  ｖａｒ＿ａ；」と「ｉｎｔ  ｖａｒ＿ｂ；」との記述に置き換えている。
【００８０】
次に、Ｃ言語ソースプログラム−２（１２２）ではその処理を記述している関数の最初に、前記宣言したグローバル構造体（＿ｇｌｏｂａｌｓ）の先頭アドレスをレジスター「ＤＰ」に保持することを記述している。
【００８１】
尚このグローバル構造体の先頭アドレスを「ＤＰ」レジスターに保持することも一例であって、その他のレジスターを使用してグローバル構造体の先頭アドレスを保持しても構わないし、メモリー上のスタック領域等を使用しても構わないし、その他のメモリー領域を使用して保持する方法であっても構わない。このグローバル構造体の先頭アドレスを保持する方法に応じて、以下に説明するこのグローバル構造体へのアクセス方法が変るだけである。
【００８２】
更に、Ｃ言語ソースプログラム−１（１２１）において外部変数であるｖａｒ＿ｂにアクセスして値「４０」を代入する記述である「ｖａｒ＿ｂ＝４０；」を、このグローバル構造体のメンバーであるｖａｒ＿ｂにアクセスして値「４０」を代入する処理に相当する「ｇｌｏｂａｌｓ＿ｐｔｒ−＞ｖａｒ＿ｂ＝４０；」との記述に書き換えている。
【００８３】
上記グローバル構造体の先頭アドレスを「ＤＰ」レジスターに保持する記述によって、ｇｌｏｂａｌｓ＿ｐｔｒの実体は、レジスター「ＤＰ」である。
【００８４】
Ｃ言語ソースプログラム−３（１２３）も、Ｃ言語ソースプログラム−２（１２２）とほとんど同じである。
【００８５】
異なるのは、前記宣言したグローバル構造体（＿ｇｌｏｂａｌｓ）のメンバーの宣言の最初に、「ｉｎｔ  ＿ｄｕｍｍｙ；」との記述が行われていることだけである（図４のＳ４０４）。
【００８６】
Ｃ言語ソースプログラム−１（１２１）において外部変数として宣言する記述である「ｉｎｔ  ｖａｒ＿ａ；」と「ｉｎｔ  ｖａｒ＿ｂ；」との記述を置き換える、前記宣言したグローバル構造体（＿ｇｌｏｂａｌｓ）のメンバーとしての宣言である、「ｉｎｔ  ｖａｒ＿ａ；」と「ｉｎｔ  ｖａｒ＿ｂ；」との記述は、この＿ｄｕｍｍｙの後に続けて記載される。
【００８７】
Ｃ言語ソースプログラム−３（１２３）は、この部分においてのみＣ言語ソースプログラム−２（１２２）と異なっており、他の部分は全く同じである。
【００８８】
図２に示すように、このようにして生成されたＣ言語ソースプログラム−２（１２２）とＣ言語ソースプログラム−３（１２３）とは、コンパイラ（１３３）によってコンパイルされ、それぞれアセンブラ言語プログラム−１（１２４）とアセンブラ言語プログラム−２（１２５）とが変換生成される。
【００８９】
この２つのアセンブラ言語プログラムは共に、グローバル構造体のメンバーであるｖａｒ＿ｂに値「４０」を代入する処理を記述している。
【００９０】
その具体的な内容は次の通りである。
【００９１】
アセンブラ言語プログラム−１（１２４）とアセンブラ言語プログラム−２（１２５）との両方において、第１の命令である「ｍｏｖ  ４０，Ｄ０」は、値「４０」をレジスターＤ０に格納することを表している。
【００９２】
第２の命令である「ｍｏｖ  Ｄ０，（４，ＤＰ）」と「ｍｏｖ  Ｄ０，（８，ＤＰ）」とは、レジスターＤ０に格納した値「４０」を変数ｖａｒ＿ｂに移動するための命令であり、レジスターＤＰの内容に相対アドレス（オフセットアドレスとも言う。以下同じ。）値である「４」又は「８」を加えた値を対象アドレスとして間接アクセスを行い、レジスターＤ０の内容を移動することを示している（図４のＳ４０３とＳ４０６）。
【００９３】
即ち、変数ｖａｒ＿ｂはグローバル構造体＿ｇｌｏｂａｌｓのメンバーであり、このグローバル構造体＿ｇｌｏｂａｌｓの先頭アドレスは関数ｆｕｎｃ１の最初の記述によって、レジスターＤＰに格納されている。
【００９４】
そして変数ｖａｒ＿ｂは、このグローバル構造体＿ｇｌｏｂａｌｓの、Ｃ言語ソースプログラム−２（１２２）では第２番目のメンバーであり、Ｃ言語ソースプログラム−３（１２３）では第３番目のメンバーであり、Ｃ言語ソースプログラム−２（１２２）ではその前に１つの整数型のメンバーｖａｒ＿ａが存在し、Ｃ言語ソースプログラム−３（１２３）ではその前に２つの整数型のメンバー＿ｄｕｍｍｙとｖａｒ＿ａが存在し、それぞれこれらはグローバル構造体内に４バイトと８バイトの領域を占めているので、アセンブラ言語プログラム−１（１２４）ではレジスターＤＰの内容にオフセットアドレス値として「４」を加えた値を対象アドレスとして間接アクセスを行い、アセンブラ言語プログラム−２（１２５）ではレジスターＤＰの内容にオフセットアドレス値として「８」を加えた値を対象アドレスとして間接アクセスを行う（図４のＳ４０２とＳ４０５）。
【００９５】
これによって、レジスターＤ０の内容である「４０」を、グローバル構造体のメンバーである変数ｖａｒ＿ｂに格納することができる。
【００９６】
一方、このＣ言語ソースプログラム−１（１２１）はシンボル情報生成部（１４２）にも入力され、シンボル情報生成部（１４２）によって処理され、シンボル情報ファイル（１４４）が作成され出力される。このシンボル情報ファイル（１４４）の内容は、図２に示すように、Ｃ言語ソースプログラム−１（１２１）によって宣言されている全ての外部変数の名称と、その外部変数のために使用される領域の相対アドレスとの対応を示す表である。
【００９７】
図１に示すように、コンパイラ１３３が生成出力した２つのアセンブラ言語プログラムであるアセンブラ言語プログラム−１（１２４）とアセンブラ言語プログラム−２（１２５）と、シンボル情報生成部（１４２）が生成出力したシンボル情報ファイル（１４４）とは、共にポストコンパイラ（１３５）に入力され、ポストコンパイラ（１３５）によって行われる処理の対象とされる。
【００９８】
そしてポストコンパイラ（１３５）によって処理された結果、アセンブラ言語プログラム−３（１２６）が生成され、出力される。
【００９９】
この様子と、ポストコンパイラ（１３５）に入力され、ポストコンパイラ（１３５）から出力されるプログラムの例を、図３に示す。
【０１００】
図３に示す通り、又上記の説明から解る通り、ポストコンパイラ（１３５）に入力されるのは、コンパイラ（１３３）が生成出力した２つのアセンブラ言語プログラムであるアセンブラ言語プログラム−１（１２４）とアセンブラ言語プログラム−２（１２５）と、シンボル情報生成部（１４２）が生成出力したシンボル情報ファイル（１４４）とである。
【０１０１】
従って、これら２つのアセンブラ言語プログラムとシンボル情報ファイル（１４４）とは、図２に示すものとその内容が同一である。
【０１０２】
ポストコンパイラ（１３５）はまず、これら２つのアセンブラ言語プログラムを入力し、その差分、即ち異なる部分を検出する（図４のＳ４０７）。
【０１０３】
図３に示す例では、アセンブラ言語プログラム−１（１２４）とアセンブラ言語プログラム−２（１２５）との、第２の命令である、「ｍｏｖ  Ｄ０，（４，ＤＰ）」と「ｍｏｖ  Ｄ０，（８，ＤＰ）」との、レジスターＤＰに対するオフセットアドレスだけが異なっている。
【０１０４】
次に、この差分を検出したポストコンパイラ（１３５）は、この異なる部分、即ちアセンブラ言語プログラム−１（１２４）の第２の命令である、「ｍｏｖ  Ｄ０，（４，ＤＰ）」のレジスターＤＰに対するオフセットアドレス「４」を、シンボル情報ファイル（１４４）で検索し、この「４」に対応する外部変数の名称「ｖａｒ＿ｂ」を検出する。
【０１０５】
そしてこの異なる部分であるアセンブラ言語プログラム−１（１２４）の第２の命令の「ｍｏｖ  Ｄ０，（４，ＤＰ）」のレジスターＤＰに対するオフセットアドレス「４」を、この外部変数の名称である「ｖａｒ＿ｂ」に置き換えた命令、即ち「ｍｏｖ  Ｄ０，（ｖａｒ＿ｂ，ＤＰ）」を生成出力する（図４のＳ４０８）。
【０１０６】
尚、２つのアセンブラ言語プログラムの同一部分は、そのまま出力する。
【０１０７】
このようにして、ポストコンパイラ１３５は、アセンブラ言語プログラム−３（１２６）を生成し、出力する。
【０１０８】
アセンブラ言語プログラム−３（１２６）はアセンブラ（１３７）に入力され、アセンブルが行われ、オブジェクトプログラム（１２７）が生成出力される。オブジェクトプログラム（１２７）では、命令、例えば上記例では「ｍｏｖ」は機械語の命令に変換され、オペランドは相対アドレスが計算され、保存され、後述するリンカによる領域割当の対象とされる。この処理を含め、これ以降の処理は従来行われているアセンブルやリンク処理と同様であるから、簡単にのみ説明する。
【０１０９】
オブジェクトプログラム（１２７）は他のオブジェクトプログラム（１２８）と共にリンカ（１３８）に入力され、リンクが行われて実行プログラム（１２９）が生成出力される。
【０１１０】
このリンク処理では、１つの作業を完結するために必要な命令が１つにまとめられ、この命令群が使用する領域も１つにまとめられて領域割当が行われ、割り当てられた領域が各命令のオペランド部に設定され、これが実行プログラム（１２９）となる。
【０１１１】
尚、この例では、プリコンパイラ（１３１）により外部変数（「ｖａｒ＿ａ」、「ｖａｒ＿ｂ」）を構造体のメンバーとして宣言し、相対アドレスのベースアドレスとして構造体の先頭アドレス「ｇｌｏｂａｌｓ＿ｐｔｒ」をレジスター「ＤＰ」に保持し、外部変数へのアクセス「ｖａｒ＿ｂ＝４０；」を構造体アクセス「ｇｌｏｂａｌｓ＿ｐｔｒ−＞ｖａｒ＿ｂ＝４０；」に書き換えることにより、ＤＰ相対アクセスを生成していたが、プリコンパイラ（１３１）により外部変数（「ｖａｒ＿ａ」、「ｖａｒ＿ｂ」）に対して一意な番号を付与し、外部変数の定義以外を番号に置き換えるよう＃ｄｅｆｉｎｅ命令（例えば「＃ｄｅｆｉｎｅ  ｖａｒ＿ａ  ０」、「＃ｄｅｆｉｎｅ  ｖａｒ＿ｂ  １」）を生成し、相対アドレスのベースアドレスとしてポインター変数「ｂａｓｅ＿ｐｔｒ」を用意し、そのアドレスをレジスター「ＤＰ」に保持し、外部変数へのアクセス「ｖａｒ＿ｂ＝４０；」を「＊（ｂａｓｅ＿ｐｔｒ＋ｖａｒ＿ｂ）＝４０；」に書き換えることによりＤＰ相対アクセスを生成するとしてもよい。
【０１１２】
また、プリコンパイラ（１３１）により外部変数に対して一意な番号を付与し、相対アドレスのベースアドレスとして配列を用意し、そのアドレスをレジスター「ＤＰ」に保持し、外部変数へのアクセスを、あらかじめ外部変数に対して付与した番号をインデクスとした配列アクセスに書き換えることによりＤＰ相対アクセスを生成するとしてもよい。
【０１１３】
この構成によれば、シンボル情報生成部（１４２）は、シンボル情報ファイル（１４４）を作成するためにコンパイラ（１３３）の情報を必要としないため、シンボル情報生成部（１４２）の作りをコンパイラに依存しないようにすることができる。
【０１１４】
（実施の形態２）
次に本発明に係るプログラム処理プログラムの実施の形態２を説明する。しかしこの実施の形態２は多くの点で上記実施の形態１と同様であるから、同じ部分については説明を省略し異なる点に関してのみ説明を行う。
【０１１５】
図１は、本発明に係るプログラム処理プログラムの実施の形態２であるプログラムと、このプログラムの処理対象と、これらが処理した結果であってこれらが出力するプログラムとの構成を示す図でもある。但し、この実施の形態２の説明では、プリコンパイラ（６３１）とコンパイラ（６３３）とポストコンパイラ（６３５）とのように、番号を変えることによって実施の形態１と区別する。
【０１１６】
従って、本発明に係るプログラム処理プログラムの実施の形態２は、プリコンパイラ（６３１）とコンパイラ（６３３）とポストコンパイラ（６３５）とシンボル情報生成部（６４２）とから構成される。
【０１１７】
本発明に係るプログラム処理プログラムの実施の形態２が処理する対象プログラムは、Ｃ言語ソースプログラム−１（６２１）である。
【０１１８】
実施の形態２のプリコンパイラ（６３１）はＣ言語ソースプログラム−１（６２１）を入力とし、この入力したＣ言語ソースプログラム−１（６２１）を処理し、その処理をした結果として、Ｃ言語ソースプログラム−２（６２２）とＣ言語ソースプログラム−３（６２３）と、Ｃ言語ソースプログラム（６５２）とを出力する。
【０１１９】
プリコンパイラ（６３１）が出力したＣ言語ソースプログラム−２（６２２）はコンパイラ（６３３）に入力され、コンパイラ（６３３）による処理の対象とされる。
【０１２０】
同様に、プリコンパイラ（６３１）が出力したＣ言語ソースプログラム−３（６２３）も、コンパイラ（６３３）に入力され、コンパイラ（６３３）による処理の対象とされる。
【０１２１】
同様に、プリコンパイラ（６３１）が出力したＣ言語ソースプログラム（６５２）も、コンパイラ（６３３）に入力され、コンパイラ（６３３）による処理の対象とされる。
【０１２２】
コンパイラ（６３３）は入力されたＣ言語ソースプログラム−２（６２２）を処理し、アセンブラ言語プログラム−１（６２４）を作成して出力し、入力されたＣ言語ソースプログラム−３（６２３）を処理し、アセンブラ言語プログラム−２（６２５）を作成して出力し、入力されたＣ言語ソースプログラム（６５２）を処理し、アセンブラ言語プログラム（６５４）を作成して出力する。
【０１２３】
一方、シンボル情報生成部（６４２）もＣ言語ソースプログラム−１（６２１）を入力とし、この入力したＣ言語ソースプログラム−１（６２１）を処理し、その処理をした結果として、シンボル情報ファイル（６４４）を出力する。
【０１２４】
コンパイラ（６３３）が出力したアセンブラ言語プログラム−１（６２４）とアセンブラ言語プログラム−２（６２５）と、シンボル情報生成部（６４２）が出力したシンボル情報ファイル（６４４）とは、ポストコンパイラ（６３５）に対して入力され、処理される。
【０１２５】
ポストコンパイラ（６３５）は入力されたアセンブラ言語プログラム−１（６２４）とアセンブラ言語プログラム−２（６２５）とシンボル情報ファイル（６４４）とを処理し、アセンブラ言語プログラム−３（６２６）を作成して出力する。
【０１２６】
ポストコンパイラ（６３５）によって作成され出力されたアセンブラ言語プログラム−３（６２６）は、アセンブラ（１３７）に入力され、アセンブラ（１３７）によって翻訳され、翻訳された結果オブジェクトプログラム（１２７）が生成され、これが出力される。
【０１２７】
このアセンブラ（１３７）が行う処理は、本発明の実施の形態１と同じである。
【０１２８】
オブジェクトプログラム（１２７）は他のオブジェクトプログラム（１２８）と共にリンカ（１３８）に入力され、リンクが行われて実行プログラム（１２９）が生成出力される。この時、アセンブラ言語プログラム（６５４）がシンボル変数である＿ｄｍｌ＿ｖａｒ＿ｅのアドレスを決定するために使用される。この処理が本発明の実施の形態１とは異なっている。
【０１２９】
以降の処理は実施の形態１と同様であるから説明を省略する。
【０１３０】
図６は、本発明に係るプログラム処理プログラムの、この実施の形態２であるプリコンパイラ（６３１）が処理する対象プログラムであるＣ言語ソースプログラム−１（６２１）の内容の一例と、このＣ言語ソースプログラム−１（６２１）がプリコンパイラ（６３１）に入力され、プリコンパイラ（６３１）によって処理され、プリコンパイラ（６３１）によって出力されるＣ言語ソースプログラム−２（６２２）とＣ言語ソースプログラム−３（６２３）とＣ言語ソースプログラム（６５２）と、Ｃ言語ソースプログラム−１（６２１）がシンボル情報生成部（６４２）に入力され、シンボル情報生成部（６４２）によって処理され、その処理をした結果として出力されるシンボル情報ファイル（６４４）との、それぞれの内容の一例を示す図である。
【０１３１】
更に図６は、本発明に係るプログラム処理プログラムのこの実施の形態２であるコンパイラ（６３３）が処理する対象プログラムであるＣ言語ソースプログラム−２（６２２）とＣ言語ソースプログラム−３（６２３）とＣ言語ソースプログラム（６５２）との内容の一例でもあり、このＣ言語ソースプログラム−２（６２２）とＣ言語ソースプログラム−３（６２３）とＣ言語ソースプログラム（６５２）とがコンパイラ（６３３）に入力され、コンパイラ（６３３）によって処理され、コンパイラ（６３３）によって出力されるアセンブラ言語プログラム−１（６２４）とアセンブラ言語プログラム−２（６２５）とアセンブラ言語プログラム（６５４）との、それぞれの内容の一例をも示す図である。
【０１３２】
図６に示す例では、本発明に係るプログラム処理プログラムのこの実施の形態２の処理対象となる最初のプログラムは、Ｃ言語で記述されたＣ言語ソースプログラム−１（６２１）である。
【０１３３】
図６に示すように、このＣ言語ソースプログラム−１（６２１）が、実施の形態１のＣ言語ソースプログラム（１２１）と異なるのは、他のＣ言語ソースプログラムにおいて外部変数として宣言されている変数に対する参照の宣言である「ｅｘｔｅｒｎ  ｉｎｔ  ｖａｒ＿ｅ」と、この参照される外部変数「ｖａｒ＿ｅ」に値「４０」を代入する文である「ｖａｒ＿ｅ＝４０」とを含むことである。
【０１３４】
但し、ここで他のＣ言語ソースプログラムというのは、Ｃ言語ソースプログラム−１（６２１）以外のプログラムを指すばかりでなく、例えばＣ言語ソースプログラムをグループ分けし、この、Ｃ言語ソースプログラム−１（６２１）が属するグループ以外のグループに属するＣ言語ソースプログラムを指すものであっても構わない。このようにグループ分けされた１つのグループに属するＣ言語ソースプログラム群をモジュールということもある。
【０１３５】
図６に示すように、本発明に係るプログラム処理プログラムの実施の形態２であるプリコンパイラ（６３１）は、このＣ言語ソースプログラム−１（６２１）を入力として読み込み（図４のＳ４０１）、処理を行い、Ｃ言語ソースプログラム−２（６２２）とＣ言語ソースプログラム−３（６２３）とＣ言語ソースプログラム（６５２）とを生成して出力する。
【０１３６】
Ｃ言語ソースプログラム−２（６２２）は、Ｃ言語ソースプログラム−１（６２１）において、外部変数として宣言されていた「ｖａｒ＿ｂ」を、グローバル構造体のメンバーとして宣言し直すと同時に、他のＣ言語ソースプログラムにおいて外部変数として宣言されている変数「ｖａｒ＿ｅ」に対してアクセスする記述が含まれている時、その外部変数へのポインター変数＿ｄｍｌ＿ｖａｒ＿ｅを新たに作成し、そのポインター変数を外部変数宣言すると共に、このグローバル構造体「＿ｇｌｏｂａｌｓ」のメンバーとして付加したものである。
【０１３７】
同時にプリコンパイラ（６３１）は、このポインター変数＿ｄｍｌ＿ｖａｒ＿ｅのための領域を確保するためのＣ言語プログラム（６５２）を生成し、出力する。
【０１３８】
そしてこの他のＣ言語ソースプログラムにおいて外部変数として宣言されている変数「ｖａｒ＿ｅ」に対してアクセスする記述を、グローバル構造体のメンバーであるその外部変数へのポインターを使った間接アクセスの記述「＊（＿ｇｌｏｂａｌｓ＿ｐｒｔ−＞＿ｄｍｌ＿ｖａｒ＿ｅ）＝４０」に変更したものである。
【０１３９】
次に、Ｃ言語ソースプログラム−２（６２２）では、その処理を記述している関数（ｆｕｎｃ１）の最初に、前記宣言したグローバル構造体（＿ｇｌｏｂａｌｓ）の先頭アドレスをレジスター「ＤＰ」に保持することを記述している。尚、このグローバル構造体の先頭アドレスを「ＤＰ」レジスターに保持することも一例であり、他のレジスターやメモリーであっても構わない。
【０１４０】
更に、Ｃ言語ソースプログラム−２（６２２）では、Ｃ言語ソースプログラム−１（６２１）において外部変数であるｖａｒ＿ｅにアクセスして値「４０」を代入する記述である「ｖａｒ＿ｅ＝４０；」を、このグローバル構造体のメンバーであるポインター変数＿ｄｍｌ＿ｖａｒ＿ｅを使用し、間接アクセスによって値「４０」を代入する処理である「＊（ｇｌｏｂａｌｓ＿ｐｔｒ−＞＿ｄｍｌ＿ｖａｒ＿ｅ）＝４０；」との記述に置き換えている。
【０１４１】
Ｃ言語ソースプログラム−３（６２３）も、Ｃ言語ソースプログラム−２（６２２）とほとんど同じである。
【０１４２】
異なるのは、前記宣言したグローバル構造体（＿ｇｌｏｂａｌｓ）のメンバー宣言の最初に、「ｉｎｔ  ＿ｄｕｍｍｙ；」との記述が追加されていることだけである（図４のＳ４０４）。
【０１４３】
Ｃ言語ソースプログラム−３（６２３）では、Ｃ言語ソースプログラム−２（６２１）においてグローバル構造体（＿ｇｌｏｂａｌｓ）のメンバーとして宣言されている「ｉｎｔ  ｖａｒ＿ｂ；」と「ｉｎｔ  ＊＿ｄｍｌ＿ｖａｒ＿ｅ；」との記述は、前記追加されたグローバル構造体（＿ｇｌｏｂａｌｓ）のメンバー宣言である「ｉｎｔ  ＿ｄｕｍｍｙ」の後に、続けて記述される。
【０１４４】
Ｃ言語ソースプログラム−３（６２３）は、この部分においてのみＣ言語ソースプログラム−２（６２２）と異なっており、他の部分は全く同じである。
【０１４５】
図６に示すように、このようにして生成されたＣ言語ソースプログラム−２（６２２）とＣ言語ソースプログラム−３（６２３）とは、コンパイラ（６３３）によってコンパイルされ、それぞれアセンブラ言語プログラム−１（６２４）とアセンブラ言語プログラム−２（６２５）とが変換生成される。
【０１４６】
Ｃ言語ソースプログラム（６５２）もコンパイラによってコンパイルされ、アセンブラ言語プログラム（６５４）が変換生成される。
【０１４７】
２つのアセンブラ言語プログラム、アセンブラ言語プログラム−１（６２４）とアセンブラ言語プログラム−２（６２５）とは共に、元のＣ言語ソースプログラム−１（６２１）で外部変数として宣言されている変数である「ｖａｒ＿ｅ」に対して、グローバル構造体のメンバーであるこの「＿ｄｍｌ＿ｖａｒ＿ｅ」を使用し、間接アクセスによって値「４０」を代入する処理を記述している。
【０１４８】
その具体的な内容は次の通りである。
【０１４９】
アセンブラ言語プログラム−１（６２４）とアセンブラ言語プログラム−２（６２５）との両方において、第１の命令である「ｍｏｖ  ４０，Ｄ０」は、値「４０」をレジスターＤ０に格納することを表している。
【０１５０】
第２の命令である「ｍｏｖ  （４，ＤＰ），Ａ０」と「ｍｏｖ  （８，ＤＰ），Ａ０」とは、レジスターＤＰの内容にそれぞれオフセットアドレスとして０又は４を加えたメモリーアドレス領域の内容を、レジスターＡ０に転送することを示している。
【０１５１】
レジスターＤＰの内容にそれぞれオフセットアドレスとして０又は４を加えたメモリーアドレス領域とは、前記Ｃ言語ソースプログラム−２（６２２）とＣ言語ソースプログラム−３（６２３）とから解る通り、ポインター変数＿ｄｍｌ＿ｖａｒ＿ｅの領域である。
【０１５２】
アセンブラ言語プログラム−１（６２４）とアセンブラ言語プログラム−２（６２５）との両方における、第３の命令である「ｍｏｖ  Ｄ０，（Ａ０）」は、レジスターＤ０の内容を、レジスターＡ０を使った間接アクセスによってメモリー領域に格納することを示している。
【０１５３】
一方、このＣ言語ソースプログラム−１（６２１）はシンボル情報生成部（６４２）にも入力され、シンボル情報生成部（６４２）によって処理され、シンボル情報ファイル（６４４）が作成され出力される。このシンボル情報ファイル（６４４）の内容は、図６に示すように、Ｃ言語ソースプログラム−１（６２１）によって宣言されている外部変数の名称と、その外部変数のために使用される領域の相対アドレス（先頭からのオフセットアドレス）との対応を示すと共に、Ｃ言語ソースプログラム−１（６２１）が他のＣ言語ソースプログラムにおいて外部変数として宣言されている変数に対してアクセスする記述を含んでいる時には、そのアクセスに使用するポインター変数と、そのポインター変数のために使用される領域の相対アドレス（先頭からのオフセットアドレス）との対応をも示す表である。
【０１５４】
図７に示すように、コンパイラ（６３３）が生成出力した２つのアセンブラ言語プログラムであるアセンブラ言語プログラム−１（６２４）とアセンブラ言語プログラム−２（６２５）と、シンボル情報生成部（６４２）が生成出力したシンボル情報ファイル（６４４）とは、共にポストコンパイラ（６３５）に入力され、ポストコンパイラ（６３５）によって行われる処理の対象とされる。
【０１５５】
そしてポストコンパイラ（６３５）によって処理された結果、アセンブラ言語プログラム−３（６２６）が生成され、出力される。
【０１５６】
この状態と、ポストコンパイラ（６３５）に入力されるプログラムと、ポストコンパイラ（６３５）から出力されるプログラムの例を、図７に示す。
【０１５７】
図７に示す通り、又上記の説明から解る通り、ポストコンパイラ（６３５）に入力されるのは、コンパイラ（６３３）が生成出力した２つのアセンブラ言語プログラムであるアセンブラ言語プログラム−１（６２４）とアセンブラ言語プログラム−２（６２５）と、シンボル情報生成部（６４２）が生成出力したシンボル情報ファイル（６４４）とである。
【０１５８】
従って、これら２つのアセンブラ言語プログラムとシンボル情報ファイル（６４４）とは、図６に示すものとその内容が同一である。
【０１５９】
ポストコンパイラ（６３５）はまず、これら２つのアセンブラ言語プログラムを入力し、その差分、即ち異なる部分を検出する（図４のＳ４０７）。
【０１６０】
図７に示す例では、アセンブラ言語プログラム−１（６２４）とアセンブラ言語プログラム−２（６２５）との、第２の命令である、「ｍｏｖ  （４，ＤＰ），Ａ０」と「ｍｏｖ  （８，ＤＰ），Ａ０」との、レジスターＤＰに対するオフセットアドレスだけが異なっている。
【０１６１】
次に、この差分を検出したポストコンパイラ（６３５）は、この異なる部分、即ちアセンブラ言語プログラム−１（６２４）の第２の命令である、「ｍｏｖ  （４，ＤＰ），Ａ０」のレジスターＤＰに対するオフセットアドレス「４」を、シンボル情報ファイル（６４４）で検索し、この「４」に対応する外部変数の名称「＿ｄｍｌ＿ｖａｒ＿ｅ」を検出する。
【０１６２】
そしてこの異なる部分であるアセンブラ言語プログラム−１（６２４）の第２の命令の「ｍｏｖ  （４，ＤＰ），Ａ０」のレジスターＤＰに対するオフセットアドレス「４」を、この外部変数の名称である「＿ｄｍｌ＿ｖａｒ＿ｅ」に置き換えた命令、即ち「ｍｏｖ  （＿ｄｍｌ＿ｖａｒ＿ｅ，ＤＰ），Ａ０」を生成出力する（図４のＳ４０８）。
【０１６３】
尚、２つのアセンブラ言語プログラムの同一部分は、そのまま出力する。
【０１６４】
このようにして、ポストコンパイラ６３５は、アセンブラ言語プログラム−３（６２６）を生成し、出力する。
【０１６５】
ポストコンパイラ（６３５）によって作成され出力されたアセンブラ言語プログラム−３（６２６）は、アセンブラ（１３７）に入力され、アセンブラ（１３７）によって翻訳され、翻訳された結果オブジェクトプログラム（１２７）が生成され、これが出力される。
【０１６６】
このアセンブラ（１３７）が行う処理は、本発明の実施の形態１と同じである。
【０１６７】
オブジェクトプログラム（１２７）は他のオブジェクトプログラム（１２８）と共にリンカ（１３８）に入力され、リンクが行われて実行プログラム（１２９）が生成出力される。この時、アセンブラ言語プログラム（６５４）がシンボル変数である＿ｄｍｌ＿ｖａｒ＿ｅのアドレスを決定するために使用される。この処理が本発明の実施の形態１とは異なっている。
【０１６８】
以降の処理は実施の形態１と同様であるから説明を省略する。
【産業上の利用可能性】
【０１６９】
本発明は、情報処理機器だけに限ることなく、例えば家庭用電気機器や事務用電気機器等においても、コンパイラの変更を行うことなく、現在使われているコンパイラをそのまま使いながら、尚且つ効率的な動的プログラムモジュールを生成することに利用可能である。
【図面の簡単な説明】
【０１７０】
【図１】本発明に係るプログラム処理プログラムの実施の形態１であるプログラムとこれらが処理する対象プログラムとの構成を示す図
【図２】本発明に係るプログラム処理プログラムの実施の形態１であるプリコンパイラが出力するプログラムの例を示す図
【図３】本発明に係るプログラム処理プログラムの実施の形態１であるポストコンパイラが出力するプログラムの例を示す図
【図４】本発明に係るプログラム処理プログラムの実施の形態１であるプログラムが行う主な処理を時系列に従って示す図
【図５】本発明に係るプログラム処理プログラムの実施の形態１であるプログラムが実行されるコンピュータ環境の主な構成を示す図
【図６】本発明に係るプログラム処理プログラムの実施の形態２であるプリコンパイラが出力するプログラムの例を示す図
【図７】本発明に係るプログラム処理プログラムの実施の形態２であるポストコンパイラが出力するプログラムの例を示す図
【符号の説明】
【０１７１】
１２１，６２１    Ｃ言語ソースプログラム−１
１２２，６２２    Ｃ言語ソースプログラム−２
１２３，６２３    Ｃ言語ソースプログラム−３
１２４，６２４    アセンブラ言語プログラム−１
１２５，６２５    アセンブラ言語プログラム−２
１２６，６２６    アセンブラ言語プログラム−３
１２７    オブジェクトプログラム
１２８    他のオブジェクトプログラム
１２９    実行プログラム
１３１，６３１    プリコンパイラ
１３３，６３３    コンパイラ
１３５，６３５    ポストコンパイラ
１３７    アセンブラ
１３８    リンカ
１４２，６４２    シンボル情報生成部
１４４，６４４    シンボル情報ファイル
５０１    ＣＰＵ
５０２    主記憶装置
５０３    補助記憶装置
５０４    入力装置
５０５    表示装置
５０６    通信装置
５０７    バス
【図１】
2005196436.tif 000003
【図２】
2005196436.tif 000004
【図３】
2005196436.tif 000005
【図４】
2005196436.tif 000006
【図５】
2005196436.tif 000007
【図６】
2005196436.tif 000008
【図７】
2005196436.tif 000009