(57)【要約】【課題】ソースコードの解析を支援する。【解決手段】ソースコード解析支援装置が、プログラム言語によって記述されたソースコードを解析するための文法定義情報が記憶される文法定義情報記憶部と、プログラム言語によって記述されたソースコードを読み込むソースコード読み込み部と、ソースコード読み込み部によって読み込まれたソースコードと文法定義情報とを比較して、ソースコードに、文法定義情報によって定義されていない記述である未定義記述が含まれるか否かを判定する構文解析部と、構文解析部によって、ソースコードに未定義記述が含まれると判定された場合、未定義記述を出力するエラー箇所特定部と、エラー箇所特定部によって出力された未定義記述に対応する文法定義情報の入力を受け付け、入力された文法定義情報を文法定義情報記憶部に記憶させる文法定義情報更新部と、を備える。【選択図】図１
2015138435.tif 000002
【特許請求の範囲】
【請求項１】
所定のプログラム言語における文法規則を定義した文法定義情報であって、前記プログラム言語によって記述されたソースコードを解析するための文法定義情報が記憶される文法定義情報記憶部と、
前記プログラム言語によって記述されたソースコードを読み込むソースコード読み込み部と、
前記ソースコード読み込み部によって読み込まれた前記ソースコードと前記文法定義情報とを比較して、前記ソースコードに、前記文法定義情報によって定義されていない記述である未定義記述が含まれるか否かを判定する構文解析部と、
前記構文解析部によって、前記ソースコードに前記未定義記述が含まれると判定された場合、当該未定義記述を出力するエラー箇所特定部と、
前記エラー箇所特定部によって出力された前記未定義記述に対応する文法定義情報の入力を受け付け、入力された文法定義情報を前記文法定義情報記憶部に記憶させる文法定義情報更新部と、
を備えることを特徴とするソースコード解析支援装置。
【請求項２】
前記プログラム言語の文法規則を自然言語によって解説したドキュメントである言語仕様書が記憶される言語仕様書記憶部を備え、
前記前記文法定義情報更新部は、前記未定義記述に対応する前記言語仕様書の箇所を特定し、特定した箇所を出力し、出力した当該言語仕様書の箇所に応じて入力される前記文法定義情報の入力を受け付ける
ことを特徴とする請求項１に記載のソースコード解析支援装置。
【請求項３】
前記文法定義情報は、前記プログラム言語における文法規則を終端記号と非終端記号とによって定義し、
前記文法定義情報更新部は、前記未定義記述を新たな終端記号として定義する文法定義情報と、前記未定義記述に対応する新たな非終端記号を定義する文法定義情報とのいずれかの入力を受け付ける
ことを特徴とする請求項１または請求項２に記載のソースコード解析支援装置。
【請求項４】
前記文法定義情報に定義された終端記号および非終端記号のそれぞれに対応して設計書に出力する出力項目が含まれる変換表が記憶される変換表記憶部と、
前記ソースコードと、前記文法定義情報と、前記変換表とに基づいて設計書を生成する設計書生成部と、
を備えることを特徴とする請求項３に記載のソースコード解析支援装置。
【請求項５】
前記エラー箇所特定部が出力した前記未定義記述に対応する前記変換表の入力を受け付け、入力された変換表を前記変換表記憶部に記憶させる変換表更新部と、
を備えることを特徴とする請求項４に記載のソースコード解析支援装置。
【請求項６】
所定のプログラム言語における文法規則を定義した文法定義情報であって、前記プログラム言語によって記述されたソースコードを解析するための文法定義情報が記憶される文法定義情報記憶部を備えるソースコード解析支援装置の、
ソースコード読み込み部が、前記プログラム言語によって記述されたソースコードを読み込むステップと、
構文解析部が、前記ソースコード読み込み部によって読み込まれた前記ソースコードと前記文法定義情報とを比較して、前記ソースコードに、前記文法定義情報によって定義されていない記述である未定義記述が含まれるか否かを判定するステップと、
エラー箇所特定部が、前記構文解析部によって、前記ソースコードに前記未定義記述が含まれると判定された場合、当該未定義記述を出力するステップと、
文法定義情報更新部が、前記エラー箇所特定部によって出力された前記未定義記述に対応する文法定義情報の入力を受け付け、入力された文法定義情報を前記文法定義情報記憶部に記憶させるステップと、
を備えることを特徴とするソースコード解析支援方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ソースコード解析支援装置、ソースコード解析支援方法に関する。
【背景技術】
【０００２】
ソフトウェアの開発や保守を効率良く行うためのリエンジニアリングとよばれる技術が研究されている。例えば、所定のプログラム言語で記述されたソースコードを解析し、そのソースコードにおける処理内容等を抽象的に示す設計書を自動的に生成したり（リバースエンジニアリング）、そのソースコードと同様の処理を実行する異なるプログラム言語のソースコードを自動的に生成したり（フォワードエンジニアリング）することで、ソフトウェアの開発効率、保守効率を高めることができる。リバースエンジニアリングにおいては、解析対象であるソースコードのプログラム言語における文法規則を定義した文法定義情報を予め用意し、パーサや構文解析器等とよばれるソフトウェアが、このような文法定義情報に基づいてソースコードの解析処理を行う。特許文献１には、このような構文解析器が記載されている。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特開平５−２４１８５０号公報
【発明の概要】
【発明が解決しようとする課題】
【０００４】
しかしながら、このような構文解析器は、文法定義情報に定義されていない記述が解析対象のソースコードに存在すれば解析処理を行うことができない。そこで、リバースエンジニアリングにおける効率良いソースコードの解析を支援することが望ましい。
【０００５】
本発明は、このような状況に鑑みてなされたもので、ソースコードの解析を支援するソースコード解析支援装置、ソースコード解析支援方法を提供する。
【課題を解決するための手段】
【０００６】
上述した課題を解決するために、本発明の一態様は、所定のプログラム言語における文法規則を定義した文法定義情報であって、プログラム言語によって記述されたソースコードを解析するための文法定義情報が記憶される文法定義情報記憶部と、プログラム言語によって記述されたソースコードを読み込むソースコード読み込み部と、ソースコード読み込み部によって読み込まれたソースコードと文法定義情報とを比較して、ソースコードに、文法定義情報によって定義されていない記述である未定義記述が含まれるか否かを判定する構文解析部と、構文解析部によって、ソースコードに未定義記述が含まれると判定された場合、未定義記述を出力するエラー箇所特定部と、エラー箇所特定部によって出力された未定義記述に対応する文法定義情報の入力を受け付け、入力された文法定義情報を文法定義情報記憶部に記憶させる文法定義情報更新部と、を備えることを特徴とするソースコード解析支援装置である。
【０００７】
また、本発明の一態様は、プログラム言語の文法規則を自然言語によって解説したドキュメントである言語仕様書が記憶される言語仕様書記憶部を備え、文法定義情報更新部は、未定義記述に対応する言語仕様書の箇所を特定し、特定した箇所を出力し、出力した言語仕様書の箇所に応じて入力される文法定義情報の入力を受け付けることを特徴とする。
【０００８】
また、本発明の一態様は、文法定義情報は、プログラム言語における文法規則を終端記号と非終端記号とによって定義し、文法定義情報更新部は、未定義記述を新たな終端記号として定義する文法定義情報と、未定義記述に対応する新たな非終端記号を定義する文法定義情報とのいずれかの入力を受け付けることを特徴とする。
【０００９】
また、本発明の一態様は、文法定義情報に定義された終端記号および非終端記号のそれぞれに対応して設計書に出力する出力項目が含まれる変換表が記憶される変換表記憶部と、ソースコードと、文法定義情報と、変換表とに基づいて設計書を生成する設計書生成部と、を備えることを特徴とする。
【００１０】
また、本発明の一態様は、エラー箇所特定部が出力した未定義記述に対応する変換表の入力を受け付け、入力された変換表を変換表記憶部に記憶させる変換表更新部と、を備えることを特徴とする。
【００１１】
また、本発明の一態様は、所定のプログラム言語における文法規則を定義した文法定義情報であって、プログラム言語によって記述されたソースコードを解析するための文法定義情報が記憶される文法定義情報記憶部を備えるソースコード解析支援装置の、ソースコード読み込み部が、プログラム言語によって記述されたソースコードを読み込むステップと、構文解析部が、ソースコード読み込み部によって読み込まれたソースコードと文法定義情報とを比較して、ソースコードに、文法定義情報によって定義されていない記述である未定義記述が含まれるか否かを判定するステップと、エラー箇所特定部が、構文解析部によって、ソースコードに未定義記述が含まれると判定された場合、未定義記述を出力するステップと、文法定義情報更新部が、エラー箇所特定部によって出力された未定義記述に対応する文法定義情報の入力を受け付け、入力された文法定義情報を文法定義情報記憶部に記憶させるステップと、を備えることを特徴とするソースコード解析支援方法である。
【発明の効果】
【００１２】
以上説明したように、本発明によれば、ソースコード解析支援装置が、プログラム言語によって記述されたソースコードを解析するための文法定義情報が記憶される文法定義情報記憶部と、プログラム言語によって記述されたソースコードを読み込むソースコード読み込み部と、ソースコード読み込み部によって読み込まれたソースコードと文法定義情報とを比較して、ソースコードに、文法定義情報によって定義されていない記述である未定義記述が含まれるか否かを判定する構文解析部と、構文解析部によって、ソースコードに未定義記述が含まれると判定された場合、未定義記述を出力するエラー箇所特定部と、エラー箇所特定部によって出力された未定義記述に対応する文法定義情報の入力を受け付け、入力された文法定義情報を文法定義情報記憶部に記憶させる文法定義情報更新部と、を備えるようにしたので、ソースコードの解析を支援することができる。
【図面の簡単な説明】
【００１３】
【図１】本発明の一実施形態によるソースコード解析支援装置の構成例を示すブロック図である。
【図２】本発明の一実施形態による解析対象であるソースコードの例を示す図である。
【図３】本発明の一実施形態による文法定義情報のデータ例を示す図である。
【図４】本発明の一実施形態により生成される抽象構文木の例を示す図である。
【図５】本発明の一実施形態による中間表現変換表のデータ例を示す図である。
【図６】本発明の一実施形態により生成される中間表現の例を示す図である。
【図７】本発明の一実施形態による日本語変換表のデータ例を示す図である。
【図８】本発明の一実施形態により生成される設計書の例を示す図である。
【図９】本発明の一実施形態により出力部に表示させる文法定義候補の例を示す図である。
【図１０】本発明の一実施形態により更新された文法定義情報のデータ例を示す図である。
【図１１】本発明の一実施形態により更新された中間表現変換表のデータ例を示す図である。
【図１２】本発明の一実施形態により更新された日本語変換表のデータ例を示す図である。
【図１３】本発明の一実施形態により中間表現変換表を更新した後に生成する中間表現の例を示す図である。
【図１４】本発明の一実施形態により日本語変換表を更新した後に生成する設計書の例を示す図である。
【図１５】本発明の一実施形態によるソースコード解析支援装置の動作例を示すフローチャートである。
【図１６】本発明の一実施形態による文法定義候補生成処理の動作例を示すフローチャートである。
【図１７】本発明の一実施形態による変換表修正可否判定処理の動作例を示すフローチャートである。
【発明を実施するための形態】
【００１４】
以下、本発明の一実施形態について、図面を参照して説明する。
図１は、本実施形態によるソースコード解析支援装置１００の構成例を示すブロック図である。
ソースコード解析支援装置１００は、所定のプログラム言語で記述された解析対象のソースコードを解析し、そのソースコードにおける処理内容等を抽象的に示す設計書を自動的に生成するリバースエンジニアリングの処理を行うコンピュータ装置である。図２は、本実施形態におけるソースコード解析支援装置１００の解析対象であるソースコードの例を示す図である。図では、解析対象のソースコードにおいて、ファイル定義が記述されている箇所の例を示している。
【００１５】
図１に戻り、ソースコード解析支援装置１００は、入力部１１０と、出力部１２０と、記憶部１３０と、制御部１４０とを備えている。
入力部１１０は、キーボードやマウス等の入力デバイスであり、ユーザによる操作に応じた入力信号を生成する。
出力部１２０は、情報を出力する出力デバイスである。出力部１２０は、例えば、文字や画像等の情報を表示するディスプレイである。
【００１６】
記憶部１３０には、ソースコード解析支援装置１００がソースコード解析処理を行う際に参照する各種情報が記憶される。記憶部１３０は、文法定義情報記憶部１３１と、変換表記憶部１３２と、言語仕様書記憶部１３５とを備えている。
文法定義情報記憶部１３１には、所定のプログラム言語における文法規則を定義した文法定義情報であって、そのプログラム言語によって記述されたソースコードを解析するための文法定義情報が記憶される。この文法定義情報は、後述する構文解析部１４２が解析対象のソースコードを解析するために参照する情報である。
【００１７】
図３は、文法定義情報記憶部１３１に記憶される文法定義情報のデータ例を示す図である。本実施形態では、文法定義情報は、所定のプログラム言語における文法規則を終端記号と非終端記号とによって定義し、ＢＮＦ（バッカス・ナウア記法）によって表している。終端記号は、そのプログラム言語によるソースコードにおけるトークン（字句）であり、この例では、“ＦＤ”、“．”、[０−９Ａ−Ｚ￥＿￥−]＋、がそれぞれ終端記号である。[０−９Ａ−Ｚ￥＿￥−]＋は、０から９まで、ＡからＺまで、「＿」、「−」のうちいずれかの１文字以上の組み合わせであることを正規表現によって示している。非終端記号は、そのプログラム言語によるソースコードにおける終端記号以外のトークンであり、他の終端記号または非終端記号、または終端記号または非終端記号との組み合わせに置換される。この例では、ＦｉｌｅＥｎｔｒｙ、ＦｅＯｐｔ、ＦｉｌｅＮａｍｅ、ＦｅＯｐｔ＊、がそれぞれ非終端記号である。＊が付された非終端記号は、その非終端記号を０個以上繰り返すことを示す。
【００１８】
この例では、ＦｉｌｅＥｎｔｒｙは、ファイルを定義するための予約語である「ＦＤ」と、０から９まで、ＡからＺまで、「＿」、「−」のうちいずれかの１文字以上の組み合わせであるＦｉｌｅＮａｍｅと、オプションを定義するための予約語である「ＩＳ」「ＧＬＯＢＡＬ」と、「．」とが結合されて構成されることが示されている。
図４は、このような文法定義情報に基づく構文解析により生成される抽象構文木の例を示す図である。抽象構文木は、解析対象のソースコードの構造を木構造で表した情報である。ここでは、図２に示したソースコードの１行目の「ＦＤ  ＦＩＬＥＡ  ＩＳ  ＧＬＯＢＡＬ」との記述を解析した例を示している。「ＦＤ  ＦＩＬＥＡ  ＩＳ  ＧＬＯＢＡＬ」のうち、「ＦＩＬＥＡ」は非終端記号であるＦｉｌｅＮａｍｅに一致し、「ＩＳ  ＧＬＯＢＡＬ」は非終端記号であるＦｅＯｐｔに一致し、「ＦＤ」とこれらの組み合わせとは非終端記号であるＦｉｌｅＥｎｔｒｙに一致する。このため、この記述は、文法定義情報におけるＦｉｌｅＥｎｔｒｙに対応するものであるとして正常に解析することができる。
【００１９】
変換表記憶部１３２には、文法定義情報に定義された終端記号および非終端記号のそれぞれに対応して設計書に出力する出力項目が含まれる変換表が記憶される。変換表記憶部１３２は、中間表現変換表記憶部１３３と、日本語変換表記憶部１３４とを備えている。
中間表現変換表記憶部１３３には、文法定義情報における非終端記号ごとに、設計書に出力する出力項目を対応付けた中間表現変換表が記憶される。図５は、中間表現変換表記憶部１３３に記憶される中間表現変換表のデータ例を示す図である。中間表現変換表において、非終端記号に対応する出力項目が「×」である場合、その項目を設計書に出力しないことを示している。出力項目が「×」でない場合、出力項目に記載されている設計書の箇所に非終端記号の内容を記載することを示している。
【００２０】
図６は、このような中間表現変換表に基づいて生成される中間表現の例を示す図である。ここでは、図４に示した抽象構文木を、中間表現変換表に基づいて中間表現に変換した例を示している。中間表現変換表には、ＦｉｌｅＥｎｔｒｙは出力せず、ＦｉｌｅＮａｍｅの出力項目がファイルＩＤであり、ＦｅＯｐｔの出力項目がオプションであることが示されている。このため、ファイルＩＤとして、ＦｉｌｅＮａｍｅに対応する終端記号である「ＦＩＬＥＡ」を対応付け、オプションとして、ＦｅＯｐｔに対応する終端記号である「ＩＳ  ＧＬＯＢＡＬ」を対応付けた例を示している。
【００２１】
日本語変換表記憶部１３４には、中間表現における出力項目に対応付けられた文字列ごとに、その文字列に対応する日本語の文字列を対応付けた日本語変換表が記憶される。図７は、日本語変換表記憶部１３４に記憶される日本語変換表のデータ例を示す図である。ここでは、ファイルＩＤに文字列「ＦＩＬＥＡ」が対応付けられている場合、その文字列を文字列「Ａファイル」に置換することを示している。また、ファイルＩＤに文字列「ＦＩＬＥＢ」が対応付けられている場合、その文字列を文字列「Ｂファイル」に置換することを示している。また、オプションに文字列「ＩＳ  ＧＬＯＢＡＬ」が対応付けられている場合、その文字列を文字列「グローバル」に置換することを示している。
【００２２】
図８は、このような日本語変換表に基づいて生成される設計書の例を示す図である。ここでは、図６に示した中間表現を、日本語変換表に基づいて設計書に変換した例を示している。中間表現における「ＦＩＬＥＡ」は「Ａファイル」に置換され、中間表現における「ＩＳ  ＧＬＯＢＡＬ」は「グローバル」に置換されている。
【００２３】
言語仕様書記憶部１３５には、プログラム言語の文法規則を自然言語によって解説したドキュメントである言語仕様書が記憶される。言語仕様書は、例えば、そのプログラム言語自体の開発者等によって発行された、そのプログラム言語の仕様を解説した言語解説書のようなものであってもよいし、標準化団体や第三者によって作成されたものであってもよい。
【００２４】
制御部１４０は、ソースコード解析支援装置１００が備える各部を制御する。制御部１４０は、ソースコード読み込み部１４１と、構文解析部１４２と、設計書生成部１４３と、エラー箇所特定部１４４と、文法定義情報更新部１４５と、変換表修正可否判定部１４６と、変換表更新部１４７とを備えている。
【００２５】
ソースコード読み込み部１４１は、プログラム言語によって記述された、解析対象のソースコードを読み込む。例えば、記憶部１３０に解析対象のソースコードを予め記憶させておき、ソースコード読み込み部１４１は、記憶部１３０に記憶されているソースコードを読み込んでもよいし、ファイル形式のソースコードが記憶されたＵＳＢ（Universal Serial Bus）メモリやＣＤ（Compact Disc）等の媒体から読み込んでもよいし、ネットワークを介して接続された他のコンピュータ装置に記憶されているソースコードを読み込むようにしてもよい。
【００２６】
構文解析部１４２は、文法定義情報記憶部１３１に記憶されている文法定義情報を読み出し、ソースコード読み込み部１４１によって読み込まれたソースコードと、文法定義情報記憶部１３１から読み出した文法定義情報とを比較して、ソースコードの構文解析を行い、上述したような抽象構文木を生成する。例えば、構文解析部１４２は、ソースコードに含まれる記述を、そのプログラム言語において定められた区切り文字（例えば、「．」（ピリオド）や「；」（セミコロン）等）に分割し、分割した記述ごとに、対応する文法定義情報を特定する。すなわち、ここで、構文解析部１４２は、解析対象であるソースコードに、文法定義情報によって定義されていない記述である未定義記述が含まれるか否かを判定する。構文解析部１４２は、解析対象であるソースコードに、未定義記述が含まれていなければ、ソースコードに含まれている記述の全てに基づいて抽象構文木を生成し、構文解析を正常終了する。構文解析部１４２は、解析対象であるソースコードに、未定義記述が含まれていれば、エラーとして構文解析を異常終了する。このとき、構文解析部１４２は、ソースコードにおいて未定義記述が含まれると判定した箇所のファイル名、行番号、桁番号をエラーメッセージとして出力する。
【００２７】
設計書生成部１４３は、ソースコードと、文法定義情報と、変換表とに基づいて設計書を生成する。例えば、設計書生成部１４３は、構文解析部１４２による構文解析処理が正常終了すると、変換表記憶部１３２の中間表現変換表記憶部１３３に記憶されている中間表現変換表を読み出し、構文解析部１４２によって生成された抽象構文木を、上述したような中間表現に変換する。さらに、設計書生成部１４３は、日本語変換表記憶部１３４に記憶されている日本語変換表を読み出し、中間表現を日本語に置換して設計書を生成する。設計書は、例えば、表計算ソフト等のファイル形式に沿ったデータファイルとして生成することができる。
【００２８】
ここで、上述したソースコードと文法定義情報との例について考えると、ソースコードの例における１行目の「ＦＤ  ＦＩＬＥＡ  ＩＳ  ＧＬＯＢＡＬ．」は、文法定義情報に一致して構文解析できるものの、２行目と３行目の「ＥＸＴＥＲＮＡＬ」、３行目の「ＦＩＬＥＤＣＬ」、４行目の「ＲＥＣＯＲＤＩＮＧ  Ｆ」の記述については、対応する文法定義情報が存在しないため、構文解析は異常終了となる。
【００２９】
そこで、本実施形態のソースコード解析支援装置１００は、解析対象のソースコードから、このように予め用意した文法定義情報に定義されていない記述を特定し、その記述について対応する文法定義候補を推定するとともに、新たな文法定義情報の入力を受け付けて文法定義情報記憶部１３１に記憶させる。さらに、対応する変換表についても、新たな項目を追記して変換表記憶部１３２に記憶させる。ソースコード解析支援装置１００は、このように更新した文法定義情報及び変換表に基づいて、解析対象のソースコードに対して再度の構文解析を行うことで、構文解析を正常終了することができる。このように、ソースコード解析支援装置１００は、解析対象のソースコードに未定義記述が含まれる場合、その未定義記述に対応する新たな文法定義情報、変換表を学習することで、効率良くソースコードの解析を支援することができる。以下、このような学習処理について詳細に説明する。
【００３０】
エラー箇所特定部１４４は、構文解析部１４２によって、解析対象のソースコードに未定義記述が含まれると判定された場合、その未定義記述を出力する。例えば、上述の例では、ソースコードの２行目における「ＦＤ  ＦＩＬＥＢ  ＥＸＴＥＲＮＡＬ．」において、「ＥＸＴＥＲＮＡＬ」の記述が未定義であるため、構文解析部１４２によって、２行目の１０桁目を示すエラーメッセージが出力される。例えば、エラー箇所特定部１４４は、エラーメッセージが示す行番号の行頭からプログラム言語の区切り文字までの記述を、エラー箇所として特定する。この例では、「ＦＤ  ＦＩＬＥＢ  ＥＸＴＥＲＮＡＬ．」をエラー箇所として特定する。同様に、３行目の「ＦＩＬＥＤＣＬ  ＦＩＬＥＣ  ＥＸＴＥＲＮＡＬ．」、４行目の「ＦＤ  ＦＩＬＥＤ  ＩＳ  ＧＬＯＢＡＬ  ＲＥＣＯＲＤＩＮＧ  Ｆ．」をエラー箇所として特定する。
【００３１】
文法定義情報更新部１４５は、エラー箇所特定部１４４によって特定されて出力された未定義記述に対応する文法定義情報の入力を受け付け、入力された文法定義情報を文法定義情報記憶部１３１に記憶させる。例えば、文法定義情報更新部１４５は、エラー箇所特定部１４４が出力したエラー箇所を、出力部１２０に表示させる。ユーザは、出力部１２０に表示されたエラー箇所を参照し、そのエラーを解消するための文法定義を判断し、その文法定義を入力部１１０に入力する。文法定義情報更新部１４５は、入力部１１０に入力された文法定義を示す文法定義情報を、文法定義情報記憶部１３１に記憶させる。このように更新された文法定義情報により、ソースコード解析支援装置１００は、解析対象のソースコードの構文解析を正常に終了することができる。
【００３２】
この際、文法定義情報更新部１４５は、未定義記述に対応する文法定義の候補を推定して出力部１２０に表示させることにより、ユーザの判断を支援することができる。例えば、エラー箇所である２行目における「ＦＤ  ＦＩＬＥＢ  ＥＸＴＥＲＮＡＬ．」において、「ＦＤ」と「ＦＩＬＥＢ」との記述はＦｉｌｅＥｎｔｒｙの定義と一致するものの、「ＥＸＴＥＲＮＡＬ」の記述がＦｅＯｐｔの定義と一致しないためエラーになっていることがわかる。このため、「ＥＸＴＥＲＮＡＬ」は、ＦｅＯｐｔのバリエーションであると推定できる。同様に、エラー箇所である３行目における「ＦＩＬＥＤＣＬ  ＦＩＬＥＣ  ＥＸＴＥＲＮＡＬ．」において、「ＦＩＬＥＤＣＬ」は「ＦＤ」のバリエーションであると推定できる。同様に、エラー箇所である４行目における「ＦＤ  ＦＩＬＥＤ  ＩＳ  ＧＬＯＢＡＬ  ＲＥＣＯＲＤＩＮＧ  Ｆ．」において、「ＲＥＣＯＲＤＩＮＧ  Ｆ．」は、ＦｅＯｐｔとは異なる種類のパラメータであると推定できる。
【００３３】
そこで、文法定義情報更新部１４５は、このような文法定義候補を、出力部１２０に表示させる。図９は、文法定義情報更新部１４５が出力部１２０に表示させる文法定義候補の例を示す図である。ここで、行頭の「−」は、その行の文法定義情報を文法定義情報記憶部１３１から削除することを示し、行頭の「＋」は、その行の文法定義情報を文法定義情報記憶部１３１に追加することを示している。定義中における「｜」は選択肢を示す。
【００３４】
文法定義情報更新部１４５は、このように表示した文法定義候補に応じてユーザから入力部１１０に入力される文法定義情報を、文法定義情報記憶部１３１に記憶させる。文法定義情報更新部１４５は、未定義記述を新たな終端記号として定義する文法定義情報と、未定義記述に対応する新たな非終端記号を定義する文法定義情報とのいずれかの入力を受け付けることができる。例えば、この例では、未定義記述である「ＥＸＴＥＲＮＡＬ」を、非終端記号「ＦｅＯｐｔ」に対応する新たな終端記号として定義する文法定義情報の入力を受け付けることができる。また、未定義記述である「ＲＥＣＯＲＤＩＮＧ  Ｆ」に対応する新たな非終端記号である「ＦｅＲｅｃｏｒｄｉｎｇ」を定義する新たな文法定義情報の入力を受け付けることができる。図１０は、文法定義情報記憶部１３１の文法定義情報が更新されて記憶されたデータ例を示す図である。ここでは、図９に示した文法定義後方の全てが、そのまま反映された例を示している。
【００３５】
ここで、ユーザが新たな文法定義情報を入力する際には、エラー箇所における記述が、そのプログラム言語においてどのような意味を持つものであるかという知識が必要になる。このため、そのプログラム言語にある程度、習熟したユーザでなければ、新たな文法定義情報を正しく判断することが難しい。そこで、文法定義情報更新部１４５は、言語仕様書記憶部１３５に記憶されている言語仕様書を読み出し、出力部１２０に表示させる。これにより、ユーザは、出力部１２０に表示された言語仕様書を参照しながら、エラー箇所における記述に対する新たな文法定義情報を判断することができる。この際、文法定義情報更新部１４５は、言語仕様書において、未定義記述に対応する箇所を特定し、特定した箇所を出力することができる。例えば、文法定義情報更新部１４５は、未定義記述の文字列を言語仕様書から検索して抽出し、抽出した箇所を出力部１２０に出力することができる。文法定義情報更新部１４５は、出力した言語仕様書の箇所に応じて入力される文法定義情報の入力を受け付ける。このようにすれば、そのプログラム言語に習熟していないユーザも、対応する言語仕様書を参照しながら、入力すべき新たな文法定義情報を判断することができる。
【００３６】
変換表修正可否判定部１４６は、新たな文法定義情報に応じて、変換表を修正する必要があるか否かを判定する。例えば、上述の例では、ＦｅＯｐｔの新たなバリエーションである「ＥＸＴＥＲＮＡＬ」について、日本語変換表には対応する日本語が存在しないため、要修正と判定できる。また、ＦｉｌｅＥｎｔｒｙに対応付けられる”ＦＩＬＥＤＣＬ“は、中間表現変換表においてＦｉｌｅＥｎｔｒｙが既に存在し、出力項目が「×」であり出力しないため、修正不要と判定できる。また、新たな非終端記号である「ＦｅＲｅｃｏｒｄｉｎｇ」については、中間表現変換表に記載されていないが、設計書に出力するか否かは機械的に判断できないため、判定不可とする。
【００３７】
変換表更新部１４７は、エラー箇所特定部１４４が出力した未定義記述に対応する変換表の入力を受け付け、入力された変換表を変換表記憶部１３２に記憶させる。変換表更新部１４７は、例えば、中間表現変換表に、新たな非終端記号である「ＦｅＲｅｃｏｒｄｉｎｇ」を、新たな出力項目として記憶させることを示す情報の入力を受け付ける。図１１は、変換表更新部１４７によって更新された中間表現変換表のデータ例を示す図である。また、変換表更新部１４７は、例えば、日本語変換表に、終端記号である「ＥＸＴＥＲＮＡＬ」に対応する日本語である「外部」と、終端記号である「ＲＥＣＯＲＤＩＮＧ  Ｆ」に対応する日本語である「Ｆレコーディング」とを追加することを示す情報の入力を受け付ける。図１２は、変換表更新部１４７によって更新された日本語変換表のデータ例を示す図である。
【００３８】
このように更新された文法定義情報と変換表により、ソースコード解析支援装置１００は、未定義であった記述が含まれるソースコードを構文解析することができ、また構文解析して生成した抽象構文木を、中間表現に変換し、設計書を生成することができる。図１３は、中間表現変換表を更新した後に行う設計書生成処理において生成する中間表現の例を示す図である。このように、「ＥＸＴＥＲＮＡＬ」や「ＲＥＣＯＲＤＩＮＧ  Ｆ」の記述を、中間表現に変換することができる。図１４は、日本語変換表を更新した後に行う設計書生成処理において生成する設計書の例を示す図である。このように、「ＥＸＴＥＲＮＡＬ」や「ＲＥＣＯＲＤＩＮＧ  Ｆ」の記述を日本語に変換し、設計書を生成することができる。
【００３９】
次に、図面を参照して、本実施形態によるソースコード解析支援装置１００の動作例を説明する。図１５は、本実施形態によるソースコード解析支援装置１００の動作例を示すフローチャートである。
ソースコード解析支援装置１００のソースコード読み込み部１４１は、ユーザからの操作に応じて、解析対象のソースコードを読み込む（ステップＳ１）。ここで、ソースコード読み込み部１４１は、読み込んだ解析対象のソースコードを、記憶部１３０に記憶させておくことができる。
【００４０】
構文解析部１４２は、ステップＳ１において読み込んだソースコードの記述を、プログラム言語により予め定められた区切り文字によって分割してトークンを生成する字句解析を行う。そして、構文解析部１４２は、分割したトークンの並びが、文法定義情報記憶部１３１に記憶されている文法定義情報に一致するか否かを判定する構文解析を行う（ステップＳ２）。
【００４１】
構文解析部１４２は、分割したトークンの並びが、文法定義情報記憶部１３１に記憶されている文法定義情報に一致すればエラーなしと判定して抽象構文木を生成し、一致しなければエラーありと判定する。構文解析部１４２が、解析対象のソースコードに含まれる全ての記述についてエラーなしと判定すると（ステップＳ３：ＮＯ）、設計書生成部１４３は、中間表現変換表記憶部１３３に記憶されている中間表現変換表を読み出し、読み出した中間表現変換表に基づいて、構文解析部１４２が生成した抽象構文木を中間表現に変換する。また、設計書生成部１４３は、日本語変換表記憶部１３４に記憶されている日本語変換表を読み出し、読み出した日本語変換表に基づいて、中間表現を日本語に変換した設計書を生成し（ステップＳ４）、処理を終了する。
【００４２】
ステップＳ３において、構文解析部１４２は、解析対象のソースコードに含まれる記述についてエラーありと判定すると（ステップＳ３：ＹＥＳ）、エラーメッセージを出力する。エラー箇所特定部１４４は、構文解析部１４２が出力したエラーメッセージが示すソースコードの箇所を特定して出力する（ステップＳ５）。文法定義情報更新部１４５は、エラー箇所特定部１４４が特定したエラー箇所の記述と、文法定義情報記憶部１３１に記憶されている文法定義情報とを比較し、文法定義候補を生成する（ステップＳ６）。
【００４３】
文法定義情報更新部１４５は、エラー箇所の記述と、文法定義候補と、言語仕様書記憶部１３５から読み出した言語仕様書とのいずれかまたは複数の情報を出力部１２０に表示させる。ユーザは、出力部１２０に表示された情報に基づいて、エラー箇所に対応する新たな文法定義情報を、入力部１１０に入力する。文法定義情報更新部１４５は、入力部１１０に入力された文法定義情報を受け付け、入力された文法定義情報を文法定義情報記憶部１３１に記憶させる（ステップＳ７）。
【００４４】
変換表修正可否判定部１４６は、変換表の修正可否判定を行う（ステップＳ８）。変換表修正可否判定部１４６が、修正不要と判定すると（ステップＳ９：ＮＯ）、ステップＳ２に戻り、ソースコード解析支援装置１００は、再度の構文解析を行う。変換表修正可否判定部１４６が、要修正と判定すると（ステップＳ９：ＹＥＳ）、変換表更新部１４７は、ユーザからの操作に応じて、変換表記憶部１３２に記憶されている変換表を更新して記憶させ（ステップＳ１０）、ステップＳ２に戻る。
【００４５】
次に、図面を参照して、ステップＳ６における文法定義候補生成処理の動作例を説明する。図１６は、文法定義候補生成処理の動作例を示すフローチャートである。
文法定義情報更新部１４５は、エラー箇所特定部１４４によって特定されたエラー箇所を、空白と区切り文字とによってトークンに分割する（ステップＳ１１）。文法定義情報更新部１４５は、分割したトークンをキーとして、文法定義情報記憶部１３１に記憶されている文法定義情報から、そのトークンを含む文法定義情報を検索する（ステップＳ１２）。
【００４６】
トークンを含む文法定義情報が文法定義情報記憶部１３１に記憶されていなければ（ステップＳ１３：ＮＯ）、文法定義情報更新部１４５は、そのトークンを非終端記号に対応付けた文法定義候補を出力する（ステップＳ１５）。トークンを含む文法定義情報が文法定義情報記憶部１３１に記憶されていれば（ステップＳ１３：ＹＥＳ）、文法定義情報更新部１４５は、非終端記号が展開できるか否かを判定する。非終端記号を展開できなければ（ステップＳ１４：ＮＯ）、ステップＳ１５に進む。非終端記号を展開できれば（ステップＳ１４：ＹＥＳ）、ステップＳ１２に戻る。
【００４７】
次に、図面を参照して、ステップＳ８における変換表修正可否判定処理の動作例を説明する。図１７は、変換表修正可否判定処理の動作例を示すフローチャートである。
変換表修正可否判定部１４６は、文法定義情報更新部１４５によって生成された文法定義候補の非終端記号をキーとして、中間表現変換表記憶部１３３に記憶されている中間表現変換表を検索する（ステップＳ２１）。変換表修正可否判定部１４６は、非終端記号が中間表現変換表記憶部１３３に記憶されている中間表現変換表に含まれていなければ（ステップＳ２２：ＮＯ）、判定不可として（ステップＳ２３）、処理を終了する。
【００４８】
変換表修正可否判定部１４６は、非終端記号が中間表現変換表記憶部１３３に記憶されている中間表現変換表に含まれていれば（ステップＳ２２：ＹＥＳ）、中間表現変換表においてその非終端記号が出力項目とされているか否かを判定する。変換表修正可否判定部１４６は、中間表現変換表においてその非終端記号が出力項目とされていないと判定すれば（ステップＳ２４：ＮＯ）、修正不要と判定し（ステップＳ２５）、処理を終了する。
【００４９】
ステップＳ２４において、変換表修正可否判定部１４６が、中間表現変換表において非終端記号が出力項目とされていると判定すれば（ステップＳ２４：ＹＥＳ）、その出力項目をキーとして、日本語変換表を検索する（ステップＳ２６）。変換表修正可否判定部１４６は、出力項目に対応する日本語が日本語変換表記憶部１３４に記憶されている日本語変換表に含まれていなければ（ステップＳ２７：ＮＯ）、要修正と判定し（ステップＳ２８）、処理を終了する。出力項目に対応する日本語が日本語変換表記憶部１３４に記憶されている日本語変換表に含まれていれば（ステップＳ２７：ＹＥＳ）、変換表修正可否判定部１４６は、修正不要と判定し（ステップＳ２９）、処理を終了する。
【００５０】
以上説明したように、本実施形態によれば、解析対象のソースコードに、予め文法定義情報に定められていない未定義記述が含まれる場合であっても、その未定義記述に対応する文法定義情報を効率良く追加することができ、円滑なソースコード解析を支援することができる。これにより、リバースエンジニアリングやリエンジニングを行うユーザの作業効率を上げ、作業工数の低減が期待できるとともに、ソースコードの解析成功率を向上させることが可能となる。
【００５１】
このような作業を行う場合、従来であれば、解析対象のソースコードを構文解析器に解析させる際にエラーメッセージが出力されると、ユーザがエラーメッセージを参照して自身でソースコードのエラー箇所を特定し、言語仕様書や文法定義を参照して文法を特定し、該当箇所の文法を構文解析器が解釈可能な形式で表現して構文解析器を修正し、設計書生成器の仕様を参照し、構文解析器の修正内容に応じた設計書生成器の修正要否を判断し、変換表を修正するといった作業を行い、再度、構文解析器に解析させてエラーの確認を行うことが必要であった。このため、このような作業を行うユーザには、プログラム言語に対する知識、構文解析の知識、設計書生成の知識が求められるとともに、一連の作業自体の習熟度などによって、作業効率や作業時間、作業品質にバラツキが生じることもあった。これに対し、本実施形態のソースコード解析支援装置１００によれば、一連の作業を自動的に行うことができるとともに、言語仕様書を出力部１２０に表示したり、文法定義候補を推定したり、変換表の修正要否を判定したりすることができる。このため、解析対象のプログラム言語やソースコード解析支援装置１００の動作に習熟していないユーザであっても、表示される情報を参照しながら、新たに追加すべき文法定義情報を判断することができる。
【００５２】
また、同様のプログラム言語であっても、バージョンが異なることによって文法規則やパラメータが異なったり、ベンダごとに若干異なる文法規則（方言）が存在したりすることがある。このような場合でも、未定義記述に応じた文法定義情報を効率良く追加し、構文解析を成功させることができる。
【００５３】
なお、本実施形態では、変換表記憶部１３２には、変換表として中間表現変換表と日本語変換表とが記憶される例を示したが、日本語変換を行わずに、対応するソースコードの記述をそのまま設計書に記載するような場合には、日本語変換表は記憶されていなくてもよい。また、日本語変換表に代えて、または加えて、他の言語（例えば、英語、中国語等）の自然言語に変換する自然言語変換表が記憶されているようにし、多言語に変換するようにしてもよい。
【００５４】
また、構文解析部１４２が解析対象のソースコードの構文解析を行う際、構文解析部１４２は、エラーありと判定するごとに、ステップＳ５からステップＳ１０までの更新処理を行ってもよいし、解析対象のソースコードの全てについてエラーの有無を判定した後に、エラーのそれぞれについてステップＳ５からステップＳ１０までの更新処理を行うこともできる。
【００５５】
なお、本実施形態では、解析対象のソースコードにおけるファイル定義の箇所について構文解析し、設計書を生成する例を説明したが、同様の処理によって、ソースコード全体を構文解析し、設計書を生成することが可能である。
【００５６】
なお、本発明における処理部の機能を実現するためのプログラムをコンピュータ読み取り可能な記録媒体に記録して、この記録媒体に記録されたプログラムをコンピュータシステムに読み込ませ、実行することによりソースコード解析の支援を行ってもよい。なお、ここでいう「コンピュータシステム」とは、ＯＳや周辺機器等のハードウェアを含むものとする。また、「コンピュータシステム」は、インターネットやＷＡＮ、ＬＡＮ、専用回線等の通信回線を含むネットワークを介して接続された複数のコンピュータ装置を含んでもよい。また、「コンピュータ読み取り可能な記録媒体」とは、フレキシブルディスク、光磁気ディスク、ＲＯＭ、ＣＤ−ＲＯＭ等の可搬媒体、コンピュータシステムに内蔵されるハードディスク等の記憶装置のことをいう。さらに「コンピュータ読み取り可能な記録媒体」とは、ネットワークを介してプログラムが送信された場合のサーバやクライアントとなるコンピュータシステム内部の揮発性メモリ（ＲＡＭ）のように、一定時間プログラムを保持しているものも含むものとする。また、上記プログラムは、上述した機能の一部を実現するためのものであってもよい。さらに、上述した機能をコンピュータシステムにすでに記録されているプログラムとの組み合わせで実現できるもの、いわゆる差分ファイル（差分プログラム）であってもよい。
【００５７】
また、上述した機能の一部または全部を、ＬＳＩ（Ｌａｒｇｅ  Ｓｃａｌｅ  Ｉｎｔｅｇｒａｔｉｏｎ）等の集積回路として実現してもよい。上述した各機能は個別にプロセッサ化してもよいし、一部、または全部を集積してプロセッサ化してもよい。また、集積回路化の手法はＬＳＩに限らず専用回路、または汎用プロセッサで実現してもよい。また、半導体技術の進歩によりＬＳＩに代替する集積回路化の技術が出現した場合、当該技術による集積回路を用いてもよい。
【符号の説明】
【００５８】
１００  ソースコード解析支援装置
１１０  入力部
１２０  出力部
１３０  記憶部
１３１  文法定義情報記憶部
１３２  変換表記憶部
１３３  中間表現変換表記憶部
１３４  日本語変換表記憶部
１３５  言語仕様書記憶部
１４０  制御部
１４１  ソースコード読み込み部
１４２  構文解析部
１４３  設計書生成部
１４４  エラー箇所特定部
１４５  文法定義情報更新部
１４６  変換表修正可否判定部
１４７  変換表更新部
【図１】
2015138435.tif 000003
【図２】
2015138435.tif 000004
【図３】
2015138435.tif 000005
【図４】
2015138435.tif 000006
【図５】
2015138435.tif 000007
【図６】
2015138435.tif 000008
【図７】
2015138435.tif 000009
【図８】
2015138435.tif 000010
【図９】
2015138435.tif 000011
【図１０】
2015138435.tif 000012
【図１１】
2015138435.tif 000013
【図１２】
2015138435.tif 000014
【図１３】
2015138435.tif 000015
【図１４】
2015138435.tif 000016
【図１５】
2015138435.tif 000017
【図１６】
2015138435.tif 000018
【図１７】
2015138435.tif 000019