(57)【特許請求の範囲】
【請求項１】
データの指定部、格納部、作成部、検索部及び出力部を備えたコンピュータから構成され、ソースファイル中の特定のシンボルとその別名を検索する別名検索装置において、
ユーザからの検索対象となる特定のシンボルの指定を受け付ける検索対象指定部と、
あるシンボルと同じ実体に対して別の名前が付けられて前記あるシンボルと別名の関係にある他のシンボルを含むソースファイルを格納したソースファイル群の格納部と、
前記ソースファイル群格納部からソースファイルを順時読み出して、ソースファイル中のあるシンボルとそれに対して別名の関係にあるシンボルをそれぞれノードで表し、このノード間を、ノードで表された一つのシンボルから当該一つのシンボルと別名の関係にあるシンボルに対して指す関係を示す正の方向のアークにより結んで表現した別名有向グラフを作成する別名有向グラフ作成部と、
（１）前記検索対象指定部において受け付けた特定のシンボルと、
（２）この特定のシンボルを始点に前記別名有向グラフ作成部で作成された別名有向グラフを正の向きにたどったときにたどることのできるシンボルと、
（３）前記特定のシンボル及び前記特定のシンボルを正の向きにたどったときにたどることのできるシンボルを始点に、前記別名有向グラフを負の向きにたどることのできるシンボルと、
を検索する別名検索部と、
前記別名検索部によって検索されたシンボルを登録する別名登録部と、
前記別名登録部により登録されたシンボルを出力する出力部とを備えることを特徴とする別名検索装置。
【請求項２】
データの指定部、格納部、作成部、検索部及び出力部を備えたコンピュータから構成され、ソースファイル中の特定のシンボルとその別名を検索する別名検索装置において、
ユーザからの検索対象となる特定のシンボルの指定を受け付ける検索対象指定部と、
あるシンボルと同じ実体に対して別の名前が付けられて前記あるシンボルと別名の関係にある他のシンボルを含むソースファイルを格納したソースファイル群の格納部と、
前記ソースファイル群格納部からソースファイルを順時読み出して、ソースファイル中のあるシンボルとそれに対して別名の関係にあるシンボルをそれぞれノードで表し、このノード間を、ノードで表された一つのシンボルから当該一つのシンボルと別名の関係にあるシンボルに対して指す関係を示す正の方向のアークにより結んで表現した別名有向グラフを作成する別名有向グラフ作成部と、
（１）前記検索対象指定部において受け付けた特定のシンボルと、
（２）この特定のシンボルを始点に前記別名有向グラフ作成部で作成された別名有向グラフを負の向きにたどったときにたどることのできるシンボルと、
（３）前記特定のシンボル及び前記特定のシンボルを負の向きにたどったときにたどることのできるシンボルを始点に、前記別名有向グラフを正の向きにたどることのできるシンボルと、
を検索する別名検索部と、
前記別名検索部によって検索されたシンボルを登録する別名登録部と、
前記別名登録部により登録されたシンボルを出力する出力部とを備えることを特徴とする別名検索装置。
【請求項３】
コンピュータ上に実現される検索対象指定部、ソースファイル群の格納部、別名有向グラフ作成部、別名検索部、別名登録部及び出力部により、前記ソースファイル群の格納部に格納されているソースファイル中の特定のシンボルと同じ実体に対して別の名前が付けられた前記特定のシンボルと別名の関係にある他のシンボルを検索する別名検索方法において、
前記検索対象指定部が、ユーザからの検索対象となる特定のシンボルの指定を受け付ける検索対象指定ステップを実行し、
前記別名有向グラフ作成部が、前記ソースファイル群格納部からソースファイルを順時読み出して、ソースファイル中のあるシンボルとそれに対して別名の関係にあるシンボルをそれぞれノードで表し、このノード間を、ノードで表された一つのシンボルから当該一つのシンボルと別名の関係にあるシンボルに対して指す関係を示す正の方向のアークにより結んで表現した別名有向グラフを作成する別名有向グラフ作成ステップを実行し、
前記別名検索部が、前記別名有向グラフ作成部において作成された別名有向グラフ中から、
（１）前記検索対象指定部において受け付けた特定のシンボルと、
（２）この特定のシンボルを始点に前記別名有向グラフ作成部で作成された別名有向グラフを正の向きにたどったときにたどることのできるシンボルと、
（３）前記特定のシンボル及び前記特定のシンボルを正の向きにたどったときにたどることのできるシンボルを始点に、前記別名有向グラフを負の向きにたどることのできるシンボルと、を検索する別名検索ステップを実行し、
前記別名登録部が、前記別名検索部によって検索されたシンボルを登録する別名登録ステップを実行し、
前記出力部が、前記別名登録部により登録されたシンボルを出力する出力ステップを実行することを特徴とする別名検索方法。
【請求項４】
コンピュータ上に実現される検索対象指定部、ソースファイル群の格納部、別名有向グラフ作成部、別名検索部、別名登録部及び出力部により、前記ソースファイル群の格納部に格納されているソースファイル中の特定のシンボルと同じ実体に対して別の名前が付けられた前記特定のシンボルと別名の関係にある他のシンボルを検索する別名検索方法において、
前記検索対象指定部が、ユーザからの検索対象となる特定のシンボルの指定を受け付ける検索対象指定ステップを実行し、
前記別名有向グラフ作成部が、前記ソースファイル群格納部からソースファイルを順時読み出して、ソースファイル中のあるシンボルとそれに対して別名の関係にあるシンボルをそれぞれノードで表し、このノード間を、ノードで表された一つのシンボルから当該一つのシンボルと別名の関係にあるシンボルに対して指す関係を示す正の方向のアークにより結んで表現した別名有向グラフを作成する別名有向グラフ作成ステップを実行し、
前記別名検索部が、前記別名有向グラフ作成部において作成された別名有向グラフ中から、
（１）前記検索対象指定部において受け付けた特定のシンボルと、
（２）この特定のシンボルを始点に前記別名有向グラフ作成部で作成された別名有向グラフを負の向きにたどったときにたどることのできるシンボルと、
（３）前記特定のシンボル及び前記特定のシンボルを負の向きにたどったときにたどることのできるシンボルを始点に、前記別名有向グラフを正の向きにたどることのできるシンボルと、を検索する別名検索ステップを実行し、
前記別名登録部が、前記別名検索部によって検索されたシンボルを登録する別名登録ステップを実行し、
前記出力部が、前記別名登録部により登録されたシンボルを出力する出力ステップを実行することを特徴とする別名検索方法。
【請求項５】
コンピュータを、
ユーザからの検索対象となる特定のシンボルの指定を受け付ける検索対象指定部と、
あるシンボルと同じ実体に対して別の名前が付けられて前記あるシンボルと別名の関係にある他のシンボルを含むソースファイルを格納したソースファイル群の格納部と、
前記ソースファイル群格納部からソースファイルを順時読み出して、ソースファイル中のあるシンボルとそれに対して別名の関係にあるシンボルをそれぞれノードで表し、このノード間を、ノードで表された一つのシンボルから当該一つのシンボルと別名の関係にあるシンボルに対して指す関係を示す正の方向のアークにより結んで表現した別名有向グラフを作成する別名有向グラフ作成部と、
（１）前記検索対象指定部において受け付けた特定のシンボルと、
（２）この特定のシンボルを始点に前記別名有向グラフ作成部で作成された別名有向グラフを正の向きにたどったときにたどることのできるシンボルと、
（３）前記特定のシンボル及び前記特定のシンボルを正の向きにたどったときにたどることのできるシンボルを始点に、前記別名有向グラフを負の向きにたどることのできるシンボルと、
を検索する別名検索部と、
前記別名検索部によって検索されたシンボルを登録する別名登録部として機能させることを特徴とする別名検索用プログラム。
【請求項６】
コンピュータを、
ユーザからの検索対象となる特定のシンボルの指定を受け付ける検索対象指定部と、
あるシンボルと同じ実体に対して別の名前が付けられて前記あるシンボルと別名の関係にある他のシンボルを含むソースファイルを格納したソースファイル群の格納部と、
前記ソースファイル群格納部からソースファイルを順時読み出して、ソースファイル中のあるシンボルとそれに対して別名の関係にあるシンボルをそれぞれノードで表し、このノード間を、ノードで表された一つのシンボルから当該一つのシンボルと別名の関係にあるシンボルに対して指す関係を示す正の方向のアークにより結んで表現した別名有向グラフを作成する別名有向グラフ作成部と、
（１）前記検索対象指定部において受け付けた特定のシンボルと、
（２）この特定のシンボルを始点に前記別名有向グラフ作成部で作成された別名有向グラフを負の向きにたどったときにたどることのできるシンボルと、
（３）前記特定のシンボル及び前記特定のシンボルを負の向きにたどったときにたどることのできるシンボルを始点に、前記別名有向グラフを正の向きにたどることのできるシンボルと、
を検索する別名検索部と、
前記別名検索部によって検索されたシンボルを登録する別名登録部として機能させることを特徴とする別名検索用プログラム。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、プログラムを構成する変数や関数といったシンボルについて、シンボル間の関係を解析する技術に関するもので、特に、ある特定のシンボルの別名を検索する別名検索装置及び別名検索方法に関する。
【０００２】
【従来の技術】
近年のＩＴ化社会の中で、ＩＴによって提供されるサービスは巨大化、複雑化を増し、それに伴い、ＩＴ化社会を実現するプログラムも巨大化、複雑化している。一方、多くの人や会社がグローバルにＩＴ産業に参入するにつれて、プログラムの開発競争が激化している。
【０００３】
このような状況においては、プログラムの開発を短期間で効率的に行う必要がある。そのためのひとつの方法としては、過去に作成したプログラムや他者（他社）が作成したプログラムを再利用して、新たなプログラムを開発する方法がある。このように既存のプログラムを再利用する場合、既存のプログラムに変更を加えずにそのまま利用する方法と、なんらかの変更を加えて利用する方法とがある。何も変更を加えずに既存のプログラムを利用することができれば簡単であるが、通常は、新しい機能を追加したり、既存の機能を変更（カスタマイズ）するといった処理が必要となる。
【０００４】
このように既存のプログラムを変更するには、変更前にそのプログラムを理解する必要がある。そのためにはそのプログラムの仕様書や設計書を参照してプログラムを理解する必要がある。しかし、仕様書や設計書は、ときにそれらが書かれた後にプログラムが変更され、その記載内容がプログラムと一致していなかったり、仕様書や設計書がそれほど詳細には書かれていなかったりすることもあるため、プログラムを正確に理解するにはプログラムを読む必要がある。
【０００５】
ところが、上述したように、プログラムは巨大化、複雑化しており、プログラムすべてに目を通すことは困難である。そこで、プログラムの変更に必要な個所に絞って検討すれば良いのであれば非常に効率的である。プログラムの変更に必要な個所を知るには、まず、全体的な構成の概要が必要であり、その中で変更したい個所がどこであるのかを見つけ出す必要がある。次に、変更したい個所を変更したときに、どこに影響が及ぶのかを確認する必要がある。そのためには、プログラム中に記述されたシンボルにはどのようなものがあるのか、また、各シンボル間にはどのような関係があるのかをあらかじめ解析し、シンボル間の関係をそのプログラムを再利用しようとするユーザに提示することができる環境が必要である。
【０００６】
【発明が解決しようとする課題】
このようにシンボル間の関係を解析するに当たっては、あるシンボルが、図５に示したようなポインタによる代入や参照渡しによる代入等により、同じ実体に対して別の名前が付けられるような、いわゆる「別名」の関係にある場合を解析する必要がある。
例えば、特願平５−１４１０７８号には、シンボル間の関係のうち、あるシンボルの別名を取得する方法として、ポインタ解析とその結果に対して推移的閉包計算を行うことにより別名を求める方法が提案されている。
【０００７】
しかしながら、特願平５−１４１０７８号に開示された技術は、プログラム全体に対して別名の関係を持つ可能性のあるシンボルのグループ（以下、別名集合という）を求める方法であり、ある特定のシンボルに対する別名を求めるものではない。そのため、ある特定のシンボルに対する別名を求めるには、効率と精度が非常に悪いものであった。
すなわち、特願平５−１４１０７８号のようにプログラム全体に対して別名の集合を求めるのは、ある特定のシンボルの別名だけを求めたい場合には余分な計算が必要となるため効率が非常に悪いものであった。
【０００８】
また、特願平５−１４１０７８号のような方法で別名集合を求める場合には、ある特定のシンボルが属する別名集合に含まれるシンボルは、その特定のシンボルの別名の候補とはなるが、あるシンボルに注目した場合には、必ずしもその別名集合に含まれるシンボルがすべて注目するシンボルの別名になるとは限らないため、精度も悪いものであった。
【０００９】
例えば、図６のようなソースコードがあった場合に、特願平５−１４１０７８号の方法では、＊ｐがａを指すことにより＊ｐがａの別名となる可能性があり、且つ、＊ｐがｂを指すことにより＊ｐがｂの別名となる可能性があるため、ａ，ｂ，＊ｐは別名集合となる。しかし、ある特定のシンボルとして、例えばａに注目した場合、必ずしもｂがａの別名となるとは限らないといった問題が生じていた。
【００１０】
本発明は、上述したような従来技術の問題点を解消するために提案されたものであり、その目的は、シンボル間の関係の中で、ある特定のシンボルに対する別名のみを効率良く、高精度に求めることができる別名検索装置及び別名検索方法を提供することにある。
【００１１】
【課題を解決するための手段】
上記の目的を達成するため、請求項１に記載の別名検索装置は、データの指定部、格納部、作成部、検索部及び出力部を備えたコンピュータから構成され、ソースファイル中の特定のシンボルとその別名を検索する別名検索装置において、ユーザからの検索対象となる特定のシンボルの指定を受け付ける検索対象指定部と、あるシンボルと同じ実体に対して別の名前が付けられて前記あるシンボルと別名の関係にある他のシンボルを含むソースファイルを格納したソースファイル群の格納部と、前記ソースファイル群格納部からソースファイルを順時読み出して、ソースファイル中のあるシンボルとそれに対して別名の関係にあるシンボルをそれぞれノードで表し、このノード間を、ノードで表された一つのシンボルから当該一つのシンボルと別名の関係にあるシンボルに対して指す関係を示す正の方向のアークにより結んで表現した別名有向グラフを作成する別名有向グラフ作成部と、（１）前記検索対象指定部において受け付けた特定のシンボルと、（２）この特定のシンボルを始点に前記別名有向グラフ作成部で作成された別名有向グラフを正の向きにたどったときにたどることのできるシンボルと、（３）前記特定のシンボル及び前記特定のシンボルを正の向きにたどったときにたどることのできるシンボルを始点に、前記別名有向グラフを負の向きにたどることのできるシンボルと、を検索する別名検索部と、前記別名検索部によって検索されたシンボルを登録する別名登録部と、前記別名登録部により登録されたシンボルを出力する出力部とを備えることを特徴とする。
また、請求項２に記載の別名検索装置は、データの指定部、格納部、作成部、検索部及び出力部を備えたコンピュータから構成され、ソースファイル中の特定のシンボルとその別名を検索する別名検索装置において、ユーザからの検索対象となる特定のシンボルの指定を受け付ける検索対象指定部と、あるシンボルと同じ実体に対して別の名前が付けられて前記あるシンボルと別名の関係にある他のシンボルを含むソースファイルを格納したソースファイル群の格納部と、前記ソースファイル群格納部からソースファイルを順時読み出して、ソースファイル中のあるシンボルとそれに対して別名の関係にあるシンボルをそれぞれノードで表し、このノード間を、ノードで表された一つのシンボルから当該一つのシンボルと別名の関係にあるシンボルに対して指す関係を示す正の方向のアークにより結んで表現した別名有向グラフを作成する別名有向グラフ作成部と、（１）前記検索対象指定部において受け付けた特定のシンボルと、（２）この特定のシンボルを始点に前記別名有向グラフ作成部で作成された別名有向グラフを負の向きにたどったときにたどることのできるシンボルと、（３）前記特定のシンボル及び前記特定のシンボルを負の向きにたどったときにたどることのできるシンボルを始点に、前記別名有向グラフを正の向きにたどることのできるシンボルと、を検索する別名検索部と、前記別名検索部によって検索されたシンボルを登録する別名登録部と、前記別名登録部により登録されたシンボルを出力する出力部とを備えることを特徴とする。
【００１２】
また、請求項３に記載の別名検索方法は、請求項１に記載の発明を方法の観点から捉えたものであって、コンピュータ上に実現される検索対象指定部、ソースファイル群の格納部、別名有向グラフ作成部、別名検索部、別名登録部及び出力部により、前記ソースファイル群の格納部に格納されているソースファイル中の特定のシンボルと同じ実体に対して別の名前が付けられた前記特定のシンボルと別名の関係にある他のシンボルを検索する別名検索方法において、前記検索対象指定部が、ユーザからの検索対象となる特定のシンボルの指定を受け付ける検索対象指定ステップを実行し、前記別名有向グラフ作成部が、前記ソースファイル群格納部からソースファイルを順時読み出して、ソースファイル中のあるシンボルとそれに対して別名の関係にあるシンボルをそれぞれノードで表し、このノード間を、ノードで表された一つのシンボルから当該一つのシンボルと別名の関係にあるシンボルに対して指す関係を示す正の方向のアークにより結んで表現した別名有向グラフを作成する別名有向グラフ作成ステップを実行し、前記別名検索部が、前記別名有向グラフ作成部において作成された別名有向グラフ中から、（１）前記検索対象指定部において受け付けた特定のシンボルと、（２）この特定のシンボルを始点に前記別名有向グラフ作成部で作成された別名有向グラフを正の向きにたどったときにたどることのできるシンボルと、（３）前記特定のシンボル及び前記特定のシンボルを正の向きにたどったときにたどることのできるシンボルを始点に、前記別名有向グラフを負の向きにたどることのできるシンボルと、を検索する別名検索ステップを実行し、前記別名登録部が、前記別名検索部によって検索されたシンボルを登録する別名登録ステップを実行し、前記出力部が、前記別名登録部により登録されたシンボルを出力する出力ステップを実行することを特徴とする。
また、請求項４に記載の別名検索方法は、請求項２に記載の発明を方法の観点から捉えたものであって、コンピュータ上に実現される検索対象指定部、ソースファイル群の格納部、別名有向グラフ作成部、別名検索部、別名登録部及び出力部により、前記ソースファイル群の格納部に格納されているソースファイル中の特定のシンボルと同じ実体に対して別の名前が付けられた前記特定のシンボルと別名の関係にある他のシンボルを検索する別名検索方法において、前記検索対象指定部が、ユーザからの検索対象となる特定のシンボルの指定を受け付ける検索対象指定ステップを実行し、前記別名有向グラフ作成部が、前記ソースファイル群格納部からソースファイルを順時読み出して、ソースファイル中のあるシンボルとそれに対して別名の関係にあるシンボルをそれぞれノードで表し、このノード間を、ノードで表された一つのシンボルから当該一つのシンボルと別名の関係にあるシンボルに対して指す関係を示す正の方向のアーク、あるいは一つのシンボルが当該一つのシンボルとは別名の関係にあるシンボルから指される関係を示す負の方向のアークの少なくとも一方により、結んで表現した別名有向グラフを作成する別名有向グラフ作成ステップを実行し、前記別名検索部が、前記別名有向グラフ作成部において作成された別名有向グラフ中から、（１）前記検索対象指定部において受け付けた特定のシンボルと、（２）この特定のシンボルを始点に前記別名有向グラフ作成部で作成された別名有向グラフを負の向きにたどったときにたどることのできるシンボルと、（３）前記特定のシンボル及び前記特定のシンボルを負の向きにたどったときにたどることのできるシンボルを始点に、前記別名有向グラフを正の向きにたどることのできるシンボルと、を検索する別名検索ステップを実行し、前記別名登録部が、前記別名検索部によって検索されたシンボルを登録する別名登録ステップを実行し、前記出力部が、前記別名登録部により登録されたシンボルを出力する出力ステップを実行することを特徴とする。
【００１３】
また、請求項５に記載の別名検索用プログラムは、請求項１の発明をソフトウェアの観点から捉えたものであって、コンピュータを、ユーザからの検索対象となる特定のシンボルの指定を受け付ける検索対象指定部と、あるシンボルと同じ実体に対して別の名前が付けられて前記あるシンボルと別名の関係にある他のシンボルを含むソースファイルを格納したソースファイル群の格納部と、前記ソースファイル群格納部からソースファイルを順時読み出して、ソースファイル中のあるシンボルとそれに対して別名の関係にあるシンボルをそれぞれノードで表し、このノード間を、ノードで表された一つのシンボルから当該一つのシンボルと別名の関係にあるシンボルに対して指す関係を示す正の方向のアークにより結んで表現した別名有向グラフを作成する別名有向グラフ作成部と、（１）前記検索対象指定部において受け付けた特定のシンボルと、（２）この特定のシンボルを始点に前記別名有向グラフ作成部で作成された別名有向グラフを正の向きにたどったときにたどることのできるシンボルと、（３）前記特定のシンボル及び前記特定のシンボルを正の向きにたどったときにたどることのできるシンボルを始点に、前記別名有向グラフを負の向きにたどることのできるシンボルと、を検索する別名検索部と、前記別名検索部によって検索されたシンボルを登録する別名登録部として機能させることを特徴とする。
また、請求項６に記載の別名検索用プログラムは、請求項２に記載の発明をソフトウェアの観点から捉えたものであって、コンピュータを、ユーザからの検索対象となる特定のシンボルの指定を受け付ける検索対象指定部と、あるシンボルと同じ実体に対して別の名前が付けられて前記あるシンボルと別名の関係にある他のシンボルを含むソースファイルを格納したソースファイル群の格納部と、前記ソースファイル群格納部からソースファイルを順時読み出して、ソースファイル中のあるシンボルとそれに対して別名の関係にあるシンボルをそれぞれノードで表し、このノード間を、ノードで表された一つのシンボルから当該一つのシンボルと別名の関係にあるシンボルに対して指す関係を示す正の方向のアークにより結んで表現した別名有向グラフを作成する別名有向グラフ作成部と、（１）前記検索対象指定部において受け付けた特定のシンボルと、（２）この特定のシンボルを始点に前記別名有向グラフ作成部で作成された別名有向グラフを負の向きにたどったときにたどることのできるシンボルと、（３）前記特定のシンボル及び前記特定のシンボルを負の向きにたどったときにたどることのできるシンボルを始点に、前記別名有向グラフを正の向きにたどることのできるシンボルと、を検索する別名検索部と、前記別名検索部によって検索されたシンボルを登録する別名登録部として機能させることを特徴とする。
【００１４】
上記のような構成を有する請求項１〜請求項６に記載の発明によれば、ある特定のシンボルについて、別名の関係にあるシンボルを効率良く、高精度に求めることができる。
【００１５】
【発明の実施の形態】
以下、本発明の実施の形態を図面を参照して具体的に説明する。なお、以下の実施形態はコンピュータ上に実現され、実施形態の各機能は、所定の手順（プログラム）がこのコンピュータを制御することで実現される。また、本明細書における各手段は、実施形態の各機能に対応する概念的なもので、必ずしも特定のハードウェアやソフトウェア・ルーチンに１対１には対応しない。同一のハードウェア要素が、場合によって異なった手段を構成する。例えば、コンピュータは、ある命令を実行するときにある手段となり、別の命令を実行するときは別の手段となりうる。また、一つの手段が、わずか１命令によって実現さる場合もあれば、多数の命令によって実現される場合もある。したがって、本明細書では、以下、実施形態の各機能を有する仮想的回路ブロック（手段）を想定して実施形態を説明する。また、本実施形態における各手順の各ステップは、その性質に反しない限り、実行順序を変更し、複数同時に実行し、また、実行ごとに異なった順序で実行してもよい。このような順序の変更は、例えば、ユーザが実行可能な処理を選択するなどメニュー形式のインターフェース手法によって実現することができる。
【００１６】
（１）構成
本実施形態の別名検索装置１には、図１の機能ブロック図に示したように、ソースファイル群１１と別名有向グラフ作成部１２が設けられている。この別名有向グラフ作成部１２では、ソースファイル群１１からソースファイルを順次読み込み、既存技術である字句解析、構文解析、意味解析を行うことによって、関数や変数といったシンボルについて、あるシンボルが他のどのシンボルと同じメモリ領域を指す可能性があるかを解析し、別名有向グラフ１３として表す。
【００１７】
例えば、図２に示したサンプルプログラムを別名有向グラフに表すと図３に示したようになり、関数や変数といった各シンボルを一つのノードで表現し、あるシンボルが他のあるシンボルを指す可能性があることを、ノードとノードを結ぶアークで表現する。このアークには向きがあり、指す可能性のあるシンボルから指される可能性のあるシンボルへ向かう場合を「順方向」あるいは「正の方向」といい、その逆を「逆方向」あるいは「負の方向」ということとする。なお、あるシンボルが他のあるシンボルを指す可能性のある例としては、従来技術の項で示した図５のように、ポインタの代入、参照渡しによる代入や仮想関数等があり、同じ実体に対して別の名前が付けられるような、いわゆる「別名」の関係にあることを意味する。
【００１８】
また、本実施形態の別名検索装置１には、別名検索を行いたいある特定のシンボルを指定する検索対象指定部１４と、そのシンボルについて上記別名有向グラフ１３を参照して、「検索対象として指定されたシンボルが、どのシンボルと同じメモリ領域を指す可能性があるか」という別名検索を行う別名検索部１５と、別名検索部１５による検索の結果、別名であると判断されたシンボルを別名情報データ１６として登録する別名登録部１７と、別名検索の結果を出力する出力部１８とが設けられている。
なお、本実施形態においては、上記別名検索部１５は、別名有向グラフ１３を正の向き（順方向）に検索した後、負の向き（逆方向）に検索するように設定されているものとする。
【００１９】
（２）作用
続いて、上記のような構成を有する本実施形態の別名検索装置における別名検索処理の流れを、図４に示したフローチャートにより説明する。
まず初めに、別名検索部１５における検索順序を順方向→逆方向に行うように設定し（ステップ４０１）、別名情報データ１６を空とする（ステップ４０２）。そして、ユーザが検索対象指定部１４を介して指定したシンボル（検索対象シンボル）を取得し（ステップ４０３）、その検索対象シンボル自体を別名情報データ１６として登録する（ステップ４０４）。
【００２０】
次に、別名情報データ１６の中から登録されている別名を１つ選択する（ステップ４０５）。この別名について、別名有向グラフを参照して、その別名のシンボルから正の向き（順方向）のアークがあるか否かを判断し（ステップ４０６）、正の向きのアークがあれば、アークの先にあるノードのシンボルをすべて別名として別名情報データ１６に追加し（ステップ４０７）、ステップ４０８に進む。
なお、ステップ４０６において、あるノードに複数の正の向きのアークがある場合もあるし、あるノードに正の向きのアークがあり、その先のノードにさらに正の向きのアークがある場合もある。本実施形態においては、これらすべてのノードを登録する。
【００２１】
一方、ステップ４０６において、正の向きのアークがないと判断された場合には、そのままステップ４０８に進む。ステップ４０８において、別名情報データ１６として登録されているすべての別名について順方向の検索が終了したか否かが判断され、終了していない場合には、ステップ４０５に戻り、別名情報データ１６の中から未処理の別名を１つ選択し、ステップ４０６〜ステップ４０８を繰り返す。一方、ステップ４０８において、別名情報データ１６として登録されているすべての別名について順方向の検索が終了したと判断された場合には、ステップ４０９に進み、逆方向の検索を行う。
【００２２】
すなわち、別名情報データ１６の中から登録されている別名を１つ選択する（ステップ４０９）。この別名について、別名有向グラフを参照して、その別名のシンボルから負の向き（逆方向）のアークがあるか否かを判断し（ステップ４１０）、負の向きのアークがあれば、アークの先（アークの基端部）にあるノードのシンボルをすべて別名として別名情報データ１６に追加し（ステップ４１１）、ステップ４１２に進む。一方、ステップ４１０において、負の向きのアークがないと判断された場合には、そのままステップ４１２に進む。
【００２３】
ステップ４１２において、別名情報データ１６として登録されているすべての別名について逆方向の検索が終了したか否かが判断され、終了していない場合には、ステップ４０９に戻り、別名情報データ１６の中から未処理の別名を１つ選択し、ステップ４１０〜ステップ４１２を繰り返す。一方、ステップ４１２において、別名情報データ１６として登録されているすべての別名について逆方向の検索が終了したと判断された場合には、その検索対象シンボルについての別名検索処理を終了する。
【００２４】
以上のような別名検索処理の結果、別名情報データ１６には、ユーザが指定した検索対象シンボルに対する「別名」のシンボルが得られる。そして、この検索結果が、出力部１８によりユーザに提示される。
【００２５】
（３）別名検索の具体例
続いて、上記の別名検索処理を、図３に示した別名有向グラフを例にして、より具体的に説明する。
仮に、検索対象指定部１４によりｐが指定されたとする（ステップ４０２）。まず、ｐ自身を別名に登録する（ステップ４０３）。次に、正の向きに検索を行うので、ステップ４０５に進み、別名情報データ１６の中から、すでに別名として登録されているシンボルとしてｐが見つかる（ステップ４０５）。そのｐについて別名有向グラフ（図３）を参照すると、ｐから正の向きのアークとしてａがあるので、ａを別名に追加する（ステップ４０６，ステップ４０７）。
【００２６】
次に、別名有向グラフを参照するとａから正の向きのアークはないので、そこで正の向きへの検索は終了する。この時点で別名情報データ１６として登録されたシンボルは、ｐとａとなる。
次に、負の向きに検索を行う。別名情報データ１６を参照し、すでに別名として登録されているシンボルｐ、ａからまずｐを取り出す。別名有向グラフ（図３）を参照して、ｐに向かうアークを負の向きに進むとｒを得るので、ｒを別名に追加する。ｒから負の向きに進むアークはないので、終了する。
【００２７】
同様に、別名情報データ１６を参照し、すでに別名として登録されているシンボルとしてａを取り出す。ａからアークを負の向きに進むとｐとｑがあるが、ｐはすでに登録されているので、ｑだけを登録する。ｑへ向かうアークはないので、別名検索は終了する。
その結果、ｐの別名として、ｐ，ｒ，ａ，ｑが得られる。ここで、ｐ，ｒ，ａ，ｑはポインタがｐと同じ実体を指す可能性がある集合であるが、ｐは取得されたシンボル自身であるので、別名から除いてもよい。
【００２８】
（４）効果
上述したように、本実施形態の別名検索装置によれば、ある特定のシンボルについて、別名有向グラフを参照して、正の方向と負の方向の両方向について別名検索を行うので、ある特定のシンボルに対する別名のみを効率良く、高精度に求めることができる。
【００２９】
（５）他の実施形態
本発明は、上述した実施形態に限定されるものではなく、別名を検索する場合に、その検索の深度を限定することも可能である。なお、検索する深度を限定した場合には、その先にも別名となる可能性のあるシンボルが存在することを、マークや色、その他の表示方法を用いて表現することもできる。
また、ある特定のシンボルについて、正の方向あるいは負の方向の検索のいずれを先に実行するかは限定されない。上記の実施形態においては、正の方向を先に検索したが、負の方向を先に検索する場合には、図４に示したフローチャートにおいて、「順方向」と「逆方向」の用語を互いに置き換えることにより、実行することができる。
【００３０】
【発明の効果】
以上のように、本発明によれば、シンボル間の関係の中で、ある特定のシンボルに対する別名のみを効率良く、高精度に求めることができる別名検索装置及び別名検索方法を提供することができる。
【図面の簡単な説明】
【図１】本発明の別名検索装置の一つの実施形態の構成を示す機能ブロック図
【図２】別名解析の実施形態を説明するためのサンプルプログラム
【図３】図２のサンプルプログラムについて作成された別名有向グラフ
【図４】本発明の別名検索装置における別名検索処理の流れを示すフローチャート
【図５】「別名」の関係にあるシンボルの例を示す図
【図６】ソースコードの一例を示す図
【符号の説明】
１…別名検索装置
１１…ソースファイル群
１２…別名有向グラフ作成部
１３…別名有向グラフ
１４…検索対象指定部
１５…別名検索部
１６…別名情報データ
１７…別名登録部
１８…出力部
【図１】
0003999949.tif 000002
【図２】
0003999949.tif 000003
【図３】
0003999949.tif 000004
【図４】
0003999949.tif 000005
【図５】
0003999949.tif 000006
【図６】
0003999949.tif 000007