(57)【要約】【課題】ソースコードの修正負荷を低減することを目的とする。【解決手段】ソースコードを受け付け、受け付けた前記ソースコードを特定の規則に応じて解析する第１の解析を実行し、前記第１の解析において少なくとも１つのエラーが検出された場合、前記少なくとも１つのエラーに対応する前記ソースコードの記述を修正した新たなソースコードを生成し、前記少なくとも１つのエラーの中に、エラーの発生に応じて前記ソースコードに含まれるいずれかの部分についての解析を抑止させるエラーが含まれる場合、生成した前記新たなソースコードを前記特定の規則に応じて解析する第２の解析を実行し、前記少なくとも１つのエラーの中に、前記抑止させるエラーが含まれない場合、前記新たなソースコードを出力する処理をコンピュータに実行させる。【選択図】  図３
2018084939.tif 000002
【特許請求の範囲】
【請求項１】
ソースコードを受け付け、
受け付けた前記ソースコードを特定の規則に応じて解析する第１の解析を実行し、
前記第１の解析において少なくとも１つのエラーが検出された場合、前記少なくとも１つのエラーに対応する前記ソースコードの記述を修正した新たなソースコードを生成し、
前記少なくとも１つのエラーの中に、エラーの発生に応じて前記ソースコードに含まれるいずれかの部分についての解析を抑止させるエラーが含まれる場合、生成した前記新たなソースコードを前記特定の規則に応じて解析する第２の解析を実行し、
前記少なくとも１つのエラーの中に、前記抑止させるエラーが含まれない場合、前記新たなソースコードを出力する、
処理をコンピュータに実行させることを特徴とする修正支援プログラム。
【請求項２】
前記特定の規則に応じた解析は、前記ソースコードをコンパイルする際の解析処理である、
ことを特徴とする請求項１記載の修正支援プログラム。
【請求項３】
前記少なくとも１つのエラーが検出された場合に出力される、前記少なくとも１つのエラーの識別情報を含むエラー情報を取得し、
異なる複数のエラーそれぞれを識別する識別情報のそれぞれと、エラーの発生に応じて前記ソースコードに含まれるいずれかの部分についての解析が抑止されるか否かを示す情報とを対応付けて記憶する記憶部を参照して、取得した前記エラー情報に含まれる識別情報の中に、前記いずれかの部分についての解析が抑止される旨を示す情報と対応付けられた識別情報が含まれる場合、前記少なくとも１つのエラーの中に前記抑止させるエラーが含まれると判定する、
処理を前記コンピュータに実行させることを特徴とする請求項１または２記載の修正支援プログラム。
【請求項４】
前記記憶部には、前記複数のエラーそれぞれを識別する識別情報のそれぞれと、エラーの内容を特定する情報とがさらに対応付けられて記憶され、
前記内容を特定する情報に基づいて、前記解析の際に検出されたエラーが、前記ソースコードにおいて前記エラーに対応した前記ソースコードの記述に含まれる字句要素が前記エラーに対応した前記ソースコードの記述に先行して記述され、かつ前記解析において解析対象に含まれていた前記ソースコードの記述の中で定義されていない旨のエラーであることを示す場合、前記エラーに対応した前記ソースコードの記述に対する修正を実行しない、
処理を前記コンピュータに実行させることを特徴とする請求項３記載の修正支援プログラム。
【請求項５】
前記記憶部には、前記ソースコードに用いられるプログラミング言語、または前記解析の少なくともいずれかにおいて、記述に対応する意味が定義された字句要素を特定する情報がさらに記憶され、
前記内容を特定する情報と前記字句要素を特定する情報とに基づいて、前記第１の解析の際に検出されたエラーが、前記ソースコードにおいて前記エラーに対応した前記ソースコードの記述に前記定義された字句要素と異なる記述が含まれる旨のエラーである場合に、前記異なる記述と所定基準以上の相関を有する前記定義された字句要素を特定し、
前記ソースコードに対して、前記異なる記述を特定した前記字句要素に変更する修正を実行する、
処理を前記コンピュータに実行させることを特徴とする請求項４記載の修正支援プログラム。
【請求項６】
前記定義された字句要素を特定する情報の少なくとも一部が、前記特定の規則に応じた解析を実行するコンパイラが保持する情報である、
ことを特徴とする請求項５記載の修正支援プログラム。
【請求項７】
前記第１の解析においてエラーが検出されない場合、前記第１の解析が実行されたソースコードに基づいてソフトウェアプログラムを生成する、
処理を前記コンピュータに実行させることを特徴とする請求項４記載の修正支援プログラム。
【請求項８】
前記新たなソースコードを出力する処理は、生成した前記新たなソースコードの、修正が行われる前の前記ソースコードとの差分となる記述を識別可能に、表示手段に表示することを含む、
ことを特徴とする請求項１〜７のいずれか１項に記載の修正支援プログラム。
【請求項９】
コンピュータが、
ソースコードを受け付け、
受け付けた前記ソースコードを特定の規則に応じて解析する第１の解析を実行し、
前記第１の解析において少なくとも１つのエラーが検出された場合、前記少なくとも１つのエラーに対応する前記ソースコードの記述を修正した新たなソースコードを生成し、
前記少なくとも１つのエラーの中に、エラーの発生に応じて前記ソースコードに含まれるいずれかの部分についての解析を抑止させるエラーが含まれる場合、生成した前記新たなソースコードを前記特定の規則に応じて解析する第２の解析を実行し、
前記少なくとも１つのエラーの中に、前記抑止させるエラーが含まれない場合、前記新たなソースコードを出力する、
処理を実行することを特徴とする修正支援方法。
【請求項１０】
受け付けたソースコードを特定の規則に応じて解析する第１の解析を実行する解析部と、
前記第１の解析において少なくとも１つのエラーが検出された場合、前記少なくとも１つのエラーに対応する前記ソースコードの記述を修正した新たなソースコードを生成する生成部と、
前記少なくとも１つのエラーの中に、前記抑止させるエラーが含まれない場合、前記新たなソースコードを出力する出力部と、
を備え、
前記解析部は、前記少なくとも１つのエラーの中に、エラーの発生に応じて前記ソースコードに含まれるいずれかの部分についての解析を抑止させるエラーが含まれる場合、生成した前記新たなソースコードを前記特定の規則に応じて解析する第２の解析を実行する、
ことを特徴とする修正支援装置。
【請求項１１】
ソースコードを受け付け、
受け付けた前記ソースコードを特定の規則に応じて解析する第１の解析を実行し、
前記第１の解析において少なくとも１つのエラーが検出された場合、前記少なくとも１つのエラーに対応する前記ソースコードの記述を修正した新たなソースコードを生成し、
前記少なくとも１つのエラーの中に、エラーの発生に応じて前記ソースコードに含まれるいずれかの部分についての解析を抑止させるエラーが含まれる場合、生成した前記新たなソースコードを前記特定の規則に応じて解析する第２の解析を実行し、
前記少なくとも１つのエラーの中に、前記抑止させるエラーが含まれない場合、前記新たなソースコードを出力する、
処理を実行することを特徴とするコンパイラ。
【発明の詳細な説明】
【技術分野】
【０００１】
修正支援プログラム、修正支援方法、修正支援装置、およびコンパイラに関する
【背景技術】
【０００２】
ソフトウェア開発においては、プログラム開発者等は、プログラム言語を用いてソースコードを作成する。作成したソースコードは、コンパイラによってコンパイルされることで、情報処理装置が実行可能な形式のプログラムに変換される。
【０００３】
ソースコードに不適切な記述（誤記や記述の抜け）がある場合、コンパイラによるコンパイルが実行された際に、エラーが検出される。このような場合、ソースコードの開発者は、検出されたエラーの内容を確認し、エラーの原因となった記述の修正を行う。そして、修正後のソースコードに対して、再度コンパイルが実行される。
【０００４】
ソースコードの作成を支援する技術として、例えば下記特許文献１のように、エラーと、エラーに対する修正方法を対応付けた辞書を作成し、辞書に基づいて、コンピュータがエラーの修復（ソースコードの修正）を支援する技術が存在する。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開平１−３０７８３２号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
コンパイルの際に、検出したエラーの種類によってはソースコードに対するコンパイルが部分的にスキップされる事象（読み飛ばし）が発生する。読み飛ばしについて、図１を用いて一例を説明する。
【０００７】
図１は、ソースコードの一例であるソースコード１００と、ソースコード１００がコンパイルされた場合に検出されるエラーを示すエラーリスト１１０を示している。なお、以降の説明のため、ソースコード１００には、図１ではソースコードの各行の左端に行番号（１〜７）を記載している。
【０００８】
ソースコード１００は、ソースコードの先頭から（図１における行番号１の記述から）コンパイルが実行される。コンパイルの実行中に、コンパイラが認識できない記述が発生した場合にはエラーが検出される。
【０００９】
たとえば、図１のソースコード１００の場合、行番号２の部分では、「ＷＯＲＫＩＮＧ−ＳＴＯＲＡＧＥ  ＳＥＣＴＩＯＮ．」が記述されており、エラーコード「Ｓ１３５」の「誤った語‘ＷＯＲＫＩＮＧ−ＳＴＯＲＡＧＥ’が指定されています。次の段落または部（ＤＩＶＩＳＩＯＮ）まで無効になります。」というエラーが検出される。なお、エラーコードは、コンパイルの際に発生しうる種々のエラーに対して一意に付与される識別情報である。
【００１０】
エラーコード「Ｓ１３５」のエラーに起因して、行番号２〜５の記述は、コンパイラの処理（たとえば、リカバリ機能と呼ばれる）によってコンパイルがスキップされる。そして、行番号６の記述からコンパイル処理が再開される。コンパイル再開後、行番号７の部分では、「ＳＴＲＩＮＧ  ＷＤＡＴＡ１  ＷＤＡＴＡ２  ＤＥＬＩＭＩＴＥＤ  ＢＹ  ＳＩＺＥ  ＩＮＴＯ  ＷＤＡＴＡ３．」が記述されており、エラーコード「Ｓ２５０」の「利用者語‘ＷＤＡＴＡ１’が定義されていません。」というエラーが検出される。
【００１１】
ところで、図１のソースコード１００においては、行番号５の部分に「０１  ＷＤＡＴＡ３ ＰＩＸ  Ｘ（４０）.」が記述されているが、この記述は、本来「０１  ＷＤＡＴＡ３ ＰＩＣ  Ｘ（４０）.」の記述が正しい記述であり、コンパイルされた場合には、エラーが検出される。ただし、図１に示す例では、上述の通り、エラーコード「Ｓ１３５」のエラーに起因して、行番号２〜５の記述はコンパイルがスキップされるため、１回のコンパイル実行ではエラーが検出されない。そして、例えば、エラーコード「Ｓ１３５」のエラーの原因となった記述がソースコード作成者によって修正された修正後のソースコードにおいて、行番号２〜５の記述にコンパイラが実行された際に初めてエラーとして検出されることとなる。
【００１２】
上記の例のように、ソースコードに含まれるエラー原因となる記述を検出するためには、ソースコードのコンパイルと、ソースコードの作成者によるソースコードの修正作業が繰り返されなければならない。
【００１３】
また、上述のエラーコード「Ｓ２５０」のエラーは、エラーが検出された行番号７よりも前の記述においてＷＤＡＴＡ１が定義されていないことを示すものである。ただし、図１のソースコード１００の場合は、行番号３の「０１  ＷＤＡＴＡ１ ＰＩＣ  Ｘ（２０）.」という記述でＷＤＡＴＡ１が定義されているにも関わらず、エラーコード「Ｓ２５０」のエラーが検出されてしまう。すなわち、エラーコード「Ｓ２５０」のエラーが検出されているものの、行番号７の部分は正しい記述である。図１においてＷＤＡＴＡ１が定義されているにも関わらず、エラーコード「Ｓ２５０」のエラーが検出されてしまうのは、エラーコード「Ｓ１３５」のエラーに起因して、行番号２〜５の記述に対して読み飛ばしが発生するためである。
【００１４】
図１のエラーリスト１１０に基づいて、ソースコードの修正が行われる場合、例えば、定義されていないとされたＷＤＡＴＡ１を定義するための記述をソースコード中に追加する修正が想定される。しかし、ソースコード１００に対して、エラーコード「Ｓ１３５」のエラーの原因となった記述がされ、かつ、ＷＤＡＴＡ１を定義するための記述が追記された状態のソースコードが再びコンパイルされると、修正に起因して新たなエラーを招く。具体的には、以前のコンパイルの際に読み飛ばしが発生した行番号５の部分と、修正において追記されたＷＤＡＴＡ１を定義するための記述の２つの箇所において、ＷＤＡＴＡ１についての定義が重複する（例えば、二重定義と呼ばれる）。そして、定義の重複に起因して、コンパイルの際に、以前のコンパイルでは発生しなかった新たなエラーが発生してしまう。
【００１５】
以上のように、読み飛ばしの発生が原因となり、読み飛ばしの発生した部分に含まれるエラーの原因となる記述が発見できないことや、読み飛ばしを考慮せずに実行された修正が新たなエラーを発生させてしまう可能性がある。そのため、例えば、コンパイルでエラーの発生しないソースコードが作成されるまでに実行されるコンパイル回数の増加を招く。また、コンパイル回数の増加だけでなく、例えば、修正するエラーの総数の増加も招く。したがって、ソースコード作成者の作業負荷の増加や、コンパイルを実行するコンピュータの処理コストの増加を招く。
【００１６】
１つの側面によれば、ソースコードの修正負荷を低減することを目的とする。
【課題を解決するための手段】
【００１７】
１つの態様では、ソースコードを受け付け、受け付けた前記ソースコードを特定の規則に応じて解析する第１の解析を実行し、前記第１の解析において少なくとも１つのエラーが検出された場合、前記少なくとも１つのエラーに対応する前記ソースコードの記述を修正した新たなソースコードを生成し、前記少なくとも１つのエラーの中に、エラーの発生に応じて前記ソースコードに含まれるいずれかの部分についての解析を抑止させるエラーが含まれる場合、生成した前記新たなソースコードを前記特定の規則に応じて解析する第２の解析を実行し、前記少なくとも１つのエラーの中に、前記抑止させるエラーが含まれない場合、前記新たなソースコードを出力する処理をコンピュータに実行させる。
【発明の効果】
【００１８】
１つの側面によれば、ソースコードの修正負荷を低減することができる。
【図面の簡単な説明】
【００１９】
【図１】ソースコードの一例であるソースコード１００と、ソースコード１００がコンパイルされた場合に検出されるエラーを示すエラーリスト１１０を示す。
【図２】情報処理装置２００のハードウェア構成の一例を示す。
【図３】情報処理装置２００のソフトウェア構成を示す機能ブロック図を示す。
【図４】コンパイラ３００が実行する一連の処理の流れを示すフローチャートを示す。
【図５】ソースコード修正部３１０が実行する一連の処理の流れを示すフローチャートを示す。
【図６】修正情報記憶部３２４に記憶される情報の一例を示す。
【図７】変換候補データ記憶部３２５に記憶される情報の一例を示す。
【図８】本実施例における修正ソースコード８００を示す。
【図９】本実施例におけるエラーリスト９００を示す。
【図１０】本実施例における修正ソースコード１０００を示す。
【発明を実施するための最良の形態】
【００２０】
本発明を実施する実施例について、図面とともに説明をする。
〔ハードウェア構成〕
図２は、本発明の実施態様の１つである情報処理装置２００のハードウェア構成の一例である。情報処理装置２００は、例えば、それぞれがバス２０１で相互に接続された、Ｃｅｎｔｒａｌ Ｐｒｏｃｅｓｓｉｎｇ Ｕｎｉｔ（ＣＰＵ）２０２、メモリ２０３、記憶装置２０４、ＮｅｔｗｏｒｋＩｎｔｅｒｆａｃｅ Ｃｏｎｔｒｏｌｌｅｒ（ＮＩＣ）２０５、媒体読取装置２０６、入力装置２０７、表示装置２０８、を備えるコンピュータである。
【００２１】
ＣＰＵ２０２は、情報処理装置２００における種々の動作制御を行う。メモリ２０３、記憶装置２０４は、本実施例で説明した各種の処理を実行するためのプログラムや、各種の処理に利用される種々のデータを記憶することが可能である。記憶装置２０４は、例えば、ＨａｒｄＤｉｓｋ Ｄｒｉｖｅ（ＨＤＤ）、ＳｏｌｉｄＳｔａｔｅ Ｄｒｉｖｅ（ＳＳＤ）等の記憶媒体である。
【００２２】
ここで、ＣＰＵ２０２は、例えば、Ｍｉｃｒｏ Ｐｒｏｃｅｓｓｉｎｇ Ｕｎｉｔ（ＭＰＵ）、Ａｐｐｌｉｃａｔｉｏｎ Ｓｐｅｃｉｆｉｃ Ｉｎｔｅｇｒａｔｅｄ Ｃｉｒｃｕｉｔ（ＡＳＩＣ）などの、ハードウェア回路（プロセッサ）であっても良い。ＣＰＵ２０２が、メモリ２０３あるいは記憶装置２０４に記憶されたプログラムを読み出して処理、制御を実行することで、図３に示すコンパイラ３００およびソースコード修正部３１０に含まれる各機能部が実現されても良い。また、メモリ２０３、記憶装置２０４のそれぞれは、図３に記載した記憶部３２０として機能することができる。なお、コンパイラ３００、ソースコード修正部３１０、記憶部３２０については、図３とともに詳細を後述する。
【００２３】
ＮＩＣ２０５は、有線または無線のネットワークを介したデータの送受信に用いられるハードウェアである。ＮＩＣ２０５は、ＣＰＵ２０２の制御の下で、通信部１０４として機能することができる。
【００２４】
媒体読取装置２０６は、記録媒体からデータを読み取るための装置であり、例えば、ディスク媒体に記憶されたデータを読み取るディスクドライブや、メモリカードに記憶されたデータを読み取るカードスロット、フラッシュメモリからデータを読み取るデバイスポート等である。前述した記憶部３００に記憶されるデータの一部または全部は、媒体読取装置２０６を用いて読み取り可能な記録媒体に記憶されることとしても良い。
【００２５】
入力装置２０７は、情報処理装置２００のユーザからの入力や指定を受け付ける装置である。入力装置２０７の例としては、例えばキーボードやマウス、タッチパッドが挙げられる。表示装置２０８は、ＣＰＵ２０２の制御の下で、種々の情報の表示を行う。表示装置２０８は、例えば液晶ディスプレイである。なお、クライアント装置１が、例えばスマートフォンやＰＤＡ、タブレットＰＣである場合には、入力装置２０７の機能と表示装置２０８の機能とを備えるタッチパネルを用いることとしても良い。
〔ソフトウェア構成〕
図３は、本発明の実施態様の１つである情報処理装置２００のソフトウェア構成を示す機能ブロック図である。情報処理装置２００は、コンパイラ３００、ソースコード修正部３１０、記憶部３２０を備える。
【００２６】
コンパイラ３００について概要を説明する。コンパイラ３００は、ソースコードのコンパイルを実行し、ソースコードを変換したプログラム（目的プログラム）を生成する機能部である。コンパイラ３００は、解析部３０１、判定部３０２、プログラム生成部３０３を備える。
【００２７】
解析部３０１は、入力されたソースコードに対して、字句解析、構文解析、意味解析等の解析処理を実行する。なお、解析部３０１は、実行した解析においてエラーを検出した場合、検出したエラーを特定するエラーリストを出力する。
【００２８】
判定部３０２は、解析部３０１が実行した解析結果にエラーが含まれるか否かの判定を行う。判定の結果、解析部３０１が実行した解析結果にエラーが含まれる場合、判定部３０２は、ソースコード修正部３１０に対して通知を実行する。
【００２９】
プログラム生成部３０３は、解析部３０１が実行した解析の結果に基づいて、入力されたソースコードを変換し、目的プログラムを生成する。また、プログラム生成部３０３は、生成した目的プログラムを所望の出力先に出力することができる。
【００３０】
ソースコード修正部３１０について概要を説明する。ソースコード修正部３１０は、修正処理部３１１、修正ソースコード生成部３１２を備える。
【００３１】
修正処理部３１１は、解析部３０１が実行した解析においてエラーが検出された場合、コンパイラ３００に入力されたソースコードに対して、ソースコードの修正を実行する。
【００３２】
修正ソースコード生成部３１２は、修正処理部３１１によって修正が行われたソースコードを所望の出力先に出力することができる。なお、修正処理部３１１、修正ソースコード生成部３１２が実行する処理の詳細については後述する。
【００３３】
記憶部３２０について概要を説明する。記憶部３２０は、ソースコード記憶部３２１、解析結果記憶部３２２、エラーリスト記憶部３２３、修正情報記憶部３２４、変換候補データ記憶部３２５、修正ソースコード記憶部３２６、目的プログラム記憶部３２７を備える。なお、各記憶部に記憶される情報の詳細については、修正処理部３１１、修正ソースコード生成部３１２が実行する処理の詳細とともに後述する。
【００３４】
本実施例では、情報処理装置２００上で、コンパイラ３００、ソースコード修正部３１０、記憶部３２０が動作することとする。ただし、コンパイラ３００、ソースコード修正部３１０、記憶部３２０は複数のコンピュータを用いて実現されることとしても良い。また例えば、記憶部３２０は情報処理装置２００外の、情報処理装置２００がアクセス可能な記憶装置により実現されても良い。
【００３５】
なお、図３においては、情報処理装置２００における各機能部を、コンパイラ３００とソースコード修正部３１０とに分けて記載しているが、具体的な態様は図３に限定される必要はなく、各機能部がコンパイラ３００とソースコード修正部３１０の少なくともいずれかに含まれていればよい。あるいは、実施の態様が、図３に記載したソースコード修正部３１０の機能を有するコンパイラであっても構わない。
〔コンパイラ３００の処理〕
図４は、コンパイラ３００が実行する一連の処理の流れを示すフローチャートである。図４を用いて、コンパイラ３００が実行する処理について説明する。
【００３６】
まず、コンパイラ３００は、解析およびコンパイルの対象であるソースコードが入力されたか否かを判定する（ステップＳ４０１）。ソースコードが入力された場合（ステップＳ４０１、ＹＥＳ）、ステップＳ４０２に移行する。一方、ソースコードの入力がない場合（ステップＳ４０１、ＮＯ）は、ステップＳ４０１の処理を繰り返す。すなわち、このときは、コンパイラ３００はソースコードの入力待ちとなる。
【００３７】
ソースコードが入力された後、解析部３０１は、入力されたソースコードの解析処理を実行する（ステップＳ４０２）。なお、解析処理の際にエラーを検出した場合、解析部３０１は、検出したエラーを特定するエラーリストを出力する。具体的には、例えば、検出したエラーを特定するエラーリストを生成し、エラーリスト記憶部３２３に記憶することが可能である。例えば、ステップＳ４０１において図１のソースコード１００が入力された場合は、解析処理の結果エラーが検出され、図１のエラーリスト１１０が出力される。
【００３８】
判定部３０２は、ステップＳ４０２の解析処理において、エラーが検出されたか否かを判定する（ステップＳ４０３）。エラーが検出された場合（ステップＳ４０３、ＹＥＳ）、判定部３０２は、エラーの検出に応じてソースコード修正部３１０にエラーが検出された旨の通知を行う（ステップＳ４０４）。なお、通知に応じて、ソースコード修正部３１０では、後述するソースコードの修正処理が実行されることとなる。ステップＳ４０４の後は、ステップＳ４０１の処理に戻る。
【００３９】
一方、ステップＳ４０２の解析処理において、エラーが検出されなかった場合（ステップＳ４０３、ＮＯ）、プログラム生成部３０３は、解析処理の結果に基づいて、ステップＳ４０１で入力されたソースコードを変換し、目的プログラムを生成し（ステップＳ４０５）、図４に示す一連の処理を終了する。なお、コンパイラ３００は、ステップＳ４０５の処理終了後に、再びステップＳ４０１の処理を実行するようにしても良い。
〔ソースコード修正部３１０の処理〕
前述のように、解析部３０１が実行する解析処理においてエラーが検出された場合、ソースコード修正部３１０は、ソースコードの修正処理を実行する。ソースコード修正部３１０が実行する処理について、図および具体例を用いて説明する。以降の説明では、図１に示すソースコード１００に対してソースコードの修正処理が実行される場合を例示する。なお、図１に示すソースコード１００は、プログラミング言語としてＣＯｍｍｏｎ  Ｂｕｓｉｎｅｓｓ  Ｏｒｉｅｎｔｅｄ  Ｌａｎｇｕａｇｅ（ＣＯＢＯＬ）を用いて記述されたソースコードである。ただし、本実施例に開示する技術はソースコードがＣＯＢＯＬ以外のプログラミング言語により作成されている場合においても適用可能である。
【００４０】
図５は、ソースコード修正部３１０が実行する一連の処理の流れを示すフローチャートである。
【００４１】
コンパイラ３００の判定部３０２から通知を受信すると、修正処理部３１１は検出されたエラーの特定を実行する（ステップＳ５０１）。修正処理部３１１は、エラーリスト記憶部３２３に記憶されたエラーリストを参照し、エラーリストに含まれるエラーコードを１つ読み出す。例えば、修正処理部３１１は、図１に示すエラーリスト１１０から、エラーコード「Ｓ１３５」を読み出す。
【００４２】
次に、修正処理部３１１は、修正情報記憶部３２４を参照して、ステップＳ５０１で読み出したエラーコードと一致するエラーコードが、修正情報記憶部３２４に記憶されているか否かを判定する（ステップＳ５０２）。ステップＳ５０１で読み出したエラーコードと一致するエラーコードが、修正情報記憶部３２４に記憶されている場合（ステップＳ５０２、ＹＥＳ）、修正処理部３１１は、修正判定処理を実行する（ステップＳ５０３）。一方、ステップＳ５０１で読み出したエラーコードと一致するエラーコードが、修正情報記憶部３２４に記憶されていない場合（ステップＳ５０２、ＮＯ）、ステップＳ５０４の処理に移行する。
〔修正情報記憶部３２４〕
図６は、修正情報記憶部３２４に記憶される情報の一例を示す図である。例えば、修正情報記憶部３２４は、図６に示すエラーコード６０１、読み飛ばしフラグ６０２、読み飛ばし範囲情報６０３、チェック項目情報６０４、対処情報６０５を記憶する。
【００４３】
エラーコード６０１は、コンパイルの際に発生しうる種々のエラーに対して一意に付与される識別情報である。本実施例では、図１に示したエラーと同一の体系でエラーコードが付与されているものとする。
【００４４】
読み飛ばしフラグ６０２は、エラーによってコンパイルにおけるソースコードの読み飛ばしが発生するか否かを特定する情報である。図６では、読み飛ばしが発生する場合には、値として「ＯＮ」を、読み飛ばしが発生しない場合には、値として「ＯＦＦ」が入力されている。ただし、エラーによってコンパイルにおけるソースコードの読み飛ばしが発生するか否かを区別可能であれば、具体的な値の持ち方は図６の態様に限定されなくて良い。
【００４５】
読み飛ばし範囲情報６０３は、読み飛ばしが発生するエラーについて、読み飛ばしの対象となるソースコードの範囲を特定する情報である。例えば、図６では、エラーコード「Ｓ１３５」のエラーは、「次の段落または部（ＤＩＶＩＳＩＯＮ）まで無効」までソースコードの読み飛ばしが発生することが示されている。なお、図１のソースコード１００の場合は、行番号＝２の部分でエラーコード「Ｓ１３５」のエラーに起因する読み飛ばしが発生した場合、次の「部」を示す「ＰＲＯＣＥＤＵＲＥ  ＤＩＶＩＳＩＯＮ」が行番号＝６の部分に記述されている。したがって、行番号＝２〜５の部分の記述に対して、ソースコードの読み飛ばしが行われる。一方、ソースコードの読み飛ばしが行われないエラー、例えば、図６のエラーコード「Ｓ２５０」のエラーについては、エラーに起因してソースコードの読み飛ばしは発生しないため、読み飛ばし範囲情報６０３の部分について値は入力されていなくても良い。
【００４６】
チェック項目情報６０４は、エラーコードごとに、エラーが発生した場合の、ソースコードの記述についてのチェック内容を示す情報である。
【００４７】
例えば、図６の場合、エラーコード「Ｓ１３５」のエラーに対しては、「語の綴りが予約語と一致する」と、「ＤＡＴＡ  ＤＩＶＩＳＩＯＮが定義されている」の２つの事項について、修正処理部３１１がチェックを行うことを示している。また、エラーコード「Ｓ２５０」のエラーに対しては、「語の綴りは予約語と一致する」について、修正処理部３１１がチェックを行うことを示している。また、エラーコード「Ｓ２５０」のエラーに対しては、「ＤＡＴＡ  ＤＩＶＩＳＩＯＮは解析済みである」と、「ＷＯＲＫＩＮＧ−ＳＴＯＲＡＧＥ  ＳＥＣＴＩＯＮ内の語の綴りが利用者語と一致する」の２つの事項について、修正処理部３１１がチェックを行うことを示している。
【００４８】
対処情報６０５は、ソースコードの記述がチェック項目情報６０４に示すチェック事項を充足しない場合に実行される、ソースコードの修正方法を示す情報である。また、優先度情報６０６は、エラーに対して複数のチェック項目が存在する場合に、修正処理部３１１がチェックを実行する場合の優先度を示す情報である。図６においては、チェックの実行順序が数値で示されている。
【００４９】
図５のフローチャートの説明に戻る。ステップＳ５０２において、修正処理部３１１は、例えば、エラーコード「Ｓ１３５」が、修正情報記憶部３２４に記憶されているか否かを判定する。本例示においては、図６に示すように、修正情報記憶部３２４にはエラーコード「Ｓ１３５」が記憶されているため（ステップＳ５０２、ＹＥＳ）、修正処理部３１１はステップＳ５０３の修正判定処理を実行する。
【００５０】
ステップＳ５０３の修正判定処理では、まず、修正情報記憶部３２４の、ステップＳ５０１で読み出したエラーコードと一致するエラーコードと対応付けられたチェック項目情報６０４の内容を参照する。そして、参照したチェック項目情報６０４の内容に基づいて、ソースコードの記述についてのチェックを行う。
【００５１】
ステップＳ５０３の修正判定処理について、具体例を挙げて説明する。例えば、図１のソースコード１００に対しては、修正処理部３１１は、まず、優先度情報６０６に基づいて、１つ目のチェック項目である「語の綴りは予約語と一致する」についてチェックを行う。ソースコード１００の行番号＝２の部分には、「ＷＯＲＫＩＮＧ−ＳＴＯＲＡＧＥ  ＳＥＣＴＩＯＮ．」の記述がある。修正部３１１は、変換候補データ記憶部３２５を参照して、エラーの原因となった「ＷＯＲＫＩＮＧ−ＳＴＯＲＡＧＥ」の綴りが予約語と一致するか否かを判定する。
〔変換候補データ記憶部３２５〕
図７は、変換候補データ記憶部３２５に記憶される情報の一例を示す図である。例えば、変換候補データ記憶部３２５は、修正処理部３１１が、ソースコードの語の綴りの修正を実行する場合の、修正後の綴りの候補を記憶する。本実施例においては、変換候補データ記憶部３２５は、大別して予約語データ７０１、利用者語データ７０２を記憶する。
【００５２】
予約語データ７０１は、対象のプログラミング言語において予約語と定義された字句要素（トークン）を特定する情報である。本実施例では、プログラミング言語としてＣＯＢＯＬを対象としている。そこで、例えば、図７に示すように、予約語データ７０１は、予約語として「ＳＥＡＲＣＨ」、「ＳＥＣＴＩＯＮ」、「ＷＯＲＫＩＮＧ−ＳＴＯＲＡＧＥ」、「ＷＲＩＴＥ」といった字句要素が含まれることを示している。
【００５３】
利用者語データ７０２は、利用者語を記憶する記憶部である。利用者語とは、例えばソースコードの作成者やプログラムの利用者によりソースコードに記述する変数名やラベルとして定義された字句要素である。例えば、図７に示すように、利用者語データ７０２は、利用者語として、「ＦＵＮＣ−０１」、「ＦＵＮＣ−０２」、「Ｕ−ＬＡＢＥＬ−０１」、「Ｕ−ＬＡＢＥＬ−０２」といった字句要素が含まれることを示している。
【００５４】
変換候補データ記憶部３２５には、例えば、対象とするプログラミング言語や利用者に合わせて予約語データ７０１、利用者語データ７０２が取得、および記憶されることとしてもよい。また、例えば、コンパイラ３００が、コンパイル実行のために、予約語や利用者語の一覧データ（図示しない）を保持している場合は、修正処理部３１１は、その一覧データを参照する、あるいは変換候補データ記憶部３２５に複製して利用することとしても良い。
【００５５】
図５のステップＳ５０３の説明に戻ると、「ＷＯＲＫＩＮＧ−ＳＴＯＲＡＧＥ」は図７に示すように、予約語として定義されている字句要素である。したがって、修正処理部３１１は、１つ目のチェック項目について、語の綴りは予約語と一致すると判定する。
【００５６】
次に、修正処理部３１１は、エラーコード「Ｓ１３５」に対応付けられた２つ目のチェック項目「ＤＡＴＡ  ＤＩＶＩＳＩＯＮが定義されている」についてチェックを行う。ＣＯＢＯＬにおいては、ソースコードにおいて、「ＷＯＲＫＩＮＧ−ＳＴＯＲＡＧＥ  ＳＥＣＴＩＯＮ．」の記述の前に、「ＤＡＴＡ  ＤＩＶＩＳＩＯＮ．」という記述をしておく必要がある。しかし、図１のソースコード１００では、「ＷＯＲＫＩＮＧ−ＳＴＯＲＡＧＥ  ＳＥＣＴＩＯＮ．」の前に、「ＤＡＴＡ  ＤＩＶＩＳＩＯＮ．」の記述は存在しない。したがって、修正処理部３１１は、２つ目のチェック項目について、ＤＡＴＡ  ＤＩＶＩＳＩＯＮは定義されていない、すなわち、ソースコードの記述がチェック項目を満たさないと判定する。
【００５７】
チェック項目を満たさないと判定した場合、修正処理部３１１は、修正情報記憶部３２４の対処情報６０５を参照する。エラーコード「Ｓ１３５」に対応付けられた対処情報６０５では、２つ目のチェック項目に対応する対処として、「記述「ＤＡＴＡ  ＤＩＶＩＳＩＯＮ．」をＤＩＶＩＳＩＯＮの先頭に追加」が示されている。そこで、修正処理部３１１は、ソースコード１００に対して、エラーコード「Ｓ１３５」のエラーの原因となった行番号＝２の記述以前の、ＤＩＶＩＳＩＯＮの先頭に該当する部分に、「ＤＡＴＡ  ＤＩＶＩＳＩＯＮ．」の記述を追記する修正を行うと決定する。なお、ソースコード１００の場合は、行番号＝１と行番号＝２の間がＤＩＶＩＳＩＯＮの先頭に該当する。
【００５８】
以上のように、エラーコード「Ｓ１３５」に対応するソースコード１００の修正方法が決定される。なお、もし１つ目のチェック項目「語の綴りは予約語と一致する」について、ソースコードの記述がチェック項目を満たさないと判定した場合は、１つ目のチェック項目に対応する対処情報６０６に示される修正方法が採用される。その場合、２つ目のチェック項目については、チェック項目を満たさないと判定されたとしても、２つ目のチェック項目に対応する修正は行わないこととする。１つ目のチェック項目に対応した修正が実行されることで、２つ目のチェック項目に対応する修正が実行されなくともエラーが検出されないようにソースコードが修正されることが考えられるためである。
【００５９】
ステップＳ５０３の修正判定処理を実行後、修正処理部３１１は、エラーリストに示される全てのエラーについて確認済みが否かを判定する（ステップＳ５０４）。エラーリストに示される全てのエラーについて確認済みでない場合（ステップＳ５０４、ＮＯ）、修正処理部３１１は、ステップＳ５０１に戻り、エラーリストに示される、読み出しが行われていないエラーコードを１つ読み出して、ステップＳ５０２以降の処理を繰り返す。一方、エラーリストに示される全てのエラーについて確認済みとなった場合（ステップＳ５０４、ＹＥＳ）、ステップＳ５０５の処理に移行する。
【００６０】
ここで例えば、図１のソースコード１００に対して、上述のように、エラーコード「Ｓ１３５」に対する修正判定処理のみが完了した段階では、エラーコード「Ｓ２５０」が確認済みでないエラーとして残存している。したがって、修正処理部３１１は、図１に示すエラーリスト１１０から、エラーコード「Ｓ２５０」を読み出す。
【００６１】
そして、修正処理部３１１は、エラーコード「Ｓ２５０」が、修正情報記憶部３２４に記憶されているか否かを判定する。本例示においては、図６に示すように、修正情報記憶部３２４にはエラーコード「Ｓ２５０」が記憶されているため（ステップＳ５０２、ＹＥＳ）、修正処理部３１１は、エラーコード「Ｓ２５０」について、再びステップＳ５０３の修正判定処理を実行する。
【００６２】
ここでは、エラーコード「Ｓ２５０」のエラーを例示として、再度ステップＳ５０３の修正判定処理について説明する。修正処理部３１１は、修正情報記憶部３２４の、エラーコード「Ｓ２５０」と対応付けられたチェック項目情報６０４の内容を参照する。エラーコード「Ｓ２５０」と対応付けられたチェック項目情報６０４に基づいて、エラーコード「Ｓ２５０」のエラーに対しては、優先度情報６０６に基づいて、まず１つ目のチェック項目「ＤＡＴＡ  ＤＩＶＩＳＩＯＮが解析済みである」について、修正処理部３１１がチェックを行う。
【００６３】
ここでＣＯＢＯＬにおいては、ＤＡＴＡ  ＤＩＶＩＳＩＯＮが解析された場合、解析結果を示す内部データが解析部３０１によって生成され、例えば記憶部３２０の記憶領域に記憶される。したがって、修正処理部３１１は、ＤＡＴＡ  ＤＩＶＩＳＩＯＮに対応する内部データが存在するか否かに基づいて、ＤＡＴＡ  ＤＩＶＩＳＩＯＮが解析済みであるか否かを判定することができる。
【００６４】
なお、図１のソースコード１００がコンパイルされた時点では、ＤＡＴＡ  ＤＩＶＩＳＩＯＮに対応する内部データは生成されていない。これは、エラーコード「Ｓ１３５」のエラーに起因するソースコードの読み飛ばしによって、ＤＡＴＡ  ＤＩＶＩＳＩＯＮに対応する記述である、ソースコード１００の行番号２〜５の記述についての解析処理およびコンパイルが実行されていないためである。したがって、修正処理部３１１は、ソースコード１００の記述が、１つ目のチェック項目「ＤＡＴＡ  ＤＩＶＩＳＩＯＮが解析済みである」を満たさないと判定する。
【００６５】
ソースコード１００の記述が、１つ目のチェック項目を満たさないと判定したので、修正処理部３１１は、対処情報６０５に示される、１つ目のチェック項目「ＤＡＴＡ  ＤＩＶＩＳＩＯＮが解析済みである」に対応する修正方法をソースコード１００に適用することを決定する。
【００６６】
ここで、１つ目のチェック項目「ＤＡＴＡ  ＤＩＶＩＳＩＯＮが解析済みである」に対応する修正方法は、「修正を実行しない」である。この場合、結果として、エラーコード「Ｓ２５０」のエラーに対応したソースコード１００の記述の修正は実行されない。仮に、ソースコード１００の記述が２つ目のチェック項目を満たさない場合であっても、１つ目のチェック項目に対応する修正方法である「修正を実行しない」に従って、エラーコード「Ｓ２５０」のエラーに対応したソースコード１００の記述の修正は実行されない。ＤＡＴＡ  ＤＩＶＩＳＩＯＮが解析されていない状態で、２つ目のチェック項目に対応する対処情報６０５に基づいて、定義の記述を追加する記述が追加されてしまうと、前述した二重定義が発生してしまう可能性があるためである。
【００６７】
エラーコード「Ｓ２５０」について修正判定処理を実行後、修正処理部３１１は、エラーリストに示される全てのエラーについて確認済みが否かを再び判定する（ステップＳ５０４）。エラーコード「Ｓ１３５」、「Ｓ２５０」について修正判定処理が行われたことで、図１のエラーリスト１１０については、全件チェックが行われたため、修正処理部３１１は、エラーリストに示される全てのエラーについて確認済みと判定する（ステップＳ５０４、ＹＥＳ）。
【００６８】
ステップＳ５０５では、修正処理部３１１は、ステップＳ５０３の修正判定処理において実行すると決定された修正方法に基づいて、新たなソースコード（修正ソースコード）を生成する。
【００６９】
図８に、図１のソースコード１００について検出されたエラーに修正処理がなされた修正ソースコードの例を示す。図８の修正ソースコード８００は、図１のソースコード１００と比較すると、「ＷＯＲＫＩＮＧ−ＳＴＯＲＡＧＥ  ＳＥＣＴＩＯＮ．」の記述の前に、「ＤＡＴＡ  ＤＩＶＩＳＩＯＮ．」の記述が追加されている点で差分がある。なお、エラーコード「Ｓ２５０」のエラーに対応する行番号８（ソースコード１００における行番号７）の部分の記述については、修正は行われていない。
【００７０】
修正処理部３１１は、例えば、生成した修正ソースコードを修正ソースコード記憶部３２６に記憶することが可能である。
【００７１】
ステップＳ５０５の処理を実行後、修正処理部３１１は、ステップＳ５０１〜Ｓ５０３でチェックされたエラーに、読み飛ばしが発生するエラーが存在するか否かを判定する（ステップＳ５０６）。具体的には、例えば、修正処理部３１１は、修正情報記憶部３２４において、ステップＳ５０１〜Ｓ５０３でチェックされたエラーのエラーコードについて、読み飛ばしフラグ６０２の値が「ＯＮ」になっているか否かを判定する。読み飛ばしフラグ６０２の値が「ＯＮ」になっている、すなわち、読み飛ばしが発生するエラーが存在すると判定した場合（ステップＳ５０６、ＹＥＳ）、修正処理部３１１は、ステップＳ５０５で生成した修正ソースコードをコンパイラ３００に入力する（ステップＳ５０７）。言い換えれば、修正処理部３１１は、修正ソースコードをコンパイルの対象として、コンパイラ３００に再度コンパイルの処理を実行させる。
【００７２】
一方、読み飛ばしフラグ６０２の値が「ＯＦＦ」になっている、すなわち、読み飛ばしが発生するエラーが存在しないと判定した場合（ステップＳ５０６、ＮＯ）、修正処理部３１１は、修正ソースコードの出力処理を行う（ステップＳ５０８）。出力処理は、例えば、修正処理部３１１が、情報処理装置２００の表示装置２０８に修正ソースコードを表示することとしても良いし、情報処理装置２００が通信可能な他の装置（図示しない）に修正ソースコードを送信することとしても良い。修正ソースコードを表示装置２０８に表示する際には、例えば、本実施例で説明した処理により修正が行われたソースコードの記述（変更された文字や、修正の生じた行番号、あるいは修正の生じた行全体など）が判別できる態様で表示しても良い。例えば、修正が行われたソースコードの記述について、表示色や文字の大きさ、書体などを、修正されていない記述と異ならせたり、修正が行われたソースコードの記述をハイライトで表示するといった態様を採ることができる。
【００７３】
なお、修正ソースコードにステップＳ５０３の修正判定処理において修正ができないと判定されたエラーが存在する場合には、修正できないと判定されたエラーについてのエラーリストを修正ソースコードとともに出力することとしても良い。また、ステップＳ５０５において、生成した修正ソースコードが修正ソースコード記憶部３２６に記憶された場合、修正ソースコードの出力処理が行われたとしてステップＳ５０８の出力処理が省略されても良い。
〔コンパイルの再実行〕
上述したように、読み飛ばしが発生するエラーが存在すると判定した場合（ステップＳ５０６、ＹＥＳ）、修正処理部３１１は、ステップＳ５０５で生成した修正ソースコードをコンパイラ３００に入力する（ステップＳ５０７）。これは、読み飛ばしがされたソースコードの部分に、コンパイルで検出されなかったさらなるエラーが存在する可能性があるためである。修正処理部３１１は、エラーに起因するソースコードの読み飛ばしが発生するか否かを判定し、読み飛ばしが発生する場合は、読み飛ばしの原因となるエラーを修正した修正ソースコードについて再びコンパイルがなされるように制御する。これにより、読み飛ばしのために検出されなかったエラーの洗い出しを行うことが可能となる。
【００７４】
コンパイルの再実行について、図８で示した修正ソースコード８００を例として説明する。例として、上述したステップＳ５０７の処理により、修正ソースコード８００がコンパイラ３００に入力され、修正ソースコード８００のコンパイルが実行されたとする。コンパイルが実行されると、修正ソースコード８００に対して、解析部３０１による解析処理が実行される。
【００７５】
図９に、修正ソースコード８００の解析処理が実行された場合に検出されるエラーを示すエラーリスト９００を示す。図９のエラーリスト９００は、修正ソースコード８００の行番号＝６の部分の「０１  ＷＤＡＴＡ３ ＰＩＸ  Ｘ（４０）.」の記述について、エラーコード「Ｓ１２３」のエラーと、エラーコード「Ｓ２２２」のエラーが検出されたことを示している。エラーコード「Ｓ１２３」は、「許されない語‘ＰＩＸ’が現れました。次の認識できる句、段落、節（ＳＥＣＴＩＯＮ）または部（ＤＩＶＩＳＩＯＮ）まで無効になります。」という内容である。また、エラーコード「Ｓ２２２」のエラーは、「ＰＩＣＴＵＲＥ句がありません。」という内容である。
【００７６】
コンパイラ３００の判定部３０２は、解析部３０１が実行した解析結果にエラーが含まれるか否かの判定を行う。本例示では、図９のように、修正ソースコード８００に対してエラーリスト９００が出力されているので、判定部３０２は、ソースコード修正部３１０に対して通知を実行する。判定部３０２から通知を受信したソースコード修正部３１０では、図５に示した一連の処理が、修正ソースコード８００に対して実行される。
【００７７】
修正ソースコード８００に対する図５に示した処理について説明する。なお、以降で記載する各ステップで実行される処理は、処理の対象が修正ソースコード８００である点以外は、前述の説明と同様の処理である。
【００７８】
修正処理部３１１は、例えば、図９に示すエラーリスト９００から、エラーコード「Ｓ１２３」を読み出す（ステップＳ５０１）。次に、修正処理部３１１は、修正情報記憶部３２４を参照して、エラーコード「Ｓ１２３」が、修正情報記憶部３２４に記憶されているか否かを判定する（ステップＳ５０２）。図６を参照すると、本例示では修正情報記憶部３２４にはエラーコード「Ｓ１２３」が記憶されているので（ステップＳ５０２、ＹＥＳ）、修正処理部３１１は、修正ソースコード８００に対する修正判定処理を実行する（ステップＳ５０３）。
【００７９】
エラーコード「Ｓ１２３」のエラーについての修正判定処理について説明する。図６に示すように、修正情報記憶部３２４には、エラーコード「Ｓ１２３」に対応するチェック項目情報６０４として、「語の綴りが予約語と一致する」が記憶されている。したがって、修正処理部３１１は、「ＰＩＸ」の綴りと、図７の予約語情報７０１に含まれる各予約語の綴りとを比較して、両者の綴りが一致するかを判定する。ただし、本例示においては、予約語情報７０１に「ＰＩＸ」という予約語は含まれていないものとする。したがって、修正処理部３１１は、「ＰＩＸ」の綴りと、図７の予約語情報７０１に含まれる各予約語の綴りとが一致しない、すなわちチェック事項を満たさないと判定する。
【００８０】
チェック事項を満たさないと判定した場合、修正処理部３１１は、対処情報６０６に示される、「Ｓ１２３」のエラー、および実行したチェック項目に対応する修正方法が採用される。
【００８１】
修正ソースコード８００中のエラーコード「Ｓ１２３」のエラーに対応する行番号６に記述された「ＰＩＸ」の語について、語の綴りが所定以上の相関を有する予約語が存在するか否かを判定する。具体的には、例えば、修正処理部３１１は、「ＰＩＸ」の綴りと、図７の予約語情報７０１に含まれる各予約語の綴りの類似度を判定し、類似度が６０％以上の予約語が存在するか否かを判定する。類似度は、例えば、行番号６に記述された「ＰＩＸ」の語の文字数（文字列の長さ）に対する、「ＰＩＸ」と予約語情報７０１に含まれる各予約語とで一致する文字数（文字列の長さ）の割合を算出し、類似度とすることができる。
【００８２】
そして、類似度が６０％以上の予約語が１つ以上存在する場合、修正処理部３１１は、修正ソースコード８００中の「ＰＩＸ」という記述を、類似度が６０％以上の１つ以上の予約語の内、類似度が最大の予約語に置換する修正を行うことを決定する。
【００８３】
本例示の場合、予約語情報７０１には、「ＰＩＣ」という予約語が含まれており、上述した算出方法において、類似度の値は６７％（小数点以下は四捨五入）となる。そこで、修正処理部３１１は、修正ソースコード８００中の「ＰＩＸ」という記述を、予約語「ＰＩＣ」に置換する修正を行うことを決定する。
【００８４】
このように、予約語の誤記の可能性のある記述を修正することでエラーの解消を図る。なお、上述した類似度の算出方法や、６０％という閾値はあくまで一例であり、適宜変更することが可能である。上述した算出方法と異なる類似度であっても、２つの語の綴りの類似度を判定可能であれば代替することが可能である。なお、上述した類似度の算出方法や、６０％という閾値はあくまで一例であり、適宜変更することが可能である。上述した算出方法と異なる類似度であっても、２つの語の綴りの類似度を判定可能であれば他の算出方法に基づく類似度で代替することが可能である。  エラーコード「Ｓ１２３」についての修正判定処理を実行後、修正処理部３１１は、エラーリストに示される全てのエラーについて確認済みが否かを判定する（ステップＳ５０４）。本例示においては、エラーコード「Ｓ１３５」に対する修正判定処理のみが完了した段階では、エラーコード「Ｓ２２２」が確認済みでないエラーとして残存している。したがって、修正処理部３１１は、図９に示すエラー９００から、エラーコード「Ｓ２２２」を読み出す（ステップＳ５０１に戻る）。
【００８５】
修正処理部３１１は、修正情報記憶部３２４を参照して、エラーコード「Ｓ２２２」が、修正情報記憶部３２４に記憶されているか否かを判定する（ステップＳ５０２）。図３を参照すると、本例示では修正情報記憶部３２４にはエラーコード「Ｓ２２２」が記憶されているので（ステップＳ５０２、ＹＥＳ）、修正処理部３１１は、修正ソースコード８００に対する修正判定処理を実行する（ステップＳ５０３）。
【００８６】
エラーコード「Ｓ２２２」のエラーについての修正判定処理について説明する。図６に示すように、修正情報記憶部３２４には、エラーコード「Ｓ２２２」に対応するチェック項目情報６０４として、「語の綴りが予約語「ＰＩＣ」と類似度６０％以上である」と、「行内にＰＩＣＴＵＲＥ句の定義がある」が記憶されている。したがって、修正処理部３１１は、修正ソースコード８００中のエラーコード「Ｓ１２３」のエラーに対応する行番号６に記述された「ＰＩＸ」の語について、語の綴りが予約語「ＰＩＣ」と所定以上の相関を有するか否かを判定する。
【００８７】
具体的には、例えば、修正処理部３１１は、「ＰＩＸ」の綴りと、予約語「ＰＩＣ」の綴りの類似度が６０％以上であるか否かを判定する。類似度は、例えば、エラーコード「Ｓ１２３」のエラーについての修正判定処理において述べた類似度と同様に算出されることとして良い。そして、類似度が６０％以上の場合、修正処理部３１１は、修正ソースコード８００中の「ＰＩＸ」という記述を、予約語である「ＰＩＣ」に置換する修正を行うことを決定する。本例示においては、類似度の値は６７％（小数点以下は四捨五入）となるため、修正処理部３１１は、修正ソースコード８００中の「ＰＩＸ」という記述を、予約語である「ＰＩＣ」に置換する修正を行うことを決定する。このように、予約語の誤記の可能性のある記述を修正することでエラーの解消を図る。なお、本例示においては、上述したエラーコード「Ｓ１２３」のエラーに対する修正と、エラーコード「Ｓ２２２」のエラーについての修正は同じ内容となっている。
【００８８】
エラーコード「Ｓ２２２」についての修正判定処理を実行後、修正処理部３１１は、エラーリストに示される全てのエラーについて確認済みが否かを再び判定する（ステップＳ５０４）。エラーコード「Ｓ１２３」、「Ｓ２２２」について修正判定処理が行われたことで、図９のエラー９００については、全件チェックが行われたため、修正処理部３１１は、エラーリストに示される全てのエラーについて確認済みと判定する（ステップＳ５０４、ＹＥＳ）。そして、修正処理部３１１は、ステップＳ５０３の修正判定処理の結果を反映した新たなソースコード（修正ソースコード（２回目））を生成する（ステップＳ５０５）。
【００８９】
図８の修正ソースコード８００について検出されたエラーに修正がなされた修正ソースコード（２回目）の例を図１０に示す。
【００９０】
図１０の修正ソースコード１０００は、図８の修正ソースコード８００と比較すると、行番号＝６の部分の記述が、「０１  ＷＤＡＴＡ３ ＰＩＸ  Ｘ（４０）.」から「０１  ＷＤＡＴＡ３ ＰＩＣ  Ｘ（４０）.」に変更されている点で差分がある。
【００９１】
ステップＳ５０５の処理を実行後、修正処理部３１１は、エラーコード「Ｓ１２３」のエラー、およびエラーコード「Ｓ２２２」ステップＳ５０１〜Ｓ５０３でチェックされたエラーに、読み飛ばしが発生するエラーが存在するか否かを判定する（ステップＳ５０６）。
【００９２】
本例示の場合、修正情報記憶部３２４に記憶されたエラーコード「Ｓ１２３」には、読み飛ばしフラグ６０２の値として「ＯＮ」が対応付けられているため、修正処理部３１１は、読み飛ばしが発生するエラーが存在すると判定する（ステップＳ５０６、ＹＥＳ）。そして、修正処理部３１１は、修正ソースコード１０００をコンパイルの対象として、コンパイラ３００に再度コンパイルの処理を実行させる。
【００９３】
コンパイラ３００の解析部３０１は、修正ソースコード１０００の解析処理を実行する。さらに、判定部３０２は、解析部３０１が実行した修正ソースコード１０００の解析処理においてエラーが検出されたか否かを検出する。
【００９４】
修正ソースコード１０００については、懐石部３０１による解析処理においてエラーは検出されない。したがって、プログラム生成部３０３は、修正ソースコード１０００を変換して目的プログラムを生成する。
【００９５】
すなわち、コンパイラ３００は、修正ソースコード１０００についてエラーを検出せずにコンパイルを実行し、目的プログラムを生成することができる。
【００９６】
以上のように、本実施例では、当初入力されたソースコードに対して、コンパイルと修正処理が必要に応じて繰り返されることで、コンパイルにおけるエラーが低減可能な修正ソースコードを生成することができる。特に、本実施例においては、コンパイルの際に検出されたエラーに起因して、ソースコードの読み飛ばしが発生すると判定された場合に、読み飛ばしの原因となったソースコードを修正した上で、修正したソースコードに対して再度のコンパイルを実行する。これにより、修正されたソースコードに従った目的プログラムが自動で生成されるのみならず、ソースコードの読み飛ばしにより、それまでのコンパイルでは検出がされなかったエラーを検出することを可能としている。また、読み飛ばしが行われたソースコードの記述が、エラーの修正によってコンパイルされることで解消する可能性のあるエラーについては、修正を行わずにコンパイルを実行することで、二重定義によるエラーの発生を抑制することができる。
【００９７】
本実施例において説明したエラーの検出、新たなエラーの発生の抑制によって、コンパイルでエラーの発生しないソースコードが作成されるまでに実行されるコンパイル回数の増加を抑制することができる。また、コンパイル回数の増加だけでなく、発生するエラーの数の点でも、エラー発生数の減少を図ることができる。したがって、ソースコード作成者の作業負荷や、コンパイルを実行するコンピュータの処理コストに対する改善を実現することができる。
〔変形例について〕
これまでに説明した実施例は、本開示についての実施の態様の１つであり、定義改変を行うことが可能である。
【００９８】
例えば、本実施例では、ソースコードの作成およびコンパイルは、プログラミング言語としてＣＯＢＯＬが用いられる場合を例示している。ただし、使用されるプログラミング言語、あるいはコンパイラに応じて、修正情報記憶部３２４や、変換候補データ記憶部３２５に記憶される情報を適宜変更することで、ＣＯＢＯＬ以外のプログラミング言語によるソースコードの作成に適用することができる。
【符号の説明】
【００９９】
２００  情報処理装置
２０２  ＣＰＵ
２０３  メモリ
２０４  記憶装置
２０５  ＮＩＣ
２０６  媒体読取装置
２０７  入力装置
２０８  表示装置
３００  コンパイラ
３１０  ソースコード修正部
３２０  記憶部
【図１】
2018084939.tif 000003
【図２】
2018084939.tif 000004
【図３】
2018084939.tif 000005
【図４】
2018084939.tif 000006
【図５】
2018084939.tif 000007
【図６】
2018084939.tif 000008
【図７】
2018084939.tif 000009
【図８】
2018084939.tif 000010
【図９】
2018084939.tif 000011
【図１０】
2018084939.tif 000012