(57)【要約】【課題】ソースコードの解析において、適切に出力画面を解析する。【解決手段】ソースコード解析装置は、画面を定義するソースファイルを記憶するソース記憶部からソースファイルに記述されているソースコードを取得し、取得したソースコードに含まれる画面出力を定義する画面構成要素と、画面出力に関する条件分岐とを抽出する抽出部と、予め定められたマージ規則に基づいて、抽出部が抽出した条件分岐を併合するか否かを判定するとともに、条件分岐を併合すると判定した場合に、当該条件分岐を併合するマージ処理を実行するマージ処理部と、マージ処理部によって処理された後の条件分岐及び画面構成要素に基づいて、画面構成要素と条件分岐によって分岐される状態の組み合わせとの一覧を示す画面一覧を生成する画面一覧生成部とを備える。【選択図】図１
2015005031.tif 000002
【特許請求の範囲】
【請求項１】
画面を定義するソースファイルを記憶するソース記憶部から前記ソースファイルに記述されているソースコードを取得し、取得した前記ソースコードに含まれる画面出力を定義する画面構成要素と、前記画面出力に関する条件分岐とを抽出する抽出部と、
予め定められたマージ規則に基づいて、前記抽出部が抽出した前記条件分岐を併合するか否かを判定するとともに、前記条件分岐を併合すると判定した場合に、当該条件分岐を併合するマージ処理を実行するマージ処理部と、
前記マージ処理部によって処理された後の前記条件分岐及び前記画面構成要素に基づいて、前記画面構成要素と前記条件分岐によって分岐される状態の組み合わせとの一覧を示す画面一覧を生成する画面一覧生成部と
を備えることを特徴とするソースコード解析装置。
【請求項２】
前記マージ処理部は、
前記条件分岐を併合すると判定した場合に、前記マージ規則に基づいて、当該条件分岐によって分岐されて処理される前記画面構成要素のうちの１つに併合する
ことを特徴とする請求項１に記載のソースコード解析装置。
【請求項３】
前記抽出部は、
前記ソースコードを構文解析して前記画面構成要素と前記条件分岐とを抽出するとともに、抽出した前記条件分岐の条件式を、条件式を識別する条件識別情報に置き換えた条件分岐の記述と、抽出した前記画面構成要素とを含む中間ソースコードを生成し、
前記マージ処理部は、
前記マージ規則に基づいて、前記中間ソースコードに含まれる前記条件識別情報に置き換えた条件分岐に対して、併合するか否かを判定する
ことを特徴とする請求項１又は請求項２に記載のソースコード解析装置。
【請求項４】
前記抽出部は、
前記構文解析に基づいて前記中間ソースコードを構文木として生成し、
前記マージ処理部は、
前記条件識別情報に置き換えた条件分岐のうち、前記構文木における条件分岐の入れ子構造の階層が深い条件分岐を優先して前記マージ処理を実行する
ことを特徴とする請求項３に記載のソースコード解析装置。
【請求項５】
前記画面一覧生成部は、
前記分岐される状態の組み合わせのうちで、常に偽となる前記分岐される状態の組み合わせを削除して、前記画面一覧を生成する
ことを特徴とする請求項１から請求項４のいずれか一項に記載のソースコード解析装置。
【請求項６】
前記マージ処理部は、
前記マージ処理された後の前記分岐される状態の組み合わせの画面数が、所定の画面数以下になるように、前記マージ規則を変更し、変更した前記マージ規則に基づいて、マージ処理を実行する
ことを特徴とする請求項１から請求項５のいずれか一項に記載のソースコード解析装置。
【請求項７】
前記マージ処理部は、
前記マージ処理を実行した後における前記分岐される状態の組み合わせの画面数が、前記マージ処理を実行する前の前記分岐される状態の組み合わせの画面数に対する所定の割合の画面数以下、又は、前記ソースコードによって実行される機能数に応じた所定の画面数以下になるように前記マージ規則を変更し、変更した前記マージ規則に基づいて、マージ処理を実行する
ことを特徴とする請求項６に記載のソースコード解析装置。
【請求項８】
前記画面一覧生成部によって生成された前記画面一覧に基づいて、前記画面一覧に含まれる各画面を定義するソースファイルを生成するソースファイル生成部を備える
ことを特徴とする請求項１から請求項７のいずれか一項に記載のソースコード解析装置。
【請求項９】
抽出部が、画面を定義するソースファイルを記憶するソース記憶部から前記ソースファイルに記述されているソースコードを取得し、取得した前記ソースコードに含まれる画面出力を定義する画面構成要素と、前記画面出力に関する条件分岐とを抽出する抽出ステップと、
マージ処理部が、予め定められたマージ規則に基づいて、前記抽出ステップによって抽出された前記条件分岐を併合するか否かを判定するとともに、前記条件分岐を併合すると判定した場合に、当該条件分岐を併合するマージ処理を実行するマージ処理ステップと、
画面一覧生成部が、前記マージ処理ステップによって処理された後の前記条件分岐及び前記画面構成要素に基づいて、前記画面構成要素と前記条件分岐によって分岐される状態の組み合わせとの一覧を示す画面一覧を生成する画面一覧生成ステップと
を含むことを特徴とするソースコード解析方法。
【請求項１０】
コンピュータに、
抽出部が、画面を定義するソースファイルを記憶するソース記憶部から前記ソースファイルに記述されているソースコードを取得し、取得した前記ソースコードに含まれる画面出力を定義する画面構成要素と、前記画面出力に関する条件分岐とを抽出する抽出ステップと、
マージ処理部が、予め定められたマージ規則に基づいて、前記抽出ステップによって抽出された前記条件分岐を併合するか否かを判定するとともに、前記条件分岐を併合すると判定した場合に、当該条件分岐を併合するマージ処理を実行するマージ処理ステップと、
画面一覧生成部が、前記マージ処理ステップによって処理された後の前記条件分岐及び前記画面構成要素に基づいて、前記画面構成要素と前記条件分岐によって分岐される状態の組み合わせとの一覧を示す画面一覧を生成する画面一覧生成ステップと
を実行させるためのプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ソースコード解析装置、ソースコード解析方法、及びプログラムに関する。
【背景技術】
【０００２】
情報処理システムにおいて各種機能を追加する場合には、一般的に、既存のソースコードに対して、追加機能に係るソースコードを追加し、バイナリコード化することで実現される。そのため、何回も機能追加されたソースコードには、目的(機能)の異なる種々のソースコードが記述されることになり、結果として保守性が非常に低下する場合がある。このような場合に対応する技術としては、例えば、特許文献１に記載の技術が知られている。
特許文献１に記載の技術では、データアクセス処理とロジック処理とが混在しているソースコードから、ロジック処理とデータアクセス処理との境界を抽出することにより、ソースコードにおいて、ロジック処理とデータアクセス処理とを分離することが可能である。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特開２０１２−２０３７２６号公報
【発明の概要】
【発明が解決しようとする課題】
【０００４】
ところで、例えば、ＪＳＰ（Java Server Pages）ファイルのような画面を定義するファイルに、画面出力に関するソースコードが複数記述されていることがある。このような画面を定義するファイル（ＪＳＰファイル）では、保守性の高いソースコードを作成するためには、画面を定義するファイルに記述されているソースコードを画面ごとに分割する必要がある。
しかしながら、このような画面を定義するファイル（ＪＳＰファイル）では、画面上に出力する画面構成要素（例えば、ＨＴＭＬ要素）に関するソースコードを複数の画面で共有した上で、条件式によって出力する画面を変更する制御を行っている場合がある。このような場合に、複数の画面構成要素に基づいて画面出力するため、全ての画面を網羅するように画面を分割すると、生成される画面数が爆発的に増加してしまうということがあった。例えば、ソースコードに含まれる条件分岐（例えば、ＩＦ文）の数が５０箇所あった場合、生成される画面数は、２の５０乗の画面数となり、爆発的に増加してしまうということがあった。上述した特許文献１に記載の技術では、このような場合に対応することができずに、適切に出力画面を解析することができなかった。
【０００５】
本発明は、上記問題を解決すべくなされたもので、その目的は、適切に出力画面を解析することができるソースコード解析装置、ソースコード解析方法、及びプログラムを提供することにある。
【課題を解決するための手段】
【０００６】
上記問題を解決するために、本発明の一態様は、画面を定義するソースファイルを記憶するソース記憶部から前記ソースファイルに記述されているソースコードを取得し、取得した前記ソースコードに含まれる画面出力を定義する画面構成要素と、前記画面出力に関する条件分岐とを抽出する抽出部と、予め定められたマージ規則に基づいて、前記抽出部が抽出した前記条件分岐を併合するか否かを判定するとともに、前記条件分岐を併合すると判定した場合に、当該条件分岐を併合するマージ処理を実行するマージ処理部と、前記マージ処理部によって処理された後の前記条件分岐及び前記画面構成要素に基づいて、前記画面構成要素と前記条件分岐によって分岐される状態の組み合わせとの一覧を示す画面一覧を生成する画面一覧生成部とを備えることを特徴とするソースコード解析装置である。
【０００７】
また、本発明の一態様は、上記のソースコード解析装置において、前記マージ処理部は、前記条件分岐を併合すると判定した場合に、前記マージ規則に基づいて、当該条件分岐によって分岐されて処理される前記画面構成要素のうちの１つに併合することを特徴とする。
【０００８】
また、本発明の一態様は、上記のソースコード解析装置において、前記抽出部は、前記ソースコードを構文解析して前記画面構成要素と前記条件分岐とを抽出するとともに、抽出した前記条件分岐の条件式を、条件式を識別する条件識別情報に置き換えた条件分岐の記述と、抽出した前記画面構成要素とを含む中間ソースコードを生成し、前記マージ処理部は、前記マージ規則に基づいて、前記中間ソースコードに含まれる前記条件識別情報に置き換えた条件分岐に対して、併合するか否かを判定することを特徴とする。
【０００９】
また、本発明の一態様は、上記のソースコード解析装置において、前記抽出部は、前記構文解析に基づいて前記中間ソースコードを構文木として生成し、前記マージ処理部は、前記条件識別情報に置き換えた条件分岐のうち、前記構文木における条件分岐の入れ子構造の階層が深い条件分岐を優先して前記マージ処理を実行することを特徴とする。
【００１０】
また、本発明の一態様は、上記のソースコード解析装置において、前記画面一覧生成部は、前記分岐される状態の組み合わせのうちで、常に偽となる前記分岐される状態の組み合わせを削除して、前記画面一覧を生成することを特徴とする。
【００１１】
また、本発明の一態様は、上記のソースコード解析装置において、前記マージ処理部は、前記マージ処理された後の前記分岐される状態の組み合わせの画面数が、所定の画面数以下になるように、前記マージ規則を変更し、変更した前記マージ規則に基づいて、マージ処理を実行することを特徴とする。
【００１２】
また、本発明の一態様は、上記のソースコード解析装置において、前記マージ処理部は、前記マージ処理を実行した後における前記分岐される状態の組み合わせの画面数が、前記マージ処理を実行する前の前記分岐される状態の組み合わせの画面数に対する所定の割合の画面数以下、又は、前記ソースコードによって実行される機能数に応じた所定の画面数以下になるように前記マージ規則を変更し、変更した前記マージ規則に基づいて、マージ処理を実行することを特徴とする。
【００１３】
また、本発明の一態様は、上記のソースコード解析装置において、前記画面一覧生成部によって生成された前記画面一覧に基づいて、前記画面一覧に含まれる各画面を定義するソースファイルを生成するソースファイル生成部を備えることを特徴とする。
【００１４】
また、本発明の一態様は、抽出部が、画面を定義するソースファイルを記憶するソース記憶部から前記ソースファイルに記述されているソースコードを取得し、取得した前記ソースコードに含まれる画面出力を定義する画面構成要素と、前記画面出力に関する条件分岐とを抽出する抽出ステップと、マージ処理部が、予め定められたマージ規則に基づいて、前記抽出ステップによって抽出された前記条件分岐を併合するか否かを判定するとともに、前記条件分岐を併合すると判定した場合に、当該条件分岐を併合するマージ処理を実行するマージ処理ステップと、画面一覧生成部が、前記マージ処理ステップによって処理された後の前記条件分岐及び前記画面構成要素に基づいて、前記画面構成要素と前記条件分岐によって分岐される状態の組み合わせとの一覧を示す画面一覧を生成する画面一覧生成ステップとを含むことを特徴とするソースコード解析方法である。
【００１５】
また、本発明の一態様は、コンピュータに、抽出部が、画面を定義するソースファイルを記憶するソース記憶部から前記ソースファイルに記述されているソースコードを取得し、取得した前記ソースコードに含まれる画面出力を定義する画面構成要素と、前記画面出力に関する条件分岐とを抽出する抽出ステップと、マージ処理部が、予め定められたマージ規則に基づいて、前記抽出ステップによって抽出された前記条件分岐を併合するか否かを判定するとともに、前記条件分岐を併合すると判定した場合に、当該条件分岐を併合するマージ処理を実行するマージ処理ステップと、画面一覧生成部が、前記マージ処理ステップによって処理された後の前記条件分岐及び前記画面構成要素に基づいて、前記画面構成要素と前記条件分岐によって分岐される状態の組み合わせとの一覧を示す画面一覧を生成する画面一覧生成ステップとを実行させるためのプログラムである。
【発明の効果】
【００１６】
本発明によれば、ソースコードの解析において、適切に出力画面を解析することができる。
【図面の簡単な説明】
【００１７】
【図１】第１の実施形態によるソースコード解析装置の一例を示すブロック図である。
【図２】本実施形態におけるＪＳＰファイルのソースコードの一例を示す図である。
【図３】本実施形態における中間ソースコードの一例を示す図である。
【図４】本実施形態における置換情報記憶部のデータ構成の一例を示す構成図である。
【図５】本実施形態におけるマージ規則の一例を示す図である。
【図６】本実施形態における画面一覧の一例を示す図である。
【図７】第１の実施形態におけるソースコード解析の手順の一例を示すフローチャートである。
【図８】本実施形態におけるＩＦ文のマージ処理の一例を説明する説明図である。
【図９】本実施形態における画面一覧の生成処理の一例を説明する説明図である。
【図１０】本実施形態におけるＳＭＴソルバによる処理の一例を説明する説明図である。
【図１１】本実施形態におけるソースコードの構文解析の一例を説明する説明図である。
【図１２】本実施形態における中間ソースコードの別の一例を示す図である。
【図１３】本実施形態における中間ソースコードを構文木で表現した一例を示す図である。
【図１４】本実施形態におけるＩＦ文のマージ処理の一例を説明する第１の図である。
【図１５】本実施形態におけるＩＦ文のマージ処理の一例を説明する第２の図である。
【図１６】本実施形態におけるＩＦ文のマージ処理がされた中間ソースコードの一例を示す図である。
【図１７】本実施形態におけるＩＦ文のマージ処理の一例を示すフローチャートである。
【図１８】第２の実施形態におけるソースコード解析の手順の一例を示すフローチャートである。
【発明を実施するための形態】
【００１８】
以下、本発明の一実施形態によるソースコード解析装置、及びソースコード解析方法について、図面を参照して説明する。
［第１の実施形態］
図１は、第１の実施形態によるソースコード解析装置１の一例を示すブロック図である。
この図において、ソースコード解析装置１は、記憶部４０、入力部５０、表示部６０、及び制御部７０を備えている。
【００１９】
なお、本実施形態におけるソースコード解析装置１は、画面を定義するソースファイル（例えば、ＪＳＰファイル）に記述されているソースコードを取得し、取得したソースコードを解析して、ソースファイルで定義されている画面一覧を生成する。また、ソースコード解析装置１は、生成した画面一覧を表示部６０に表示させるとともに、画面一覧に基づいて、画面ごとのＪＳＰファイルを生成し、生成した画面ごとのＪＳＰファイルを出力する。
【００２０】
ここで、ソース記憶部２０は、画面を定義するソースファイルであるＪＳＰファイルを記憶している。ＪＳＰファイルは、ＪＡＶＡ（登録商標）言語によって画面を定義するファイルであり、例えば、ソースコード内に複数の画面の定義がなされている。ソース記憶部２０が記憶するＪＳＰファイルは、例えば、図２に示すソースコードＳＣ１のような記述がされているファイルである。ＪＳＰファイルの具体例については、図２を参照して後述する。
出力情報記憶部３０は、ソースコード解析装置１の出力結果を記憶する。すなわち、出力情報記憶部３０は、ソースコード解析装置１が生成した画面一覧や画面ごとのＪＳＰファイルなどの出力結果を記憶する。
【００２１】
記憶部４０は、ソースコード解析装置１がソースコードを解析する際に使用する各種情報を記憶する。記憶部４０は、中間コード記憶部４１、置換情報記憶部４２、マージ規則記憶部４３、マージ結果記憶部４４、及び画面一覧記憶部４５を備えている。
【００２２】
中間コード記憶部４１は、後述する抽出部７１によって生成される図３に示すようなソースコードＳＣ２（中間成果物）を中間ソースコードとして記憶する。中間ソースコードの詳細については、図３を参照して後述する。また、中間コード記憶部４１は、抽出部７１によってソースコードを構文解析された解析結果を中間成果物として記憶する。
【００２３】
置換情報記憶部４２は、例えば、図４に示すように、上述した中間ソースコードを生成する際に利用したＩＦ文の条件式を識別する条件ＩＤ（識別情報）と、条件式とを対応付けた置換情報を記憶する。ここで、図４を参照して、置換情報記憶部４２が記憶する置換情報のデータ構成について説明する。
【００２４】
図４は、本実施形態における置換情報記憶部４２のデータ構成の一例を示す構成図である。
この図において、置換情報記憶部４２は、「項番」と、「条件ＩＤ」と、「条件式」とを対応付けて置換情報として記憶する。ここで、「項番」は、置換情報の番号（項番）を示し、「条件ＩＤ」は、条件式を識別する識別情報であって、条件式に代わって置換される識別情報を示し、「条件式」は、置き換えられる条件式を示している。すなわち、置換情報記憶部４２は、後述する抽出部７１によって生成される中間ソースコードにおいて、置換された「条件ＩＤ」と、「条件式」との組を記憶する。
例えば、図４に示す例では、置換情報記憶部４２は、「項番」が“１”である置換情報は、「条件ＩＤ」が“条件１”であり、この「条件ＩＤ」に置換された「条件式」が、“ｍｏｄｕｌｅ＝＝“ＭＯＤＩＦＹ””であることを示している。
【００２５】
図１に戻り、マージ規則記憶部４３は、後述するマージ処理部７２によるマージ処理を実行するためのマージ規則を記憶している。ここで、マージ規則は、例えば、図５に示すような情報であり、１つのＪＳＰファイルが定義する複数の画面のうち、画面の違いとは言えないような細かな画面の違いを併合して画面数を低減するための規則である。また、マージ規則は、例えば、有識者によって予め定められ、マージ規則記憶部４３に記憶されている。
【００２６】
マージ結果記憶部４４は、後述するマージ処理部７２によるマージ処理を実行した結果であるマージ結果を記憶する。
画面一覧記憶部４５は、例えば、図６に示すような画面一覧を、後述する画面一覧の出力結果として記憶する。ここで、図６を参照して、画面一覧記憶部４５が記憶する画面一覧のデータ構成について説明する。
【００２７】
図６は、本実施形態における画面一覧記憶部４５のデータ構成の一例を示す構成図である。
この図において、画面一覧記憶部４５は、「論理状態」を列とし、画面出力を定義する画面構成要素である「ＨＴＭＬ要素」（Hyper Text Markup Language要素）を行とした画面の一覧表を画面一覧ＧＬ１として記憶している。ここで、「論理状態」は、条件分岐によって分岐される状態の組み合わせの論理状態を示しており、１つの列が１つの論理状態に対応する。また、「ＨＴＭＬ要素」は、ＪＳＰファイルのソースコードから抽出されたＨＴＭＬ要素を示している。また、各行における“○”は、対応する「論理状態」において「ＨＴＭＬ要素」を適用することを示し、“×”は、対応する「論理状態」において「ＨＴＭＬ要素」を適用しないことを示している。なお、“＊”は、マージ処理部７２によるマージ処理によりマージされた「ＨＴＭＬ要素」を示しており、その詳細については後述する。
【００２８】
例えば、図６に示す例では、「論理状態」が“条件１＝真、条件２=真”及び“条件１＝真、条件２=偽”である場合に、「ＨＴＭＬ要素」である「＜ｂｕｔｔｏｎ ｎａｍｅ＝“新規取引”＞」は、“○”（表示）であることを示している。また、「論理状態」が“条件１＝偽、条件２=真”及び“条件１＝偽、条件２=偽”である場合に、「ＨＴＭＬ要素」である「＜ｂｕｔｔｏｎ ｎａｍｅ＝“新規取引”＞」は、“×”（非表示）であることを示している。
また、図６に示す例では、画面一覧の各列は、１つの論理状態における画面（論理画面）を示している。例えば、列Ｇ１は、「論理状態」が“条件１＝真、条件２=真”である場合の論理画面を示している。
このように、画面一覧は、１つのＪＳＰファイルにおいて定義している複数の画面（論理画面）の設計仕様を示す設計書に相当する。
【００２９】
再び図１に戻り、入力部５０は、例えば、キーボードやマウスなどの入力装置であり、使用者の操作により、各種情報を取得する。
表示部６０（出力部）は、例えば、液晶ディスプレイ装置などの表示装置であり、ソースコード解析装置１を操作する際の操作画面や、ソースコード解析装置１の出力結果である画面一覧などを表示する。
【００３０】
制御部７０は、例えば、ＣＰＵ（Central Processing Unit）などを含むプロセッサであり、ソースコード解析装置１を統括的に制御する。制御部７０は、抽出部７１、マージ処理部７２、画面一覧生成部７３、表示処理部７４、及びＪＳＰファイル生成部７５を備えている。
【００３１】
抽出部７１は、ソース記憶部２０からソースファイル（例えば、ＪＳＰファイル）に記述されているソースコードを取得し、取得したソースコードに含まれる画面出力を定義するＨＴＭＬ要素（画面構成要素）と、画面出力に関するＩＦ文などの条件分岐とを抽出する。具体的に、抽出部７１は、ソースコードを構文解析してＨＴＭＬ要素とＩＦ文（条件分岐）とを抽出するとともに、抽出したＩＦ文の条件式を、条件式を識別する条件ＩＤ（条件識別情報）に置き換えたＩＦ文の記述と、抽出したＨＴＭＬ要素とを含む中間ソースコードを生成する。すなわち、抽出部７１は、図２に示すようなソースコードＳＣ１を取得して、取得したソースコードＳＣ１を構文解析して、図３に示すようなソースコードＳＣ２（中間ソースコード）を生成する。
【００３２】
ここで、図２及び図３を参照して、ＪＳＰファイルのソースコード、及び中間ソースコードの具体例について説明する。
図２は、本実施形態におけるＪＳＰファイルのソースコードの一例を示す図である。
この図において、ソースコードＳＣ１は、ＪＳＰファイルに記述されているソースコードの一例を示している。なお、ソースコードＳＣ１には、ＩＦ文ＢＬ１〜ＢＬ３が含まれている。抽出部７１は、ソースコードＳＣ１をソース記憶部２０から取得し、構文解析することにより、ＩＦ文ＢＬ１〜ＢＬ３及びＨＴＭＬ要素を抽出する。
【００３３】
また、図３は、本実施形態における中間ソースコードの一例を示す図である。
この図において、ソースコードＳＣ２は、抽出部７１によって生成された中間ソースコードの一例を示している。なお、ソースコードＳＣ２には、条件ＩＤに置き換えられたＩＦ文ＢＬ４〜ＢＬ６が含まれている。抽出部７１は、ソースコードＳＣ１から抽出したＩＦ文ＢＬ１〜ＢＬ３及びＨＴＭＬ要素のみのソースコードを生成し、ＩＦ文ＢＬ１〜ＢＬ３の条件式を、条件ＩＤに置き換えて、ＩＦ文ＢＬ４〜ＢＬ６を含む中間ソースコード（ソースコードＳＣ２）を生成する。
なお、抽出部７１は、条件ＩＤに置き換えの際に、図４に示すように、「条件ＩＤ」と「条件式」とを対応付けて、置換情報記憶部４２に記憶させる。また、抽出部７１は、生成した中間ソースコードを中間コード記憶部４１に記憶させる。
【００３４】
また、抽出部７１は、第１構文解析部７１１と第２構文解析部７１２とを備えている。
第１構文解析部７１１（第１パーサ）は、ＨＴＭＬの構文解析を行う構文解析器である。第１構文解析部７１１は、ソース記憶部２０から取得したソースコードのＨＴＭＬを構文解析し、各ノード（例えば、“＜％・・・＞”のタグ（“％”タグ））を意味付けする。
【００３５】
第２構文解析部７１２（第２パーサ）は、第１構文解析部７１１によって構文解析された各ノードをさらに、構文解析して、例えば、ＩＦ文などの分岐処理に関連した処理を解析する。
なお、抽出部７１は、第１構文解析部７１１及び第２構文解析部７１２の解析結果を中間成果物として、中間コード記憶部４１に記憶させる。
また、第１構文解析部７１１及び第２構文解析部７１２の詳細については、後述する。
【００３６】
マージ処理部７２は、予め定められたマージ規則に基づいて、抽出部７１が抽出した条件分岐（例えば、ＩＦ文）をマージ（併合）するか否かを判定するとともに、条件分岐をマージすると判定した場合に、当該条件分岐をマージするマージ処理を実行する。マージ処理部７２は、中間コード記憶部４１から中間ソースコード及び構文解析結果を取得するとともに、マージ規則記憶部４３からマージ規則を取得する。マージ処理部７２は、取得した中間ソースコードに含まれる条件分岐（例えば、ＩＦ文）を、構文解析結果及びマージ規則に基づいて、マージするか否かを判定する。そして、マージ処理部７２は、条件分岐（例えば、ＩＦ文）をマージすると判定した場合に、マージ規則に基づいて、当該条件分岐によって分岐されて処理されるＨＴＭＬ要素のうちの１つにマージする。
【００３７】
図５は、本実施形態におけるマージ規則の一例を示す図である。
例えば、図５に示すマージ規則の例では、ＩＦ文に対する以下のような規則が、マージ規則記憶部４３に記憶されており、マージ処理部７２は、このマージ規則に基づいて、マージ処理を実行する。マージ処理部７２は、マージ処理後のソースコードと、マージしたＩＦに関する情報とをマージ結果としてマージ結果記憶部４４に記憶させる。
【００３８】
（規則１）ＩＦ文によって分岐されて処理される「ＨＴＭＬ要素」が“テキスト出力”であり、その「オプションの違い」が“テキスト出力で表示する定数の有無”である場合に、ＩＦ文をマージし、「残すオプション」は、“存在する定数”である。
【００３９】
（規則２）ＩＦ文によって分岐されて処理される「ＨＴＭＬ要素」が“テキスト出力”であり、その「オプションの違い」が“テキスト出力で表示する定数の違い（一方がスペースの場合）”である場合に、ＩＦ文をマージし、「残すオプション」は、“スペースでない定数”である。
【００４０】
（規則３）ＩＦ文によって分岐されて処理される「ＨＴＭＬ要素」が“テキスト出力”であり、その「オプションの違い」が“テキスト出力で表示する定数の違い（両方ともスペース以外の場合）”である場合に、ＩＦ文をマージしない。
【００４１】
（規則４）ＩＦ文によって分岐されて処理される「ＨＴＭＬ要素」が“テキストボックス”であり、その「オプションの違い」が“テキストボックスの有無”である場合に、ＩＦ文をマージしない。
【００４２】
（規則５）ＩＦ文によって分岐されて処理される「ＨＴＭＬ要素」が“テキストボックス”であり、その「オプションの違い」が“テキストボックスのｍａｘｌｅｎｇｔｈ（最大文字列）の値の違い”である場合に、ＩＦ文をマージし、「残すオプション」は、“値の大きい側”である。
【００４３】
（規則６）ＩＦ文によって分岐されて処理される「ＨＴＭＬ要素」が“チェックボックス”であり、その「オプションの違い」が“ｃｈｅｃｋｅｄの有無”である場合に、ＩＦ文をマージし、「残すオプション」は、“ｃｈｅｃｋｅｄあり”である。
【００４４】
例えば、上述の（規則１）に基づいて、マージ処理部７２は、ＩＦ文によって分岐されて処理される「ＨＴＭＬ要素」が“テキスト出力”であり、その「オプションの違い」が“テキスト出力で表示する定数の有無”である場合に、ＩＦ文をマージすると判定する。この場合、マージ処理部７２は、“存在する定数”をオプションとしたＨＴＭＬ要素（“テキスト出力”）に、ＩＦ文をマージする。
【００４５】
なお、マージ規則記憶部４３は、図５に示すように、マージ規則として、「ＨＴＭＬ要素」、「オプションの違い」、「マージの有無」、及び「残すオプション」を関連付けて記憶し、このようなマージ規則をマージ処理部７２が、マージ処理のパラメータとして取得して、マージ処理を実行してもよい。また、マージ規則記憶部４３は、上述したようなマージ規則を実行するプログラムを記憶しており、マージ処理部７２が、マージ規則記憶部４３が記憶するマージ規則に基づくプログラムをマージ処理として実行させてもよい。
【００４６】
画面一覧生成部７３は、マージ処理部７２によって処理された後のＩＦ文、及びＨＴＭＬ要素に基づいて、ＨＴＭＬ要素とＩＦ文によって分岐される状態の組み合わせの一覧（図６の画面一覧ＧＬ１参照）を示す画面一覧を生成する。すなわち、画面一覧生成部７３は、マージ結果記憶部４４からマージ結果を取得し、マージ処理部７２によって処理された中間ソースコードに残ったＩＦ文の条件ＩＤの論理状態の組み合わせと、ＨＴＭＬ要素とに基づいて、図６に示すような画面一覧を生成し、生成した画面一覧を画面一覧記憶部４５に記憶させる。
【００４７】
なお、図６において、“＊”は、マージ処理部７２によるマージ処理によりマージされたＨＴＭＬ要素を示している。画面一覧生成部７３は、マージ結果記憶部４４からマージしたＩＦに関する情報に基づいて、画面一覧においてマージ処理によりマージされたＩＦ文のＨＴＭＬ要素に対応する箇所に“＊”を挿入する。
【００４８】
また、画面一覧生成部７３は、条件分岐（ＩＦ文）によって分岐される状態の組み合わせのうちで、常に偽となる組み合わせを削除して、画面一覧を生成する。画面一覧生成部７３は、例えば、不図示のＳＭＴ（Satisfiability Modulo Theories）ソルバを備えており、ＳＭＴソルバを用いて常に偽となる恒偽の組み合わせである論理状態を検出し、検出した論理状態を画面一覧から削除する。具体的に、画面一覧生成部７３は、マージ処理により残ったＩＦ文の「条件ＩＤ」に対応する「条件式」を置換情報記憶部４２から取得し、取得した「条件式」を入力としたＳＭＴソルバの出力結果により、恒偽である論理状態を検出する。画面一覧生成部７３は、検出した恒偽である論理状態を画面一覧から削除する。
【００４９】
表示処理部７４（出力修理部）は、画面一覧生成部７３が生成した画面一覧を表示部６０に表示させる。表示処理部７４は、例えば、ユーザによる入力部５０からの操作に応じて、画面一覧生成部７３が生成した画面一覧を表示部６０に表示させる。また、表示処理部７４は、ユーザによる入力部５０からの操作に応じて、マージ結果記憶部４４からマージしたＩＦに関する情報を取得し、画面一覧におけるマージされたＩＦ文のＨＴＭＬ要素に対応する箇所（“＊”）の詳細情報を表示部６０に表示させる。
また、表示処理部７４は、例えば、ユーザによる入力部５０からの操作に応じて、画面一覧生成部７３が生成した画面一覧を出力情報記憶部３０に出力し、出力情報記憶部３０に画面一覧を記憶させてもよい。
【００５０】
ＪＳＰファイル生成部７５（ソースファイル生成部）は、画面一覧生成部７３によって生成された画面一覧に基づいて、画面一覧に含まれる各画面を定義するソースファイル（ＪＳＰファイル）を生成する。ＪＳＰファイル生成部７５は、例えば、ユーザによる入力部５０からの操作に応じて、画面一覧記憶部４５から画面一覧を取得し、各論理状態に対応するＪＳＰファイルを生成する。なお、ＪＳＰファイル生成部７５は、ＪＳＰファイルを生成する際に、置換情報記憶部４２からＩＦ文の「条件ＩＤ」に対応する「条件式」を取得し、「条件ＩＤ」を元のＪＳＰファイルに記述されていた「条件式」に置き換える。また、ＪＳＰファイル生成部７５は、１つの論理状態に対して１つのＪＳＰファイルを生成する。ＪＳＰファイル生成部７５は、生成した各画面を定義するＪＳＰファイルを出力情報記憶部３０に出力し、各画面を定義するＪＳＰファイルを出力情報記憶部３０に記憶させる。
【００５１】
次に、本実施形態におけるソースコード解析装置１の動作について、図面を参照して説明する。
ここでは、まず、ソースコード解析装置１のソースコード解析の全体の処理を説明する。
【００５２】
＜ソースコード解析処理＞
図７は、本実施形態におけるソースコード解析の手順の一例を示すフローチャートである。
この図において、まず、ソースコード解析装置１の制御部７０は、ＪＳＰファイルのソースコードを取得する（ステップＳ１０１）。すなわち、制御部７０の抽出部７１は、ソース記憶部２０からＪＳＰファイルに記述されているソースコードを取得する。ここでは、一例として、抽出部７１は、図２に示すソースコードＳＣ１を取得する。
【００５３】
次に、抽出部７１は、ソースコードを構文解析して、ＨＴＭＬ要素とＩＦ文とを抽出する（ステップＳ１０２）。抽出部７１は、第１構文解析部７１１及び第２構文解析部７１２の構文解析結果に基づいて、ＨＴＭＬ要素とＩＦ文とを抽出する。なお、抽出部７１は、第１構文解析部７１１及び第２構文解析部７１２の構文解析結果を中間成果物として、中間コード記憶部４１に記憶させる。
【００５４】
次に、抽出部７１は、ＩＦ文の条件式を条件ＩＤに置き換えた中間ソースコードを生成する（ステップＳ１０３）。すなわち、抽出部７１は、図２に示すソースコードＳＣ１から図３に示す中間ソースコード（ソースコードＳＣ２）を生成し、生成した中間ソースコードを中間コード記憶部４１に記憶させる。なお、図３のＩＦ文ＢＬ４及びＩＦ文ＢＬ６に示すように、抽出部７１は、同一の条件文には、同一の条件ＩＤに置き換える。また、抽出部７１は、図４に示すように、置き換えた「条件ＩＤ」と、「条件式」とを対応付けて置換情報として置換情報記憶部４２に記憶させる。
【００５５】
次に、制御部７０のマージ処理部７２は、マージ規則に基づいてＩＦ文をマージする（ステップＳ１０４）。マージ処理部７２は、中間コード記憶部４１から中間ソースコード及び構文解析結果を取得するとともに、マージ規則記憶部４３からマージ規則を取得する。また、マージ処理部７２は、取得した中間ソースコードに含まれるＩＦ文を、構文解析結果及びマージ規則に基づいて、マージするか否かを判定する。そして、マージ処理部７２は、ＩＦ文をマージすると判定した場合に、マージ規則に基づいて、当該ＩＦ文によって分岐されて処理されるＨＴＭＬ要素のうちの１つにマージする。ここで、図８を参照して、マージ処理の具体例について説明する。
【００５６】
図８は、本実施形態におけるＩＦ文のマージ処理の一例を説明する説明図である。
この図において、図８（ａ）は、中間ソースコード（ソースコードＳＣ２）を示し、図８（ｂ）は、マージ処理された中間ソースコード（ソースコードＳＣ３）を示している。
図８に示す例では、マージ処理部７２は、図８（ａ）のソースコードＳＣ２のＩＦ文に関連する記述文ＢＬ７を、図５に示す「Ｎｏ．」が“６”のマージ規則（規則６）に基づいて、図８（ｂ）のソースコードＳＣ３の記述文ＢＬ８にマージするマージ処理を実行する。この場合、マージ処理部７２は、記述文ＢＬ７が、ＩＦ文によって分岐されて処理される「ＨＴＭＬ要素」が“チェックボックス”であり、その「オプションの違い」が“ｃｈｅｃｋｅｄの有無”であるため、マージ規則（規則６）に基づいて、ＩＦ文をマージすると判定する。そして、マージ処理部７２は、記述文ＢＬ７をマージして、“ｃｈｅｃｋｅｄあり”であるＨＴＭＬ要素（記述文ＢＬ８）を残したソースコードＳＣ３を生成する。
このように、ＩＦ文をマージすることにより、マージ処理部７２は、ソースコードに含まれるＩＦ文の数を低減することができる。
【００５７】
次に、制御部７０の画面一覧生成部７３は、残ったＩＦ文とＨＴＭＬ要素とに基づいて
画面一覧を生成する（ステップＳ１０５）。すなわち、画面一覧生成部７３は、マージ結果記憶部４４からマージ結果を取得し、マージ処理部７２によって処理された中間ソースコードに残ったＩＦ文の条件ＩＤの論理状態の組み合わせと、ＨＴＭＬ要素とに基づいて、画面一覧を生成する。ここで、図９を参照して、画面一覧の生成の具体例について説明する。
【００５８】
図９は、本実施形態における画面一覧の生成処理の一例を説明する説明図である。
この図において、図９（ａ）は、マージ処理された中間ソースコード（ソースコードＳＣ３）を示し、図９（ｂ）は、ソースコードＳＣ３から生成された画面一覧ＧＬ２を示している。画面一覧生成部７３は、図９（ｂ）に示すように、「論理状態」を列とし、画面出力を定義する「ＨＴＭＬ要素」を行とした画面の一覧表を画面一覧ＧＬ２として生成する。
図９に示す例では、ソースコードＳＣ３に残ったＩＦ文が、“条件１”のみであるため、画面一覧ＧＬ２の論理状態は、“条件１＝真”と“条件１＝偽”の２つの論理状態となる。したがって、画面一覧生成部７３は、論理状態が“条件１＝真”の場合の画面情報（列Ｇ２）と、論理状態が“条件１＝偽”の場合の画面情報（列Ｇ３）とを示す画面一覧ＧＬ２を生成する。
【００５９】
次に、画面一覧生成部７３は、条件が恒偽となる画面を画面一覧から削除する（ステップＳ１０６）。画面一覧生成部７３は、マージ処理により残ったＩＦ文の「条件ＩＤ」に対応する「条件式」を置換情報記憶部４２から取得し、取得した「条件式」を入力としたＳＭＴソルバの出力結果（図１０参照）により、恒偽である論理状態を検出する。画面一覧生成部７３は、検出した恒偽である論理状態を画面一覧から削除する。
図１０は、本実施形態におけるＳＭＴソルバによる処理の一例を説明する説明図である。
この図に示しように、画面一覧生成部７３は、「条件式」を入力としたＳＭＴソルバの出力結果により、恒偽となる画面を画面一覧から削除する。
【００６０】
図１０に示す例では、「条件１（残高＝＝０）」が“真”で、且つ、「条件２（残高＞０）」が“真”である場合に、ＳＭＴソルバの結果が恒偽であり、画面一覧生成部７３は、この場合に対応する例を画面一覧から削除する。
なお、画面一覧生成部７３は、生成した画面一覧を画面一覧記憶部４５に記憶させる。
【００６１】
次に、制御部７０の表示処理部７４は、生成した画面一覧を出力する（ステップＳ１０７）。すなわち、表示処理部７４は、画面一覧生成部７３が生成した画面一覧を表示部６０に表示させる。また、表示処理部７４は、ユーザによる入力部５０からの操作に応じて、マージ結果記憶部４４からマージしたＩＦに関する情報を取得し、画面一覧におけるマージされたＩＦ文のＨＴＭＬ要素に対応する箇所（“＊”）の詳細情報を表示部６０に表示させる。
【００６２】
次に、制御部７０のＪＳＰファイル生成部７５は、画面一覧に基づいて画面ごとのＪＳＰファイルを生成する（ステップＳ１０８）。すなわち、ＪＳＰファイル生成部７５は、画面一覧生成部７３によって生成された画面一覧に基づいて、画面一覧に含まれる各画面を定義するソースファイル（ＪＳＰファイル）を生成する。ここで、画面一覧の各列は、１つの論理状態を示しており、ＪＳＰファイル生成部７５は、各列において対応するＨＴＭＬ要素を記述することで、画面ごとのＪＳＰファイルを生成する。これにより、ＪＳＰファイル生成部７５は、１つの論理状態に対して１つのＪＳＰファイルを生成する。なお、ＪＳＰファイル生成部７５は、ＪＳＰファイルを生成する際に、置換情報記憶部４２からＩＦ文の「条件ＩＤ」に対応する「条件式」を取得し、「条件ＩＤ」を元のＪＳＰファイルに記述されていた「条件式」に置き換える。ＪＳＰファイル生成部７５は、生成した画面ごとのＪＳＰファイルを出力情報記憶部３０に出力し、ＪＳＰファイルを出力情報記憶部３０に記憶させる。
【００６３】
なお、上述した図７に示す例では、ステップＳ１０７の処理（画面一覧の出力処理）と、ステップＳ１０８の処理（ＪＳＰファイル生成処理）とを必ず行う場合について説明したが、ステップＳ１０７及びステップＳ１０８の処理をユーザによる入力部５０からの操作に応じて、実行するようにしてもよい。
【００６４】
次に、抽出部７１によるソースコードを構文解析について、図１１を参照して説明する。
＜構文解析処理＞
図１１は、本実施形態におけるソースコードの構文解析の一例を説明する説明図である。
この図において、図１１（ａ）は、構文解析の対象となるソースコードの一例となるソースコードＳＣ４を示している。また、図１１（ｂ）は、第１構文解析部７１１によって、ソースコードＳＣ４が構文解析された解析結果であるツリー構造Ａ１を示している。
【００６５】
第１構文解析部７１１は、ソースコードＳＣ４に含まれるＨＴＭＬの各ノードのタグ（例えば、“％”タグ）を抽出し、図１１（ｂ）に示すようなツリー構造Ａ１を生成するとともに、各ノードを意味付けする。例えば、ソースコードＳＣ４の２行目（記述文ＢＬ９）の“＜％  ｕｓｅｒＮａｍｅ＝ｎｕｌｌ  ％＞”について、第１構文解析部７１１は、構文解析して“％”→“Ｅｘｐｒｅｓｓｉｏｎ（ｕｓｅｒＮａｍｅ＝ｎｕｌｌ）”（ノードＮ１）として、ツリー構造Ａ１に追加するとともに、意味付けする。
【００６６】
また、図１１（ｃ）は、第２構文解析部７１２によって、ツリー構造Ａ１の“ｉｆ”のノードＮ２に関する構文解析がされた解析結果であるツリー構造Ａ２を示している。第２構文解析部７１２は、ノードＮ２に関連するソースコードＳＣ４の４行目〜８行目（記述文ＢＬ１０）を構文解析して、ツリー構造Ａ２を生成し、各ノードを意味付けする。
【００６７】
抽出部７１は、第１構文解析部７１１によってソースコードＳＣ４を構文解析された解析結果であるツリー構造Ａ１と、第２構文解析部７１２によって“ｉｆ”のノードＮ２に関して構文解析であるツリー構造Ａ２とを中間成果物として中間コード記憶部４１に記憶させる。
抽出部７１は、第１構文解析部７１１及び第２構文解析部７１２の構文解析結果に基づいて、ＨＴＭＬ要素とＩＦ文とを抽出する。
【００６８】
次に、上述した図７のステップＳ１０４に示すＩＦ文のマージ処理の詳細について説明する。
＜ＩＦ文のマージ処理＞
まず、図１２〜図１６を参照して、本実施形態におけるＩＦ文のマージ処理の一例を詳細に説明する。
【００６９】
図１２は、本実施形態における中間ソースコードの別の一例を示す図である。
この図において、ソースコードＳＣ５は、抽出部７１によって生成された中間ソースコードの一例を示している。ここで、ソースコードＳＣ５には、ＩＦ文の記述ＢＬ１１〜ＢＬ１３が含まれている。また、ＩＦ文の記述ＢＬ１１は、「条件１」のＩＦ文に対応する記述を示し、ＩＦ文の記述ＢＬ１２は、「条件２」のＩＦ文に対応する記述を示している。また、ＩＦ文の記述ＢＬ１３は、「条件３」のＩＦ文に対応する記述を示している。
なお、ソースコードＳＣ５は、ＩＦ文がネスト構造（入れ子構造）になっている場合の一例を示し、ＩＦ文の記述ＢＬ１２がＩＦ文の記述ＢＬ１１に含まれ、ＩＦ文の記述ＢＬ１３がＩＦ文の記述ＢＬ１２に含まれる入れ子構造になっている。
【００７０】
図１２に示す中間ソースコード（ソースコードＳＣ５）は、抽出部７１によって構文解析に基づいて、図１３に示すような構文木として表現可能である。
図１３は、本実施形態における中間ソースコードを構文木で表現した一例を示す図である。
【００７１】
この図において、ツリー構造Ａ３（構文木）は、図１２に示す中間ソースコード（ソースコードＳＣ５）を異なる表現にしたものである。階層Ｔ１０は、上述したＩＦ文の記述ＢＬ１１（「条件１」）に対応する階層を示し、最も上位の階層（最も浅い階層）である。また、階層Ｔ２０は、上述したＩＦ文の記述ＢＬ１２（「条件２」）に対応する階層であることを示し、階層Ｔ１０の下位の階層である。また、階層Ｔ３０は、上述したＩＦ文の記述ＢＬ１３（「条件３」）に対応する階層を示し、階層Ｔ１０の下位の階層であり最も下位の階層（最も深い階層）である。このように、ツリー構造Ａ３において、階層Ｔ１０、階層Ｔ２０、及び階層Ｔ３０が、入れ子構造を示している。抽出部７１は、第１構文解析部７１１及び第２構文解析部７１２の構文解析結果に基づいて、ツリー構造Ａ３に示すような構文木を中間ソースコードとして生成し、生成した構文木を示す情報を中間コード記憶部４１に記憶させる。
なお、ツリー構造Ａ３において、“ｉｆ”などが記述されている楕円形のノードは、例えば、ＪＳＰファイルにおける制御表現を示し、“ｂｕｔｔｏｎ”などの角の丸い四角形のノードは、タグ名を示し、“ｃｈｅｃｋｅｄ”などが記述されている通常の四角形のノードは、アトリビュート（属性）を示している。
【００７２】
マージ処理部７２は、マージ処理を行う際に、条件ＩＤに置き換えたＩＦ文のうち、上述した構文木におけるＩＦ文の記述のネスト構造（入れ子構造）の階層が深いＩＦ文を優先してマージするか否かを判定する。マージ処理部７２は、マージすると判定した場合に、マージ規則に基づいて、ＩＦ文をマージする。すなわち、マージ処理部７２は、ＩＦ文の記述がネスト構造（入れ子構造）である場合に、最も深い階層（最も下位の階層）から順に再帰的にマージ処理を実行する。
【００７３】
例えば、マージ処理部７２は、図１３に示すツリー構造Ａ３のマージ処理を行う場合に、まず、階層Ｔ３０のマージ処理を実行する。すなわち、マージ処理部７２は、階層Ｔ３０において、“ＴＨＥＮ”の記述と、“ＥＬＳＥ”の記述とを比較し、マージ規則に基づいてマージするか否かを判定する。この場合、上述した（規則６）に対応するため、マージ処理部７２は、マージすると判定する。そして、マージ処理部７２は、図１４に示すように、（規則６）に基づいて、「ｃｈｅｃｋｅｄ」を残すＩＦ文のマージ処理を実行する。
【００７４】
図１４は、本実施形態におけるＩＦ文のマージ処理の一例を説明する第１の図であり、この図において、ツリー構造Ａ４（構文木）は、図１３における階層Ｔ３０をマージした後の構文木の状態を示している。
また、階層Ｔ２１は、図１３における階層Ｔ２０に対応するＩＦ文（「条件２」）を示すか階層であって、階層Ｔ３０をマージした部分を含んだ階層を示している。なお、階層Ｔ１０は、図１３と同様である。
階層Ｔ２１は、階層Ｔ３０をマージ処理することにより、“ＥＬＳＥ”に、「ｔｙｐｅ=“ｃｈｅｃｋｂｏｘ”」、「ｃｈｅｃｋｅｄ」、及び「ｍａｘｌｅｎｇｔｈ＝“５０”」を含むＩＦ文の記述となる。
【００７５】
次に、マージ処理部７２は、図１４に示すツリー構造Ａ４において、階層Ｔ２１のマージ処理を実行する。すなわち、マージ処理部７２は、階層Ｔ２１において、“ＴＨＥＮ”の記述と、“ＥＬＳＥ”の記述とを比較し、マージ規則に基づいてマージするか否かを判定する。この場合、上述した（規則５）に対応するため、マージ処理部７２は、マージすると判定する。そして、マージ処理部７２は、図１５に示すように、（規則５）に基づいて、「ｍａｘｌｅｎｇｔｈ＝“８０”」を残すＩＦ文のマージ処理を実行する。
【００７６】
図１５は、本実施形態におけるＩＦ文のマージ処理の一例を説明する第２の図であり、この図において、ツリー構造Ａ５（構文木）は、図１４における階層Ｔ２１をマージした後の構文木の状態を示している。
また、階層Ｔ１１は、図１３における階層Ｔ１０に対応するＩＦ文（「条件１」）を示すか階層であって、階層Ｔ２１をマージした部分を含んだ階層を示している。
階層Ｔ１１は、階層Ｔ２１をマージ処理することにより、“ＥＬＳＥ”に、「ｔｙｐｅ=“ｃｈｅｃｋｂｏｘ”」、「ｃｈｅｃｋｅｄ」、及び「ｍａｘｌｅｎｇｔｈ＝“８０”」を含むＩＦ文の記述となる。
【００７７】
次に、マージ処理部７２は、図１５に示すツリー構造Ａ５において、階層Ｔ１１のマージ処理を実行する。すなわち、マージ処理部７２は、階層Ｔ１１において、“ＴＨＥＮ”の記述と、“ＥＬＳＥ”の記述とを比較し、マージ規則に基づいてマージするか否かを判定する。この場合、例えば、上述した（規則１）〜（規則６）に対応する規則がないため、マージ処理部７２は、マージしないと判定する。なお、図１５に示す例では、階層Ｔ１１は最上位のＩＦの階層であり、他にマージするか否かの未判定のＩＦ文の記述がないので、マージ処理部７２は、処理を終了する。すなわち、図１５に示すツリー構造Ａ５が、図１３に示すツリー構造Ａ３がＩＦ文のマージ処理された中間ソースコードに対応する。
このように、マージ処理部７２は、条件ＩＤに置き換えたＩＦ文のうち、上述した構文木におけるＩＦ文の記述のネスト構造（入れ子構造）の階層が深いＩＦ文を優先してマージ処理を実行する。
【００７８】
ここで、図１６は、本実施形態におけるＩＦ文のマージ処理がされた中間ソースコードの一例を示す図である。
この図において、ソースコードＳＣ６は、図１５に示すＩＦ文のマージ処理がされたツリー構造Ａ５を別の表現にしたものであり、図１２に示す中間ソースコード（ソースコードＳＣ５）のＩＦ文を、マージ処理部７２によってマージ規則に基づいてマージ処理された後の中間ソースコードを示している。また、ＩＦ文の記述ＢＬ１４は、図１２に示すＩＦ文の記述ＢＬ１1〜ＢＬ１３がマージ処理部７２によってマージされた後の記述を示している。
このように、マージ処理部７２は、マージ規則に基づいて、図１２に示す中間ソースコード（ソースコードＳＣ５）をマージ処理して、図１６に示す中間ソースコード（ソースコードＳＣ６）を生成する。
【００７９】
次に、図１７を参照して、本実施形態におけるＩＦ文のマージ処理の手順を説明する。
図１７は、本実施形態におけるＩＦ文のマージ処理の一例を示すフローチャートである。
この図において、まず、マージ処理部７２は、上述した構文木において最も階層の深い未判定のＩＦ文を抽出する（ステップＳ２０１）。すなわち、マージ処理部７２は、抽出部７１（第１構文解析部７１１及び第２構文解析部７１２）による構文解析結果に基づいて中間ソースコードとして生成された構文木に含まれるＩＦ文のうち、マージするか否か（マージ対象であるか否か）を未判定のＩＦ文であって、構文木におけるＩＦ文の入れ子構造の階層が最も深いＩＦ文（最も下位のＩＦ文）を抽出する。
【００８０】
次に、マージ処理部７２は、ＩＦ文がマージ対象であるか否かを判定する（ステップＳ２０２）。すなわち、マージ処理部７２は、中間コード記憶部４１から取得した第１構文解析部７１１及び第２構文解析部７１２の構文解析結果と、マージ規則記憶部４３から取得したマージ規則とに基づいて、当該ＩＦ文がマージ対象であるか否かを判定する。マージ処理部７２は、ＩＦ文がマージ対象であると判定した場合（ステップＳ２０２：ＹＥＳ）に、処理をステップＳ２０３に進める。また、マージ処理部７２は、ＩＦ文がマージ対象でないと判定した場合（ステップＳ２０２：ＮＯ）に、処理をステップＳ２０４に進める。
【００８１】
次に、ステップＳ２０３において、マージ処理部７２は、ＩＦ文をマージ処理する。すなわち、マージ処理部７２は、上述したように、マージ規則に基づいて、マージ対象のＩＦ文によって分岐されて処理されるＨＴＭＬ要素のうちの１つにマージする。マージ処理部７２は、ステップＳ２０３の処理を実行させた後に処理をステップＳ２０４に進める。
【００８２】
次に、ステップＳ２０４において、マージ処理部７２は、未判定のＩＦ文があるか否かを判定する。すなわち、マージ処理部７２は、構文木において、マージするか否か（マージ対象であるか否か）を未判定のＩＦ文が他にあるか否かを判定する。マージ処理部７２は、未判定のＩＦ文がある場合（ステップＳ２０４：ＹＥＳ）に、処理をステップＳ２０１に戻し、マージ処理を繰り返す。また、マージ処理部７２は、未判定のＩＦ文がない場合（ステップＳ２０４：ＮＯ）に、マージ処理を終了する。
マージ処理部７２は、図１７に示す処理を実行することにより、上述したネスト構造（入れ子構造）のＩＦ文の記述を含む構文木において、階層が最も深いＩＦ文（最も下位のＩＦ文）から順にマージ処理を実行する。
【００８３】
以上説明したように、本実施形態におけるソースコード解析装置１は、抽出部７１と、マージ処理部７２と、画面一覧生成部７３とを備えている。抽出部７１は、画面を定義するソースファイル（例えば、ＪＳＰファイル）を記憶するソース記憶部２０からソースファイルに記述されているソースコードを取得し、取得したソースコードに含まれる画面出力を定義する画面構成要素（例えば、ＨＴＭＬ要素）と、画面出力に関する条件分岐（例えば、ＩＦ文）とを抽出する。マージ処理部７２は、予め定められたマージ規則に基づいて、抽出部７１が抽出した条件分岐を併合（マージ）するか否かを判定するとともに、条件分岐を併合（マージ）すると判定した場合に、当該条件分岐を併合するマージ処理を実行する。そして、画面一覧生成部７３は、マージ処理部７２によって処理された後の条件分岐及び画面構成要素に基づいて、画面構成要素と条件分岐によって分岐される状態の組み合わせとの一覧を示す画面一覧を生成する。
これにより、本実施形態におけるソースコード解析装置１は、マージ規則に基づいて、論理状態の違いとは言えないようなわずかな違いを記述した条件分岐を削除することができるので、ソースコードに含まれる条件分岐の数を低減することができる。そのため、本実施形態におけるソースコード解析装置１は、例えば、ソースファイルが複数の画面を定義している場合に、全ての画面を網羅するように画面を分割すると、生成される画面数が爆発的に増加してしまうことを抑制することができる。よって、本実施形態におけるソースコード解析装置１は、ソースコードで定義される出力画面を適切に解析することができる。
【００８４】
また、本実施形態におけるソースコード解析装置１は、画面一覧を生成するので、ソースコードで定義される論理状態ごとの画面（論理画面）の数を把握することができる。そのため、本実施形態におけるソースコード解析装置１は、過去に作成されたソースコードを適切に解析することができるとともに、過去に作成されたソースコードを修正するなどの保守をするための作業工数（修正の影響調査工数やテスト工数）を低減することができる。また、本実施形態におけるソースコード解析装置１は、新しいシステム環境に移植するための作業工数を低減することができる。
【００８５】
また、本実施形態におけるソースコード解析装置１は、ソースコードから自動的に設計書に相当する画面一覧を生成するので、ソースコードを解析するリバースエンジニアリングのための作業工数、及び設計書を作成するための作業工数を低減することができる。
また、本実施形態におけるソースコード解析装置１が生成する画面一覧は、論理画面ごとの画面構成要素（ＨＴＭＬ要素）を把握できるので、ユーザ（作業者）は、この画面位置に基づいて、保守性の高いソースコードを作成することができる。
【００８６】
また、本実施形態では、マージ処理部７２は、条件分岐（例えば、ＩＦ文）を併合（マージ）すると判定した場合に、マージ規則に基づいて、当該条件分岐によって分岐されて処理される画面構成要素（例えば、ＨＴＭＬ要素）のうちの１つに併合（マージ）する。
これにより、本実施形態におけるソースコード解析装置１は、マージ規則に基づいて、適切にソースコードに含まれる条件分岐の数を低減することができる。よって、本実施形態におけるソースコード解析装置１は、ソースコードで定義される出力画面を適切に解析することができる。
【００８７】
また、本実施形態では、抽出部７１は、ソースコードを構文解析して画面構成要素（例えば、ＨＴＭＬ要素）と条件分岐（例えば、ＩＦ文）とを抽出するとともに、抽出した条件分岐の条件式を、条件式を識別する条件識別情報（例えば、条件ＩＤ）に置き換えた条件分岐の記述と、抽出した画面構成要素とを含む中間ソースコードを生成する。そして、マージ処理部７２は、マージ規則に基づいて、中間ソースコードに含まれる条件識別情報に置き換えた条件分岐に対して、併合（マージ）するか否かを判定する。
これにより、同一の条件式には、同一の条件ＩＤが置き換えられるので、本実施形態におけるソースコード解析装置１は、中間ソースコードに含まれる同一の条件ＩＤを同一の論理状態として扱うことができる。そのため、本実施形態におけるソースコード解析装置１は、ソースコードが定義する論理状態を適切に低減することができる。よって、本実施形態におけるソースコード解析装置１は、生成される画面数が爆発的に増加してしまうことを抑制することができる。
【００８８】
また、本実施形態では、抽出部７１は、構文解析に基づいて中間ソースコードを構文木として生成する。そして、マージ処理部７２は、条件識別情報（例えば、条件ＩＤ）に置き換えた条件分岐（例えば、ＩＦ文）のうち、構文木における条件分岐の入れ子構造（ネスト構造）の階層が深い条件分岐を優先してマージ処理を実行する。すなわち、マージ処理部７２は、条件分岐が入れ子構造に記述されている場合に、階層が深い条件分岐から順にマージ処理を実行する。
これにより、本実施形態におけるソースコード解析装置１は、条件分岐が入れ子構造に記述されている場合に、適切にマージ処理を実行することができる。
【００８９】
また、本実施形態では、画面一覧生成部７３は、条件分岐（例えば、ＩＦ文）によって分岐される状態の組み合わせのうちで、常に偽となる分岐される状態の組み合わせ（恒偽の組み合わせ）を削除して、画面一覧を生成する。
これにより、本実施形態におけるソースコード解析装置１は、システムの動作上利用されることのない論理画面を画面一覧から削除することができる。
【００９０】
また、本実施形態におけるソースコード解析装置１は、画面一覧生成部７３によって生成された画面一覧に基づいて、画面一覧に含まれる各画面を定義するソースファイルを生成するＪＳＰファイル生成部７５を備える。
これにより、本実施形態におけるソースコード解析装置１は、１つのソースコード（ＪＳＰファイル）から保守性の高い論理画面ごとのソースコード（ＪＳＰファイル）を自動的に生成することができる。
【００９１】
本実施形態におけるソースコード解析装置１は、画面一覧生成部７３が生成した画面一覧を出力する出力処理部（表示部６０に表示させる表示処理部７４）を備えている。
これにより、本実施形態におけるソースコード解析装置１は、生成した画面一覧を外部に出力することができる。よって、ユーザ（作業者）は、画面一覧を確認することができ、その結果、過去に作成されたソースコードを修正するなどの保守を容易に行うことができるとともに、保守性の高いソースコードを作成することができる。
【００９２】
なお、本実施形態によるソースコード解析方法は、抽出ステップと、マージ処理ステップと、画面一覧生成ステップとを含む。抽出ステップにおいて、抽出部７１が、ソース記憶部２０からソースファイル（例えば、ＪＳＰファイル）に記述されているソースコードを取得し、取得したソースコードに含まれる画面出力を定義する画面構成要素（例えば、ＨＴＭＬ要素）と、画面出力に関する条件分岐（例えば、ＩＦ文）とを抽出する。次に、マージ処理ステップにおいて、マージ処理部７２が、予め定められたマージ規則に基づいて、抽出ステップによって抽出された条件分岐を併合するか否かを判定するとともに、条件分岐を併合すると判定した場合に、当該条件分岐を併合するマージ処理を実行する。そして、画面一覧生成ステップにおいて、画面一覧生成部７３が、マージ処理ステップによって処理された後の条件分岐及び画面構成要素に基づいて、画面構成要素と条件分岐によって分岐される状態の組み合わせとの一覧を示す画面一覧を生成する。
これにより、本実施形態によるソースコード解析方法は、本実施形態におけるソースコード解析装置１と同様の効果を奏する。
【００９３】
次に、第２の実施形態によるソースコード解析装置１について、図面を参照して説明する。
［第２の実施形態］
本実施形態では、マージ規則記憶部４３に記憶されているマージ規則が優先順位付けされており、マージ処理部７２が、マージ処理された後の論理画面の数が、適切な画面数になるように、マージ規則を優先順位にしたがって変更してマージ処理を実行する場合の一例について説明する。
なお、本実施形態におけるソースコード解析装置１の構成は、図１に示す第１の実施形態と同様であるので、ここではその説明を省略する。
【００９４】
次に、本実施形態におけるソースコード解析装置１の動作について、図１８を参照して説明する。
図１８は、第２の実施形態におけるソースコード解析の手順の一例を示すフローチャートである。
この図において、ステップＳ３０１からステップＳ３０３の処理は、図７に示すステップＳ１０１からステップＳ１０３の処理と同様であるため、ここではその説明を省略する。なお、本実施形態では、マージ規則は、例えば、第１のマージ規則を最優先とする複数のマージ規則のグループに分かれている場合について説明する。
【００９５】
続くステップＳ３０４において、ソースコード解析装置１の制御部７０は、まず、マージ規則として第１のマージ規則を設定する。
次に、マージ処理部７２は、マージ規則に基づいてＩＦ文をマージする（ステップＳ３０５）。ここでは、マージ処理部７２は、まず、第１のマージ規則に基づいて、ＩＦ文をマージするマージ処理を実行する。
【００９６】
続く、ステップＳ３０６及びステップＳ３０７の処理は、図７に示すステップＳ１０５及びステップＳ１０６の処理と同様である。
次に、ステップＳ３０８において、マージ処理部７２は、生成された画面一覧における画面数が所定の画面数以下か否かを判定する。すなわち、マージ処理部７２は、マージ処理された後のＩＦ文によって分岐される状態の組み合わせの画面数（マージ処理された後の論理画面数）が所定の画面数以下であるか否かを判定する。
【００９７】
ここで、所定の画面数は、例えば、マージ処理を実行する前のＩＦ文によって分岐される状態の組み合わせの画面数（マージ処理される前の論理画面数）に対する所定の割合の画面数（例えば、１０％の画面数）でもよいし、ソースコードによって実行される機能数に応じた所定の画面数でもよい。なお、ソースコードによって実行される機能数に応じた所定の画面数とは、例えば、１つの機能に対して、入力画面、出力画面、修正画面、及び結果確認画面の５つの画面が妥当であるとした場合、（機能数×５）画面である。すなわち、例えば、１つのＪＳＰファイルで５つの機能処理の出力画面を定義している場合に、機能数に応じた所定の画面数は、２５画面（５機能×５画面）となる。
【００９８】
マージ処理部７２は、マージ処理された後の論理画面数が所定の画面数以下である場合（ステップＳ３０８：ＹＥＳ）に、適切な論理画面数になったと判定し、処理をステップＳ３１０に進める。また、マージ処理部７２は、マージ処理された後の論理画面数が所定の画面数より多い場合（ステップＳ３０８：ＮＯ）に、適切な論理画面数になっていないと判定し、処理をステップＳ３０９に進める。
【００９９】
次に、ステップＳ３０９において、マージ処理部７２は、マージ規則を変更して、処理をステップＳ３０５に戻させて、再度、マージ処理を実行する。ここで、マージ処理部７２は、例えば、マージ規則を優先順位にしたがって、第１のマージ規則から第２のマージ規則に変更して、再度マージ処理を実行する。なお、第２のマージ規則によるマージ処理を実行してもマージ処理された後の論理画面数が所定の画面数より多い場合には、マージ処理部７２は、例えば、マージ規則を優先順位にしたがって、第２のマージ規則から第３のマージ規則に変更して、再度マージ処理を実行する。
【０１００】
このように、マージ処理部７２は、マージ処理された後の条件分岐によって分岐される状態の組み合わせの画面数（マージ処理された後の論理画面数）が、所定の画面数以下になるように、マージ規則を変更し、変更したマージ規則に基づいて、マージ処理を実行する。さらに、マージ処理部７２は、マージ処理された後の論理画面数が、マージ処理を実行する前の論理画面数に対する所定の割合の画面数以下、又は、ソースコードによって実行される機能数に応じた所定の画面数以下になるようにマージ規則を変更し、変更したマージ規則に基づいて、マージ処理を実行する。
【０１０１】
また、ステップＳ３１０及びステップＳ３１１の処理は、図７に示すステップＳ１０７及びステップＳ１０８の処理と同様である。
【０１０２】
以上説明したように、本実施形態では、マージ処理部７２は、マージ処理された後の条件分岐によって分岐される状態の組み合わせの画面数（マージ処理された後の論理画面数）が、所定の画面数以下になるように、マージ規則を変更し、変更したマージ規則に基づいて、マージ処理を実行する。
これにより、本実施形態におけるソースコード解析装置１は、適切な論理画面数になるようにマージ処理を実行して、適切な論理画面数の画面一覧を生成することができる。そのため、本実施形態におけるソースコード解析装置１は、例えば、全ての画面を網羅するように画面を分割すると、生成される画面数が爆発的に増加してしまうことを防止することができる。
【０１０３】
また、本実施形態では、マージ処理部７２は、マージ処理された後の論理画面数が、マージ処理を実行する前の論理画面数に対する所定の割合の画面数以下、又は、ソースコードによって実行される機能数に応じた所定の画面数以下になるようにマージ規則を変更し、変更したマージ規則に基づいて、マージ処理を実行する。
これにより、本実施形態におけるソースコード解析装置１は、適切な論理画面数になるようにマージ処理を実行することができる。
【０１０４】
なお、上述した実施形態では、所定の画面数以下になるようにマージ規則を変更しているが、所定の画面数の範囲内に収まるようにマージ規則を変更してもよい。また、所定の画面数は、ユーザ（作業者）によって入力部５０から入力されてもよい。また、上述のマージ規則の変更には、複数段階に優先順位付けされたマージ規則の指定を変更するだけでなく、マージ規則の追加や削除、複数のマージ規則のうちから適宜選択することも含まれる。
また、上述の図１８に示す例では、ステップＳ３０５及びステップＳ３０６の処理において画面一覧を生成した後に、ステップＳ３０８の処理によりマージ規則を変更して再びマージ処理を行うか否かを判定しているが、ステップＳ３０５の後に、ステップＳ３０８の処理をおこなってもよい。この場合、中間ソースコードに含まれる条件ＩＤの種類数によってマージ規則を変更して再びマージ処理を行うか否かを判定してもよい。
【０１０５】
なお、本発明は、上記の各実施形態に限定されるものではなく、本発明の趣旨を逸脱しない範囲で変更可能である。
例えば、上記の各実施形態において、画面を定義するソースファイルが、ＪＳＰファイルである場合について説明したが、これに限定されるものではなく、画面と処理とを１つのファイルに定義するソースファイルであれば、他の形式のソースファイルであってもよい。ソースファイルは、例えば、ＡＳＰ（Active Server Pages）や、ＰＨＰ（Hypertext Preprocessor）、Ｐｅｒｌ（パール）を利用して画面と処理とを１つのファイルに定義するソースファイルであってもよい。
また、上記の各実施形態において、条件分岐がＩＦ文である場合について説明したが、ＳＷＩＴＣＨ文などの条件分岐、ＷＨＩＬＥ文などのループ文に適用してもよい。
【０１０６】
また、上記の各実施形態において、ソースコード解析装置１が表示処理部７４及びＪＳＰファイル生成部７５を備える場合について説明したが、表示処理部７４及びＪＳＰファイル生成部７５のいずれか一方を備える形態であってもよいし、表示処理部７４及びＪＳＰファイル生成部７５を備えない形態であってもよい。
また、ソースコード解析装置１が出力処理部として表示部６０に画面一覧を表示させる表示処理部７４を備える場合について説明したが、単に外部に画面一覧を出力する出力処理部を備えてもよい。
【０１０７】
また、上記の各実施形態において、ソースコード解析装置１が記憶部４０を備える場合について説明したが、記憶部４０又は記憶部４０の一部をソースコード解析装置１の外部に備えてもよい。例えば、ネットワークを介してソースコード解析装置１に接続されているサーバ装置が記憶部４０を備えてもよい。また、ソースコード解析装置１がソース記憶部２０及び出力情報記憶部３０を備えない場合について説明したが、ソースコード解析装置１がソース記憶部２０及び出力情報記憶部３０を備えてもよい。
【０１０８】
また、上記の各実施形態において、ソースコード解析装置１が入力部５０及び表示部６０を備える場合について説明したが、ソースコード解析装置１が入力部５０及び表示部６０を備えなくてもよい。例えば、アプリケーションサーバ装置がソースコード解析装置１を備え、アプリケーションサーバ装置にネットワークを介して接続されたクライアント端末が入力部５０及び表示部６０を備えてもよい。
【０１０９】
また、上記の各実施形態において、ソースコード解析装置１が論理画面ごとのＪＳＰファイルを生成する場合について説明したが、さらに、例えば、ＸＭＬ（Extensible Markup Language）ファイルなどの画面の遷移に係る画面遷移定義ファイルを生成してもよい。この場合、ソースコード解析装置１は、論理画面ごとのＪＳＰファイルに基づいて、適切な画面遷移定義ファイルを生成することができる。
また、ソースコード解析装置１は、ソースコードの解析前に予め存在している設計書がある場合には、設計書に記載されている画面構成要素（ＨＴＭＬ要素）を用いて、画面一覧から不用な画面を削除してもよい。
【０１１０】
また、上記の各実施形態において、ソースコード解析装置１は、マージ規則記憶部４３が記憶するマージ規則に各マージ規則の適用の有無を示す情報を付加して、各マージ規則の適用の有無を設定できるようにしてもよい。このようにすることで、ソースコード解析装置１は、プロジェクトやプログラム用途に応じて適切なマージ規則を選択して使用することができる。
【０１１１】
なお、本発明におけるソースコード解析装置１が備える各構成の機能を実現するためのプログラムをコンピュータ読み取り可能な記録媒体に記録して、この記録媒体に記録されたプログラムをコンピュータシステムに読み込ませ、実行することにより上述したソースコード解析装置１が備える各構成における処理を行ってもよい。ここで、「記録媒体に記録されたプログラムをコンピュータシステムに読み込ませ、実行する」とは、コンピュータシステムにプログラムをインストールすることを含む。ここでいう「コンピュータシステム」とは、ＯＳや周辺機器等のハードウェアを含むものとする。
また、「コンピュータシステム」は、インターネットやＷＡＮ、ＬＡＮ、専用回線等の通信回線を含むネットワークを介して接続された複数のコンピュータ装置を含んでもよい。また、「コンピュータ読み取り可能な記録媒体」とは、フレキシブルディスク、光磁気ディスク、ＲＯＭ、ＣＤ−ＲＯＭ等の可搬媒体、コンピュータシステムに内蔵されるハードディスク等の記憶装置のことをいう。このように、プログラムを記憶した記録媒体は、ＣＤ−ＲＯＭ等の非一過性の記録媒体であってもよい。
【０１１２】
また、記録媒体には、当該プログラムを配信するために配信サーバからアクセス可能な内部または外部に設けられた記録媒体も含まれる。なお、プログラムを複数に分割し、それぞれ異なるタイミングでダウンロードした後にソースコード解析装置１が備える各構成で合体される構成や、分割されたプログラムのそれぞれを配信する配信サーバが異なっていてもよい。さらに「コンピュータ読み取り可能な記録媒体」とは、ネットワークを介してプログラムが送信された場合のサーバやクライアントとなるコンピュータシステム内部の揮発性メモリ（ＲＡＭ）のように、一定時間プログラムを保持しているものも含むものとする。また、上記プログラムは、上述した機能の一部を実現するためのものであってもよい。さらに、上述した機能をコンピュータシステムにすでに記録されているプログラムとの組み合わせで実現できるもの、いわゆる差分ファイル（差分プログラム）であってもよい。
【０１１３】
また、上述した機能の一部または全部を、ＬＳＩ（Large Scale Integration）等の集積回路として実現してもよい。上述した各機能は個別にプロセッサ化してもよいし、一部、または全部を集積してプロセッサ化してもよい。また、集積回路化の手法はＬＳＩに限らず専用回路、または汎用プロセッサで実現してもよい。また、半導体技術の進歩によりＬＳＩに代替する集積回路化の技術が出現した場合、当該技術による集積回路を用いてもよい。
【符号の説明】
【０１１４】
１  ソースコード解析装置
２０  ソース記憶部
３０  出力情報記憶部
４０  記憶部
４１  中間コード記憶部
４２  置換情報記憶部
４３  マージ規則記憶部
４４  マージ結果記憶部
４５  画面一覧記憶部
５０  入力部
６０  表示部
７０  制御部
７１  抽出部
７２  マージ処理部
７３  画面一覧生成部
７４  表示処理部
７５  ＪＳＰファイル生成部
７１１  第１構文解析部
７１２  第２構文解析部
【図１】
2015005031.tif 000003
【図２】
2015005031.tif 000004
【図３】
2015005031.tif 000005
【図４】
2015005031.tif 000006
【図５】
2015005031.tif 000007
【図６】
2015005031.tif 000008
【図７】
2015005031.tif 000009
【図８】
2015005031.tif 000010
【図９】
2015005031.tif 000011
【図１０】
2015005031.tif 000012
【図１１】
2015005031.tif 000013
【図１２】
2015005031.tif 000014
【図１３】
2015005031.tif 000015
【図１４】
2015005031.tif 000016
【図１５】
2015005031.tif 000017
【図１６】
2015005031.tif 000018
【図１７】
2015005031.tif 000019
【図１８】
2015005031.tif 000020