(57)【要約】【課題】プログラムの記述上のエラーについてその修正作業を効率化できるプログラムのエラー情報出力装置、エラー情報出力方法およびエラー情報出力プログラムを得ること。【解決手段】プログラムのエラーの修正を行うエラー情報修正装置は、ソースコード読込部１０６でソースコード１０５を読み込むと、構文解析部１０７で構文の解析を行い、記述上のエラーを検出する。エラー情報解析部１０８は、ソース修正情報データベース１０９で過去に判明したエラー以外のエラーを原因別に解析し、解析結果からエラーの検出が行われないような仮の修正を行って、これを修正可能情報格納領域１１３1に格納する。修正ができないエラーは修正不可能情報格納領域１１３2に格納してエラー表示を行う。このため、エラー表示が簡素化し、また修正可能情報格納領域１１３1に格納したエラーの修正も容易になる。【選択図】図１
2010067103.tif 000002
【特許請求の範囲】
【請求項１】
検査対象となるプログラムの記述上のエラーを記述された行に沿って順に検出するエラー検出手段と、
このエラー検出手段によって検出されたそれぞれのエラーを解析して、エラーの原因の特定の可否をエラーごとに判別するエラー原因特定手段と、
このエラー原因特定手段によって原因が特定されたエラーに対して、原因別に前記エラー検出手段によるエラーの検出が行われないような仮の修正を行う仮修正手段と、
この仮修正手段によって修正されたプログラムの前記エラーをひとまとまりのグループとして出力する仮修正エラー出力手段と、
前記検査対象となるプログラムにおける前記仮修正手段によっては修正できないエラーについてのそれぞれの所在を個別に示すエラー所在情報出力手段
とを具備することを特徴とするプログラムのエラー情報出力装置。
【請求項２】
前記エラー検出手段が検出したエラーの修正内容をエラーごとに対比して格納したエラー修正データベースを備え、前記エラー原因特定手段はこのエラー修正データベースで検索して修正が可能なエラー以外のエラーに対してエラー原因の特定を行う手段であることを特徴とする請求項１記載のエラー情報出力装置。
【請求項３】
前記仮修正エラー出力手段から出力される修正されたプログラムが修正内容のままでよいか、更なる修正が必要であるかを入力する操作入力手段を具備することを特徴とする請求項１記載のエラー情報出力装置。
【請求項４】
前記検査対象となるプログラムはソースコードで記述されており、前記エラー検出手段はソースコードを機械語コードに変換する際のコンパイルエラーを出力する手段であることを特徴とする請求項１記載のエラー情報出力装置。
【請求項５】
検査対象となるプログラムの記述上のエラーを記述された行に沿って順に検出するエラー検出ステップと、
このエラー検出ステップで検出されたそれぞれのエラーを解析して、エラーの原因の特定の可否をエラーごとに判別するエラー原因特定ステップと、
このエラー原因特定ステップによって原因が特定されたエラーに対して、原因別に前記エラー検出ステップによるエラーの検出が行われないような仮の修正を行う仮修正ステップと、
この仮修正ステップによって修正されたプログラムの前記エラーをひとまとまりのグループとして出力する仮修正エラー出力ステップと、
前記検査対象となるプログラムにおける前記仮修正ステップによっては修正できないエラーについてのそれぞれの所在を個別に示すエラー所在情報出力ステップ
とを具備することを特徴とするプログラムのエラー情報出力方法。
【請求項６】
検査対象となるプログラムの記述上のエラーを修正するコンピュータに、
前記プログラムの記述上のエラーを記述された行に沿って順に検出するエラー検出処理と、
このエラー検出処理で検出されたそれぞれのエラーを解析して、エラーの原因の特定の可否をエラーごとに判別するエラー原因特定処理と、
このエラー原因特定処理によって原因が特定されたエラーに対して、原因別に前記エラー検出処理によるエラーの検出が行われないような仮の修正を行う仮修正処理と、
この仮修正処理によって修正されたプログラムの前記エラーをひとまとまりのグループとして出力する仮修正エラー出力処理と、
前記検査対象となるプログラムにおける前記仮修正処理によっては修正できないエラーについてのそれぞれの所在を個別に示すエラー所在情報出力処理
とを実行させることを特徴とするプログラムのエラー情報出力プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、コンパイラがソースコードの誤りを検出したときのようにプログラムの記述に誤りがあったときにエラー情報を出力するエラー情報出力装置、エラー情報出力方法およびエラー情報出力プログラムに関する。
【背景技術】
【０００２】
コンパイラを例に挙げて説明する。コンパイラは解釈するソースコードの文法を静的にチェックする。そして、機械語コードに変換する際に誤りが存在すれば、コンパイルエラーとして、それらコードの記述された行に対応付けてエラーメッセージを表示するようになっている。
【０００３】
ところで、ソースコードを作成したときには、その複数の箇所で同一の誤りが繰り返されることが多い。たとえば、ソースコードの記述の際に、ある変数の定義についての記述を忘れたり、その記述が誤っていたとする。すると、その定義を参照する記述が生じるたびに、参照先の定義が存在しないというエラーが発生する。
【０００４】
このような場合、本発明の第１の関連技術では、本来１つの原因で発生したエラーであるにも係らず、ソースコードにおける同一の定義を参照する多くの行で同一のエラーの表示が行われている（たとえば特許文献１参照）。この結果として、このエラーとは別のエラーがソースコードに存在していても、前者のエラーを示す多くのエラー表示の中に後者のエラー表示が埋もれてしまい、後者のエラー自体を見過ごしてしまう場合があった。また、この第１の関連技術では、エラー情報の整理の手法としてニューラルネットワークの出力を用いている。しかしながら、エラーに対する出力の態様について具体的な開示がなく、その実現性が低い。
【０００５】
そこで、本発明の第２の関連技術として、エラー表示の中で必要なもののみを行うことにして、表示を簡素にする提案が行われている（たとえば特許文献２参照）。この第２の関連技術では、修正したエラーの内容を保存しておく。そして、その行以降の行の同一のエラーが発生している場合には、そのエラー表示の代わりに予め定めた「＠」等のマークの表示を行うか、その表示を削除するようにしている。
【０００６】
ところで、プログラムの記述の誤りに対するエラー表示は、プログラムの製作者に修正を行わせるためにある。本発明の第３の関連技術では、プログラムの記述中のエラーを単に表示するだけでなく、エラーを構文解析するようになっている。そして、エラーの種類を表示し、可能な場合にはエラーの修正を自動的に行うようになっている（たとえば特許文献３参照）。
【０００７】
この第３の関連技術では、プログラム上で発生する誤りに対する過去の修正情報をエラー修正履歴格納手段に格納しておく。また、プログラムに過去の修正箇所と同一の誤りが存在した場合には、誤りごとにそれらの属性を表示するようにしている。そして、エラー修正履歴格納手段に格納したエラーと同一のエラーがプログラム中に存在した場合には、該当するプログラムに修正を加える。また、エラー修正履歴格納手段に格納されていないエラーが発生した場合には、これをそのエラーの属性と共に出力するようになっている。
【０００８】
ところが、このようにエラー修正履歴格納手段を用いて過去に修正したエラーをプログラムの記述中に表示しないようにしても、記述されたプログラムの内容によってはエラー表示が依然として多発する場合がある。そこで、本発明の第４の関連技術では、エラーの構文解析の結果として、プログラムの修正自体が不要な特定の種類のエラーメッセージについては、エラー表示を回避するようにしている（たとえば特許文献４参照）。
【特許文献１】特開平０４−３６５１３４号公報（第０００８段落、第０００９段落、図１）
【特許文献２】特開平０９−０１６４３７号公報（第００１４〜第００１８段落、図２、図３）
【特許文献３】特開平１１−０８５５３６号公報（第０００８段落、第００１１段落、図６）
【特許文献４】特開２００４−２０６５０１号公報（第０００６段落、第０００７段落、図１）
【発明の開示】
【発明が解決しようとする課題】
【０００９】
この第４の関連技術によって、プログラムの修正が不要である事が既知なエラーメッセージの出力を効率的に回避することができるので、エラー原因の調査作業に要する負荷を軽減することができる。
【００１０】
しかしながら、この第４の関連技術によってもエラー修正履歴格納手段にある程度の履歴情報が格納されるまでは、プログラムの記述された場所に多くのエラー表示が行われる可能性が高い。したがって、たとえば新たなプログラムの記述に対してエラーの修正を開始しようとする場合に、エラーの修正作業を行う者の効率的な作業を阻害する大きな原因となった。
【００１１】
そこで本発明の目的は、プログラムの記述上のエラーについてその修正作業を効率化できるプログラムのエラー情報出力装置、エラー情報出力方法およびエラー情報出力プログラムを提供することにある。
【課題を解決するための手段】
【００１２】
本発明では、（イ）検査対象となるプログラムの記述上のエラーを記述された行に沿って順に検出するエラー検出手段と、（ロ）このエラー検出手段によって検出されたそれぞれのエラーを解析して、エラーの原因の特定の可否をエラーごとに判別するエラー原因特定手段と、（ハ）このエラー原因特定手段によって原因が特定されたエラーに対して、原因別に前記したエラー検出手段によるエラーの検出が行われないような仮の修正を行う仮修正手段と、（ニ）この仮修正手段によって修正されたプログラムの前記したエラーをひとまとまりのグループとして出力する仮修正エラー出力手段と、（ホ）前記した検査対象となるプログラムにおける前記した仮修正手段によっては修正できないエラーについてのそれぞれの所在を個別に示すエラー所在情報出力手段とをプログラムのエラー情報出力装置に具備させる。
【００１３】
また、本発明では、（イ）検査対象となるプログラムの記述上のエラーを記述された行に沿って順に検出するエラー検出ステップと、（ロ）このエラー検出ステップで検出されたそれぞれのエラーを解析して、エラーの原因の特定の可否をエラーごとに判別するエラー原因特定ステップと、（ハ）このエラー原因特定ステップによって原因が特定されたエラーに対して、原因別に前記したエラー検出ステップによるエラーの検出が行われないような仮の修正を行う仮修正ステップと、（ニ）この仮修正ステップによって修正されたプログラムの前記したエラーをひとまとまりのグループとして出力する仮修正エラー出力ステップと、（ホ）前記した検査対象となるプログラムにおける前記した仮修正ステップによっては修正できないエラーについてのそれぞれの所在を個別に示すエラー所在情報出力ステップとをプログラムのエラー情報出力方法に具備させる。
【００１４】
更に本発明では、
検査対象となるプログラムの記述上のエラーを修正するコンピュータに、プログラムのエラー情報出力プログラムとして、（イ）前記したプログラムの記述上のエラーを記述された行に沿って順に検出するエラー検出処理と、（ロ）このエラー検出処理で検出されたそれぞれのエラーを解析して、エラーの原因の特定の可否をエラーごとに判別するエラー原因特定処理と、（ハ）このエラー原因特定処理によって原因が特定されたエラーに対して、原因別に前記したエラー検出処理によるエラーの検出が行われないような仮の修正を行う仮修正処理と、（ニ）この仮修正処理によって修正されたプログラムの前記したエラーをひとまとまりのグループとして出力する仮修正エラー出力処理と、（ホ）前記した検査対象となるプログラムにおける前記した仮修正処理によっては修正できないエラーについてのそれぞれの所在を個別に示すエラー所在情報出力処理とを実行させることを特徴としている。
【発明の効果】
【００１５】
以上説明したように本発明によれば、プログラムの記述上のエラーを原因別に特定し、この原因特定が可能であったエラーについては、エラーが検出されないような仮の修正を行うことにすると共に、これらのエラーをひとまとまりのグループとして出力するようにした。これにより、このような修正ができないエラーを顕在化することができ、これらの修正を確実に行うことができる。しかも、仮の修正を行ったエラーについては、エラーの修正の方向付けが行われているので、これを参考に修正作業を効率的に行うことができる。また、このようなエラーについては、装置側の仮の修正で修正が完全に行われる場合もあり、このようなエラーについては修正作業に時間を要しないという利点がある。
【発明を実施するための最良の形態】
【００１６】
次に本発明を一実施の形態と共に説明する。
【００１７】
図１は、本実施の形態のエラー情報修正装置の概要を表わしたものである。エラー情報修正装置１００は、ＣＰＵ（Central Processing Unit）１０１と、このＣＰＵ１０１によって実行される制御プログラムを格納したメモリ１０２を有する主制御部１０３を備えている。この主制御部１０３は、外部から図示しない通信ネットワークやメモリカード等のデータ入力手段を介して検査対象プログラムとしてのソースコード１０５を入力するソースコード読込部１０６と接続されている。また、主制御部１０３はこのソースコード読込部１０６に読み込まれたソースコードに対して１行ずつ構文解析を行う構文解析部１０７や、構文に誤りがあった場合のエラー情報の種類を解析するエラー情報解析部１０８や、エラー情報の解析を行うためのソース修正情報を格納したソース修正情報データベース１０９と接続されている。
【００１８】
また、エラー情報修正装置１００は、エラーの修正を行う操作者の操作を入力する図示しないキーボードやポインティングデバイス等からなる操作入力部１１１と、ソースコードのエラー等の各種情報を視覚的に表示する液晶ディスプレイ等の表示部１１２と、ソースコード読込部１０６が読み取った修正前のソースコードや、修正後のソースコード等の各種のデータを格納するデータ格納部１１３を備えている。データ格納部１１３には、各種のデータが格納できるが、後に説明する修正が可能な情報としての「修正可能エラー情報」を格納する修正可能情報格納領域１１３1と、修正が不可能な情報としての「修正不可能エラー情報」を格納する修正不可能情報格納領域１１３2が設けられている。
【００１９】
これらエラー情報修正装置１００を構成する各部のうちの少なくとも一部は、回路部品としてのハードウェアで構成してもよいが、ＣＰＵ１０１が制御プログラムを実行することによって実現するソフトウェアによって機能的に構成されるものであってもよい。また、視覚的な表示を行う表示部１１２の代わりに、エラー情報等の各種の情報をプリントアウトするプリンタが用意されていてもよい。
【００２０】
エラー情報修正装置１００のこれらの構成のうちで、ソースコード読込部１０６、構文解析部１０７、エラー情報解析部１０８および表示部１１２におけるエラーに関するデータを出力する回路機能部分は、一般にコンパイラと呼ばれている。ただし、コンパイラには各種の構成があり、また、本実施の形態では表示部１１２におけるエラー情報の表示に関して、後に説明するように操作者のソースコードの修正操作に便利な工夫が施されている。
【００２１】
図２は、このエラー情報修正装置で修正を行おうとするソースコードを読み取ってエラー情報を出力するまでの装置の制御の概要を表わしたものである。図１と共に説明する。
【００２２】
エラー情報修正装置１００の図示しない電源が投入されて、操作者が操作入力部１１１からソースコード１０５の読み込みの開始を指示したとする。すると、ソースコード読込部１０６がソースコード１０５を先頭から１行だけ読み込む（ステップＳ２０１）。もちろん、ソースコード読込部１０６はソースコード１０５の全体を事前に読み込んでおき、これをデータ格納部１１３内の特定の領域に格納しておいて、各行の検査の際に１行単位で読み出すようにしてもよい。
【００２３】
ソースコード読込部１０６は、読み込んだ１行がソースコード１０５の最終行であるかどうかをチェックする（ステップＳ２０２）。ここでは、第１行のソースコードを読み込んだので、まだ最終行ではない。そこで、この読み取った１行分のソースコードを構文解析部１０７に送って、構文解析を実行する（ステップＳ２０３）。構文解析部１０７は、構文解析の結果として、エラーの発見の有無を出力する。この構文解析の結果としてエラーが発見されなかった場合には（ステップＳ２０４：Ｎ）、ステップＳ２０１に戻って、次の１行分のソースコードの読み込みが行われることになる。
【００２４】
一方、ステップＳ２０４でエラーが発見された場合には（Ｙ）、そのエラーがソース修正情報データベース１０９に存在するエラーであるかの判別が行われる（ステップＳ２０５）。ソース修正情報データベース１０９には、過去の修正作業で修正内容が分かっているエラーとそれらの修正内容が対比して格納されている。したがって、ソース修正情報データベース１０９に格納されたエラーと同一のエラーであった場合には（Ｙ）、その修正が行われる（ステップＳ２０６）。この場合にはエラーが修正された後、再びステップＳ２０１に戻って次の１行の読み込みが開始される。以上の処理は、従来においても行われていたものである。
【００２５】
これに対して、該当のエラーがステップＳ２０５でソース修正情報データベース１０９に存在しないものと判別された場合には（Ｎ）、そのエラーが操作者による後の作業で修正可能なものであるか否かについての判別が行われる（ステップＳ２０７）。このための判別手法については、後に詳しく説明する。この結果として、操作者が後で修正を行うことができるエラーの場合には（Ｙ）、操作者に修正の方向を示唆するための情報を付加した「修正可能エラー情報」を生成する（ステップＳ２０８）。そしてこれをデータ格納部１１３の修正可能情報格納領域１１３1に格納する（ステップＳ２０９）。そして、再びステップＳ２０１に戻って次の１行の読み込みが開始される。
【００２６】
一方、ステップＳ２０７で操作者が修正できるとエラー情報修正装置１００側で判別しなかったエラーは（Ｎ）、「修正不可能エラー情報」として、データ格納部１１３の修正不可能情報格納領域１１３2に保管される（ステップＳ２１０）。そして、再びステップＳ２０１に戻って次の１行の読み込みが開始される。ただし、「修正可能エラー情報」であるかの判別にあたっては、該当する１行のソースコードだけでは判別できない場合がある。このような場合には、ソースコード読込部１０６がソースコード１０５をある程度先読みする必要がある。これについても、後に説明する。
【００２７】
このようにして、ステップＳ２０１に戻ってはソースコード１０５が１行ずつ読み込まれて、以上説明した処理が行単位で進行していく。この結果、ある時点で読み取ったソースコード１０５が最終行を構成するものと判別されることになる（ステップＳ２０２：Ｙ）。この場合には、修正可能情報格納領域１１３1に、「修正可能エラー情報」が格納されているかをチェックする（ステップＳ２１１）。
【００２８】
今回のソースコード１０５の一連の読み込みによって、修正可能情報格納領域１１３1に、「修正可能エラー情報」が格納された場合には（Ｙ）、ソースコード読込部１０６で読み込んだ全ソースコードに対して、重複する「修正可能エラー情報」を統合する。たとえば、第１行目と第１０行目に同じ「修正可能エラー情報」が存在すれば、これを１つの「修正可能エラー情報」として第１行目に対応した情報とする。このようにして、操作者がすぐ修正できる情報としての修正用情報を作成する（ステップＳ２１２）。そして、この修正用情報と、ステップＳ２１０で保管した「修正不可能エラー情報」とをそれぞれ操作者に指示する情報として出力することになる（ステップＳ２１３）。ステップＳ２１１で「修正可能エラー情報」が修正可能情報格納領域１１３1に、格納されていないときには（Ｎ）、ステップＳ２１２の処理を省略してステップＳ２１３の処理が行われる。
【００２９】
ステップＳ２１３による修正不可能エラー情報の出力は、「修正可能エラー情報」と「修正不可能エラー情報」を完全に画面上、あるいはプリントアウトとして分離した形態で行ってもよい。または、一連のソースコードに「修正可能エラー情報」と「修正不可能エラー情報」をそれぞれ区別できるように対応付けて表示あるいはプリントアウトするようにしてもよい。
【００３０】
このように本実施の形態では、ソースコードにエラーが存在するときに、これがソースコードの作成者にとって誤りやすいミスに基づくものである場合には、これらをエラー情報修正装置１００が「修正可能エラー情報」と判別する。そして、これらを操作者に「修正不可能エラー情報」とは別のグループのものとして示すことで、エラーの早期修正を可能とさせる。このとき、本実施の形態ではエラー情報修正装置１００がエラー解消のための解決策の一例を実施して、表面上ではエラーが発生していない状況を実現させるようになっている。
【００３１】
一方、「修正不可能エラー情報」については、ソースコードの知識が全くないものが作業を行ったり、操作者が図示しないキーボードの文字変換の設定を間違えた状態でタイピングを行ったような場合に起因することが多く、修正を機械的に行うことができない場合が多い。したがって、「修正不可能エラー情報」の場合には、エラー情報修正装置１００が表面上でもエラーを解消させることはできない。操作者がそのエラーの原因をそれなりに考察する必要がある。
【００３２】
このように「修正不可能エラー情報」を「修正可能エラー情報」と区別して修正できるようにして修正作業を容易にしたのが、本実施の形態のエラー情報修正装置１００の１つの特徴である。そこで、「修正可能エラー情報」と見なせるものの代表的なものを幾つか例示して、これらを見掛け上でエラーを解消させる原理を次に説明する。
【００３３】
図３（Ａ）は、エラーの発生する第１の例として、定義が欠落したソース文の一例を示したものである。このソース例３０１では、言語としてＣ＃(シーシャープ）を使用しているが、変数「op2」の定義の記載が欠如している。このため、この後の「obj.Method」３２１および「obj.Method2」３２２の双方の関数呼び出し部分で、この変数「op2」が見つからないことになり、これらの２行でエラーが発生する。このような定義を忘れたことによるエラーの検出は、関数呼び出し部分が存在するときに、その前のソース文に定義の記載があるかをチェックすることで行うことができる。
【００３４】
図３（Ｂ）は、必要な定義をソース文に加えるソース修正情報の他の一例を示したものである。操作者が修正する前の段階で、図１に示したエラー情報修正装置１００側がソース修正情報３０２として、形式的に変数「op2」に対して定義を置くことで、エラーを解消させることができる。この第１の例の場合には、「修正可能エラー情報」の１つとして、変数「op2」を示し、操作者にこの変数「op2」を定義させるようにすればよい。
【００３５】
図４（Ａ）は、エラーの発生する第２の例として、定義が欠落したソース文の一例を示したものである。このソース例３０３では、同じく言語としてＣ＃を使用している。この例の場合には、「if文」３３１で使用されている区切り文字（括弧記号）の「{」に対応する「}」の記載がない。このような場合、コンパイラとしては、言語仕様上、「public long BBB() {」３３２を読み込んだ時に、メソッド内に不正な定義が存在するためエラーとなる。
【００３６】
図４（Ｂ）は、必要な区切り文字をソース文に加えるソース修正情報の一例を示したものである。ここでは、区切り文字「{」と対応付けられる区切り文字「}」がソース修正情報３０４として追加される。すなわち、図１に示すエラー情報修正装置１００側は「修正可能エラー情報」の１つとして、区切り文字「}」を示し、区切り文字「}」でエラーを修正することが示唆される。この第２の例の場合には、区切り文字における開始を示す文字と終了を示す文字の対応付けが採れているかを順にチェックすることで、「修正可能エラー情報」に該当するか否かを判別することができる。
【００３７】
図５（Ａ）は、エラーの発生する第３の例として、計算に適さない変数を使用したソース文の一例を示したものである。このソース例３０５では、「String型」の変数「data」に「２」を代入したり、計算の変数に利用したりしている。この例の場合、変数の使い方が間違っており、計算に適した変数に修正する必要がある。言語としてＣ＃を例にとると、計算に使用できる型は、「int型」、「long型」、「short型」等の幾つかの型が存在する。これらのうちのいずれの型を使用するかは、ソースコードの修正を行う操作者が決めるものである。
【００３８】
図５（Ｂ）は、計算に使用できる型としてのソース修正情報の一例を示したものである。図１に示すエラー情報修正装置１００側は「修正可能エラー情報」の１つを修正の方向の示唆のために示せばよく、修正内容を具体的に示す必要はない。そこで図５（Ｂ）に示したように、変数「data」を計算に使用できる「int型」に修正する例を示している。この第３の例の場合には、計算に適さない変数が計算に間違って使用されているかをチェックすることで、「修正可能エラー情報」に該当するか否かを判別することができる。
【００３９】
図６（Ａ）は、エラーの発生する第４の例として、参照しているクラスの「import文」が欠落したソース文の一例を示したものである。このソース例３０７は、Ｊａｖａ（登録商標）（ジャバ）言語を例にしている。この例の場合には、参照しているクラスの「import文」が欠けている。このため、クラスを使用している箇所すべてでクラスが見つからないというエラーが発生する。
【００４０】
図６（Ｂ）は、「import文」を追加するソース修正情報の一例を示したものである。このように、クラスがコンパイラで解決可能な場合、ソース修正情報３０８のように「import文」の欠落の有無をチェックすることで、「修正可能エラー情報」に該当するか否かを判別することができる。
【００４１】
図７（Ａ）は、エラーの発生する第５の例として、「goto文」のとび先のラベルが欠落したソース文の一例を示したものである。このソース例３０９では、Ｃ言語を例として示している。「goto文」では、指定されたラベルや行番号に無条件にジャンプすることになるが、ラベルが指定されていない例となる。
【００４２】
図７（Ｂ）は、仮のラベルを追加する修正を行ったソース修正情報の一例を示したものである。このソース修正情報３１０のように「goto文」が存在するときには、そのとび先の有無をチェックすることで、「修正可能エラー情報」に該当するか否かを判別することができる。
【００４３】
図８（Ａ）は、エラーの発生する第６の例として、繰り返しの対象の手続き名が欠落したソース文の一例を示したものである。このソース例３１１では、ＣＯＢＯＬ（COmmon Business Oriented Language）言語を例として示している。繰り返しの対象の手続き名(TETUDUKI)が存在しないため、存在しない手続き名を指定している箇所３４１でエラーとなる。
【００４４】
図８（Ｂ）は、手続き名を追加する修正を行ったソース修正情報の一例を示したものである。このソース修正情報３１２のように手続き名を追加することで、このエラーが解消する。この第６の例では、繰り返しの対象の手続き名がソース文に存在するかをチェックすることで、「修正可能エラー情報」に該当するか否かを判別することができる。
【００４５】
図９（Ａ）は、エラーの発生する第７の例として、見出しが不正な単語となっているソース文の一例を示したものである。このソース例３１３では、ＣＯＢＯＬ言語を例として示している。ＣＯＢＯＬ言語では、実際のプログラムを記述する４番目に登場する手続き部（PROCEDURE DIVISION）が必ず存在している。しかしながら、このソース例３１３では、見出しの「PROCERE DIVISION」３５１が不正な単語となっている。このような場合、これに後続している記述が不正な位置に記載されていることになる。これにより、エラーが発生する。
【００４６】
図９（Ｂ）は、正しい見出しに編集したソース修正情報の一例を示したものである。このソース修正情報３１４のように、「PROCEDURE DIVISION」と正しい見出しに編集することで、エラーが解消する。この第７の例では、たとえば「DIVISION」のようなキーワードが存在している箇所で、不正な単語が記載されていないかをチェックすればよい。そして、このような不正な単語が存在した場合には、「修正可能エラー情報」に該当すると判別することができる。
【００４７】
図１０は、エラー情報解析部を具体的に表わしたものである。エラー情報解析部１０８は、図１に示した構文解析部１０７がソースコード１０５にエラーが存在すると判別し、かつ、これらのエラーがソース修正情報データベース１０９で修正済みのものとして格納されているものでないと判別したものについてエラーの解析を行うようになっている。そして、このエラー情報解析部１０８で解析が成功した情報は、「修正可能エラー情報」として、図１に示す修正可能情報格納領域１１３1に格納され、解析が成功しなかった情報は、「修正不可能エラー情報」として修正不可能情報格納領域１１３2に格納されることになる。
【００４８】
このようなエラー情報解析部１０８は、第１〜第ｍの解析部１３１1〜１３１mから構成されている。ここで、第１の解析部１３１1は、たとえば図３で説明した第１の例および図５で説明した第３の例に関するエラーを解析して検出する機能を備えている。また、第２の解析部１３１2は、たとえば図４で説明した第２の例に関するエラーを解析して検出する機能を備えている。図３〜図９では、第１〜第７の例を示したが、これらは例示であり、第１〜第ｍの解析部１３１1〜１３１mによって適宜の種類のエラーが解析されて検出されることになる。
【００４９】
また、本実施の形態のエラー情報修正装置１００およびそのエラー情報解析部１０８は、Ｃ、Ｃ＃、Ｊａｖａ（登録商標）、ＣＯＢＯＬ等の各種の言語に対応する汎用型の装置として構成されている。もちろん、エラー情報修正装置１００は１つの言語のみに対応する装置であってもよい。この場合、エラー情報解析部１０８は、その扱う言語に特化した解析部１３１のみを備えるだけでよい。
【００５０】
図１１は、第１の解析部を更に具体的に表わしたものである。なお、第２〜第ｍの解析部１３１2〜１３１mも、図４〜図９で例示したようなエラー検出原理をそれぞれ具体化する構成となっていればよく、そのための具体的な構成は特に限定されるものでもない。そこで、第２〜第ｍの解析部１３１2〜１３１mの詳細については、図示および説明を省略する。
【００５１】
第１の解析部１３１1は、解析に関係する変数を予め登録した定義データテーブル１４１と、図３で説明した第１の例に関するエラーを解析して検出する解析手順を実行する第１の解析手順実行部１４２を備えている。ここで、第１の解析手順実行部１４２は、独自のＣＰＵとこのＣＰＵが実行する制御プログラムを格納する記憶媒体を備えてもよい。また、図１に示したＣＰＵ１０１がメモリ１０２内に格納した制御プログラムを実行することで、この第１の解析手順実行部１４２をソフトウェア的に実現するようになっていてもよい。
【００５２】
図１２は、第１の解析手順実行部が実行する処理の様子を表わしたものである。図１、図３、図５および図１１と共に説明する。
【００５３】
図３（Ａ）のソース例３０１中に、「ret=obj.Method(op1, op2)」という記述がある。これは、「Method」という関数を、変数「op1」と変数「op2」を引数に使用して呼び出す記述である。通常コンパイラでは、変数が使用される場合は、その変数が定義されているかどうかをチェックする。そこで、まず、変数「op1」について、その変数の定義をチェックする。具体的には、定義データテーブル１４１に、この場合は、コンパイラが内部に持っている定義データテーブルに変数の定義があるかどうかをチェックする（ステップＳ２３１）。図３（Ａ）では、事前に「int op1;」の記述があり、「int型の変数op1」を定義している。このため変数「op1」は定義済みとなる（Ｙ）。
【００５４】
そこで、処理はステップＳ２３２に進む。ステップＳ２３２では、変数の型がメソッドの引数の型と合っているかどうかのチェックが行われる。ソース例３０１中には、「Method関数」の定義として、「public int Method(int a, int b)」とあり、引数の型は「int」であり、型情報があっている（Ｙ）。そこで、変数「op1」についてはエラーがないことになり、エラーが発生したときに「修正可能エラー情報」を出力するか否かを判別する第１の解析部１３１1の処理の対象外となる。そこで、この場合には、変数「op1」についての処理はそのまま終了する（エンド）。
【００５５】
次に、変数「op2」についてのエラーのチェックについて説明する。変数「op2」の場合にも、ステップＳ２３１における定義データテーブル１４１で定義情報があるかどうかをチェックする。この場合、事前に変数「op2」を定義する記述はない。したがって、定義なしとなる（Ｎ）。そこで、ステップＳ２３３に進んで、図１に示したソース修正情報データベース１０９に変数「op2」が定義されているかについての判別が行われる。定義されている場合には（Ｙ）、ステップＳ２３２に進んで変数の型がメソッドの引数の型と合っているかどうかのチェックが行われる。型情報があっていれば（Ｙ）、変数「op2」についての処理はそのまま終了する（エンド）。
【００５６】
型情報があっていない場合には（ステップＳ２３２：Ｎ）、ソース修正情報データベース１０９で変数の型が修正されているかどうかの判別が行われる（ステップＳ２３４）。修正されていれば（Ｙ）、問題はないので、処理はそのまま終了する（エンド）。
【００５７】
型情報があっておらず（ステップＳ２３２：Ｎ）、ソース修正情報データベース１０９で変数の型の修正も行われていない場合には（ステップＳ２３４：Ｎ）、変数の型を修正する（ステップＳ２３５）。そして、これを操作者に提示するために「修正可能エラー情報」として出力して（ステップＳ２３６）、第１の解析手順実行部１４２の処理を終了する（エンド）。この「修正可能エラー情報」は、最終的に修正可能情報格納領域１１３1に格納されることになる。
【００５８】
一方、ステップＳ２３３でソース修正情報データベース１０９に変数「op2」が定義されていないと判別された場合には（Ｎ）、エラーの出力を解消するための変数として「int op2」と定義して、ソース修正情報データベース１０９にこれを登録する（ステップＳ２３７）。そして、この状態を操作者に提示するために「修正可能エラー情報」として出力して（ステップＳ２３６）、第１の解析手順実行部１４２の処理を終了する（エンド）。
【００５９】
次に、図３の「ret = obj.Method2(op1, op2)」の記述を読み込んだ場合の処理について説明する。変数「op1」についての処理は先に説明した通りである。
【００６０】
「ret = obj.Method2(op1, op2)」の変数「op2」については、まず定義データテーブルに変数の定義があるかどうかをチェックする（ステップＳ２３１）。定義済みではないので、ステップＳ２３３に進んで、図１に示したソース修正情報データベース１０９に変数「op2」が定義されているかについての判別が行われる。この場合には、先のステップＳ２３７で変数「op2」についてソース修正情報データベース１０９に定義が登録されている（ステップＳ２３３：Ｙ）。そこで、ステップＳ２３２に進む。この例の場合、型情報はもともとは定義がない。そこで、ソース修正情報データベース１０９を検索して、エラーの出力を解消するための変数として「int op2」を得る。これにより、変数「op2」についての以後の冗長なエラー出力を抑止することができることになる。
【００６１】
次に図５（Ａ）のソース例３０５について、その処理を説明する。変数「data」は 文字列を格納できる「String型」として定義されている。「data2」は整数を格納できる「int型」として定義されている。まず、「data = 2」では、変数「data」に整数「2」を格納しようとしている。この場合、ステップＳ２３１の変数定義のチェックでは、変数「data」が定義されている（Ｙ）。そこで、ステップＳ２３２に進む。ステップＳ２３２では変数の型のチェックとなる。ここでは、文字列を格納できる変数に整数を格納しようとしてるため、型はあっていない（Ｎ）。そこで、ステップＳ２３４に進む。
【００６２】
ステップＳ２３４では、ソース修正情報データベース１０９に検索される情報がない（Ｎ）。そこでステップＳ２３５に進んで変数の型を修正する。この場合には、整数を格納できるように、変数「data」の型を「int型」へ変更する。そして、これを操作者に提示するために「修正可能エラー情報」として出力して（ステップＳ２３６）、第１の解析手順実行部１４２の処理を終了する（エンド）。
【００６３】
図５（Ａ）における「data2 = data * 2」においても同様に変数のチェックが行われる。この場合は、変数「data」を２倍して「data2」に格納するような算術の命令が用いられている。算術の命令には「String型」は使用できない。このため、この場合も変数「data」のチェックの行われるステップＳ２３２で型があっていないと判定される（Ｎ）。そこで、ステップＳ２３４に進み、ソース修正情報データベース１０９に修正された情報が登録されているかの判別が行われる。この場合、「data = 2」で「int型」に変更した情報が登録されている（Ｙ）。そこでエラーが出力されることなく、処理はそのまま終了する（エンド）。この場合にも冗長なエラーが抑止されることになる。
【００６４】
以上説明したように本実施の形態によれば、同一原因のコンパイルエラーメッセージを抑制することが可能になり、修正作業の効率が向上する。また、操作者を介することなくエラー消去の方向性が判別できるエラーについては、エラーメッセージの出力を回避して、これらを操作者にまとめて提示するようにしたので、修正すべき点の見落としが発生しにくくなるという利点がある。
【００６５】
＜発明の変形例＞
【００６６】
図１３は、本発明の変形例におけるエラー情報修正装置の構成を表わしたものである。図１３で図１と同一の部分には同一の符号を付しており、これらの説明を適宜省略する。
【００６７】
この変形例のエラー情報修正装置１００Ａでは、修正ソース生成部１１５が新たに設けられている。修正ソース生成部１１５は、コンパイルの結果蓄積されたソース修正情報データベース１０９のソース修正情報を利用して、あらかじめ修正された修正ソース１１６と、元ソースとの差分を表わしたソース差分情報１１７を生成する機能である。これら修正ソース１１６およびソース差分情報１１７は、表示部１１２によって視覚的な情報として出力される。もちろん、図示しないプリンタを用いることによって、修正ソース１１６およびソース差分情報１１７をプリントアウトしてもよい。主制御部１０３Ａは、このような追加された機能を実現する先行技術プログラムを格納したメモリ１０２Ａを備えている。
【００６８】
図１４は、この変形例でソースコードを読み取って修正ソースを生成するまでのエラー情報修正装置の制御の要部を表わしたものである。この変形例では、図２に示したステップＳ２０１からステップＳ２１３まで同じ処理が行われる。ステップＳ２１３で修正用情報と「修正不可能エラー情報」とを出力したら、修正用情報について修正ソースを生成して（ステップＳ２１４）、一連の処理が終了する。
【００６９】
このような変形例のエラー情報修正装置１００Ａによれば、操作者はソース差分情報１１７を確認して、その内容に問題がなければソースを修正する作業を省略することができ、作業効率をより高めることができる。
【００７０】
以上説明した実施の形態および変形例では、コンパイラがソースコードの誤りを検出したときのエラー情報の出力に関して説明したが、これに限るものではない。たとえばアセンブラがアセンブリ言語を機械語に変換するときにプログラムのエラー情報を出力する際にも、本発明と同様の技術を使用することが可能である。また、一般に各種のプログラムを記述した文章中の誤りを訂正する場合に、本発明を同様に適用することができることは当然である。
【図面の簡単な説明】
【００７１】
【図１】本実施の形態のエラー情報修正装置の概要を表わしたブロック図である。
【図２】本実施の形態のエラー情報修正装置でソースコードを読み取ってエラー情報を出力するまでの装置の制御の概要を示す流れ図である。
【図３】本実施の形態でエラーの発生する第１の例を示した説明図である。
【図４】本実施の形態でエラーの発生する第２の例を示した説明図である。
【図５】本実施の形態でエラーの発生する第３の例を示した説明図である。
【図６】本実施の形態でエラーの発生する第４の例を示した説明図である。
【図７】本実施の形態でエラーの発生する第５の例を示した説明図である。
【図８】本実施の形態でエラーの発生する第６の例を示した説明図である。
【図９】本実施の形態でエラーの発生する第７の例を示した説明図である。
【図１０】本実施の形態のエラー情報解析部を具体的に表わしたブロック図である。
【図１１】本実施の形態で第１の解析部を更に具体的に表わしたブロック図である。
【図１２】本実施の形態で第１の解析手順実行部が実行する処理の様子を表わした流れ図である。
【図１３】本発明の変形例におけるエラー情報修正装置の構成を表わしたブロック図である。
【図１４】本実施の形態のエラー情報修正装置でソースコードを読み取って修正ソースを生成するまでの装置の制御の概要を示す流れ図である。
【符号の説明】
【００７２】
１００、１００Ａ  エラー情報修正装置
１０１  ＣＰＵ
１０２、１０２Ａ  メモリ
１０５  ソースコード
１０６  ソースコード読込部
１０７  構文解析部
１０８  エラー情報解析部
１０９  ソース修正情報データベース
１１１  操作入力部
１１２  表示部
１１３  データ格納部
１１３1  修正可能情報格納領域
１１３2  修正不可能情報格納領域
１１５  修正ソース生成部
１１６  修正ソース
１１７  ソース差分情報
１４１  定義データテーブル
１４２  第１の解析手順実行部
【図１】
2010067103.tif 000003
【図２】
2010067103.tif 000004
【図３】
2010067103.tif 000005
【図４】
2010067103.tif 000006
【図５】
2010067103.tif 000007
【図６】
2010067103.tif 000008
【図７】
2010067103.tif 000009
【図８】
2010067103.tif 000010
【図９】
2010067103.tif 000011
【図１０】
2010067103.tif 000012
【図１１】
2010067103.tif 000013
【図１２】
2010067103.tif 000014
【図１３】
2010067103.tif 000015
【図１４】
2010067103.tif 000016