(57)【要約】  【課題】マイグレーション前のシステムを動作させていたプログラムのソースコードが、マイグレーション後のシステムを適切に動作させるソースコードであるか判定する。  【解決手段】第１の抽出部１２は、記憶部１８に記憶されたＣＯＢＯＬ言語のソースコードから、ＧＯＴＯ文が記述されている記述行と、ＧＯＴＯ文に記述されているラベルの開始行および終了行とを抽出する。第２の抽出部１３は、記憶部１８に記憶されたソースコードから、ＰＥＲＦＯＲＭ文が記述されている記述行と、ＰＥＲＦＯＲＭ文に記述されているラベルの開始行および終了行とを抽出する。判定部１４は、第１の抽出部１２によって抽出された記述行が、第２の抽出部１３によって抽出された開始行と終了行との間に含まれている場合、第１の抽出部１２によって抽出された開始行および終了行が、第２の抽出部１３によって抽出された開始行と終了行との間に含まれているか否か判定する。【選択図】図１
2016110437.tif 000002
【特許請求の範囲】
【請求項１】
ＣＯＢＯＬ言語で記述されたソースコードを記憶する記憶部と、
前記記憶部に記憶された前記ソースコードから、ＧＯＴＯ文が記述されている記述行と、前記ＧＯＴＯ文に記述されているラベルの開始行および終了行とを抽出する第１の抽出部と、
前記記憶部に記憶された前記ソースコードから、ＰＥＲＦＯＲＭ文が記述されている記述行と、前記ＰＥＲＦＯＲＭ文に記述されているラベルの開始行および終了行とを抽出する第２の抽出部と、
前記第１の抽出部によって抽出された記述行が、前記第２の抽出部によって抽出された開始行と終了行との間に含まれている場合、前記第１の抽出部によって抽出された開始行および終了行が、前記第２の抽出部によって抽出された開始行と終了行との間に含まれているか否か判定する判定部と、
を有することを特徴とする情報処理装置。
【請求項２】
請求項１に記載の情報処理装置であって、
前記判定部によって、前記第１の抽出部によって抽出された開始行および終了行が、前記第２の抽出部によって抽出された開始行と終了行との間に含まれていないと判定された場合、前記ソースコードを再構築する再構築部、
をさらに有することを特徴とする情報処理装置。
【請求項３】
請求項２に記載の情報処理装置であって、
前記再構築部は、
前記第２の抽出部によって抽出された記述行の前行に、第１のフラグを立てるコードを追加し、
前記第１の抽出部によって抽出された記述行の前行に、第２のフラグを立てるコードを追加し、
前記第１の抽出部によって抽出された終了行の後行に、前記第１のフラグおよび前記第２のフラグが立っている場合、前記ＰＥＲＦＯＲＭ文で呼び出されるセクションの最後に記述されているラベルにジャンプするようにコードを追加する、
ことを特徴とする情報処理装置。
【請求項４】
請求項１に記載の情報処理装置であって、
前記第２の抽出部は、ＰＥＲＦＯＲＭＴＨＲＵ文が記述されている記述行と、前記ＰＥＲＦＯＲＭＴＨＲＵ文に記述されている第１のラベルの開始行および第２のラベルの終了行とを抽出する、
ことを特徴とする情報処理装置。
【請求項５】
請求項４に記載の情報処理装置であって、
前記判定部によって、前記第１の抽出部によって抽出された開始行および終了行が、前記第２の抽出部によって抽出された前記第１のラベルの開始行と前記第２のラベルの終了行との間に含まれていないと判定された場合、前記ソースコードを再構築する再構築部、
をさらに有することを特徴とする情報処理装置。
【請求項６】
請求項５に記載の情報処理装置であって、
前記第構築部は、
前記第２の抽出部によって抽出された前記ＰＥＲＦＯＲＭＴＨＲＵ文の記述行の前行に、第１のフラグおよび第２のフラグを立てるコードを追加し、
前記第１の抽出部によって抽出された記述行の前行に、第３のフラグを立てるコードを追加し、
前記第１の抽出部によって抽出された終了行の後行に、前記第１のフラグ、前記第２のフラグ、および前記第３のフラグが立っている場合、前記ＰＥＲＦＯＲＭＴＨＲＵ文で呼び出されるセクションの最後に記述されているラベルにジャンプするようにコードを追加する、
ことを特徴とする情報処理装置。
【請求項７】
請求項１に記載の情報処理装置であって、
前記判定部は、前記第２の抽出部によって抽出された記述行が、前記第２の抽出部によって抽出された開始行と終了行との間に含まれているか否か判定する、
ことを特徴とする情報処理装置。
【請求項８】
請求項７に記載の情報処理装置であって、
前記判定部によって、前記第２の抽出部によって抽出された記述行が、前記第２の抽出部によって抽出された開始行と終了行との間に含まれると判定された場合、前記ソースコードを再構築する再構築部、
をさらに有することを特徴とする情報処理装置。
【請求項９】
請求項８に記載の情報処理装置であって、
前記再構築部は、前記ＰＥＲＦＯＲＭ文をＧＯＴＯ文に変更し、前記ＰＥＲＦＯＲＭ文で呼び出されるセクションの最初に記述されているラベルへジャンプするようにコードを変更する、
ことを特徴とする情報処理装置。
【請求項１０】
請求項１に記載の情報処理装置であって、
前記判定部によって、前記第１の抽出部によって抽出された開始行および終了行が、前記第２の抽出部によって抽出された開始行と終了行との間に含まれていないと判定された場合、前記第１の抽出部によって抽出された情報および前記第２の抽出部によって抽出された情報の両方または一方を表示装置に出力する出力部、
をさらに有することを特徴とする情報処理装置。
【請求項１１】
情報処理装置のソースコード解析方法において、前記情報処理装置は、
第１の抽出部によって、記憶部に記憶されたＣＯＢＯＬ言語で記述されたソースコードから、ＧＯＴＯ文が記述されている記述行と、前記ＧＯＴＯ文に記述されているラベルの開始行および終了行とを抽出し、
第２の抽出部によって、前記ソースコードから、ＰＥＲＦＯＲＭ文が記述されている記述行と、前記ＰＥＲＦＯＲＭ文に記述されているラベルの開始行および終了行とを抽出し、
判定部によって、前記第１の抽出部によって抽出された記述行が、前記第２の抽出部によって抽出された開始行と終了行との間に含まれている場合、前記第１の抽出部によって抽出された開始行および終了行が、前記第２の抽出部によって抽出された開始行と終了行との間に含まれているか否か判定する、
ことを特徴とするソースコード解析方法。
【請求項１２】
情報処理装置のプログラムであって、前記情報処理装置に、
記憶部に記憶されたＣＯＢＯＬ言語で記述されたソースコードから、ＧＯＴＯ文が記述されている記述行と、前記ＧＯＴＯ文に記述されているラベルの開始行および終了行とを抽出し、
前記ソースコードから、ＰＥＲＦＯＲＭ文が記述されている記述行と、前記ＰＥＲＦＯＲＭ文に記述されているラベルの開始行および終了行とを抽出し、
前記ＧＯＴＯ文の記述行が、前記ＰＥＲＦＯＲＭ文に記述されているラベルの開始行と終了行との間に含まれている場合、前記ＧＯＴＯ文に記述されているラベルの開始行および終了行が、前記ＰＥＲＦＯＲＭ文に記述されているラベルの開始行と終了行との間に含まれているか否か判定する、
処理を実行させるプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、情報処理装置およびソースコード解析方法に関するものである。
【背景技術】
【０００２】
従来、被解析プログラムの厳密な文法を必要とすることなく、ソースコードの構文解析を行うプログラム構造解析方法が提案されている（例えば、特許文献１参照）。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特開２００９−８０６８１号公報
【発明の概要】
【発明が解決しようとする課題】
【０００４】
ところで、システムマイグレーションでは、マイグレーション前のプログラムを、マイグレーション後のシステムにそのまま用いる場合がある。
【０００５】
しかし、プログラムのソースコードのコーディングによっては、マイグレーション前のシステムは適切に動作するが、マイグレーション後のシステムは適切に動作しない場合があるという問題がある。
【０００６】
そこで本発明は、マイグレーション前のシステムを動作させていたプログラムのソースコードが、マイグレーション後のシステムを適切に動作させるソースコードであるか判定する技術を提供することを目的とする。
【課題を解決するための手段】
【０００７】
本願は、上記課題の少なくとも一部を解決する手段を複数含んでいるが、その例を挙げるならば、以下の通りである。上記課題を解決すべく、本発明に係る情報処理装置は、ＣＯＢＯＬ言語で記述されたソースコードを記憶する記憶部と、前記記憶部に記憶された前記ソースコードから、ＧＯＴＯ文が記述されている記述行と、前記ＧＯＴＯ文に記述されているラベルの開始行および終了行とを抽出する第１の抽出部と、前記記憶部に記憶された前記ソースコードから、ＰＥＲＦＯＲＭ文が記述されている記述行と、前記ＰＥＲＦＯＲＭ文に記述されているラベルの開始行および終了行とを抽出する第２の抽出部と、前記第１の抽出部によって抽出された記述行が、前記第２の抽出部によって抽出された開始行と終了行との間に含まれている場合、前記第１の抽出部によって抽出された開始行および終了行が、前記第２の抽出部によって抽出された開始行と終了行との間に含まれているか否か判定する判定部と、を有することを特徴とする。
【０００８】
また、上記の情報処理装置においては、前記判定部によって、前記第１の抽出部によって抽出された開始行および終了行が、前記第２の抽出部によって抽出された開始行と終了行との間に含まれていないと判定された場合、前記ソースコードを再構築する再構築部をさらに有することを特徴とするものであってもよい。
【０００９】
また、上記の情報処理装置においては、前記再構築部は、前記第２の抽出部によって抽出された記述行の前行に、第１のフラグを立てるコードを追加し、前記第１の抽出部によって抽出された記述行の前行に、第２のフラグを立てるコードを追加し、前記第１の抽出部によって抽出された終了行の後行に、前記第１のフラグおよび前記第２のフラグが立っている場合、前記ＰＥＲＦＯＲＭ文で呼び出されるセクションの最後に記述されているラベルにジャンプするようにコードを追加する、ことを特徴とするものであってもよい。
【００１０】
また、上記の情報処理装置においては、前記第２の抽出部は、ＰＥＲＦＯＲＭＴＨＲＵ文が記述されている記述行と、前記ＰＥＲＦＯＲＭＴＨＲＵ文に記述されている第１のラベルの開始行および第２のラベルの終了行とを抽出する、ことを特徴とするものであってもよい。
【００１１】
また、上記の情報処理装置においては、前記判定部によって、前記第１の抽出部によって抽出された開始行および終了行が、前記第２の抽出部によって抽出された前記第１のラベルの開始行と前記第２のラベルの終了行との間に含まれていないと判定された場合、前記ソースコードを再構築する再構築部、をさらに有することを特徴とするものであってもよい。
【００１２】
また、上記の情報処理装置においては、前記第構築部は、前記第２の抽出部によって抽出された前記ＰＥＲＦＯＲＭＴＨＲＵ文の記述行の前行に、第１のフラグおよび第２のフラグを立てるコードを追加し、前記第１の抽出部によって抽出された記述行の前行に、第３のフラグを立てるコードを追加し、前記第１の抽出部によって抽出された終了行の後行に、前記第１のフラグ、前記第２のフラグ、および前記第３のフラグが立っている場合、前記ＰＥＲＦＯＲＭＴＨＲＵ文で呼び出されるセクションの最後に記述されているラベルにジャンプするようにコードを追加する、ことを特徴とするものであってもよい。
【００１３】
また、上記の情報処理装置においては、前記判定部は、前記第２の抽出部によって抽出された記述行が、前記第２の抽出部によって抽出された開始行と終了行との間に含まれているか否か判定する、ことを特徴とするものであってもよい。
【００１４】
また、上記の情報処理装置においては、前記判定部によって、前記第２の抽出部によって抽出された記述行が、前記第２の抽出部によって抽出された開始行と終了行との間に含まれると判定された場合、前記ソースコードを再構築する再構築部、をさらに有することを特徴とするものであってもよい。
【００１５】
また、上記の情報処理装置においては、前記再構築部は、前記ＰＥＲＦＯＲＭ文をＧＯＴＯ文に変更し、前記ＰＥＲＦＯＲＭ文で呼び出されるセクションの最初に記述されているラベルへジャンプするようにコードを変更する、ことを特徴とするものであってもよい。
【００１６】
また、上記の情報処理装置においては、前記判定部によって、前記第１の抽出部によって抽出された開始行および終了行が、前記第２の抽出部によって抽出された開始行と終了行との間に含まれていないと判定された場合、前記第１の抽出部によって抽出された情報および前記第２の抽出部によって抽出された情報の両方または一方を表示装置に出力する出力部、をさらに有することを特徴とするものであってもよい。
【００１７】
また、本発明に係る情報処理装置のソースコード解析方法は、前記情報処理装置は、第１の抽出部によって、記憶部に記憶されたＣＯＢＯＬ言語で記述されたソースコードから、ＧＯＴＯ文が記述されている記述行と、前記ＧＯＴＯ文に記述されているラベルの開始行および終了行とを抽出し、第２の抽出部によって、前記ソースコードから、ＰＥＲＦＯＲＭ文が記述されている記述行と、前記ＰＥＲＦＯＲＭ文に記述されているラベルの開始行および終了行とを抽出し、判定部によって、前記第１の抽出部によって抽出された記述行が、前記第２の抽出部によって抽出された開始行と終了行との間に含まれている場合、前記第１の抽出部によって抽出された開始行および終了行が、前記第２の抽出部によって抽出された開始行と終了行との間に含まれているか否か判定する、ことを特徴とする。
【００１８】
また、本発明に係る情報処理装置のプログラムは、前記情報処理装置に、記憶部に記憶されたＣＯＢＯＬ言語で記述されたソースコードから、ＧＯＴＯ文が記述されている記述行と、前記ＧＯＴＯ文に記述されているラベルの開始行および終了行とを抽出し、前記ソースコードから、ＰＥＲＦＯＲＭ文が記述されている記述行と、前記ＰＥＲＦＯＲＭ文に記述されているラベルの開始行および終了行とを抽出し、前記ＧＯＴＯ文の記述行が、前記ＰＥＲＦＯＲＭ文に記述されているラベルの開始行と終了行との間に含まれている場合、前記ＧＯＴＯ文に記述されているラベルの開始行および終了行が、前記ＰＥＲＦＯＲＭ文に記述されているラベルの開始行と終了行との間に含まれているか否か判定する、処理を実行させることを特徴とする。
【発明の効果】
【００１９】
本発明によれば、マイグレーション前のシステムを動作させていたプログラムのソースコードが、マイグレーション後のシステムを適切に動作させるソースコードであるか判定する。上記した以外の課題、構成、および効果は、以下の実施形態の説明により明らかにされる。
【図面の簡単な説明】
【００２０】
【図１】第１の実施の形態に係る情報処理装置１の機能ブロックの例を示した図である。
【図２】記憶部１８に記憶されるソースコードの例を示した図である。
【図３】記憶部１８に記憶されるラベルリストを示した図である。
【図４】記憶部１８に記憶されるＧＯＴＯ文情報の例を示した図である。
【図５】記憶部１８に記憶されるＰＥＲＦＯＲＭ文情報の例を示した図である。
【図６】再構築されたソースコードの例を示した図である。
【図７】情報処理装置１の動作例を示したフローチャートである。
【図８】プログラム再構築処理の詳細な動作例を示したフローチャートである。
【図９】第２の実施の形態に係る情報処理装置１によって構文解析されるソースコードの例を示した図である。
【図１０】記憶部１８に記憶されるラベルリストを示した図である。
【図１１】記憶部１８に記憶されるＧＯＴＯ文情報の例を示した図である。
【図１２】記憶部１８に記憶されるＰＥＲＦＯＲＭＴＨＲＵ文情報の例を示した図である。
【図１３】再構築されたソースコードの例を示した図である。
【図１４】再構築されたソースコードの例を示した図である。
【図１５】情報処理装置１の動作例を示したフローチャートである。
【図１６】プログラム再構築処理の詳細な動作例を示したフローチャートである。
【図１７】第３の実施の形態に係る情報処理装置１によって構文解析されるソースコードの例を示した図である。
【図１８】記憶部１８に記憶されるラベルリストを示した図である。
【図１９】記憶部１８に記憶されるＰＥＲＦＯＲＭ文情報の例を示した図である。
【図２０】再構築されたソースコードの例を示した図である。
【図２１】情報処理装置１の動作例を示したフローチャートである。
【図２２】プログラム再構築処理の詳細な動作例を示したフローチャートである。
【図２３】情報処理装置１のハードウェア構成例を示した図である。
【発明を実施するための形態】
【００２１】
以下、本発明の実施の形態を、図面を用いて説明する。
【００２２】
［第１の実施の形態］
図１は、第１の実施の形態に係る情報処理装置１の機能ブロックの例を示した図である。図１に示す情報処理装置１は、例えば、パーソナルコンピュータやサーバなどである。情報処理装置１には、情報処理装置１とは別のシステムを動かすためのプログラムのソースコードが入力される。情報処理装置１に入力されるソースコードは、ＣＯＢＯＬ言語で記述されている。
【００２３】
情報処理装置１は、入力されたＣＯＢＯＬ言語のソースコードの構造解析を行い、そのソースコードが、マイグレーション後のシステムを適切に動作させるソースコードであるか判定する。情報処理装置１は、入力されたソースコードが、マイグレーション後のシステムを適切に動作させるソースコードでないと判定した場合、入力されたソースコードを再構築する。
【００２４】
図１に示すように、情報処理装置１は、ラベル抽出部１１と、第１の抽出部１２と、第２の抽出部１３と、判定部１４と、再構築部１５と、入力部１６と、出力部１７と、記憶部１８と、を有している。
【００２５】
ラベル抽出部１１は、記憶部１８に記憶されたＣＯＢＯＬ言語のソースコードから、ラベルを抽出する。
【００２６】
第１の抽出部１２は、記憶部１８に記憶されたＣＯＢＯＬ言語のソースコードから、ＧＯＴＯ文が記述されている行と、ＧＯＴＯ文に記述されているラベルの開始行および終了行とを抽出する。
【００２７】
第２の抽出部１３は、記憶部１８に記憶されたＣＯＢＯＬ言語のソースコードから、ＰＥＲＦＯＲＭ文が記述されている行と、ＰＥＲＦＯＲＭ文に記述されているラベルの開始行および終了行とを抽出する。
【００２８】
判定部１４は、第１の抽出部１２によって抽出された、ＧＯＴＯ文が記述されている行が、第２の抽出部１３によって抽出された、ＰＥＲＦＯＲＭ文に記述されているラベルの開始行と終了行との間に含まれている場合、第１の抽出部１２によって抽出された、ＧＯＴＯ文に記述されているラベルの開始行および終了行が、第２の抽出部１３によって抽出された、ＰＥＲＦＯＲＭ文に記述されているラベルの開始行と終了行との間に含まれているか否か判定する。
【００２９】
再構築部１５は、判定部１４によって、第１の抽出部１２によって抽出された、ＧＯＴＯ文に記述されているラベルの開始行および終了行が、第２の抽出部１３によって抽出された、ＰＥＲＦＯＲＭ文に記述されているラベルの開始行と終了行との間に含まれていないと判定された場合、記憶部１８に記憶されているＣＯＢＯＬ言語のソースコードを再構築する。
【００３０】
入力部１６は、例えば、キーボードやマウスなどの入力装置を介して、ユーザから情報を受付ける。
【００３１】
出力部１７は、例えば、ＬＣＤなどの表示装置に、各部によって処理された情報等を出力する。
【００３２】
記憶部１８には、ＣＯＢＯＬ言語で記述されたソースコードが記憶される。記憶部１８に記憶されるソースコードは、情報処理装置１とは別のシステムを動かすためのプログラムのソースコードである。
【００３３】
記憶部１８に記憶されるソースコードは、ユーザによって入力される。入力部１６は、入力装置を介して、ユーザが入力するソースコードを受付け、記憶部１８に記憶する。また、記憶部１８には、以下で説明するが、各種情報が記憶される。
【００３４】
図２は、記憶部１８に記憶されるソースコードの例を示した図である。図２に示すソースコード２１は、マイグレーション前のシステムを適切に動作させていたプログラムのソースコードである。ソースコード２１は、ＣＯＢＯＬ言語で記述されている。入力部１６は、ユーザからソースコード２１を受付け、受付けたソースコード２１を記憶部１８に記憶する。
【００３５】
図２に示すように、ソースコード２１の各行には、行番号２２が付されている。行番号２２は、入力部１６によって付与される。例えば、入力部１６は、ユーザからソースコード２１を受付けた際、ソースコード２１に行番号２２を付与し、記憶部１８に記憶する。
【００３６】
ソースコード２１の概略を説明する。ソースコード２１のプログラムを実行するシステムは、ソースコード２１の「ＭＡＩＮ」セクションに記述されているＰＥＲＦＯＲＭ文により、ラベル「ＡＡＡ」のセクションを呼び出す。
【００３７】
「ＡＡＡ」セクションでは、ＧＯＴＯ文により、処理が、「ＢＢＢ」セクションの「ＢＢＳ−Ｓ」ラベルへジャンプするようになっている。従って、システムは、「ＢＢＢ−Ｓ」ラベルへジャンプして処理を逐次実行していき、そのまま次の「ＣＣＣ」セクションの処理を実行する。
【００３８】
上記したように「ＭＡＩＮ」セクションでは、ＰＥＲＦＯＲＭ文により、「ＡＡＡ」セクションを呼び出している。従って、システムは、本来、「ＡＡＡ」セクションの処理を終了すると、再び「ＭＡＩＮ」セクション（呼出元）に戻るべきである。
【００３９】
しかし、図２のソースコード２１では、上記したように「ＡＡＡ」セクションにおいて、ＧＯＴＯ文により、「ＡＡＡ」セクション外の「ＢＢＢ」セクションに処理がジャンプする。そして、システムは、「ＢＢＢ」セクション以下のコードを逐次実行していく。そのため、システムは、「ＡＡＡ」セクションの処理を終えることがなく、「ＭＡＩＮ」セクションに戻らない。
【００４０】
ソースコード２１のような構造であっても、マイグレーション前のシステムでは、適切に動作していることがある。しかし、マイグレーション後のシステムでは、同じソースコード２１であっても、システム（コンパイラ）の違いにより、適切に動作をしない場合がある。
【００４１】
ソースコード２１は、構文エラーではないため、コンパイルエラーとして検出されない。そのため、マイグレーション前後でシステム動作が異なった場合、その原因がどこにあるのか、特定することは容易ではない。そこで、情報処理装置１は、マイグレーション前のシステムを動作させていたプログラムのソースコード２１が、マイグレーション後のシステムを適切に動作させるソースコードであるか判定する。
【００４２】
なお、ソースコード２１の例では、ＰＥＲＦＯＲＭ文で呼び出したセクション内に記述されたＧＯＴＯ文のジャンプ先が、ＰＥＲＦＯＲＭ文で呼び出したセクション外のセクションへジャンプしている構造が問題である。具体的には、ソースコード２１では、「ＭＡＩＮ」セクションに記述されたＰＥＲＦＯＲＭ文により、「ＡＡＡ」セクションが呼び出される。「ＡＡＡ」セクションに記述されたＧＯＴＯ文のジャンプ先は、「ＡＡＡ」セクション外の「ＢＢＢ」セクションであり、「ＡＡＡ」セクションの呼び出し元である「ＭＡＩＮ」セクションの処理へ戻らない構造が問題である。
【００４３】
記憶部１８に記憶される各種情報例について説明する。
図３は、記憶部１８に記憶されるラベルリストを示した図である。記憶部１８には、図３に示すようなラベルリスト３１が記憶される。ラベルリスト３１は、番号３１ａと、ラベル３１ｂと、種別３１ｃと、開始行３１ｄと、終了行３１ｅと、を有している。
【００４４】
番号３１ａは、以下で説明するラベル３１ｂを識別する情報である。
【００４５】
ラベル３１ｂは、ソースコード２１に記述されているラベルである。
【００４６】
種別３１ｃは、ラベル３１ｂの種別を示す情報である。例えば、セクションのラベル（セクションラベル）には、「Ｓ」が記憶される。また、通常のラベル（セクションラベル以外のラベル）には、「Ｌ」が記憶される。
【００４７】
例えば、図２のソースコード２１では、ラベル「ＡＡＡ」は、セクションラベルである。従って、図３のラベル３１ｂが「ＡＡＡ」の種別３１ｃは、「Ｓ」となる。また、図２のソースコード２１では、ラベル「ＡＡＡ−Ｓ」は、通常のラベルである。従って、図３のラベル３１ｂが「ＡＡＡ−Ｓ」の種別３１ｃは、「Ｌ」となる。
【００４８】
開始行３１ｄは、ラベル３１ｂのラベルが記述されている行番号２２である。例えば、図２のソースコード２１では、ラベル「ＡＡＡ」は、行番号２２が「９」の行に記述されている。従って、図３のラベル３１ｂが「ＡＡＡ」の開始行３１ｄは、「９」となる。
【００４９】
終了行３１ｅは、ラベル３１ｂのラベルの、同じ種別における、次に記述されているラベルの１つ前の行番号２２である。例えば、図２のソースコード２１では、セクションラベル「ＡＡＡ」の次に記述されているセクションラベルは、「ＢＢＢ」である。従って、図３のラベル３１ｂが「ＡＡＡ」の終了行３１ｅは、次に記述されているセクションラベル「ＢＢＢ」の行の１つ前の「１６」となる。また、図２のソースコード２１では、通常のラベル「ＡＡＡ−Ｓ」の次に記述されている通常のラベルは、「ＡＡＡ−Ｅ」である。従って、図３のラベル３１ｂが「ＡＡＡ−Ｓ」の終了行３１ｅは、次に記述されている通常のラベル「ＡＡＡ−Ｅ」の１つ前の「１３」となる。
【００５０】
図３に示すラベルリスト３１の各情報は、ラベル抽出部１１によって抽出され、記憶部１８に記憶される。例えば、ラベル抽出部１１は、記憶部１８に記憶されたソースコード２１から、ラベル３１ｂ、種別３１ｃ、開始行３１ｄ、および終了行３１ｅを抽出し、番号３１ａを付与して、記憶部１８に記憶する。
【００５１】
図４は、記憶部１８に記憶されるＧＯＴＯ文情報の例を示した図である。記憶部１８には、図４に示すようなＧＯＴＯ文情報３２が記憶される。ＧＯＴＯ文情報３２は、番号３２ａと、ＧＯＴＯラベル３２ｂと、記述行３２ｃと、開始行３２ｄと、終了行３２ｅと、を有している。
【００５２】
番号３２ａは、以下で説明するＧＯＴＯラベル３２ｂを識別する情報である。
【００５３】
ＧＯＴＯラベル３２ｂは、ソースコード２１のＧＯＴＯ文に記述されているラベルである。例えば、図２のソースコード２１では、行番号２２が「１２」の行に、ＧＯＴＯ文が記述されており、そのＧＯＴＯ文に記述されているラベルは、「ＢＢＢ−Ｓ」である。従って、図４のＧＯＴＯラベル３２ｂは、「ＢＢＢ−Ｓ」となる。
【００５４】
記述行３２ｃは、ＧＯＴＯ文が記述されている行番号２２である。例えば、図２のソースコード２１では、ＧＯＴＯ文は、行番号２２が「１２」の行に記述されている。従って、図４の記述行３２ｃは、「１２」となる。
【００５５】
開始行３２ｄは、ＧＯＴＯラベル３２ｂのラベルが記述されている行番号２２である。すなわち、開始行３２ｄは、ＧＯＴＯ文に記述されているラベルの、記述されている行番号２２である。例えば、図２のソースコード２１では、ＧＯＴＯ文に記述されているラベル「ＢＢＢ−Ｓ」の記述されている行番号２２は、「１８」である。従って、図４の開始行３２ｄは、「１８」となる。
【００５６】
終了行３２ｅは、ＧＯＴＯラベル３２ｂのラベルの、次に記述されているラベルの１つ前の行番号２２である。すなわち、終了行３２ｅは、ＧＯＴＯ文に記述されているラベルの、次に記述されているラベルの１つ前の行番号２２である。例えば、図２のソースコード２１では、ＧＯＴＯ文に記述されているラベル「ＢＢＢ−Ｓ」の、次に記述されているラベルは、「ＢＢＢ−Ｅ」である。従って、図４の終了行３２ｅは、次に記述されているラベル「ＢＢＢ−Ｅ」の１つ前の「２０」となる。
【００５７】
なお、ＧＯＴＯ文情報３２の開始行３２ｄは、ＧＯＴＯ文のジャンプ先の処理の開始行を示し、終了行３２ｅは、ＧＯＴＯ文のジャンプ先の処理の終了行を示しているといえる。
【００５８】
図４に示すＧＯＴＯ文情報３２は、第１の抽出部１２によって抽出され、記憶部１８に記憶される。例えば、第１の抽出部１２は、記憶部１８に記憶されたソースコード２１から、ＧＯＴＯ文を抽出し、抽出したＧＯＴＯ文に記述されているラベル（ＧＯＴＯラベル３２ｂ）と、抽出したＧＯＴＯ文が記述されている行番号２２（記述行３２ｃ）とを抽出する。また、第１の抽出部１２は、抽出したＧＯＴＯラベル３２ｂが記述されている行番号２２（開始行３２ｄ）と、抽出したＧＯＴＯラベル３２ｂの、次に記述されているラベルの１つ前の行番号２２（終了行３２ｅ）とを抽出する。そして、第１の抽出部１２は、抽出したＧＯＴＯラベル３２ｂ、記述行３２ｃ、開始行３２ｄ、および終了行３２ｅに番号３２ａを付与し、記憶部１８に記憶する。
【００５９】
なお、第１の抽出部１２は、図３のラベルリスト３１を参照することにより、ＧＯＴＯラベル３２ｂの開始行３２ｄおよび終了行３２ｅを取得することができる。例えば、第１の抽出部１２は、ＧＯＴＯラベル３２ｂが「ＢＢＢ−Ｓ」の開始行３２ｄおよび終了行３２ｅを、図３のラベルリスト３１のラベル３１ｂが「ＢＢＢ−Ｓ」の開始行３１ｄおよび終了行３１ｅを参照し、「１８」および「２０」を取得することができる。
【００６０】
図５は、記憶部１８に記憶されるＰＥＲＦＯＲＭ文情報の例を示した図である。記憶部１８には、図５に示すようなＰＥＲＦＯＲＭ文情報３３が記憶される。ＰＥＲＦＯＲＭ文情報３３は、番号３３ａと、ＰＥＲＦＯＲＭラベル３３ｂと、記述行３３ｃと、開始行３３ｄと、終了行３３ｅと、を有している。
【００６１】
番号３３ａは、以下で説明するＰＥＲＦＯＲＭラベル３３ｂを識別する情報である。
【００６２】
ＰＥＲＦＯＲＭラベル３３ｂは、ソースコード２１のＰＥＲＦＯＲＭ文に記述されているラベルである。例えば、図２のソースコード２１では、行番号２２が「４」の行に、ＰＥＲＦＯＲＭ文が記述されている。そして、このＰＥＲＦＯＲＭ文に記述されているラベルは、「ＡＡＡ」である。従って、図５のＰＥＲＦＯＲＭラベル３３ｂは、「ＡＡＡ」となる。
【００６３】
記述行３３ｃは、ＰＥＲＦＯＲＭ文が記述されている行番号２２である。例えば、図２のソースコード２１では、ＰＥＲＦＯＲＭ文は、行番号２２が「４」の行に記述されている。従って、図５の記述行３３ｃは、「４」となる。
【００６４】
開始行３３ｄは、ＰＥＲＦＯＲＭラベル３３ｂのラベルが記述されている行番号２２である。すなわち、開始行３３ｄは、ＰＥＲＦＯＲＭ文に記述されているラベルの、記述されている行番号２２である。例えば、図２のソースコード２１では、ＰＥＲＦＯＲＭ文に記述されているラベル「ＡＡＡ」の記述されている行番号２２は、「９」である。従って、図５の開始行３３ｄは、「９」となる。
【００６５】
終了行３３ｅは、ＰＥＲＦＯＲＭラベル３３ｂのラベルの、次に記述されているセクションラベルの１つ前の行番号２２である。すなわち、終了行３３ｅは、ＰＥＲＦＯＲＭ文に記述されているラベルの、次に記述されているセクションラベルの１つ前の行番号２２である。例えば、図２のソースコード２１では、ＰＥＲＦＯＲＭ文に記述されているラベル「ＡＡＡ」の、次に記述されているセクションラベルは、「ＢＢＢ」である。従って、図５の終了行３３ｅは、次に記述されているセクションラベル「ＢＢＢ」の１つ前の「１６」となる。
【００６６】
なお、ＰＥＲＦＯＲＭ文情報３３の開始行３３ｄは、ＰＥＲＦＯＲＭ文の呼び出し先の処理の開始行を示し、終了行３３ｅは、ＰＥＲＦＯＲＭ文の呼び出し先の処理の終了行を示しているといえる。
【００６７】
図５に示すＰＥＲＦＯＲＭ文情報３３は、第２の抽出部１３によって抽出され、記憶部１８に記憶される。例えば、第２の抽出部１３は、記憶部１８に記憶されたソースコード２１から、ＰＥＲＦＯＲＭ文を抽出し、抽出したＰＥＲＦＯＲＭ文に記述されているラベル（ＰＥＲＦＯＲＭラベル３３ｂ）と、抽出したＰＥＲＦＯＲＭ文が記述されている行番号２２（記述行３３ｃ）とを抽出する。また、第２の抽出部１３は、抽出したＰＥＲＦＯＲＭラベル３３ｂが記述されている行番号２２（開始行３３ｄ）と、抽出したＰＥＲＦＯＲＭラベル３３ｂの、次に記述されているセクションラベルの１つ前の行番号２２（終了行３３ｅ）とを抽出する。そして、第２の抽出部１３は、抽出したＰＥＲＦＯＲＭラベル３３ｂ、記述行３３ｃ、開始行３３ｄ、および終了行３３ｅに番号３３ａを付与し、記憶部１８に記憶する。
【００６８】
なお、第２の抽出部１３は、図３のラベルリスト３１を参照することにより、ＰＥＲＦＯＲＭラベル３３ｂの開始行３３ｄおよび終了行３３ｅを取得することができる。例えば、第２の抽出部１３は、ＰＥＲＦＯＲＭラベル３３ｂが「ＡＡＡ」の開始行３３ｄおよび終了行３３ｅを、図３のラベルリスト３１のラベル３１ｂが「ＡＡＡ」の開始行３１ｄおよび終了行３１ｅを参照し、「９」および「１６」を取得することができる。
【００６９】
図６は、再構築されたソースコードの例を示した図である。再構築部１５は、以下で詳述するが、判定部１４の判定結果に基づいて、記憶部１８に記憶された、マイグレーション前のソースコード２１を再構築する。図６には、再構築後のソースコード４１が示してある。ソースコード４１は、図２のソースコード２１に対し、点線枠４１ａ〜４１ｃに示すコードが追加されている。
【００７０】
点線枠４１ａに示すコードは、ＰＥＲＦＯＲＭ文の前行において、変数「Ｐ−ＦＬＧ」に「ＡＡＡ」を代入している。
【００７１】
点線枠４１ｂに示すコードは、ＰＥＲＦＯＲＭ文によって呼び出されるセクションに記述されているＧＯＴＯ文の前行において、変数「Ｇ−ＦＬＧ」に「ＡＡＡ」を代入している。
【００７２】
点線枠４１ｃに示すコードは、ＧＯＴＯ文に記述されているラベルの終了行の後行において、変数「Ｐ−ＦＬＧ」に「ＡＡＡ」が代入され、かつ、変数「Ｇ−ＦＬＧ」に「ＡＡＡ」が代入されている場合、ＧＯＴＯ文が記述されているセクションの、最後に記述されているラベルへジャンプするようになっている。例えば、図６のソースコード４１では、システムは、変数「Ｐ−ＦＬＧ」に「ＡＡＡ」が代入され、かつ、変数「Ｇ−ＦＬＧ」に「ＡＡＡ」が代入されている場合、「ＡＡＡ−Ｅ」ラベルにジャンプするようになっている。
【００７３】
すなわち、点線枠４１ａ〜４１ｃに示すコードは、「ＰＥＲＦＯＲＭ  ＡＡＡ」が実行され、「ＧＯ  ＴＯ  ＢＢＢ−Ｓ」が実行されて、ラベル「ＢＢＢ−Ｓ」の処理が実行された場合に、ＧＯＴＯ文のジャンプ元の「ＡＡＡ」セクションに戻るようになっている。言い換えれば、点線枠４１ａ〜４１ｃに示すコードは、「ＰＥＲＦＯＲＭ  ＡＡＡ」が実行されないで、ラベル「ＢＢＢ−Ｓ」の処理が実行された場合、または「ＧＯ  ＴＯ  ＢＢＢ−Ｓ」が実行されないで、ラベル「ＢＢＢ−Ｓ」の処理が実行された場合、「ＡＡＡ」セクションの処理に戻らないようになっている。
【００７４】
つまり、再構築部１５は、ある処理が、ＰＥＲＦＯＲＭ文が呼び出したセクションに記述されたＧＯＴＯ文によって、ＰＥＲＦＯＲＭ文が呼び出したセクションの外へジャンプして実行される場合、ＰＥＲＦＯＲＭ文が呼び出したセクションに戻るよう、記憶部１８に記憶されているソースコード２１を再構築する。
【００７５】
なお、点線枠４１ｃに示す「ＭＯＶＥ  ＳＰＡＣＥ  ＴＯ  Ｐ−ＦＬＧ」および「ＭＯＶＥ  ＳＰＡＣＥ  ＴＯ  Ｐ−ＦＬＧ」は、変数「Ｐ−ＦＬＧ」および「Ｇ−ＦＬＧ」を初期化している。
【００７６】
図７は、情報処理装置１の動作例を示したフローチャートである。図７のフローチャートは、例えば、ユーザから、ソースコード２１がマイグレーション後のシステムを適切に動作させるソースコードであるか判定するよう、要求があった場合に処理が実行される。
【００７７】
なお、記憶部１８には、入力部１６がユーザから受付けた、判定要求されたソースコード２１が記憶されているとする。また、記憶部１８に記憶されているソースコード２１には、入力部１６によって、行番号２２が付されているとする。
【００７８】
まず、ラベル抽出部１１は、記憶部１８に記憶されているソースコード２１のラベルリストを生成する（ステップＳ１）。例えば、ラベル抽出部１１は、記憶部１８に記憶されているソースコード２１から、ラベル３１ｂ、種別３１ｃ、開始行３１ｄ、および終了行３１ｅを抽出し、番号３１ａを付与して、図３に示すようなラベルリスト３１を生成する。そして、ラベル抽出部１１は、生成したラベルリスト３１を記憶部１８に記憶する。
【００７９】
次に、第１の抽出部１２は、記憶部１８に記憶されているソースコード２１から、ＧＯＴＯ文を抽出し、抽出したＧＯＴＯ文が記述されている行番号２２を抽出する（ステップＳ２）。例えば、図２のソースコード２１では、ＧＯＴＯ文は、行番号２２が「１２」の行に記述されている。従って、この場合、第１の抽出部１２は、「１２」を抽出する。
【００８０】
次に、第１の抽出部１２は、抽出したＧＯＴＯ文に記述されているラベルの開始行および終了行を抽出する（ステップＳ３）。例えば、図２のソースコード２１では、ＧＯＴＯ文に記述されているラベルは、「ＢＢＢ−Ｓ」である。第１の抽出部１２は、例えば、ラベル「ＢＢＢ−Ｓ」に基づいて、ステップＳ１にて生成したラベルリスト３１を参照し、ラベル「ＢＢＢ−Ｓ」の開始行および終了行を抽出（取得）する。なお、ラベル「ＢＢＢ−Ｓ」の開始行および終了行は、図３のラベルリスト３１の例の場合、「１８」および「２０」である。
【００８１】
第１の抽出部１２は、ステップＳ２にて抽出した記述行と、当該ステップＳ３にて抽出した開始行および終了行とに番号を付与し、ＧＯＴＯ文情報３２として、記憶部１８に記憶する（図４参照）。
【００８２】
次に、第２の抽出部１３は、記憶部１８に記憶されているソースコード２１から、ＰＥＲＦＯＲＭ文を抽出し、抽出したＰＥＲＦＯＲＭ文が記述されている行番号２２を抽出する（ステップＳ４）。例えば、図２のソースコード２１では、ＰＥＲＦＯＲＭ文は、行番号２２が「４」の行に記述されている。従って、この場合、第２の抽出部１３は、「４」を抽出する。
【００８３】
次に、第２の抽出部１３は、抽出したＰＥＲＦＯＲＭ文に記述されているラベルの開始行および終了行を抽出する（ステップＳ５）。例えば、図２のソースコード２１では、ＰＥＲＦＯＲＭ文に記述されているラベルは、「ＡＡＡ」である。第２の抽出部１３は、例えば、ラベル「ＡＡＡ」に基づいて、ステップＳ１にて生成したラベルリスト３１を参照し、ラベル「ＡＡＡ」の開始行および終了行を取得する。なお、ラベル「ＡＡＡ」の開始行および終了行は、図３のラベルリスト３１の例の場合、「９」および「１６」である。
【００８４】
第２の抽出部１３は、ステップＳ４にて抽出した記述行と、当該ステップＳ５にて抽出した開始行および終了行とに番号を付与し、ＰＥＲＦＯＲＭ文情報３３として、記憶部１８に記憶する（図５参照）。
【００８５】
次に、判定部１４は、ＧＯＴＯ文情報３２の記述行３２ｃが（ステップＳ２にて抽出された記述行が）、ＰＥＲＦＯＲＭ文情報３３の開始行３３ｄと終了行３３ｅとの間（ステップＳ５にて抽出された開始行３３ｄと終了行３３ｅとの間）に含まれるか否か判定する（ステップＳ６）。すなわち、判定部１４は、ＰＥＲＦＯＲＭ文によって呼び出されるセクションに、ＧＯＴＯ文が記述されているか否か判定する。
【００８６】
判定部１４は、ＧＯＴＯ文情報３２の記述行３２ｃが、ＰＥＲＦＯＲＭ文情報３３の開始行３３ｄと終了行３３ｅとの間に含まれていないと判定した場合（Ｓ６の「Ｎｏ」）、当該フローチャートの処理を終了する。判定部１４は、ＧＯＴＯ文情報３２の記述行３２ｃが、ＰＥＲＦＯＲＭ文情報３３の開始行３３ｄと終了行３３ｅとの間に含まれていると判定した場合（Ｓ６の「Ｙｅｓ」）、処理をステップＳ７へ移行する。
【００８７】
なお、図２のソースコード２１では、ＧＯＴＯ文の記述行３２ｃは、「１２」であり、ＰＥＲＦＯＲＭ文の開始行３３ｄおよび終了行３３ｅは、「９」および「１６」である。従って、図２のソースコード２１の例の場合、ＧＯＴＯ文情報３２の記述行３２ｃは、ＰＥＲＦＯＲＭ文情報３３の開始行３３ｄと終了行３３ｅとの間に含まれる（記述行「１２」は、開始行「９」と終了行「１６」との間に含まれる）ので、判定部１４は、処理をステップＳ７へ移行する。
【００８８】
ステップＳ６において、判定部１４は、ＧＯＴＯ文情報３２の記述行３２ｃが、ＰＥＲＦＯＲＭ文情報３３の開始行３３ｄと終了行３３ｅとの間に含まれていると判定した場合（Ｓ６の「Ｙｅｓ」）、ＧＯＴＯ文情報３２の開始行３２ｄおよび終了行３２ｅが（ステップＳ３にて抽出された開始行および終了行が）、ＰＥＲＦＯＲＭ文情報３３の開始行３３ｄと終了行３３ｅとの間（ステップＳ５にて抽出された開始行と終了行との間）に含まれているか否か判定する（ステップＳ７）。すなわち、判定部１４は、ＧＯＴＯ文によるジャンプ先の処理が、ＰＥＲＦＯＲＭ文によって呼び出されるセクション内にあるか否か判定する。
【００８９】
判定部１４は、ＧＯＴＯ文情報３２の開始行３２ｄおよび終了行３２ｅが、ＰＥＲＦＯＲＭ文情報３３の開始行３３ｄと終了行３３ｅとの間に含まれないと判定した場合（Ｓ７の「Ｎｏ」）、処理をステップＳ８へ移行する。すなわち、判定部１４は、ＧＯＴＯ文によるジャンプ先の処理が、ＰＥＲＦＯＲＭ文によって呼び出されるセクション内にないと判定した場合、処理をステップＳ８へ移行する。
【００９０】
判定部１４は、ＧＯＴＯ文情報３２の開始行３２ｄおよび終了行３２ｅが、ＰＥＲＦＯＲＭ文情報３３の開始行３３ｄと終了行３３ｅとの間に含まれると判定した場合（Ｓ７の「Ｙｅｓ」）、当該フローチャートの処理を終了する。すなわち、判定部１４は、ＧＯＴＯ文によるジャンプ先の処理が、ＰＥＲＦＯＲＭ文によって呼び出されるセクション内にあると判定した場合、ソースコード２１の再構築を行うことなく、当該フローチャートを終了する。
【００９１】
なお、図２のソースコード２１では、ＧＯＴＯ文の開始行３２ｄおよび終了行３２ｅは、「１８」および「２０」である。また、ＰＥＲＦＯＲＭ文の開始行３３ｄおよび終了行３３ｅは、「９」および「１６」である。従って、ソースコード２１の例の場合、ＧＯＴＯ文情報３２の開始行３２ｄおよび終了行３２ｅは、ＰＥＲＦＯＲＭ文情報３３の開始行３３ｄと終了行３３ｅとの間に含まれない（開始行「１８」および終了行「２０」は、開始行「９」と終了行「１６」との間に含まれない）ので、判定部１４は、処理をステップＳ８へ移行する。
【００９２】
ステップＳ７において、判定部１４が、ＧＯＴＯ文情報３２の開始行３２ｄおよび終了行３２ｅが、ＰＥＲＦＯＲＭ文情報３３の開始行３３ｄと終了行３３ｅとの間に含まれないと判定した場合（Ｓ７の「Ｎｏ」）、再構築部１５は、記憶部１８に記憶されているソースコード２１を再構築する（ステップＳ８）。再構築部１５は、再構築したソースコード４１を記憶部１８に記憶し、当該フローチャートの処理を終了する。
【００９３】
図８は、プログラム再構築処理の詳細な動作例を示したフローチャートである。図８のフローチャートは、図７のステップＳ８の詳細な処理を示したフローチャートである。
【００９４】
まず、再構築部１５は、ＰＥＲＦＯＲＭ文の呼び出し先セクションに、そのセクション外のセクションへジャンプするＧＯＴＯ文が記述されている場合、前記ＰＥＲＦＯＲＭ文の前行に、フラグを立てるコードを追加する（ステップＳ１１）。例えば、再構築部１５は、図６に示す点線枠４１ａに、フラグを立てるコードを追加する。なお、再構築部１５は、ＰＥＲＦＯＲＭ文情報３３の記述行３３ｃによって、ＰＥＲＦＯＲＭ文の行を検出することができ、検出した行の前行にフラグを立てるコードを追加することができる。
【００９５】
次に、再構築部１５は、図７のステップＳ７において、ＧＯＴＯ文情報３２の開始行３２ｄおよび終了行３２ｅが、ＰＥＲＦＯＲＭ文情報３３の開始行３３ｄと終了行３３ｅとの間に含まれないと判定されたＧＯＴＯ文の前行に、フラグを立てるコードを追加する（ステップＳ１２）。例えば、再構築部１５は、図６に示す点線枠４１ｂにフラグを立てるコードを追加する。なお、再構築部１５は、ＧＯＴＯ文情報３２の記述行３２ｃによって、ＧＯＴＯ文の行を検出することができ、検出した行の前行にフラグを立てるコードを追加することができる。
【００９６】
次に、再構築部１５は、図７のステップＳ７において、ＧＯＴＯ文情報３２の開始行３２ｄおよび終了行３２ｅが、ＰＥＲＦＯＲＭ文情報３３の開始行３３ｄと終了行３３ｅとの間に含まれないと判定されたＧＯＴＯ文に記述されているラベルの終了行の後行に、ステップＳ１１およびステップＳ１２によるフラグが立っている場合、ＰＥＲＦＯＲＭ文で呼び出されるセクションの、最後に記述されているラベルにジャンプするようにコードを追加する（ステップＳ１３）。例えば、再構築部１５は、図６に示す点線枠４１ｃに、点線枠４１ａ，４１ｂによるフラグが立っている場合、ＰＥＲＦＯＲＭ文で呼び出されるセクションの、最後に記述されているラベルにジャンプするようにコードを追加する。
【００９７】
なお、再構築部１５は、ＧＯＴＯ文情報３２の終了行３２ｅによって、ＧＯＴＯ文に記述されているラベルの終了行を検出することができ、検出した終了行の後行に上記のコードを追加することができる。
【００９８】
再構築部１５は、再構築したソースコード４１を記憶部１８に記憶し、当該フローチャートの処理を終了する。
【００９９】
このように、情報処理装置１の第１の抽出部１２は、記憶部１８に記憶されたＣＯＢＯＬ言語のソースコードから、ＧＯＴＯ文が記述されている記述行と、ＧＯＴＯ文に記述されているラベルの開始行および終了行とを抽出する。第２の抽出部１３は、記憶部１８に記憶されたＣＯＢＯＬ言語のソースコードから、ＰＥＲＦＯＲＭ文が記述されている記述行と、ＰＥＲＦＯＲＭ文に記述されているラベルの開始行および終了行とを抽出する。そして、判定部１４は、第１の抽出部１２によって抽出された記述行が、第２の抽出部１３によって抽出された開始行と終了行との間に含まれている場合、第１の抽出部１２によって抽出された開始行および終了行が、第２の抽出部１３によって抽出された開始行と終了行との間に含まれているか否か判定する。
【０１００】
これにより、情報処理装置１は、マイグレーション前のシステムを動作させていたプログラムのソースコードが、マイグレーション後のシステムを適切に動作させるソースコードであるか判定することができる。
【０１０１】
また、再構築部１５は、第２の抽出部１３によって抽出された記述行の前行に、第１のフラグを立てるコードを追加し、第１の抽出部１２によって抽出された記述行の前行に、第２のフラグを立てるコードを追加し、第１の抽出部１２によって抽出された終了行の後行に、第１のフラグおよび第２のフラグが立っている場合、ＰＥＲＦＯＲＭ文に記述されているラベルのセクションの最後に記述されているラベルにジャンプするようにコードを追加する。これにより、情報処理装置１は、プログラムを自動で再構築することができる。
【０１０２】
また、レガシーマイグレーションの方式には、ＢＰＲ（Business Process Re-engineering）方式、リビルド方式、リライト方式、リホスト方式等が存在する。その中でも、リホスト方式は、マイグレーション後も既存資産の大部分をそのまま使用することが可能であり、短期間、低コスト、低リスクでマイグレーションを実現できる。また、リホスト方式は、ホストシステムを早急に撤廃したい場合に最も有力な方式である。リホスト方式のマイグレーションにおいては、既存プログラムに修正を加えないことから、プログラムロジックの確認は行わず、ホストシステムとマイグレーション後のシステムで同一ＪＯＢを実行し、同値性検証を行う。情報処理装置１によれば、ソースコードがマイグレーション後のシステムにおいて適切に動作するか判定した後、同値性検証を行うことができ、エラーによって生じる検証工数を削減することが可能となる。
【０１０３】
なお、出力部１７は、判定部１４によって、第１の抽出部１２によって抽出された開始行および終了行が、第２の抽出部１３によって抽出された開始行と終了行との間に含まれていないと判定された場合、第１の抽出部１２によって抽出された情報および第２の抽出部１３によって抽出された情報の両方または一方を表示装置に出力してもよい。例えば、出力部１７は、図４に示したＧＯＴＯ文情報３２および図５に示したＰＥＲＦＯＲＭ文情報３３の両方または一方を表示装置に出力してもよい。これにより、ユーザは、例えば、マイグレーション後のシステムが適切に動作しなくなるソースコードの箇所を知ることができる。また、ユーザは、表示装置の表示に基づき、ソースコードを再構築することができる。
【０１０４】
［第２の実施の形態］
第２の実施の形態では、ＰＥＲＦＯＲＭＴＨＲＵ文によって呼び出されたセクションに、そのセクション外のセクションへジャンプするＧＯＴＯ文が記述されているか否か判定する。
【０１０５】
第２の実施の形態における情報処理装置１の機能ブロックの構成例は、図１の機能ブロックの例と同様である。ただし、第２の実施の形態では、第２の抽出部１３、判定部１４、および再構築部１５の機能が、図１と異なる。以下では、第１の実施の形態と異なる部分について説明する。
【０１０６】
図９は、第２の実施の形態に係る情報処理装置１によって構文解析されるソースコードの例を示した図である。図９に示すソースコード５１は、ＣＯＢＯＬ言語で記述されている。入力部１６は、ユーザからソースコード５１を受付け、受付けたソースコード５１を記憶部１８に記憶する。
【０１０７】
図９に示すように、ソースコード５１の各行には、行番号５２が付されている。行番号５２は、入力部１６によって付与される。入力部１６は、例えば、ユーザからソースコードを受付けた際、ソースコードに行番号５２を付与し、記憶部１８に記憶する。
【０１０８】
ソースコード５１の概略を説明する。ソースコード５１のプログラムを実行するシステムは、ソースコード５１の「ＭＡＩＮ」セクションに記述されているＰＥＲＦＯＲＭＴＨＲＵ文により、ラベル「ＡＡＡ」からラベル「ＢＢＢ」までのセクションを呼び出し、処理を実行する。
【０１０９】
「ＡＡＡ」セクションでは、変数「ＥＮＤ−ＦＬＧ」が「１」である場合、ＧＯＴＯ文により、処理が、「ＡＡＡ」セクションの「ＡＡＡ−Ｓ」ラベルへジャンプするようになっている。一方、変数「ＥＮＤ−ＦＬＧ」が「１」でなければ、ＧＯＴＯ文により、処理が、「ＡＡＡ」セクション外の、「ＣＣＣ」セクションの「ＣＣＣ−Ｓ」ラベルへジャンプするようになっている。従って、システムは、変数「ＥＮＤ−ＦＬＧ」が「１」でなければ、「ＣＣＣ−Ｓ」ラベルへジャンプして処理を逐次実行していき、そのまま次の「ＤＤＤ」セクションの処理を実行する。
【０１１０】
上記したように「ＭＡＩＮ」セクションでは、ＰＥＲＦＯＲＭＴＨＲＵ文により、「ＡＡＡ」セクションから「ＢＢＢ」セクションまでを呼び出している。従って、システムは、本来、「ＢＢＢ」セクションの処理を終了すると、再び「ＭＡＩＮ」セクション（呼出元）に戻るべきである。
【０１１１】
しかし、図９のソースコード５１では、上記したように「ＡＡＡ」セクションにおいて、「ＧＯ  ＴＯ  ＣＣＣ−Ｓ」のＧＯＴＯ文を実行した場合、「ＡＡＡ」セクションと「ＢＢＢ」セクションとの間に含まれない「ＣＣＣ」セクションに処理がジャンプする。そして、システムは、「ＣＣＣ」セクション以下のコードを逐次実行していく。そのため、システムは、「ＡＡＡ」セクションの処理を終えることがなく、「ＭＡＩＮ」セクションに戻らない。
【０１１２】
ソースコード５１のような構造であっても、マイグレーション前のシステムでは、適切に動作していることがある。しかし、マイグレーション後のシステムでは、同じソースコード５１であっても、システム（コンパイラ）の違いにより、適切に動作をしない場合がある。
【０１１３】
ソースコード５１は、構文エラーではないため、コンパイルエラーとして検出されない。そのため、マイグレーション前後でシステム動作が異なった場合、その原因がどこにあるのか、特定することは容易ではない。そこで、情報処理装置１は、マイグレーション前のシステムを動作させていたプログラムのソースコード５１が、マイグレーション後のシステムを適切に動作させるソースコードであるか判定する。
【０１１４】
なお、ソースコード５１の例では、ＰＥＲＦＯＲＭＴＨＲＵ文で呼び出したセクション内に記述されたＧＯＴＯ文のジャンプ先が、ＰＥＲＦＯＲＭＴＨＲＵ文で呼び出したセクション外のセクションへジャンプしている構造が問題である。具体的には、ソースコード５１では、「ＭＡＩＮ」セクションに記述されたＰＥＲＦＯＲＭＴＨＲＵ文により、「ＡＡＡ」セクションから「ＢＢＢ」セクションまでのセクションが呼び出される。「ＡＡＡ」セクションと「ＢＢＢ」セクションとの間に記述された「ＧＯ  ＴＯ  ＣＣＣ−Ｓ」のＧＯＴＯ文のジャンプ先は、「ＡＡＡ」セクションと「ＢＢＢ」セクションとの間に含まれない「ＣＣＣ」セクションであり、「ＡＡＡ」セクションの呼び出し元である「ＭＡＩＮ」セクションの処理へ戻らない構造が問題である。
【０１１５】
第２の実施の形態における、記憶部１８に記憶される各種情報例について説明する。
図１０は、記憶部１８に記憶されるラベルリストを示した図である。記憶部１８には、図１０に示すようなラベルリスト６１が記憶される。ラベルリスト６１は、番号６１ａと、ラベル６１ｂと、種別６１ｃと、開始行６１ｄと、終了行６１ｅと、を有している。ラベルリスト６１の各種情報は、図３で説明したラベルリスト３１の各種情報と同様であり、その詳細な説明を省略する。
【０１１６】
図１０に示すラベルリスト６１の各情報は、図３の説明と同様にして、ラベル抽出部１１によって抽出され、記憶部１８に記憶される。例えば、ラベル抽出部１１は、記憶部１８に記憶されたソースコード５１から、ラベル６１ｂ、種別６１ｃ、開始行６１ｄ、および終了行６１ｅを抽出し、番号６１ａを付与して、記憶部１８に記憶する。なお、図１０に示すラベルリスト６１は、ラベル抽出部１１が、図９に示したソースコード５１において、ラベル６１ｂ、種別６１ｃ、開始行６１ｄ、および終了行６１ｅを抽出し、番号６１ａを付与した例を示している。
【０１１７】
図１１は、記憶部１８に記憶されるＧＯＴＯ文情報の例を示した図である。記憶部１８には、図１１に示すようなＧＯＴＯ文情報６２が記憶される。ＧＯＴＯ文情報６２は、番号６２ａと、ＧＯＴＯラベル６２ｂと、記述行６２ｃと、開始行６２ｄと、終了行６２ｅと、を有している。ＧＯＴＯ文情報６２の各種情報は、図４で説明したＧＯＴＯ文情報３２の各種情報と同様であり、その詳細な説明を省略する。
【０１１８】
図１１に示すＧＯＴＯ文情報の各情報は、図４の説明と同様にして、第１の抽出部１２によって抽出され、記憶部１８に記憶される。例えば、第１の抽出部１２は、記憶部１８に記憶されたソースコード５１から、ＧＯＴＯラベル６２ｂ、記述行６２ｃ、開始行６２ｄ、および終了行６２ｅを抽出し、番号６２ａを付与して、記憶部１８に記憶する。なお、図１１に示すＧＯＴＯ文情報６２は、第１の抽出部１２が、図９に示したソースコード５１において、ＧＯＴＯラベル６２ｂ、記述行６２ｃ、開始行６２ｄ、および終了行６２ｅを抽出し、番号６２ａを付与した例を示している。
【０１１９】
図１２は、記憶部１８に記憶されるＰＥＲＦＯＲＭＴＨＲＵ文情報の例を示した図である。記憶部１８には、図１２に示すようなＰＥＲＦＯＲＭＴＨＲＵ文情報６３が記憶される。ＰＥＲＦＯＲＭＴＨＲＵ文情報６３は、番号６３ａと、ＰＥＲＦＯＲＭラベル６３ｂ，６３ｃと、記述行６３ｄと、開始行６３ｅと、終了行６３ｆと、を有している。ＰＥＲＦＯＲＭＴＨＲＵ文情報６３の番号６３ａおよび記述行６３ｄは、図５で説明したＰＥＲＦＯＲＭ文情報３３の番号３３ａおよび記述行３３ｃと同様であり、その詳細な説明を省略する。
【０１２０】
ＰＥＲＦＯＲＭラベル６３ｂ，６３ｃは、ＰＥＲＦＯＲＭＴＨＲＵ文に記述されているセクションラベルである。例えば、ＰＥＲＦＯＲＭＴＨＲＵ文は、「ＰＥＲＦＯＲＭＴＨＲＵ  セクションラベル１（第１のラベル）  ＴＨＲＵ  セクションラベル２（第２のラベル）」の形で示され、ＰＥＲＦＯＲＭラベル６３ｂは、「セクションラベル１」のラベルであり、ＰＥＲＦＯＲＭラベル６３ｂは、「セクションラベル２」のラベルである。
【０１２１】
具体的には、図９のソースコード５１では、行番号５２が「５」の行に、ＰＥＲＦＯＲＭＴＨＲＵ文が記述されている。このＰＥＲＦＯＲＭＴＨＲＵ文に記述されている「セクションラベル１」は、「ＡＡＡ」であり、「セクションラベル２」は、「ＢＢＢ」である。従って、図１２のＰＥＲＦＯＲＭラベル６３ｂは、「ＡＡＡ」となり、ＰＥＲＦＯＲＭラベル６３ｃは、「ＢＢＢ」となる。
【０１２２】
開始行６３ｅは、ＰＥＲＦＯＲＭラベル６３ｂのラベルが記述されている行番号５２である。すなわち、開始行６３ｅは、ＰＥＲＦＯＲＭＴＨＲＵ文に記述されている「セクションラベル１」の、記述されている行番号５２である。例えば、図９のソースコード５１では、ＰＥＲＦＯＲＭＴＨＲＵ文に記述されている、セクションラベル「ＡＡＡ」の記述されている行番号５２は、「１０」である。従って、図１２の開始行６３ｅは、「１０」となる。
【０１２３】
終了行６３ｆは、ＰＥＲＦＯＲＭラベル６３ｃのラベルの、次に記述されているセクションラベルの１つ前の行番号５２である。すなわち、終了行６３ｆは、ＰＥＲＦＯＲＭＴＨＲＵ文に記述されている「セクションラベル２」の、次に記述されているセクションラベルの１つ前の行番号５２である。例えば、図９のソースコード５１では、ＰＥＲＦＯＲＭＴＨＲＵ文に記述されているラベル「ＢＢＢ」の、次に記述されているセクションラベルは、「ＣＣＣ」である。従って、図５の終了行６３ｆは、次に記述されているセクションラベル「ＣＣＣ」の１つ前の「３０」となる。
【０１２４】
なお、ＰＥＲＦＯＲＭＴＨＲＵ文情報６３の開始行６３ｅは、ＰＥＲＦＯＲＭＴＨＲＵ文の呼び出し先の処理の開始行を示し、終了行６３ｆは、ＰＥＲＦＯＲＭＴＨＲＵ文の呼び出し先の処理の終了行を示しているといえる。
【０１２５】
図１２に示すＰＥＲＦＯＲＭＴＨＲＵ文情報６３は、第２の抽出部１３によって抽出され、記憶部１８に記憶される。例えば、第２の抽出部１３は、記憶部１８に記憶されたソースコード５１から、ＰＥＲＦＯＲＭラベル６３ｂ，６３ｃ、記述行６３ｄ、開始行６３ｅ、および終了行６３ｆを抽出し、番号６３ａを付与して、記憶部１８に記憶する。
【０１２６】
なお、第２の抽出部１３は、図１０のラベルリスト６１を参照することにより、ＰＥＲＦＯＲＭラベル６３ｂの開始行６３ｅと、ＰＥＲＦＯＲＭラベル６３ｃの終了行６３ｆとを取得することができる。例えば、第２の抽出部１３は、ＰＥＲＦＯＲＭラベル６３ｂが「ＡＡＡ」の開始行６３ｅを、図１０のラベルリスト６１のラベル６１ｂが「ＡＡＡ」の開始行６１ｄを参照し、「１０」を取得することができる。また、第２の抽出部１３は、ＰＥＲＦＯＲＭラベル６３ｃが「ＢＢＢ」の終了行６３ｆを、図１０のラベルリスト６１のラベル６１ｂが「ＢＢＢ」の終了行６１ｅを参照し、「３０」を取得することができる。
【０１２７】
図１３、図１４は、再構築されたソースコードの例を示した図である。再構築部１５は、以下で詳述するが、判定部１４の判定結果に基づいて、記憶部１８に記憶された、マイグレーション前のソースコード５１を再構築する。
【０１２８】
図１３、図１４には、再構築後のソースコード７１が示してある。図１４のソースコード７１は、図１３のソースコード７１に続いているソースコードであり、図１３に示すソースコード７１と図１４に示すソースコード７１は、一点鎖線枠７１ａにおいて、一部重なるように記載している。
【０１２９】
図１３、図１４に示すソースコード７１は、図９のソースコード５１に対し、点線枠７１ｂ〜７１ｄに示すコードが追加されている。
【０１３０】
点線枠７１ｂに示すコードは、ＰＥＲＦＯＲＭＴＨＲＵ文の前行において、変数「Ｐ−ＦＬＧ」に「ＡＡＡ」を代入している。また、変数「Ｔ−ＦＬＧ」に「ＢＢＢ」を代入している。
【０１３１】
点線枠７１ｃに示すコードは、ＰＥＲＦＯＲＭＴＨＲＵ文によって呼び出されるセクションに記述されているＧＯＴＯ文の前行において、変数「Ｇ−ＦＬＧ」に「ＡＡＡ」を代入している。例えば、点線枠７１ｃのコードでは、ＰＥＲＦＯＲＭＴＨＲＵ文によって呼び出されるセクションに記述されている２つのＧＯＴＯ文のうち、当該セクションの外のセクションにジャンプするＧＯＴＯ文の前行において、変数「Ｇ−ＦＬＧ」に「ＡＡＡ」を代入している。
【０１３２】
点線枠７１ｄに示すコードは、ＧＯＴＯ文に記述されているラベルの終了行の後行において、変数「Ｐ−ＦＬＧ」に「ＡＡＡ」が代入され、変数「Ｔ−ＦＬＧ」に「ＢＢＢ」が代入され、かつ、変数「Ｇ−ＦＬＧ」に「ＡＡＡ」が代入されている場合、呼び出し元のＰＥＲＦＯＲＭＴＨＲＵ文のセクションラベル２のセクションの、最後に記述されているラベルへジャンプするようになっている。例えば、図１３、図１４のソースコード７１では、システムは、変数「Ｐ−ＦＬＧ」に「ＡＡＡ」が代入され、変数「Ｔ−ＦＬＧ」に「ＢＢＢ」が代入され、かつ、変数「Ｇ−ＦＬＧ」に「ＡＡＡ」が代入されている場合、「ＢＢＢ」セクションの最後のラベル「ＢＢＢ−Ｅ」にジャンプするようになっている。
【０１３３】
すなわち、点線枠７１ｂ〜７１ｄに示すコードは、「ＰＥＲＦＯＲＭ  ＡＡＡ  ＴＨＲＵ  ＢＢＢ」が実行され、「ＧＯ  ＴＯ  ＣＣＣ−Ｓ」が実行されて、ラベル「ＣＣＣ−Ｓ」の処理が実行された場合に、ＰＥＲＦＯＲＭＴＨＲＵ文で呼び出されるセクションの最後に記述されているラベルに戻るようになっている。言い換えれば、点線枠７１ｂ〜７１ｄに示すコードは、「ＰＥＲＦＯＲＭ  ＡＡＡ  ＴＨＲＵ  ＢＢＢ」が実行されないで、ラベル「ＣＣＣ−Ｓ」の処理が実行された場合、または「ＧＯ  ＴＯ  ＣＣＣ−Ｓ」が実行されないで、ラベル「ＣＣＣ−Ｓ」の処理が実行された場合、ＰＥＲＦＯＲＭＴＨＲＵ文で呼び出されるセクションの最後に記述されているラベルに戻らないようになっている。
【０１３４】
つまり、再構築部１５は、ある処理が、ＰＥＲＦＯＲＭＴＨＲＵ文が呼び出したセクションに記述されたＧＯＴＯ文によって、ＰＥＲＦＯＲＭＴＨＲＵ文が呼び出したセクションの外へジャンプして実行される場合、ＰＥＲＦＯＲＭＴＨＲＵ文が呼び出したセクションに戻るよう、記憶部１８に記憶されているソースコード５１を再構築する。
【０１３５】
なお、点線枠７１ｄに示す「ＭＯＶＥ  ＳＰＡＣＥ  ＴＯ  Ｐ−ＦＬＧ」、「ＭＯＶＥ  ＳＰＡＣＥ  ＴＯ  Ｔ−ＦＬＧ」、および「ＭＯＶＥ  ＳＰＡＣＥ  ＴＯ  Ｇ−ＦＬＧ」は、変数「Ｐ−ＦＬＧ」、「Ｔ−ＦＬＧ」、および「Ｇ−ＦＬＧ」を初期化している。
【０１３６】
図１５は、情報処理装置１の動作例を示したフローチャートである。図１５のフローチャートは、例えば、ユーザから、ソースコード５１がマイグレーション後のシステムを適切に動作させるソースコードであるか判定するよう、要求があった場合に処理が実行される。
【０１３７】
なお、記憶部１８には、入力部１６がユーザから受付けた、判定要求されたソースコード５１が記憶されているとする。また、記憶部１８に記憶されているソースコード５１には、入力部１６によって、行番号５２が付されているとする。
【０１３８】
まず、ラベル抽出部１１は、記憶部１８に記憶されているソースコード５１のラベルリストを生成する（ステップＳ２１）。例えば、ラベル抽出部１１は、記憶部１８に記憶されているソースコード５１から、ラベル６１ｂ、種別６１ｃ、開始行６１ｄ、および終了行６１ｅを抽出し、番号６１ａを付与して、図１０に示すようなラベルリスト６１を生成する。そして、ラベル抽出部１１は、生成したラベルリスト６１を記憶部１８に記憶する。
【０１３９】
次に、第１の抽出部１２は、記憶部１８に記憶されているソースコード５１から、ＧＯＴＯ文を抽出し、抽出したＧＯＴＯ文が記述されている行番号５２を抽出する（ステップＳ２２）。例えば、図９のソースコード５１では、ＧＯＴＯ文は、行番号５２が「１７」の行と、「１９」の行とに記述されている。従って、この場合、第１の抽出部１２は、「１７」と「１９」とを抽出する。
【０１４０】
次に、第１の抽出部１２は、抽出したＧＯＴＯ文に記述されているラベルの開始行および終了行を抽出する（ステップＳ２３）。例えば、図９のソースコード５１では、ＧＯＴＯ文に記述されているラベルは、「ＡＡＡ−Ｓ」と「ＣＣＣ−Ｓ」とである。第１の抽出部１２は、例えば、ラベル「ＡＡＡ−Ｓ」に基づいて、ステップＳ２１にて生成したラベルリスト６１を参照し、ラベル「ＡＡＡ−Ｓ」の開始行および終了行を取得する。なお、ラベル「ＡＡＡ−Ｓ」の開始行および終了行は、図１０のラベルリスト６１の例の場合、「９」および「１６」である。第１の抽出部１２は、ラベル「ＣＣＣ−Ｓ」についても同様にして、開始行および終了行を抽出する。
【０１４１】
第１の抽出部１２は、ステップＳ２２にて抽出した記述行と、当該ステップＳ３にて抽出した開始行および終了行とに番号を付与し、ＧＯＴＯ文情報６２として、記憶部１８に記憶する（図１１参照）。
【０１４２】
次に、第２の抽出部１３は、記憶部１８に記憶されているソースコード５１から、ＰＥＲＦＯＲＭＴＨＲＵ文を抽出し、抽出したＰＥＲＦＯＲＭＴＨＲＵ文が記述されている行番号５２を抽出する（ステップＳ２４）。例えば、図９のソースコード５１では、ＰＥＲＦＯＲＭＴＨＲＵ文は、行番号５２が「５」の行に記述されている。従って、この場合、第２の抽出部１３は、「５」を抽出する。
【０１４３】
次に、第２の抽出部１３は、ステップＳ２４にて抽出したＰＥＲＦＯＲＭＴＨＲＵ文に記述されている、セクションラベル１の開始行と、セクションラベル２の終了行と（ＰＥＲＦＯＲＭＴＨＲＵ文で呼び出されるセクションの開始行と終了行と）を抽出する（ステップＳ２５）。例えば、図９のソースコード５１では、ＰＥＲＦＯＲＭＴＨＲＵ文によって、セクションラベル「ＡＡＡ」からセクションラベル「ＢＢＢ」までの処理が呼び出される。第２の抽出部１３は、例えば、セクションラベル「ＡＡＡ」に基づいて、ステップＳ２１にて生成したラベルリスト６１を参照し、セクションラベル「ＡＡＡ」の開始行を抽出する。また、第２の抽出部１３は、例えば、セクションラベル「ＢＢＢ」に基づいて、ステップＳ２１にて生成したラベルリスト６１を参照し、セクションラベル「ＢＢＢ」の終了行を抽出する。
【０１４４】
第２の抽出部１３は、ステップＳ２４にて抽出した記述行と、当該ステップＳ２５にて抽出した開始行および終了行とに番号を付与し、ＰＥＲＦＯＲＭＴＨＲＵ文情報６３として、記憶部１８に記憶する（図１２参照）。
【０１４５】
次に、判定部１４は、ＧＯＴＯ文情報６２の記述行６２ｃが（ステップＳ２２にて抽出された記述行が）、ＰＥＲＦＯＲＭＴＨＲＵ文情報６３の開始行６３ｅと終了行６３ｆとの間（ステップＳ２５にて抽出された開始行６３ｅと終了行６３ｆとの間）に含まれるか否か判定する（ステップＳ２６）。すなわち、判定部１４は、ＰＥＲＦＯＲＭＴＨＲＵ文によって呼び出されるセクションに、ＧＯＴＯ文が記述されているか否か判定する。
【０１４６】
判定部１４は、ＧＯＴＯ文情報６２の記述行６２ｃが、ＰＥＲＦＯＲＭＴＨＲＵ文情報６３の開始行６３ｅと終了行６３ｆとの間に含まれていないと判定した場合（Ｓ２６の「Ｎｏ」）、当該フローチャートの処理を終了する。判定部１４は、ＧＯＴＯ文情報６２の記述行６２ｃが、ＰＥＲＦＯＲＭＴＨＲＵ文情報６３の開始行６３ｅと終了行６３ｆとの間に含まれていると判定した場合（Ｓ２６の「Ｙｅｓ」）、処理をステップＳ２７へ移行する。
【０１４７】
なお、図９のソースコード５１では、ＧＯＴＯ文の記述行６２ｃは２つあり、「１７」と「１９」とである。また、ＰＥＲＦＯＲＭＴＨＲＵ文の開始行６３ｅおよび終了行６３ｆは、「１０」および「３０」である。従って、図９のソースコード５１の例の場合、ＧＯＴＯ文情報６２の２つの記述行６２ｃのそれぞれは、ＰＥＲＦＯＲＭＴＨＲＵ文情報６３の開始行６３ｅと終了行６３ｆとの間に含まれる（記述行「１７」および「１９」のそれぞれは、開始行「１０」と終了行「３０」との間に含まれる）ので、判定部１４は、処理をステップＳ２７へ移行する。
【０１４８】
ステップＳ２６において、判定部１４は、ＧＯＴＯ文情報６２の記述行６２ｃが、ＰＥＲＦＯＲＭＴＨＲＵ文情報６３の開始行６３ｅと終了行６３ｆとの間に含まれていると判定した場合（Ｓ２６の「Ｙｅｓ」）、ＧＯＴＯ文情報６２の開始行６２ｄおよび終了行６２ｅが（ステップＳ２３にて抽出された開始行および終了行が）、ＰＥＲＦＯＲＭＴＨＲＵ文情報６３の開始行６３ｅと終了行６３ｆとの間（ステップＳ２５にて抽出された開始行と終了行との間）に含まれているか否か判定する（ステップＳ２７）。すなわち、判定部１４は、ＧＯＴＯ文によるジャンプ先の処理が、ＰＥＲＦＯＲＭＴＨＲＵ文によって呼び出されるセクション内にあるか否か判定する。
【０１４９】
判定部１４は、ＧＯＴＯ文情報６２の開始行６２ｄおよび終了行６２ｅが、ＰＥＲＦＯＲＭＴＨＲＵ文情報６３の開始行６３ｅと終了行６３ｆとの間に含まれないと判定した場合（Ｓ２７の「Ｎｏ」）、処理をステップＳ２８へ移行する。すなわち、判定部１４は、ＧＯＴＯ文によるジャンプ先の処理が、ＰＥＲＦＯＲＭＴＨＲＵ文によって呼び出されるセクション内にないと判定した場合、処理をステップＳ２８へ移行する。
【０１５０】
判定部１４は、ＧＯＴＯ文情報６２の開始行６２ｄおよび終了行６２ｅが、ＰＥＲＦＯＲＭＴＨＲＵ文情報６３の開始行６３ｅと終了行６３ｆとの間に含まれると判定した場合（Ｓ２７の「Ｙｅｓ」）、当該フローチャートの処理を終了する。すなわち、判定部１４は、ＧＯＴＯ文によるジャンプ先の処理が、ＰＥＲＦＯＲＭＴＨＲＵ文によって呼び出されるセクション内にあると判定した場合、ソースコード５１の再構築を行うことなく、当該フローチャートを終了する。
【０１５１】
なお、図９のソースコード５１では、行番号５２が「１７」のＧＯＴＯ文の開始行６２ｄおよび終了行６２ｅは、「１１」および「１３」である。また、ＰＥＲＦＯＲＭＴＨＲＵ文の開始行６３ｅおよび終了行６３ｆは、「１０」および「３０」である。従って、ソースコード５１の例の場合、行番号５２が「１７」のＧＯＴＯ文の開始行６２ｄおよび終了行６２ｅは、ＰＥＲＦＯＲＭＴＨＲＵ文情報６３の開始行６３ｅと終了行６３ｆとの間に含まれる（開始行「１１」および終了行「１３」は、開始行「１０」と終了行「３０」との間に含まれる）ので、判定部１４は、当該フローチャートの処理を終了する
【０１５２】
一方、行番号５２が「１９」のＧＯＴＯ文の開始行６２ｄおよび終了行６２ｅは、「３２」および「３４」である。また、ＰＥＲＦＯＲＭＴＨＲＵ文の開始行６３ｅおよび終了行６３ｆは、「１０」および「３０」である。従って、ソースコード５１の例の場合、行番号５２が「１９」のＧＯＴＯ文の開始行６２ｄおよび終了行６２ｅは、ＰＥＲＦＯＲＭＴＨＲＵ文情報６３の開始行６３ｅと終了行６３ｆとの間に含まれない（開始行「３２」および終了行「３４」は、開始行「１０」と終了行「３０」との間に含まれない）ので、判定部１４は、処理をステップＳ２８へ移行する。
【０１５３】
ステップＳ２７において、判定部１４が、ＧＯＴＯ文情報６２の開始行６２ｄおよび終了行６２ｅが、ＰＥＲＦＯＲＭＴＨＲＵ文情報６３の開始行６３ｅと終了行６３ｆとの間に含まれないと判定した場合（Ｓ２７の「Ｙｅｓ」）、再構築部１５は、記憶部１８に記憶されているソースコード５１を再構築する（ステップＳ２８）。再構築部１５は、再構築したソースコード７１を記憶部１８に記憶し、当該フローチャートの処理を終了する。
【０１５４】
図１６は、プログラム再構築処理の詳細な動作例を示したフローチャートである。図１６のフローチャートは、図１５のステップＳ２８の詳細な処理を示したフローチャートである。
【０１５５】
まず、再構築部１５は、ＰＥＲＦＯＲＭＴＨＲＵ文の呼び出し先セクションに、そのセクション外のセクションへジャンプするＧＯＴＯ文が記述されている場合、前記ＰＥＲＦＯＲＭＴＨＲＵ文の前行に、フラグを立てるコードを２つ追加する（ステップＳ３１）。例えば、再構築部１５は、図１３に示す点線枠７１ｂに、フラグを立てるコードを２つ追加する。なお、再構築部１５は、ＰＥＲＦＯＲＭＴＨＲＵ文情報６３の記述行６３ｄによって、ＰＥＲＦＯＲＭＴＨＲＵ文の行を検出することができ、検出した行の前行にフラグを立てるコードを追加することができる。また、再構築部１５は、第１の実施の形態で説明したＰＥＲＦＯＲＭ文と、ＰＥＲＦＯＲＭＴＨＲＵ文とを区別するために、フラグを立てるコードを２つ追加する。
【０１５６】
次に、再構築部１５は、図１５のステップＳ２７において、ＧＯＴＯ文情報６２の開始行６２ｄおよび終了行６２ｅが、ＰＥＲＦＯＲＭＴＨＲＵ文情報６３の開始行６３ｅと終了行６３ｆとの間に含まれないと判定されたＧＯＴＯ文の前行に、フラグを立てるコードを追加する（ステップＳ３２）。例えば、図９に示すソースコード５１には、２つのＧＯＴＯ文が記述されており、そのうち、「ＧＯ  ＴＯ  ＣＣＣ−Ｓ」のラベル「ＣＣＣ−Ｓ」の開始行６２ｄおよび終了行６２ｅが、ＰＥＲＦＯＲＭＴＨＲＵ文情報６３の開始行６３ｅと終了行６３ｆとの間に含まれないと、判定部１４によって判定される。従って、再構築部１５は、図１３に示す点線枠７１ｃに、フラグを立てるコードを追加する。なお、再構築部１５は、ＧＯＴＯ文情報６２の記述行６２ｃによって、ＧＯＴＯ文の行を検出することができ、検出した行の前行にフラグを立てるコードを追加することができる。
【０１５７】
次に、再構築部１５は、図１５のステップＳ２７において、ＧＯＴＯ文情報６２の開始行６２ｄおよび終了行６２ｅが、ＰＥＲＦＯＲＭＴＨＲＵ文情報６３の開始行６３ｅと終了行６３ｆとの間に含まれないと判定されたＧＯＴＯ文に記述されているラベルの終了行の後行に、ステップＳ３１およびステップＳ３２によるフラグが立っている場合、ＰＥＲＦＯＲＭＴＨＲＵ文で呼び出されるセクションの最後に記述されているラベルにジャンプするようにコードを追加する（ステップＳ３３）。例えば、再構築部１５は、図１４に示す点線枠７１ｄに、点線枠７１ｂ，７１ｃによるフラグが立っている場合、ＰＥＲＦＯＲＴＨＲＵＭ文で呼び出されるセクションの最後に記述されているラベル「ＢＢＢ−Ｅ」にジャンプするようにコードを追加する。
【０１５８】
なお、再構築部１５は、ＧＯＴＯ文情報６２の終了行６２ｅによって、ＧＯＴＯ文に記述されているラベルの終了行を検出することができ、検出した終了行の後行に上記のコードを追加することができる。
【０１５９】
再構築部１５は、再構築したソースコード７１を記憶部１８に記憶し、当該フローチャートの処理を終了する。
【０１６０】
このように、情報処理装置１の第１の抽出部１２は、ＧＯＴＯ文が記述されている記述行と、ＧＯＴＯ文に記述されているラベルの開始行および終了行とを抽出する。第２の抽出部１３は、ＰＥＲＦＯＲＭＴＨＲＵ文が記述されている記述行と、ＰＥＲＦＯＲＭＴＨＲＵ文に記述されているセクションラベル１の開始行およびセクションラベル２の終了行とを抽出する。そして、判定部１４は、第１の抽出部１２によって抽出されたＧＯＴＯ文の記述行が、第２の抽出部１３によって抽出された開始行と終了行との間に含まれている場合、第１の抽出部１２によって抽出された開始行および終了行が、第２の抽出部１３によって抽出された開始行と終了行との間に含まれているか否か判定する。
【０１６１】
これにより、情報処理装置１は、マイグレーション前のシステムを動作させていたプログラムのソースコードが、マイグレーション後のシステムを適切に動作させるソースコードであるか判定することができる。
【０１６２】
また、情報処理装置１によれば、ソースコードがマイグレーション後のシステムにおいて適切に動作するか判定した後、同値性検証を行うことができ、エラーによって生じる検証工数を削減することが可能となる。
【０１６３】
また、再構築部１５は、第２の抽出部１３によって抽出された、ＰＥＲＦＯＲＭＴＨＲＵの記述行の前行に、第１のフラグおよび第２のフラグを立てるコードを追加し、第１の抽出部１２によって抽出された記述行の前行に、第３のフラグを立てるコードを追加する。また、再構築部１５は、第１の抽出部１２によって抽出された終了行の後行に、第１のフラグ、第２のフラグ、および第３のフラグが立っている場合、ＰＥＲＦＯＲＭＴＨＲＵ文に記述されているセクションラベル２のセクションの最後に記述されているラベルにジャンプするようにコードを追加する。これにより、情報処理装置１は、プログラムを自動で再構築することができる。
【０１６４】
なお、出力部１７は、第１の実施の形態と同様にして、図１１に示したＧＯＴＯ文情報６２および図１２に示したＰＥＲＦＯＲＭＴＨＲＵ文情報６３の両方または一方を表示装置に出力してもよい。これにより、ユーザは、例えば、マイグレーション後のシステムが適切に動作しなくなるソースコードの箇所を知ることができる。また、ユーザは、表示装置の表示に基づき、ソースコードを再構築することができる。
【０１６５】
［第３の実施の形態］
第３の実施の形態では、セクションに当該セクションを呼び出すＰＥＲＦＯＲＭ文が記述されているか否か判定する。
【０１６６】
第３の実施の形態における情報処理装置１の機能ブロックの構成例は、図１の機能ブロックの例と同様である。ただし、第３の実施の形態では、第２の抽出部１３、判定部１４、および再構築部１５の機能が、図１と異なる。以下では、第１の実施の形態と異なる部分について説明する。
【０１６７】
図１７は、第３の実施の形態に係る情報処理装置１によって構文解析されるソースコードの例を示した図である。図１７に示すソースコード８１は、ＣＯＢＯＬ言語で記述されている。入力部１６は、ユーザからソースコード８１を受付け、受付けたソースコード８１を記憶部１８に記憶する。
【０１６８】
図１７に示すように、ソースコード８１の各行には、行番号８２が付されている。行番号８２は、入力部１６によって付与される。入力部１６は、例えば、ユーザからソースコードを受付けた際、ソースコードに行番号８２を付与し、記憶部１８に記憶する。
【０１６９】
ソースコード８１の概略を説明する。ソースコード８１のプログラムを実行するシステムは、ソースコード８１の「ＡＡＡ」セクションに記述されている「ＰＥＲＦＯＲＭ  ＡＡＡ」により、セクションラベル「ＡＡＡ」セクションの処理を呼び出す。
【０１７０】
図１７に示すソースコード８１では、セクション「ＡＡＡ」を回帰的に呼び出す。そのため、スタックのオーバーフローを引き起こす可能性があり、マイグレーション前後でシステム動作が異なる場合がある。
【０１７１】
ソースコード８１は、構文エラーではないため、コンパイルエラーとして検出されない。そのため、マイグレーション前後でシステム動作が異なった場合、その原因がどこにあるのか、特定することは容易ではない。そこで、情報処理装置１は、マイグレーション前のシステムを動作させていたプログラムのソースコード８１が、マイグレーション後のシステムを適切に動作させるソースコードであるか判定する。
【０１７２】
第３の実施の形態における、記憶部１８に記憶される各種情報例について説明する。
図１８は、記憶部１８に記憶されるラベルリストを示した図である。記憶部１８には、図１８に示すようなラベルリスト９１が記憶される。ラベルリスト９１は、番号９１ａと、ラベル９１ｂと、種別９１ｃと、開始行９１ｄと、終了行９１ｅと、を有している。ラベルリスト９１の各種情報は、図３で説明したラベルリスト３１の各種情報と同様であり、その詳細な説明を省略する。
【０１７３】
図１８に示すラベルリスト９１の各情報は、図３の説明と同様にして、ラベル抽出部１１によって抽出され、記憶部１８に記憶される。例えば、ラベル抽出部１１は、記憶部１８に記憶されたソースコード８１から、ラベル９１ｂ、種別９１ｃ、開始行９１ｄ、および終了行９１ｅを抽出し、番号９１ａを付与して、記憶部１８に記憶する。なお、図１８に示すラベルリスト９１は、ラベル抽出部１１が、図１７に示したソースコード８１において、ラベル９１ｂ、種別９１ｃ、開始行９１ｄ、および終了行９１ｅを抽出し、番号９１ａを付与した例を示している。
【０１７４】
図１９は、記憶部１８に記憶されるＰＥＲＦＯＲＭ文情報の例を示した図である。記憶部１８には、図１９に示すようなＰＥＲＦＯＲＭ文情報９２が記憶される。ＰＥＲＦＯＲＭ文情報９２は、番号９２ａと、ＰＥＲＦＯＲＭラベル９２ｂと、記述行９２ｃと、開始行９２ｄと、終了行９２ｅと、を有している。ＰＥＲＦＯＲＭ文情報９２は、図５で説明したＰＥＲＦＯＲＭ文情報３３と同様であり、その詳細な説明を省略する。
【０１７５】
図１９に示すＰＥＲＦＯＲＭ文情報９２は、第２の抽出部１３によって抽出され、記憶部１８に記憶される。第２の抽出部１３の動作は、図５の説明と同様であり、その説明を省略する。
【０１７６】
図２０は、再構築されたソースコードの例を示した図である。再構築部１５は、以下で詳述するが、判定部１４の判定結果に基づいて、記憶部１８に記憶された、マイグレーション前のソースコード８１を再構築する。図２０には、再構築後のソースコード９３が示してある。ソースコード９３は、図１７のソースコード８１に対し、点線枠９３ａに示すコードが変更されている。
【０１７７】
点線枠９３ａに示すコードは、ＰＥＲＦＯＲＭ文がＧＯＴＯ文に書き換えられ、ＰＥＲＦＯＲＭ文で呼び出されるセクションの、最初の通常ラベル（セクションラベルを除く最初のラベル）へジャンプするようになっている。つまり、再構築部１５は、ＰＥＲＦＯＲＭ文によって回帰処理が行われる場合、そのＰＥＲＦＯＲＭ文ＧＯＴＯ文に書き換え、回帰処理が行われるようにする。これにより、スタックのオーバーフローを防止することができる。
【０１７８】
図２１は、情報処理装置１の動作例を示したフローチャートである。図２１のフローチャートは、例えば、ユーザから、ソースコード８１がマイグレーション後のシステムを適切に動作させるソースコードであるか判定するよう、要求があった場合に処理が実行される。
【０１７９】
なお、記憶部１８には、入力部１６がユーザから受付けた、判定要求されたソースコード８１が記憶されているとする。また、記憶部１８に記憶されているソースコード８１には、入力部１６によって、行番号８２が付されているとする。
【０１８０】
まず、ラベル抽出部１１は、記憶部１８に記憶されているソースコード８１のラベルリストを生成する（ステップＳ４１）。例えば、ラベル抽出部１１は、記憶部１８に記憶されているソースコード８１から、ラベル９１ｂ、種別９１ｃ、開始行９１ｄ、および終了行９１ｅを抽出し、番号９１ａを付与して、図１８に示すようなラベルリスト９１を生成する。そして、ラベル抽出部１１は、生成したラベルリスト９１を記憶部１８に記憶する。
【０１８１】
次に、第２の抽出部１３は、記憶部１８に記憶されているソースコード８１から、ＰＥＲＦＯＲＭ文を抽出し、抽出したＰＥＲＦＯＲＭ文が記述されている行番号８２を抽出する（ステップＳ４２）。例えば、図１７のソースコード８１では、ＰＥＲＦＯＲＭ文は、行番号８２が「１２」の行に記述されている。従って、この場合、第２の抽出部１３は、「１２」を抽出する。
【０１８２】
次に、第２の抽出部１３は、抽出したＰＥＲＦＯＲＭ文に記述されているラベルの開始行および終了行を抽出する（ステップＳ４３）。例えば、図１７のソースコード８１では、ＰＥＲＦＯＲＭ文に記述されているラベルは、「ＡＡＡ」である。第２の抽出部１３は、例えば、ラベル「ＡＡＡ」に基づいて、ステップＳ４１にて生成したラベルリスト９１を参照し、ラベル「ＡＡＡ」の開始行および終了行を取得する。なお、ラベル「ＡＡＡ」の開始行および終了行は、図１８のラベルリスト９１の例の場合、「７」および「１６」である。
【０１８３】
第２の抽出部１３は、ステップＳ４２にて抽出した記述行と、当該ステップＳ４３にて抽出した開始行および終了行とに番号を付与し、ＰＥＲＦＯＲＭ文情報９２として、記憶部１８に記憶する（図１９参照）。
【０１８４】
次に、判定部１４は、ＰＥＲＦＯＲＭ文情報９２の記述行９２ｃが（ステップＳ４２にて抽出された記述行が）、ＰＥＲＦＯＲＭ文情報９２の開始行９２ｄと終了行９２ｅとの間（ステップＳ４３にて抽出された開始行９２ｄと終了行９２ｅとの間）に含まれるか否か判定する（ステップＳ４４）。すなわち、判定部１４は、ＰＥＲＦＯＲＭ文によって呼び出されるセクションが、当該ＰＥＲＦＯＲＭ文が記述されているセクションであるか否か判定する。
【０１８５】
判定部１４は、ＰＥＲＦＯＲＭ文情報９２の記述行９２ｃが、ＰＥＲＦＯＲＭ文情報９２の開始行９２ｄと終了行９２ｅとの間に含まれていないと判定した場合（Ｓ４４の「Ｎｏ」）、当該フローチャートの処理を終了する。判定部１４は、ＰＥＲＦＯＲＭ文情報９２の記述行９２ｃが、ＰＥＲＦＯＲＭ文情報９２の開始行９２ｄと終了行９２ｅとの間に含まれていると判定した場合（Ｓ４４の「Ｙｅｓ」）、処理をステップＳ４５へ移行する。
【０１８６】
なお、図１７のソースコード８１では、ＰＥＲＦＯＲＭ文の記述行９２ｃは、「１２」であり、ＰＥＲＦＯＲＭ文の開始行９２ｄおよび終了行９２ｅは、「７」および「１６」である。従って、図１７のソースコード８１の例の場合、ＰＥＲＦＯＲＭ文情報９２の記述行９２ｃは、ＰＥＲＦＯＲＭ文情報９２の開始行９２ｄと終了行９２ｅとの間に含まれる（記述行「１２」は、開始行「７」と終了行「１６」との間に含まれる）ので、判定部１４は、処理をステップＳ４５へ移行する。
【０１８７】
ステップＳ４４において、判定部１４が、ＰＥＲＦＯＲＭ文情報９２の記述行９２ｃが、ＰＥＲＦＯＲＭ文情報９２の開始行９２ｄと終了行９２ｅとの間に含まれると判定した場合（Ｓ４４の「Ｙｅｓ」）、再構築部１５は、記憶部１８に記憶されているソースコード８１を再構築する（ステップＳ４５）。再構築部１５は、再構築したソースコード９３を記憶部１８に記憶し、当該フローチャートの処理を終了する。
【０１８８】
図２２は、プログラム再構築処理の詳細な動作例を示したフローチャートである。図２２のフローチャートは、図２１のステップＳ４５の詳細な処理を示したフローチャートである。
【０１８９】
再構築部１５は、ＰＥＲＦＯＲＭ文の呼び出し先が、当該ＰＥＲＦＯＲＭ文が記述されているセクションである場合、ＰＥＲＦＯＲＭ文をＧＯＴＯ文に変更し、ＰＥＲＦＯＲＭ文に記述されているラベルのセクションの、最初に記述されている通常ラベルへジャンプするように、コードを変更する（ステップＳ５１）。そして、再構築部１５は、再構築したソースコード９３を記憶部１８に記憶し、当該フローチャートの処理を終了する。
【０１９０】
このように、情報処理装置１の第２の抽出部１３は、記憶部１８に記憶されたソースコード８１から、ＰＥＲＦＯＲＭ文が記述されている記述行と、ＰＥＲＦＯＲＭ文に記述されているラベルの開始行および終了行とを抽出する。そして、判定部１４は、第２の抽出部１３によって抽出された記述行が、第２の抽出部１３によって抽出された開始行と終了行との間に含まれているか否か判定する。
【０１９１】
これにより、情報処理装置１は、マイグレーション前のシステムを動作させていたプログラムのソースコードが、マイグレーション後のシステムを適切に動作させるソースコードであるか判定することができる。
【０１９２】
また、情報処理装置１によれば、ソースコードがマイグレーション後のシステムにおいて適切に動作するか判定した後、同値性検証を行うことができ、エラーによって生じる検証工数を削減することが可能となる。
【０１９３】
また、再構築部１５は、ＰＥＲＦＯＲＭ文をＧＯＴＯ文に変更し、ＰＥＲＦＯＲＭ文に記述されているラベルのセクションの、最初に記述されているラベルへジャンプするようにコードを変更する。これにより、情報処理装置１は、プログラムを自動で再構築することができる。
【０１９４】
なお、出力部１７は、第１の実施の形態と同様にして、図１９に示したＰＥＲＦＯＲＭ文情報９２を表示装置に出力してもよい。これにより、ユーザは、例えば、マイグレーション後のシステムが適切に動作しなくなるソースコードの箇所を知ることができる。また、ユーザは、表示装置の表示に基づき、ソースコードを再構築することができる。
【０１９５】
以下、各実施の形態で説明した情報処理装置１のハードウェア構成例について説明する。
図２３は、情報処理装置１のハードウェア構成例を示した図である。情報処理装置１は、例えば、図２３に示すような、ＣＰＵ（Central Processing Unit）等の演算装置１０１と、ＲＡＭ（Random Access Memory）などの主記憶装置１０２と、ＨＤＤ（Hard Disk Drive）等の補助記憶装置１０３と、有線又は無線により通信ネットワークと接続するための通信インターフェイス（Ｉ／Ｆ）１０４と、マウス、キーボード、タッチセンサーやタッチパネルなどの入力装置１０５と、液晶ディスプレイなどの表示装置１０６と、ＤＶＤ（Digital Versatile Disk）などの持ち運び可能な記憶媒体に対する情報の読み書きを行う読み書き装置１０７と、を備えるコンピューターで実現することができる。
【０１９６】
例えば、情報処理装置１の各部の機能は、補助記憶装置１０３などから主記憶装置１０２にロードされた所定のプログラムを演算装置１０１が実行することで実現される。記憶部１８は、例えば、演算装置１０１が主記憶装置１０２または補助記憶装置１０３を利用することで実現される。
【０１９７】
なお、上記の所定のプログラムは、例えば、読み書き装置１０７により読み取られた記憶媒体からインストールされてもよいし、通信Ｉ／Ｆ１０４を介してネットワークからインストールされてもよい。
【０１９８】
上述した情報処理装置１の機能構成は、情報処理装置１の構成を理解容易にするために、主な処理内容に応じて分類したものである。構成要素の分類の仕方や名称によって、本願発明が制限されることはない。情報処理装置１の構成は、処理内容に応じて、さらに多くの構成要素に分類することもできる。また、１つの構成要素がさらに多くの処理を実行するように分類することもできる。また、各構成要素の処理は、１つのハードウェアで実行されてもよいし、複数のハードウェアで実行されてもよい。
【０１９９】
また、上述したフロー図の各処理単位は、情報処理装置１の処理を理解容易にするために、主な処理内容に応じて分割したものである。処理単位の分割の仕方や名称によって、本願発明が制限されることはない。情報処理装置１の処理は、処理内容に応じて、さらに多くの処理単位に分割することもできる。また、１つの処理単位がさらに多くの処理を含むように分割することもできる。
【０２００】
以上、本発明について実施形態を用いて説明したが、本発明の技術的範囲は上記実施形態に記載の範囲には限定されない。上記実施形態に多様な変更または改良を加えることが可能であることが当業者には明らかである。また、そのような変更または改良を加えた形態も本発明の技術的範囲に含まれ得ることが、特許請求の範囲の記載から明らかである。
【０２０１】
また、上記の各実施の形態を組み合わせることもできる。例えば、第１の実施の形態、第２の実施の形態、および第３の実施の形態の全てまたは一部を組み合わせることができる。具体的には、情報処理装置１は、ＰＥＲＦＯＲＭ文におけるＧＯＴＯ文の記述判定を行い（第１の実施の形態）、ＰＥＲＦＯＲＭＴＨＲＵ文におけるＧＯＴＯ文の記述判定を行い（第２の実施の形態）、さらに、ＰＥＲＦＯＲＭ文におけるＰＥＲＦＯＲＭ文の記述判定（第３の実施の形態）を行ってもよい。そして、情報処理装置１は、それぞれの判定結果に基づき、ソースコードを再構築してもよい。
【０２０２】
また、本発明は、ソースコードを解析するソースコード解析方法、情報処理装置１において、ソースコードの解析を実現するプログラム、および当該プログラムを記憶した記憶媒体として提供することもできる。
【符号の説明】
【０２０３】
１：情報処理装置
１１：ラベル抽出部
１２：第１の抽出部
１３：第２の抽出部
１４：判定部
１５：再構築部
１６：入力部
１７：出力部
１８：記憶部
２１：ソースコード
２２：行番号
３１：ラベルリスト
３２：ＧＯＴＯ文情報
３３：ＰＥＲＦＯＲＭ文情報
４１：ソースコード
４１ａ〜４１ｃ：点線枠
５１：ソースコード
５２：行番号
６１：ラベルリスト
６２：ＧＯＴＯ文情報
６３：ＰＥＲＦＯＲＭＴＨＲＵ文情報
７１：ソースコード
８１：ソースコード
９１：ラベルリスト
９２：ＰＥＲＦＯＲＭ文情報
９３：ソースコード
【図１】
2016110437.tif 000003
【図２】
2016110437.tif 000004
【図３】
2016110437.tif 000005
【図４】
2016110437.tif 000006
【図５】
2016110437.tif 000007
【図６】
2016110437.tif 000008
【図７】
2016110437.tif 000009
【図８】
2016110437.tif 000010
【図９】
2016110437.tif 000011
【図１０】
2016110437.tif 000012
【図１１】
2016110437.tif 000013
【図１２】
2016110437.tif 000014
【図１３】
2016110437.tif 000015
【図１４】
2016110437.tif 000016
【図１５】
2016110437.tif 000017
【図１６】
2016110437.tif 000018
【図１７】
2016110437.tif 000019
【図１８】
2016110437.tif 000020
【図１９】
2016110437.tif 000021
【図２０】
2016110437.tif 000022
【図２１】
2016110437.tif 000023
【図２２】
2016110437.tif 000024
【図２３】
2016110437.tif 000025