(57)【要約】      （修正有）【課題】未宣言シンボルが検出され、コンパイルエラーが発生した場合でも、そのコンパイルエラーの修正を自動的に行いプログラミングの効率を向上させることができるプログラム開発支援システムを提供する。【解決手段】  ソースファイル２をコンパイルしたときに未宣言シンボルを検出した場合、前記未宣言シンボルが使用されている演算式内の各構成要素のサイズ、及び型情報を記録し、前記未宣言シンボルの部分については仮の型情報とアドレス情報を用いてオブジェクトファイル４を生成するコンパイラ３と、オブジェクトファイル４を結合すると共に、各オブジェクトファイル４内に記録された未宣言シンボル情報とグローバル定義されているシンボル情報とを照合して、前記未宣言シンボル情報に、各未宣言シンボルがグローバル宣言されるべきか、あるいはローカル宣言されるべきかの情報を付加した未宣言シンボル情報テーブル７を生成するリンカ５とを備える。【選択図】図１
2007080207.tif 000002
【特許請求の範囲】
【請求項１】
使用する変数が予め宣言する必要があるプログラミング言語により記述されたソースファイルをコンパイルしたときに未宣言シンボルを検出した場合、前記未宣言シンボルのシンボル名と、前記未宣言シンボルが使用されている関数、またはサブルーチン名と、前記未宣言シンボルが使用されている演算式内の各構成要素のサイズ、及び型情報を記録し、前記未宣言シンボルの部分については仮の型情報とアドレス情報を用いてオブジェクトファイルを生成するコンパイラと、該コンパイラで生成されたオブジェクトファイルを結合すると共に、各オブジェクトファイル内に記録された未宣言シンボル情報とグローバル定義されているシンボル情報とを照合して、前記未宣言シンボル情報に、各未宣言シンボルがグローバル宣言されるべきか、あるいはローカル宣言されるべきかの情報を付加した未宣言シンボル情報テーブルを生成するリンカと、を備えることを特徴とするプログラム開発支援システム。
【請求項２】
請求項１に記載のプログラム開発支援システムにおいて、前記コンパイラは、前記未宣言シンボル情報テーブルを基に、未宣言シンボルが他のオブジェクトファイルにグローバルに定義されている場合は、該当するシンボル定義情報から、前記未宣言シンボルが存在するソースファイルの外部参照シンボルとしての宣言を付加してソースファイルを生成することを特徴とするプログラム開発支援システム。
【請求項３】
請求項１に記載のプログラム開発支援システムにおいて、前記コンパイラは、前記未宣言シンボル情報テーブルを基に、同一名の未宣言シンボルが存在する関数またはサブルーチンが複数ある場合は、共通のシンボルと見なし、それを含むいずれかのソースファイルまたは別のソースファイル内にグローバルシンボル定義を行い、それ以外の使用する関数、またはサブルーチン側ではグローバルな外部参照シンボルとしての宣言を付加してソースファイルを生成することを特徴とするプログラム開発支援システム。
【請求項４】
請求項１に記載のプログラム開発支援システムにおいて、前記コンパイラは、前記未宣言シンボル情報テーブルを基に、一つの未宣言シンボルが存在する関数またはサブルーチンが一つである場合は、ローカルなシンボルと見なし、それ含む関数またはサブルーチン内にローカルシンボル定義を付加してソースファイルを生成することを特徴とするプログラム開発支援システム。
【請求項５】
請求項１に記載のプログラム開発支援システムにおいて、前記未宣言シンボル情報テーブルを基に、前記未宣言シンボルが他のオブジェクトファイルにグローバルに定義されている場合は、該当するシンボル定義情報から前記未宣言シンボルが存在するソースファイルの外部参照シンボルとしての宣言を付加してソースファイルを生成するソースファイル管理プログラムを備えることを特徴とするプログラム開発支援システム。
【請求項６】
請求項１に記載のプログラム開発支援システムにおいて、前記未宣言シンボル情報テーブルを基に、同一名の未宣言シンボルが存在する関数またはサブルーチンが複数ある場合は、共通のシンボルと見なし、それらを含むいずれかのソースファイルまたは別のソースファイル内にグローバルシンボル定義を行い、それ以外の使用する関数、またはサブルーチン側ではグローバルな外部参照シンボルとしての宣言を付加してソースファイルを生成するソースファイル管理プログラムを備えることを特徴とするプログラム開発支援システム。
【請求項７】
請求項１に記載のプログラム開発支援システムにおいて、前記未宣言シンボル情報テーブルを基に、一つの未宣言シンボルが存在する関数またはサブルーチンが一つである場合は、ローカルなシンボルと見なし、それ含む関数またはサブルーチン内にローカルシンボル定義を付加してソースファイルを生成するソースファイル管理プログラムを備えることを特徴とするプログラム開発支援システム。
【請求項８】
請求項１乃至請求項７の何れか１項に記載のプログラム開発支援システムにおいて、前記コンパイラ又は前記ソースファイル管理プログラムにより前記未宣言シンボルから定義部分を生成する場合に、そのサイズや型情報を、使用されている演算式からサイズ、及び型を類推して決定することを特徴とするプログラム開発支援システム。
【請求項９】
オブジェクトファイルを結合するリンカにおいて、各オブジェクトファイル内に記録された未宣言シンボル情報とグローバル定義されているシンボル情報とを照合して、前記未宣言シンボル情報に、各未宣言シンボルがグローバル宣言されるべきか、あるいはローカル宣言されるべきかの情報を付加した未宣言シンボル情報を生成することを特徴とするリンカ。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、プログラミングの効率を向上させることができるプログラム開発支援システム及びリンカに関するものである。
【背景技術】
【０００２】
従来からプログラム開発は、図１０に示すように、ホストコンピュータ１０１上でソースファイル１０２をコンパイラ１０３によりコンパイルしてオブジェクトファイル１０４を生成し、そのオブジェクトファイル１０４からリンカ１０５により実行形式プログラム１０６を生成していた。
ところで、プログラミング言語には、多くの種類があり、使用する変数を予め宣言することが必要なものもあれば、ｂａｓｉｃ、ａｗｋ等不要なものもある。高級言語と呼ばれる言語、例えば広く使われているＣ言語、Ｃ＋＋言語などでは、予め変数宣言が必要である。
このため、従来のコンパイラ及びリンカで構成されるプログラム支援システムにおいては、それら使用する変数を予め宣言することが必要なプログラミング言語で書かれたソースファイルをコンパイルする際に、未宣言シンボルが検出された時は、ただ未宣言である旨のエラーメッセージを表示するようにしていた。
また特許文献１には、大規模なプログラム開発時に、それらの変数宣言を、個別モジュールデバッグ時と、複数モジュールデバッグ時で共通に宣言できるような手法により、変数宣言の重複作成を無くし、プログラムデバッグ効率を向上させるコンパイル制御方法が開示されている。
【特許文献１】特許第３３６８７９５号
【発明の開示】
【発明が解決しようとする課題】
【０００３】
しかしながら、上記したような従来のプログラム支援システムにおいては、未宣言シンボルが検出された時は、ただ未宣言である旨のエラーメッセージを表示するだけであるため、使用する変数が未宣言にならないように配慮しながらプログラミングを行わなければならないという欠点があった。
また特許文献１に開示されているコンパイル制御方法においても、使用する変数を予め宣言しなければならないのは変わっておらず、しかもプログラム生成時にデバッグのための付加情報を記述しなければならず、プログラム生成に限って言えば、効率が悪化するという欠点があった。
そこで、上記したような点を鑑みてなされたものであり、未宣言シンボルが検出され、コンパイルエラーが発生した場合でも、そのコンパイルエラーの修正を自動的に行い、プログラミングの効率を向上させることができるプログラム開発支援システム及びリンカを提供することを目的とする。
【課題を解決するための手段】
【０００４】
上記目的を達成するため、請求項１に記載の発明は、使用する変数が予め宣言する必要があるプログラミング言語により記述されたソースファイルをコンパイルしたときに未宣言シンボルを検出した場合、前記未宣言シンボルのシンボル名と、前記未宣言シンボルが使用されている関数、またはサブルーチン名と、前記未宣言シンボルが使用されている演算式内の各構成要素のサイズ、及び型情報を記録し、前記未宣言シンボルの部分については仮の型情報とアドレス情報を用いてオブジェクトファイルを生成するコンパイラと、該コンパイラで生成されたオブジェクトファイルを結合すると共に、各オブジェクトファイル内に記録された未宣言シンボル情報とグローバル定義されているシンボル情報とを照合して、前記未宣言シンボル情報に、各未宣言シンボルがグローバル宣言されるべきか、あるいはローカル宣言されるべきかの情報を付加した未宣言シンボル情報テーブルを生成するリンカと、を備えるプログラム開発支援システムを特徴とする。
請求項２に記載の発明は、請求項１に記載のプログラム開発支援システムにおいて、前記コンパイラは、前記未宣言シンボル情報テーブルを基に、未宣言シンボルが他のオブジェクトファイルにグローバルに定義されている場合は、該当するシンボル定義情報から、前記未宣言シンボルが存在するソースファイルの外部参照シンボルとしての宣言を付加してソースファイルを生成することを特徴とする。
請求項３に記載の発明は、請求項１に記載のプログラム開発支援システムにおいて、前記コンパイラは、前記未宣言シンボル情報テーブルを基に、同一名の未宣言シンボルが存在する関数またはサブルーチンが複数ある場合は、共通のシンボルと見なし、それを含むいずれかのソースファイルまたは別のソースファイル内にグローバルシンボル定義を行い、それ以外の使用する関数、またはサブルーチン側ではグローバルな外部参照シンボルとしての宣言を付加してソースファイルを生成することを特徴とする。
【０００５】
請求項４に記載の発明は、請求項１に記載のプログラム開発支援システムにおいて、前記コンパイラは、前記未宣言シンボル情報テーブルを基に、一つの未宣言シンボルが存在する関数またはサブルーチンが一つである場合は、ローカルなシンボルと見なし、それ含む関数またはサブルーチン内にローカルシンボル定義を付加してソースファイルを生成することを特徴とする。
請求項５に記載の発明は、請求項１に記載のプログラム開発支援システムにおいて、前記未宣言シンボル情報テーブルを基に、前記未宣言シンボルが他のオブジェクトファイルにグローバルに定義されている場合は、該当するシンボル定義情報から前記未宣言シンボルが存在するソースファイルの外部参照シンボルとしての宣言を付加してソースファイルを生成するソースファイル管理プログラムを備えることを特徴とする。
請求項６に記載の発明は、請求項１に記載のプログラム開発支援システムにおいて、前記未宣言シンボル情報テーブルを基に、同一名の未宣言シンボルが存在する関数またはサブルーチンが複数ある場合は、共通のシンボルと見なし、それらを含むいずれかのソースファイルまたは別のソースファイル内にグローバルシンボル定義を行い、それ以外の使用する関数、またはサブルーチン側ではグローバルな外部参照シンボルとしての宣言を付加してソースファイルを生成するソースファイル管理プログラムを備えることを特徴とする。
【０００６】
請求項７に記載の発明は、請求項１に記載のプログラム開発支援システムにおいて、前記未宣言シンボル情報テーブルを基に、一つの未宣言シンボルが存在する関数またはサブルーチンが一つである場合は、ローカルなシンボルと見なし、それ含む関数またはサブルーチン内にローカルシンボル定義を付加してソースファイルを生成するソースファイル管理プログラムを備えることを特徴とする。
請求項８に記載の発明は、請求項１乃至請求項７の何れか１項に記載のプログラム開発支援システムにおいて、前記コンパイラ又は前記ソースファイル管理プログラムにより前記未宣言シンボルから定義部分を生成する場合に、そのサイズや型情報を、使用されている演算式からサイズ、及び型を類推して決定することを特徴とする。
請求項９に記載の発明は、オブジェクトファイルを結合するリンカにおいて、各オブジェクトファイル内に記録された未宣言シンボル情報とグローバル定義されているシンボル情報とを照合して、前記未宣言シンボル情報に、各未宣言シンボルがグローバル宣言されるべきか、あるいはローカル宣言されるべきかの情報を付加した未宣言シンボル情報を生成するリンカを特徴とする。
【発明の効果】
【０００７】
本発明によれば、未宣言シンボルが検出された時、そのシンボル名と、そのシンボルが使用されている演算式内の各構成要素のサイズ、及び型情報を記録し、未宣言シンボル部分は仮の型情報とアドレス情報を用いることで、コンパイルエラーを自動的に修正するようにしているので、プログラミング効率の向上を図ることができるようになる。
【発明を実施するための最良の形態】
【０００８】
以下、図面を参照して本発明の実施形態を説明する。
図１は本発明の実施形態であるプログラム開発支援システムの概略を示した図である。
この図１において、ホストコンピュータ１にて作成されたソースプログラム群であるソースファイル２は、コンパイラ３によりコンパイルされ、オブジェクトファイル４が生成される。この時、ソースファイル２において宣言のないシンボルが使用されている時は、図２に示すように、その未宣言シンボル名、シンボルの使用されている位置（関数名またはサブルーチン名）、使用されている演算式内の項のうち、最大サイズの型情報を通常のオブジェクト情報以外にオブジェクトファイル内に未宣言シンボル情報テーブルとして記録しておく。なお、型情報が不明の場合は、そのコンパイラの標準的な型情報を記録しておく。
続いて、それらのコンパイル済みオブジェクトをリンカ５にてプログラムの結合処理を行う際に、各オブジェクトファイル４内の未宣言シンボル情報テーブルの統合を行う。そして、その中の未宣言シンボル名が、グローバルシンボルとして宣言されていることが判明した場合は、その統合化したシンボル情報テーブル内のシンボル情報に、外部参照宣言が必要なグローバルシンボルである旨のフラグを付加する。この時、サイズや型は、そのグローバル宣言されたシンボルの情報に合わせる。
また、同じくリンカ５による結合処理時に、各オブジェクトファイル４内の未宣言シンボル情報テーブル内のシンボルが、複数のファイルに存在する場合は、最初に見つかったオブジェクトに対応するシンボル情報テーブル内のシンボル情報に、定義が必要なグローバルシンボルである旨のフラグを付加する。２番目以降に見つかったオブジェクトに対応するシンボルテーブル情報テーブル内のシンボル情報には、外部参照宣言が必要なグローバルシンボルである旨のフラグを付加する。この時、サイズや型は、複数のオブジェクトで異なっている場合は、その内の最大サイズに合わせる。
なお、定義が必要なグローバルシンボルである旨のフラグは、何も最初に見つかったオブジェクトを対象とするのではなく、２番目以降の何れかのオブジェクトを対象にしても良い。
さらに、同じくリンカ５による結合処理時に未宣言シンボル情報テーブル内のシンボルが一箇所のみである場合は、そのオブジェクトに対応するシンボル情報テーブル内のシンボル情報に定義が必要なローカルシンボルである旨のフラグを付加する。
【０００９】
図３は、リンカ５における未宣言シンボルの処理フローを示した図である。
この場合、先ず、ステップＳ１において、未宣言シンボルがあるか否かの判定を行い、未宣言シンボルが有ると判定した場合はステップＳ２に進み、未宣言シンボルが無いと判定した場合は処理を終了する。
ステップＳ２においては、他のファイルでグローバル宣言が行われているか否かの判定を行い、グローバル宣言が行われていると判定した場合はステップＳ３に進み、グローバル外部参照宣言フラグをセットした後、ステップＳ１の処理に戻る。
一方、ステップＳ２において、他のファイルでグローバル宣言が行われていないと判定した場合はステップＳ４に進み、他のファイルに未宣言の同一シンボルが有るか否かの判定を行う。そして、ステップＳ４において、他のファイルに未宣言の同一シンボルが有ると判定した場合は、ステップＳ５に進み、グローバル定義宣言フラグまたはグローバル外部参照宣言フラグをセットした後、ステップＳ１の処理に戻る。
一方、ステップＳ４において、他のファイルに未宣言の同一シンボルが無いと判定した場合はステップＳ６に進み、他に同一名のシンボルが無いかどうかの判定を行う。
そして、ステップＳ６において他に同一名のシンボルが無いと判定した場合はステップＳ１に戻る。一方、他に同一名のシンボルが有ると判定した場合は、ステップＳ７に進み、ローカル宣言フラグをセットした後、ステップＳ１の処理に戻るようにする。
このようにして、本実施形態のリンカ５においては、図４で示すようなフラグが付加された未宣言シンボル情報テーブル７（図１参照）を生成する。
そして、本実施形態では、上記のようにして生成した未宣言シンボル情報テーブル７を基に再度コンパイラ３によりソースファイル２のコンパイルを実施するようにしている。
このとき、コンパイラ３では、未宣言シンボルが使用されていたら未宣言シンボル情報テーブル７内のシンボル情報により、グローバルシンボルとして外部参照宣言、またはグローバルシンボルとしての定義、または使用されている関数・サブルーチン内のローカルシンボル宣言を、ソースファイルに付加する。これにより、当該ソースファイル２のコンパイルを正常に実行することができる。
続いて、リンカ５により全てのオブジェクトの結合処理が行われ、実行形式プログラム６が生成される。
【００１０】
ここで、図５（ａ）（ｂ）にＣ言語でのソースプログラムの一例を示す。
この図５（ａ）（ｂ）に示すソースプログラムsource1.c、source2.cは共に、使用している変数の宣言が不足しており、従来のコンパイラでは、コンパイルエラーとなる。具体的には図５（ａ）に示すsource1.cでは、変数ｉ、ａｂｃ、ｄｅｆが未宣言であり、図５（ｂ）に示すsource2.cでは、変数ｄｅｆが未宣言である。
これに対して、これら図５（ａ）（ｂ）に示すソースプログラムを本実施形態のコンパイラ３にて実行した時に生成される未宣言シンボル情報テーブルを図７、図８に示す。
さらに本実施形態のリンカ５を実行した時に生成される結合された未宣言シンボルテーブルを図９に示す。この図９に示す未宣言シンボルテーブルを基に、コンパイラ３がコンパイルを実行すると、図６（ａ）（ｂ）に示すようなソースプログラムsource1’.c，source2’.cが生成される。これにより、コンパイラ３においてオブジェクトファイル４へのコンパイルを正常に行うことができるようになる。
また、これまで説明した本実施形態では、コンパイラ３が自動的にソースファイルを編集し、必要な宣言の記述を付加する場合を例に挙げて説明したが、これはあくまでも一例であり、コンパイラ３が自動的にソースファイルの編集をせずに、図１に示した本実施形態のプログラム開発システムに破線で示したソースファイル管理プログラム８を用いて編集を行うことも可能である。なお、プログラム開発システムのソースファイル管理プログラムは、各ソースファイルの編集及び管理、コンパイラの実行、リンカの実行等を管理するものとする。
【００１１】
未宣言シンボル情報テーブル７を生成するまでは上記と同様である。ここで、本実施形態のプログラム開発システムは、未宣言シンボル情報テーブル７内の情報を基に、ソースファイル管理プログラム８において該当するソースファイルの編集を行う。この時、対話的に、シンボル宣言の追加の可否、及び追加する場合の位置を使用者に判断させ、シンボル宣言の追加が指定された時にのみ、付加させることもできる。これは、未宣言シンボルを判断されたシンボルが、実は宣言済みのシンボルの綴り間違いである場合や、グローバル宣言要と見なされたシンボルを、ローカル宣言すべき場合などがあるからである。シンボルの綴り間違い等は、使用者自身が修正を行うか、プログラム開発システムがその綴り訂正機能を持つ場合もある。このようにして、全てのシンボルの付加や修正が終わり、改めてコンパイル、及びリンクが実行し、実行形式プログラム６を生成するようにしても良い。
このように従来はコンパイラにおいてソースファイルをコンパイルする際に、未宣言シンボルが検出された場合は、コンパイルを正常に終了することはできなかった。また、各コンパイル済みオブジェクトファイルを結合するリンカにおいて、未定義シンボルが検出されたときも正常にリンカが終了することはなかった。
これに対して本実施形態のプログラム開発支援システムでは、未宣言シンボルが検出された時、そのシンボル名と、そのシンボルが使用されている演算式内の各構成要素のサイズ、及び型情報を記録蓄積し、未宣言シンボル部分は仮の型情報とアドレス情報を用いるようにしているのでコンパイラ３によりオブジェクトファイルを生成することができる。またリンカにおいて未定義シンボルが検出されるといったこともなくなるので正常にリンカを終了することができる。
また従来は、別のファイルで宣言されているシンボルを使用する場合に、そのシンボルを宣言していなかった時、そのソースファイルに対してコンパイルエラーが発生し、そのエラー修正が自動的に行われることはなかった。
これに対して本実施形態のプログラム開発支援システムでは、未宣言シンボルが検出され、同名のシンボルが別のソースファイル内にグローバルに宣言されていた時、そのシンボルの外部参照宣言部分をソースファイルに付加することができるようになる。
【００１２】
また、従来は使用されているシンボルが、複数のファイルに存在するにも関わらず、そのどのファイルにも宣言されていないシンボルを使用する場合に、そのソースファイルに対してコンパイルエラーが発生し、そのエラー修正が自動的に行われることもなかった。
これに対して本実施形態のプログラム開発支援システムでは、未宣言シンボルが検出され、同名のシンボルが別のソースファイル内でも同様に未宣言で使用されていた場合、共通のシンボルと見なし、それらを含むどれかのソースファイル、または別のソースファイル内にグローバルシンボル定義を付加し、それ以外の使用する関数、またはサブルーチン側ではグローバルな外部参照シンボルとしての宣言を付加することができるようになる。
また、従来は使用されているシンボルが、そのソースファイルのみならず、他のどのファイルにも宣言されていない場合に、そのソースファイルに対して、コンパイルエラーが発生し、そのエラー修正が自動的に行われることはなかった。
これに対して本実施形態のプログラム開発支援システムでは、未宣言シンボルが検出され、同名のシンボルが別のどのソースファイルにも存在しない場合、そのシンボルをローカルシンボルと見なし、そのシンボルを使用している関数、またはサブルーチン内にローカルシンボル定義を付加することができる。
また従来は、未宣言シンボルの定義部分を生成し、その時そのサイズや型情報を、使用されている演算式からサイズ、及び型を類推して決定するコンパイラはなかった。
これに対して本実施形態のプログラム開発支援システムでは、未宣言シンボルから定義部分を生成する場合に、そのサイズや型情報を、使用されている演算式からサイズ、及び型を類推して決定することができるようになる。
【図面の簡単な説明】
【００１３】
【図１】本発明の実施形態であるプログラム支援システムの概略を示した図。
【図２】オブジェクトファイル内の未宣言シンボル情報テーブル例を示した図。
【図３】リンカにおける未宣言シンボルの処理フローを示した図。
【図４】本実施形態のリンカにおいて生成される未宣言シンボル情報テーブルの一例を示した図。
【図５】Ｃ言語でのソースプログラムの一例を示した図。
【図６】図５に示すソースプログラムから本実施形態のコンパイラにより生成されるソースプログラムを示した図。
【図７】本実施形態のコンパイラにより図５（ａ）に示すソースプログラムをコンパイルしたときに生成される未宣言シンボル情報テーブルを示した図。
【図８】本実施形態のコンパイラにより図５（ｂ）に示すソースプログラムをコンパイルしたときに生成される未宣言シンボル情報テーブルを示した図。
【図９】図５に示すソースプログラムから本実施形態のリンカにおいて生成される未宣言シンボル情報テーブルの一例を示した図。
【図１０】従来のプログラム支援システムの概略を示した図。
【符号の説明】
【００１４】
１…ホストコンピュータ、２…ソースファイル、３…コンパイラ、４…オブジェクトファイル、５…リンカ、６…実行形式プログラム、７…未宣言シンボル情報テーブル、８…ソースファイル管理プログラム
【図１】
2007080207.tif 000003
【図２】
2007080207.tif 000004
【図３】
2007080207.tif 000005
【図４】
2007080207.tif 000006
【図５】
2007080207.tif 000007
【図６】
2007080207.tif 000008
【図７】
2007080207.tif 000009
【図８】
2007080207.tif 000010
【図９】
2007080207.tif 000011
【図１０】
2007080207.tif 000012