JP6267971B2 - ソースコード解析支援装置、ソースコード解析支援方法 - Google Patents

ソースコード解析支援装置、ソースコード解析支援方法 Download PDF

Info

Publication number
JP6267971B2
JP6267971B2 JP2014010228A JP2014010228A JP6267971B2 JP 6267971 B2 JP6267971 B2 JP 6267971B2 JP 2014010228 A JP2014010228 A JP 2014010228A JP 2014010228 A JP2014010228 A JP 2014010228A JP 6267971 B2 JP6267971 B2 JP 6267971B2
Authority
JP
Japan
Prior art keywords
definition information
source code
grammar definition
unit
grammar
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
JP2014010228A
Other languages
English (en)
Other versions
JP2015138435A (ja
Inventor
祥雅 藤浦
祥雅 藤浦
岡田 譲二
譲二 岡田
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
NTT Data Corp
Original Assignee
NTT Data Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by NTT Data Corp filed Critical NTT Data Corp
Priority to JP2014010228A priority Critical patent/JP6267971B2/ja
Publication of JP2015138435A publication Critical patent/JP2015138435A/ja
Application granted granted Critical
Publication of JP6267971B2 publication Critical patent/JP6267971B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Landscapes

  • Stored Programmes (AREA)

Description

本発明は、ソースコード解析支援装置、ソースコード解析支援方法に関する。
ソフトウェアの開発や保守を効率良く行うためのリエンジニアリングとよばれる技術が研究されている。例えば、所定のプログラム言語で記述されたソースコードを解析し、そのソースコードにおける処理内容等を抽象的に示す設計書を自動的に生成したり(リバースエンジニアリング)、そのソースコードと同様の処理を実行する異なるプログラム言語のソースコードを自動的に生成したり(フォワードエンジニアリング)することで、ソフトウェアの開発効率、保守効率を高めることができる。リバースエンジニアリングにおいては、解析対象であるソースコードのプログラム言語における文法規則を定義した文法定義情報を予め用意し、パーサや構文解析器等とよばれるソフトウェアが、このような文法定義情報に基づいてソースコードの解析処理を行う。特許文献1には、このような構文解析器が記載されている。
特開平5−241850号公報
しかしながら、このような構文解析器は、文法定義情報に定義されていない記述が解析対象のソースコードに存在すれば解析処理を行うことができない。そこで、リバースエンジニアリングにおける効率良いソースコードの解析を支援することが望ましい。
本発明は、このような状況に鑑みてなされたもので、ソースコードの解析を支援するソースコード解析支援装置、ソースコード解析支援方法を提供する。
上述した課題を解決するために、本発明の一態様は、所定のプログラム言語における文法規則を定義した文法定義情報であって、プログラム言語によって記述されたソースコードを解析するための文法定義情報が記憶される文法定義情報記憶部と、プログラム言語によって記述されたソースコードを読み込むソースコード読み込み部と、ソースコード読み込み部によって読み込まれたソースコードと文法定義情報とを比較して、ソースコードに、文法定義情報によって定義されていない記述である未定義記述が含まれるか否かを判定する構文解析部と、構文解析部によって、ソースコードに未定義記述が含まれると判定された場合、未定義記述を出力するエラー箇所特定部と、エラー箇所特定部によって出力された未定義記述に対応する文法定義情報の入力を受け付け、入力された文法定義情報を文法定義情報記憶部に記憶させる文法定義情報更新部と、プログラム言語の文法規則を自然言語によって解説したドキュメントである言語仕様書が記憶される言語仕様書記憶部と、を備え、文法定義情報更新部は、未定義記述に対応する言語仕様書の箇所を特定し、特定した箇所を出力し、出力した当該言語仕様書の箇所に応じて入力される文法定義情報の入力を受け付けることを特徴とするソースコード解析支援装置である。
また、本発明の一態様は、文法定義情報は、プログラム言語における文法規則を終端記号と非終端記号とによって定義し、文法定義情報更新部は、未定義記述を新たな終端記号として定義する文法定義情報と、未定義記述に対応する新たな非終端記号を定義する文法定義情報とのいずれかの入力を受け付けることを特徴とする。
また、本発明の一態様は、文法定義情報に定義された終端記号および非終端記号のそれぞれに対応して設計書に出力する出力項目が含まれる変換表が記憶される変換表記憶部と、ソースコードと、文法定義情報と、変換表とに基づいて設計書を生成する設計書生成部と、を備えることを特徴とする。
また、本発明の一態様は、エラー箇所特定部が出力した未定義記述に対応する変換表の入力を受け付け、入力された変換表を変換表記憶部に記憶させる変換表更新部と、を備えることを特徴とする。
また、本発明の一態様は、所定のプログラム言語における文法規則を定義した文法定義情報であって、プログラム言語によって記述されたソースコードを解析するための文法定義情報が記憶される文法定義情報記憶部を備えるソースコード解析支援装置の、ソースコード読み込み部が、プログラム言語によって記述されたソースコードを読み込むステップと、構文解析部が、ソースコード読み込み部によって読み込まれたソースコードと文法定義情報とを比較して、ソースコードに、文法定義情報によって定義されていない記述である未定義記述が含まれるか否かを判定するステップと、エラー箇所特定部が、構文解析部によって、ソースコードに未定義記述が含まれると判定された場合、未定義記述を出力するステップと、文法定義情報更新部が、エラー箇所特定部によって出力された未定義記述に対応する文法定義情報の入力を受け付け、入力された文法定義情報を文法定義情報記憶部に記憶させるステップと、を備えることを特徴とするソースコード解析支援方法である。
以上説明したように、本発明によれば、ソースコード解析支援装置が、プログラム言語によって記述されたソースコードを解析するための文法定義情報が記憶される文法定義情報記憶部と、プログラム言語によって記述されたソースコードを読み込むソースコード読み込み部と、ソースコード読み込み部によって読み込まれたソースコードと文法定義情報とを比較して、ソースコードに、文法定義情報によって定義されていない記述である未定義記述が含まれるか否かを判定する構文解析部と、構文解析部によって、ソースコードに未定義記述が含まれると判定された場合、未定義記述を出力するエラー箇所特定部と、エラー箇所特定部によって出力された未定義記述に対応する文法定義情報の入力を受け付け、入力された文法定義情報を文法定義情報記憶部に記憶させる文法定義情報更新部と、を備えるようにしたので、ソースコードの解析を支援することができる。
本発明の一実施形態によるソースコード解析支援装置の構成例を示すブロック図である。 本発明の一実施形態による解析対象であるソースコードの例を示す図である。 本発明の一実施形態による文法定義情報のデータ例を示す図である。 本発明の一実施形態により生成される抽象構文木の例を示す図である。 本発明の一実施形態による中間表現変換表のデータ例を示す図である。 本発明の一実施形態により生成される中間表現の例を示す図である。 本発明の一実施形態による日本語変換表のデータ例を示す図である。 本発明の一実施形態により生成される設計書の例を示す図である。 本発明の一実施形態により出力部に表示させる文法定義候補の例を示す図である。 本発明の一実施形態により更新された文法定義情報のデータ例を示す図である。 本発明の一実施形態により更新された中間表現変換表のデータ例を示す図である。 本発明の一実施形態により更新された日本語変換表のデータ例を示す図である。 本発明の一実施形態により中間表現変換表を更新した後に生成する中間表現の例を示す図である。 本発明の一実施形態により日本語変換表を更新した後に生成する設計書の例を示す図である。 本発明の一実施形態によるソースコード解析支援装置の動作例を示すフローチャートである。 本発明の一実施形態による文法定義候補生成処理の動作例を示すフローチャートである。 本発明の一実施形態による変換表修正可否判定処理の動作例を示すフローチャートである。
また、本発明の一態様は、所定のプログラム言語における文法規則を定義した文法定義情報であって、プログラム言語によって記述されたソースコードを解析するための文法定義情報が記憶される文法定義情報記憶部を備えるソースコード解析支援装置の、ソースコード読み込み部が、プログラム言語によって記述されたソースコードを読み込むステップと、構文解析部が、ソースコード読み込み部によって読み込まれたソースコードと文法定義情報とを比較して、ソースコードに、文法定義情報によって定義されていない記述である未定義記述が含まれるか否かを判定する構文解析ステップと、エラー箇所特定部が、構文解析部によって、ソースコードに未定義記述が含まれると判定された場合、未定義記述を出力するエラー箇所特定ステップと、文法定義情報更新部が、エラー箇所特定部によって出力された未定義記述に対応する文法定義情報の入力を受け付け、入力された文法定義情報を文法定義情報記憶部に記憶させる文法定義情報更新ステップと、を含み、文法定義情報更新ステップにおいて、文法定義情報更新部が、未定義記述に対応する言語仕様書の箇所を特定し、特定した箇所を出力し、出力した当該言語仕様書の箇所に応じて入力される文法定義情報の入力を受け付けることを特徴とするソースコード解析支援方法である。
図1に戻り、ソースコード解析支援装置100は、入力部110と、出力部120と、記憶部130と、制御部140とを備えている。
入力部110は、キーボードやマウス等の入力デバイスであり、ユーザによる操作に応じた入力信号を生成する。
出力部120は、情報を出力する出力デバイスである。出力部120は、例えば、文字や画像等の情報を表示するディスプレイである。
記憶部130には、ソースコード解析支援装置100がソースコード解析処理を行う際に参照する各種情報が記憶される。記憶部130は、文法定義情報記憶部131と、変換表記憶部132と、言語仕様書記憶部135とを備えている。
文法定義情報記憶部131には、所定のプログラム言語における文法規則を定義した文法定義情報であって、そのプログラム言語によって記述されたソースコードを解析するための文法定義情報が記憶される。この文法定義情報は、後述する構文解析部142が解析対象のソースコードを解析するために参照する情報である。
図3は、文法定義情報記憶部131に記憶される文法定義情報のデータ例を示す図である。本実施形態では、文法定義情報は、所定のプログラム言語における文法規則を終端記号と非終端記号とによって定義し、BNF(バッカス・ナウア記法)によって表している。終端記号は、そのプログラム言語によるソースコードにおけるトークン(字句)であり、この例では、“FD”、“.”、[0−9A−Z¥_¥−]+、がそれぞれ終端記号である。[0−9A−Z¥_¥−]+は、0から9まで、AからZまで、「_」、「−」のうちいずれかの1文字以上の組み合わせであることを正規表現によって示している。非終端記号は、そのプログラム言語によるソースコードにおける終端記号以外のトークンであり、他の終端記号または非終端記号、または終端記号または非終端記号との組み合わせに置換される。この例では、FileEntry、FeOpt、FileName、FeOpt、がそれぞれ非終端記号である。が付された非終端記号は、その非終端記号を0個以上繰り返すことを示す。
この例では、FileEntryは、ファイルを定義するための予約語である「FD」と、0から9まで、AからZまで、「_」、「−」のうちいずれかの1文字以上の組み合わせであるFileNameと、オプションを定義するための予約語である「IS」「GLOBAL」と、「.」とが結合されて構成されることが示されている。
図4は、このような文法定義情報に基づく構文解析により生成される抽象構文木の例を示す図である。抽象構文木は、解析対象のソースコードの構造を木構造で表した情報である。ここでは、図2に示したソースコードの1行目の「FD FILEA IS GLOBAL」との記述を解析した例を示している。「FD FILEA IS GLOBAL」のうち、「FILEA」は非終端記号であるFileNameに一致し、「IS GLOBAL」は非終端記号であるFeOptに一致し、「FD」とこれらの組み合わせとは非終端記号であるFileEntryに一致する。このため、この記述は、文法定義情報におけるFileEntryに対応するものであるとして正常に解析することができる。
変換表記憶部132には、文法定義情報に定義された終端記号および非終端記号のそれぞれに対応して設計書に出力する出力項目が含まれる変換表が記憶される。変換表記憶部132は、中間表現変換表記憶部133と、日本語変換表記憶部134とを備えている。
中間表現変換表記憶部133には、文法定義情報における非終端記号ごとに、設計書に出力する出力項目を対応付けた中間表現変換表が記憶される。図5は、中間表現変換表記憶部133に記憶される中間表現変換表のデータ例を示す図である。中間表現変換表において、非終端記号に対応する出力項目が「×」である場合、その項目を設計書に出力しないことを示している。出力項目が「×」でない場合、出力項目に記載されている設計書の箇所に非終端記号の内容を記載することを示している。
図6は、このような中間表現変換表に基づいて生成される中間表現の例を示す図である。ここでは、図4に示した抽象構文木を、中間表現変換表に基づいて中間表現に変換した例を示している。中間表現変換表には、FileEntryは出力せず、FileNameの出力項目がファイルIDであり、FeOptの出力項目がオプションであることが示されている。このため、ファイルIDとして、FileNameに対応する終端記号である「FILEA」を対応付け、オプションとして、FeOptに対応する終端記号である「IS GLOBAL」を対応付けた例を示している。
日本語変換表記憶部134には、中間表現における出力項目に対応付けられた文字列ごとに、その文字列に対応する日本語の文字列を対応付けた日本語変換表が記憶される。図7は、日本語変換表記憶部134に記憶される日本語変換表のデータ例を示す図である。ここでは、ファイルIDに文字列「FILEA」が対応付けられている場合、その文字列を文字列「Aファイル」に置換することを示している。また、ファイルIDに文字列「FILEB」が対応付けられている場合、その文字列を文字列「Bファイル」に置換することを示している。また、オプションに文字列「IS GLOBAL」が対応付けられている場合、その文字列を文字列「グローバル」に置換することを示している。
図8は、このような日本語変換表に基づいて生成される設計書の例を示す図である。ここでは、図6に示した中間表現を、日本語変換表に基づいて設計書に変換した例を示している。中間表現における「FILEA」は「Aファイル」に置換され、中間表現における「IS GLOBAL」は「グローバル」に置換されている。
言語仕様書記憶部135には、プログラム言語の文法規則を自然言語によって解説したドキュメントである言語仕様書が記憶される。言語仕様書は、例えば、そのプログラム言語自体の開発者等によって発行された、そのプログラム言語の仕様を解説した言語解説書のようなものであってもよいし、標準化団体や第三者によって作成されたものであってもよい。
制御部140は、ソースコード解析支援装置100が備える各部を制御する。制御部140は、ソースコード読み込み部141と、構文解析部142と、設計書生成部143と、エラー箇所特定部144と、文法定義情報更新部145と、変換表修正可否判定部146と、変換表更新部147とを備えている。
ソースコード読み込み部141は、プログラム言語によって記述された、解析対象のソースコードを読み込む。例えば、記憶部130に解析対象のソースコードを予め記憶させておき、ソースコード読み込み部141は、記憶部130に記憶されているソースコードを読み込んでもよいし、ファイル形式のソースコードが記憶されたUSB(Universal Serial Bus)メモリやCD(Compact Disc)等の媒体から読み込んでもよいし、ネットワークを介して接続された他のコンピュータ装置に記憶されているソースコードを読み込むようにしてもよい。
構文解析部142は、文法定義情報記憶部131に記憶されている文法定義情報を読み出し、ソースコード読み込み部141によって読み込まれたソースコードと、文法定義情報記憶部131から読み出した文法定義情報とを比較して、ソースコードの構文解析を行い、上述したような抽象構文木を生成する。例えば、構文解析部142は、ソースコードに含まれる記述を、そのプログラム言語において定められた区切り文字(例えば、「.」(ピリオド)や「;」(セミコロン)等)に分割し、分割した記述ごとに、対応する文法定義情報を特定する。すなわち、ここで、構文解析部142は、解析対象であるソースコードに、文法定義情報によって定義されていない記述である未定義記述が含まれるか否かを判定する。構文解析部142は、解析対象であるソースコードに、未定義記述が含まれていなければ、ソースコードに含まれている記述の全てに基づいて抽象構文木を生成し、構文解析を正常終了する。構文解析部142は、解析対象であるソースコードに、未定義記述が含まれていれば、エラーとして構文解析を異常終了する。このとき、構文解析部142は、ソースコードにおいて未定義記述が含まれると判定した箇所のファイル名、行番号、桁番号をエラーメッセージとして出力する。
設計書生成部143は、ソースコードと、文法定義情報と、変換表とに基づいて設計書を生成する。例えば、設計書生成部143は、構文解析部142による構文解析処理が正常終了すると、変換表記憶部132の中間表現変換表記憶部133に記憶されている中間表現変換表を読み出し、構文解析部142によって生成された抽象構文木を、上述したような中間表現に変換する。さらに、設計書生成部143は、日本語変換表記憶部134に記憶されている日本語変換表を読み出し、中間表現を日本語に置換して設計書を生成する。設計書は、例えば、表計算ソフト等のファイル形式に沿ったデータファイルとして生成することができる。
ここで、上述したソースコードと文法定義情報との例について考えると、ソースコードの例における1行目の「FD FILEA IS GLOBAL.」は、文法定義情報に一致して構文解析できるものの、2行目と3行目の「EXTERNAL」、3行目の「FILEDCL」、4行目の「RECORDING F」の記述については、対応する文法定義情報が存在しないため、構文解析は異常終了となる。
そこで、本実施形態のソースコード解析支援装置100は、解析対象のソースコードから、このように予め用意した文法定義情報に定義されていない記述を特定し、その記述について対応する文法定義候補を推定するとともに、新たな文法定義情報の入力を受け付けて文法定義情報記憶部131に記憶させる。さらに、対応する変換表についても、新たな項目を追記して変換表記憶部132に記憶させる。ソースコード解析支援装置100は、このように更新した文法定義情報及び変換表に基づいて、解析対象のソースコードに対して再度の構文解析を行うことで、構文解析を正常終了することができる。このように、ソースコード解析支援装置100は、解析対象のソースコードに未定義記述が含まれる場合、その未定義記述に対応する新たな文法定義情報、変換表を学習することで、効率良くソースコードの解析を支援することができる。以下、このような学習処理について詳細に説明する。
エラー箇所特定部144は、構文解析部142によって、解析対象のソースコードに未定義記述が含まれると判定された場合、その未定義記述を出力する。例えば、上述の例では、ソースコードの2行目における「FD FILEB EXTERNAL.」において、「EXTERNAL」の記述が未定義であるため、構文解析部142によって、2行目の10桁目を示すエラーメッセージが出力される。例えば、エラー箇所特定部144は、エラーメッセージが示す行番号の行頭からプログラム言語の区切り文字までの記述を、エラー箇所として特定する。この例では、「FD FILEB EXTERNAL.」をエラー箇所として特定する。同様に、3行目の「FILEDCL FILEC EXTERNAL.」、4行目の「FD FILED IS GLOBAL RECORDING F.」をエラー箇所として特定する。
文法定義情報更新部145は、エラー箇所特定部144によって特定されて出力された未定義記述に対応する文法定義情報の入力を受け付け、入力された文法定義情報を文法定義情報記憶部131に記憶させる。例えば、文法定義情報更新部145は、エラー箇所特定部144が出力したエラー箇所を、出力部120に表示させる。ユーザは、出力部120に表示されたエラー箇所を参照し、そのエラーを解消するための文法定義を判断し、その文法定義を入力部110に入力する。文法定義情報更新部145は、入力部110に入力された文法定義を示す文法定義情報を、文法定義情報記憶部131に記憶させる。このように更新された文法定義情報により、ソースコード解析支援装置100は、解析対象のソースコードの構文解析を正常に終了することができる。
この際、文法定義情報更新部145は、未定義記述に対応する文法定義の候補を推定して出力部120に表示させることにより、ユーザの判断を支援することができる。例えば、エラー箇所である2行目における「FD FILEB EXTERNAL.」において、「FD」と「FILEB」との記述はFileEntryの定義と一致するものの、「EXTERNAL」の記述がFeOptの定義と一致しないためエラーになっていることがわかる。このため、「EXTERNAL」は、FeOptのバリエーションであると推定できる。同様に、エラー箇所である3行目における「FILEDCL FILEC EXTERNAL.」において、「FILEDCL」は「FD」のバリエーションであると推定できる。同様に、エラー箇所である4行目における「FD FILED IS GLOBAL RECORDING F.」において、「RECORDING F.」は、FeOptとは異なる種類のパラメータであると推定できる。
そこで、文法定義情報更新部145は、このような文法定義候補を、出力部120に表示させる。図9は、文法定義情報更新部145が出力部120に表示させる文法定義候補の例を示す図である。ここで、行頭の「−」は、その行の文法定義情報を文法定義情報記憶部131から削除することを示し、行頭の「+」は、その行の文法定義情報を文法定義情報記憶部131に追加することを示している。定義中における「|」は選択肢を示す。
文法定義情報更新部145は、このように表示した文法定義候補に応じてユーザから入力部110に入力される文法定義情報を、文法定義情報記憶部131に記憶させる。文法定義情報更新部145は、未定義記述を新たな終端記号として定義する文法定義情報と、未定義記述に対応する新たな非終端記号を定義する文法定義情報とのいずれかの入力を受け付けることができる。例えば、この例では、未定義記述である「EXTERNAL」を、非終端記号「FeOpt」に対応する新たな終端記号として定義する文法定義情報の入力を受け付けることができる。また、未定義記述である「RECORDING F」に対応する新たな非終端記号である「FeRecording」を定義する新たな文法定義情報の入力を受け付けることができる。図10は、文法定義情報記憶部131の文法定義情報が更新されて記憶されたデータ例を示す図である。ここでは、図9に示した文法定義後方の全てが、そのまま反映された例を示している。
ここで、ユーザが新たな文法定義情報を入力する際には、エラー箇所における記述が、そのプログラム言語においてどのような意味を持つものであるかという知識が必要になる。このため、そのプログラム言語にある程度、習熟したユーザでなければ、新たな文法定義情報を正しく判断することが難しい。そこで、文法定義情報更新部145は、言語仕様書記憶部135に記憶されている言語仕様書を読み出し、出力部120に表示させる。これにより、ユーザは、出力部120に表示された言語仕様書を参照しながら、エラー箇所における記述に対する新たな文法定義情報を判断することができる。この際、文法定義情報更新部145は、言語仕様書において、未定義記述に対応する箇所を特定し、特定した箇所を出力することができる。例えば、文法定義情報更新部145は、未定義記述の文字列を言語仕様書から検索して抽出し、抽出した箇所を出力部120に出力することができる。文法定義情報更新部145は、出力した言語仕様書の箇所に応じて入力される文法定義情報の入力を受け付ける。このようにすれば、そのプログラム言語に習熟していないユーザも、対応する言語仕様書を参照しながら、入力すべき新たな文法定義情報を判断することができる。
変換表修正可否判定部146は、新たな文法定義情報に応じて、変換表を修正する必要があるか否かを判定する。例えば、上述の例では、FeOptの新たなバリエーションである「EXTERNAL」について、日本語変換表には対応する日本語が存在しないため、要修正と判定できる。また、FileEntryに対応付けられる”FILEDCL“は、中間表現変換表においてFileEntryが既に存在し、出力項目が「×」であり出力しないため、修正不要と判定できる。また、新たな非終端記号である「FeRecording」については、中間表現変換表に記載されていないが、設計書に出力するか否かは機械的に判断できないため、判定不可とする。
変換表更新部147は、エラー箇所特定部144が出力した未定義記述に対応する変換表の入力を受け付け、入力された変換表を変換表記憶部132に記憶させる。変換表更新部147は、例えば、中間表現変換表に、新たな非終端記号である「FeRecording」を、新たな出力項目として記憶させることを示す情報の入力を受け付ける。図11は、変換表更新部147によって更新された中間表現変換表のデータ例を示す図である。また、変換表更新部147は、例えば、日本語変換表に、終端記号である「EXTERNAL」に対応する日本語である「外部」と、終端記号である「RECORDING F」に対応する日本語である「Fレコーディング」とを追加することを示す情報の入力を受け付ける。図12は、変換表更新部147によって更新された日本語変換表のデータ例を示す図である。
このように更新された文法定義情報と変換表により、ソースコード解析支援装置100は、未定義であった記述が含まれるソースコードを構文解析することができ、また構文解析して生成した抽象構文木を、中間表現に変換し、設計書を生成することができる。図13は、中間表現変換表を更新した後に行う設計書生成処理において生成する中間表現の例を示す図である。このように、「EXTERNAL」や「RECORDING F」の記述を、中間表現に変換することができる。図14は、日本語変換表を更新した後に行う設計書生成処理において生成する設計書の例を示す図である。このように、「EXTERNAL」や「RECORDING F」の記述を日本語に変換し、設計書を生成することができる。
次に、図面を参照して、本実施形態によるソースコード解析支援装置100の動作例を説明する。図15は、本実施形態によるソースコード解析支援装置100の動作例を示すフローチャートである。
ソースコード解析支援装置100のソースコード読み込み部141は、ユーザからの操作に応じて、解析対象のソースコードを読み込む(ステップS1)。ここで、ソースコード読み込み部141は、読み込んだ解析対象のソースコードを、記憶部130に記憶させておくことができる。
構文解析部142は、ステップS1において読み込んだソースコードの記述を、プログラム言語により予め定められた区切り文字によって分割してトークンを生成する字句解析を行う。そして、構文解析部142は、分割したトークンの並びが、文法定義情報記憶部131に記憶されている文法定義情報に一致するか否かを判定する構文解析を行う(ステップS2)。
構文解析部142は、分割したトークンの並びが、文法定義情報記憶部131に記憶されている文法定義情報に一致すればエラーなしと判定して抽象構文木を生成し、一致しなければエラーありと判定する。構文解析部142が、解析対象のソースコードに含まれる全ての記述についてエラーなしと判定すると(ステップS3:NO)、設計書生成部143は、中間表現変換表記憶部133に記憶されている中間表現変換表を読み出し、読み出した中間表現変換表に基づいて、構文解析部142が生成した抽象構文木を中間表現に変換する。また、設計書生成部143は、日本語変換表記憶部134に記憶されている日本語変換表を読み出し、読み出した日本語変換表に基づいて、中間表現を日本語に変換した設計書を生成し(ステップS4)、処理を終了する。
ステップS3において、構文解析部142は、解析対象のソースコードに含まれる記述についてエラーありと判定すると(ステップS3:YES)、エラーメッセージを出力する。エラー箇所特定部144は、構文解析部142が出力したエラーメッセージが示すソースコードの箇所を特定して出力する(ステップS5)。文法定義情報更新部145は、エラー箇所特定部144が特定したエラー箇所の記述と、文法定義情報記憶部131に記憶されている文法定義情報とを比較し、文法定義候補を生成する(ステップS6)。
文法定義情報更新部145は、エラー箇所の記述と、文法定義候補と、言語仕様書記憶部135から読み出した言語仕様書とのいずれかまたは複数の情報を出力部120に表示させる。ユーザは、出力部120に表示された情報に基づいて、エラー箇所に対応する新たな文法定義情報を、入力部110に入力する。文法定義情報更新部145は、入力部110に入力された文法定義情報を受け付け、入力された文法定義情報を文法定義情報記憶部131に記憶させる(ステップS7)。
変換表修正可否判定部146は、変換表の修正可否判定を行う(ステップS8)。変換表修正可否判定部146が、修正不要と判定すると(ステップS9:NO)、ステップS2に戻り、ソースコード解析支援装置100は、再度の構文解析を行う。変換表修正可否判定部146が、要修正と判定すると(ステップS9:YES)、変換表更新部147は、ユーザからの操作に応じて、変換表記憶部132に記憶されている変換表を更新して記憶させ(ステップS10)、ステップS2に戻る。
次に、図面を参照して、ステップS6における文法定義候補生成処理の動作例を説明する。図16は、文法定義候補生成処理の動作例を示すフローチャートである。
文法定義情報更新部145は、エラー箇所特定部144によって特定されたエラー箇所を、空白と区切り文字とによってトークンに分割する(ステップS11)。文法定義情報更新部145は、分割したトークンをキーとして、文法定義情報記憶部131に記憶されている文法定義情報から、そのトークンを含む文法定義情報を検索する(ステップS12)。
トークンを含む文法定義情報が文法定義情報記憶部131に記憶されていなければ(ステップS13:NO)、文法定義情報更新部145は、そのトークンを非終端記号に対応付けた文法定義候補を出力する(ステップS15)。トークンを含む文法定義情報が文法定義情報記憶部131に記憶されていれば(ステップS13:YES)、文法定義情報更新部145は、非終端記号が展開できるか否かを判定する。非終端記号を展開できなければ(ステップS14:NO)、ステップS15に進む。非終端記号を展開できれば(ステップS14:YES)、ステップS12に戻る。
次に、図面を参照して、ステップS8における変換表修正可否判定処理の動作例を説明する。図17は、変換表修正可否判定処理の動作例を示すフローチャートである。
変換表修正可否判定部146は、文法定義情報更新部145によって生成された文法定義候補の非終端記号をキーとして、中間表現変換表記憶部133に記憶されている中間表現変換表を検索する(ステップS21)。変換表修正可否判定部146は、非終端記号が中間表現変換表記憶部133に記憶されている中間表現変換表に含まれていなければ(ステップS22:NO)、判定不可として(ステップS23)、処理を終了する。
変換表修正可否判定部146は、非終端記号が中間表現変換表記憶部133に記憶されている中間表現変換表に含まれていれば(ステップS22:YES)、中間表現変換表においてその非終端記号が出力項目とされているか否かを判定する。変換表修正可否判定部146は、中間表現変換表においてその非終端記号が出力項目とされていないと判定すれば(ステップS24:NO)、修正不要と判定し(ステップS25)、処理を終了する。
ステップS24において、変換表修正可否判定部146が、中間表現変換表において非終端記号が出力項目とされていると判定すれば(ステップS24:YES)、その出力項目をキーとして、日本語変換表を検索する(ステップS26)。変換表修正可否判定部146は、出力項目に対応する日本語が日本語変換表記憶部134に記憶されている日本語変換表に含まれていなければ(ステップS27:NO)、要修正と判定し(ステップS28)、処理を終了する。出力項目に対応する日本語が日本語変換表記憶部134に記憶されている日本語変換表に含まれていれば(ステップS27:YES)、変換表修正可否判定部146は、修正不要と判定し(ステップS29)、処理を終了する。
以上説明したように、本実施形態によれば、解析対象のソースコードに、予め文法定義情報に定められていない未定義記述が含まれる場合であっても、その未定義記述に対応する文法定義情報を効率良く追加することができ、円滑なソースコード解析を支援することができる。これにより、リバースエンジニアリングやリエンジニングを行うユーザの作業効率を上げ、作業工数の低減が期待できるとともに、ソースコードの解析成功率を向上させることが可能となる。
このような作業を行う場合、従来であれば、解析対象のソースコードを構文解析器に解析させる際にエラーメッセージが出力されると、ユーザがエラーメッセージを参照して自身でソースコードのエラー箇所を特定し、言語仕様書や文法定義を参照して文法を特定し、該当箇所の文法を構文解析器が解釈可能な形式で表現して構文解析器を修正し、設計書生成器の仕様を参照し、構文解析器の修正内容に応じた設計書生成器の修正要否を判断し、変換表を修正するといった作業を行い、再度、構文解析器に解析させてエラーの確認を行うことが必要であった。このため、このような作業を行うユーザには、プログラム言語に対する知識、構文解析の知識、設計書生成の知識が求められるとともに、一連の作業自体の習熟度などによって、作業効率や作業時間、作業品質にバラツキが生じることもあった。これに対し、本実施形態のソースコード解析支援装置100によれば、一連の作業を自動的に行うことができるとともに、言語仕様書を出力部120に表示したり、文法定義候補を推定したり、変換表の修正要否を判定したりすることができる。このため、解析対象のプログラム言語やソースコード解析支援装置100の動作に習熟していないユーザであっても、表示される情報を参照しながら、新たに追加すべき文法定義情報を判断することができる。
また、同様のプログラム言語であっても、バージョンが異なることによって文法規則やパラメータが異なったり、ベンダごとに若干異なる文法規則(方言)が存在したりすることがある。このような場合でも、未定義記述に応じた文法定義情報を効率良く追加し、構文解析を成功させることができる。
なお、本実施形態では、変換表記憶部132には、変換表として中間表現変換表と日本語変換表とが記憶される例を示したが、日本語変換を行わずに、対応するソースコードの記述をそのまま設計書に記載するような場合には、日本語変換表は記憶されていなくてもよい。また、日本語変換表に代えて、または加えて、他の言語(例えば、英語、中国語等)の自然言語に変換する自然言語変換表が記憶されているようにし、多言語に変換するようにしてもよい。
また、構文解析部142が解析対象のソースコードの構文解析を行う際、構文解析部142は、エラーありと判定するごとに、ステップS5からステップS10までの更新処理を行ってもよいし、解析対象のソースコードの全てについてエラーの有無を判定した後に、エラーのそれぞれについてステップS5からステップS10までの更新処理を行うこともできる。
なお、本実施形態では、解析対象のソースコードにおけるファイル定義の箇所について構文解析し、設計書を生成する例を説明したが、同様の処理によって、ソースコード全体を構文解析し、設計書を生成することが可能である。
なお、本発明における処理部の機能を実現するためのプログラムをコンピュータ読み取り可能な記録媒体に記録して、この記録媒体に記録されたプログラムをコンピュータシステムに読み込ませ、実行することによりソースコード解析の支援を行ってもよい。なお、ここでいう「コンピュータシステム」とは、OSや周辺機器等のハードウェアを含むものとする。また、「コンピュータシステム」は、インターネットやWAN、LAN、専用回線等の通信回線を含むネットワークを介して接続された複数のコンピュータ装置を含んでもよい。また、「コンピュータ読み取り可能な記録媒体」とは、フレキシブルディスク、光磁気ディスク、ROM、CD−ROM等の可搬媒体、コンピュータシステムに内蔵されるハードディスク等の記憶装置のことをいう。さらに「コンピュータ読み取り可能な記録媒体」とは、ネットワークを介してプログラムが送信された場合のサーバやクライアントとなるコンピュータシステム内部の揮発性メモリ(RAM)のように、一定時間プログラムを保持しているものも含むものとする。また、上記プログラムは、上述した機能の一部を実現するためのものであってもよい。さらに、上述した機能をコンピュータシステムにすでに記録されているプログラムとの組み合わせで実現できるもの、いわゆる差分ファイル(差分プログラム)であってもよい。
また、上述した機能の一部または全部を、LSI(Large Scale Integration)等の集積回路として実現してもよい。上述した各機能は個別にプロセッサ化してもよいし、一部、または全部を集積してプロセッサ化してもよい。また、集積回路化の手法はLSIに限らず専用回路、または汎用プロセッサで実現してもよい。また、半導体技術の進歩によりLSIに代替する集積回路化の技術が出現した場合、当該技術による集積回路を用いてもよい。
100 ソースコード解析支援装置
110 入力部
120 出力部
130 記憶部
131 文法定義情報記憶部
132 変換表記憶部
133 中間表現変換表記憶部
134 日本語変換表記憶部
135 言語仕様書記憶部
140 制御部
141 ソースコード読み込み部
142 構文解析部
143 設計書生成部
144 エラー箇所特定部
145 文法定義情報更新部
146 変換表修正可否判定部
147 変換表更新部

Claims (5)

  1. 所定のプログラム言語における文法規則を定義した文法定義情報であって、前記プログラム言語によって記述されたソースコードを解析するための文法定義情報が記憶される文法定義情報記憶部と、
    前記プログラム言語によって記述されたソースコードを読み込むソースコード読み込み部と、
    前記ソースコード読み込み部によって読み込まれた前記ソースコードと前記文法定義情報とを比較して、前記ソースコードに、前記文法定義情報によって定義されていない記述である未定義記述が含まれるか否かを判定する構文解析部と、
    前記構文解析部によって、前記ソースコードに前記未定義記述が含まれると判定された場合、当該未定義記述を出力するエラー箇所特定部と、
    前記エラー箇所特定部によって出力された前記未定義記述に対応する文法定義情報の入力を受け付け、入力された文法定義情報を前記文法定義情報記憶部に記憶させる文法定義情報更新部と、
    前記プログラム言語の文法規則を自然言語によって解説したドキュメントである言語仕様書が記憶される言語仕様書記憶部と、
    を備え
    前記文法定義情報更新部は、前記未定義記述に対応する前記言語仕様書の箇所を特定し、特定した箇所を出力し、出力した当該言語仕様書の箇所に応じて入力される前記文法定義情報の入力を受け付ける
    とを特徴とするソースコード解析支援装置。
  2. 前記文法定義情報は、前記プログラム言語における文法規則を終端記号と非終端記号とによって定義し、
    前記文法定義情報更新部は、前記未定義記述を新たな終端記号として定義する文法定義情報と、前記未定義記述に対応する新たな非終端記号を定義する文法定義情報とのいずれかの入力を受け付ける
    ことを特徴とする請求項1記載のソースコード解析支援装置。
  3. 前記文法定義情報に定義された終端記号および非終端記号のそれぞれに対応して設計書に出力する出力項目が含まれる変換表が記憶される変換表記憶部と、
    前記ソースコードと、前記文法定義情報と、前記変換表とに基づいて設計書を生成する設計書生成部と、
    を備えることを特徴とする請求項に記載のソースコード解析支援装置。
  4. 前記エラー箇所特定部が出力した前記未定義記述に対応する前記変換表の入力を受け付け、入力された変換表を前記変換表記憶部に記憶させる変換表更新部と、
    を備えることを特徴とする請求項に記載のソースコード解析支援装置。
  5. 所定のプログラム言語における文法規則を定義した文法定義情報であって、前記プログラム言語によって記述されたソースコードを解析するための文法定義情報が記憶される文法定義情報記憶部と、前記プログラム言語の文法規則を自然言語によって解説したドキュメントである言語仕様書が記憶される言語仕様書記憶部とを備えるソースコード解析支援装置の、
    ソースコード読み込み部が、前記プログラム言語によって記述されたソースコードを読み込むステップと、
    構文解析部が、前記ソースコード読み込み部によって読み込まれた前記ソースコードと前記文法定義情報とを比較して、前記ソースコードに、前記文法定義情報によって定義されていない記述である未定義記述が含まれるか否かを判定する構文解析ステップと、
    エラー箇所特定部が、前記構文解析部によって、前記ソースコードに前記未定義記述が含まれると判定された場合、当該未定義記述を出力するエラー箇所特定ステップと、
    文法定義情報更新部が、前記エラー箇所特定部によって出力された前記未定義記述に対応する文法定義情報の入力を受け付け、入力された文法定義情報を前記文法定義情報記憶部に記憶させる文法定義情報更新ステップと、
    含み、
    前記文法定義情報更新ステップにおいて、前記文法定義情報更新部が、前記未定義記述に対応する前記言語仕様書の箇所を特定し、特定した箇所を出力し、出力した当該言語仕様書の箇所に応じて入力される前記文法定義情報の入力を受け付ける
    とを特徴とするソースコード解析支援方法。
JP2014010228A 2014-01-23 2014-01-23 ソースコード解析支援装置、ソースコード解析支援方法 Active JP6267971B2 (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2014010228A JP6267971B2 (ja) 2014-01-23 2014-01-23 ソースコード解析支援装置、ソースコード解析支援方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2014010228A JP6267971B2 (ja) 2014-01-23 2014-01-23 ソースコード解析支援装置、ソースコード解析支援方法

Publications (2)

Publication Number Publication Date
JP2015138435A JP2015138435A (ja) 2015-07-30
JP6267971B2 true JP6267971B2 (ja) 2018-01-24

Family

ID=53769377

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2014010228A Active JP6267971B2 (ja) 2014-01-23 2014-01-23 ソースコード解析支援装置、ソースコード解析支援方法

Country Status (1)

Country Link
JP (1) JP6267971B2 (ja)

Family Cites Families (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH0424825A (ja) * 1990-05-18 1992-01-28 Fujitsu Ltd 文法編集処理装置
JPH10133866A (ja) * 1996-11-01 1998-05-22 Mitsubishi Electric Corp 移行変換処理方法
JP5404681B2 (ja) * 2011-03-22 2014-02-05 三菱電機株式会社 監視制御アプリケーション設計装置及びプログラム

Also Published As

Publication number Publication date
JP2015138435A (ja) 2015-07-30

Similar Documents

Publication Publication Date Title
US7904291B2 (en) Communication support apparatus and computer program product for supporting communication by performing translation between languages
JPS6375835A (ja) 目的コ−ド、プログラム・リスト及び設計文書を生成する装置
US20060149543A1 (en) Construction of an automaton compiling grapheme/phoneme transcription rules for a phoneticizer
US20070011160A1 (en) Literacy automation software
JP6532088B2 (ja) 自律学習整列ベースの整列コーパス生成装置およびその方法と、整列コーパスを用いた破壊表現の形態素分析装置およびその形態素分析方法
JP4502615B2 (ja) 類似文検索装置、類似文検索方法、およびプログラム
JP2017208097A (ja) エンティティの多音字の曖昧さ回避方法及びエンティティの多音字の曖昧さ回避装置
US20220414463A1 (en) Automated troubleshooter
JP6952967B2 (ja) 自動翻訳装置
JP2010134922A (ja) 類似語決定方法およびシステム
KR101709693B1 (ko) 크라우드 소싱을 이용한 웹툰 언어 자동 번역 방법
JP2006338261A (ja) 翻訳装置、翻訳方法及び翻訳プログラム
JP5423466B2 (ja) 音声合成装置、音声合成方法、及び音声合成プログラム
JP2009015395A (ja) 辞書構築支援装置および辞書構築支援プログラム
KR20120045906A (ko) 코퍼스 오류 교정 장치 및 그 방법
CN116360794A (zh) 数据库语言解析方法、装置、计算机设备及存储介质
JP6267971B2 (ja) ソースコード解析支援装置、ソースコード解析支援方法
CN116243901A (zh) 一种用于前端页面多语言项目快速开发的方法及系统
JP4476609B2 (ja) 中国語解析装置、中国語解析方法および中国語解析プログラム
US20180011833A1 (en) Syntax analyzing device, learning device, machine translation device and storage medium
KR100631086B1 (ko) Xml을 이용한 텍스트 정규화 방법 및 장치
JP2016189154A (ja) 翻訳方法、装置、及びプログラム
JP2007018462A (ja) 機械翻訳装置、およびプログラム
JP2007279795A (ja) プログラムによって表示される画面が仕様を満たすか判断するシステム
JP7483085B1 (ja) 情報処理システム、情報処理装置、情報処理方法、およびプログラム

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20161205

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20170912

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20170919

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20171114

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20171128

R150 Certificate of patent or registration of utility model

Ref document number: 6267971

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

S533 Written request for registration of change of name

Free format text: JAPANESE INTERMEDIATE CODE: R313533

R350 Written notification of registration of transfer

Free format text: JAPANESE INTERMEDIATE CODE: R350

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250