(57)【要約】      （修正有）【課題】アセンブラのプログラムから他言語のプログラムを生成するマイグレーション装置、方法を提供する。【解決手段】マイグレーション対象のアセンブラプログラムである原ソースに対して、プログラムの可読性を向上させるための処理を行う箇所を特定するための条件である１以上の箇所特定条件を格納しており、原ソースを、他言語のプログラムであり、目的言語のプログラムである目的ソースに変換する変換部と、目的ソースを出力する出力部とを具備するマイグレーション装置である。変換部は、原ソースに対して、１以上の各箇所特定条件を適用し、合致する箇所特定条件に対応する箇所に対して、合致する箇所特定条件に対応する処理を行う。【効果】可読性の高い他言語のプログラムを生成できる。【選択図】図１
2017054277.tif 000002
【特許請求の範囲】
【請求項１】
アセンブラ言語で記述されたアセンブラプログラムであり、マイグレーション対象のプログラムである原ソースを格納し得る原ソース格納部と、
原ソースに対して、プログラムの可読性を向上させるための処理を行う箇所を特定するための条件である１以上の箇所特定条件を格納し得る箇所特定条件格納部と、
前記原ソース格納部に格納されている原ソースを、他言語のプログラムであり、目的言語のプログラムである目的ソースに変換する変換部と、
前記変換部が変換して、取得した目的ソースを出力する出力部とを具備するマイグレーション装置であって、
前記変換部は、
前記原ソース格納部に格納されている原ソースに対して、前記１以上の各箇所特定条件を適用し、合致する箇所特定条件に対応する箇所に対して、前記合致する箇所特定条件に対応する処理であり、プログラムの可読性を向上させる処理である可読性向上処理を行う可読性向上処理手段を具備するマイグレーション装置。
【請求項２】
前記箇所特定条件は、プログラムのパターンに関する情報であるソースパターン情報であり、
前記可読性向上処理手段は、
前記原ソース格納部に格納されている原ソースに対して、前記１以上の各ソースパターン情報を適用し、合致するソースパターン情報に対応する箇所に対して、前記合致するソースパターン情報に対応する処理であり、プログラムの可読性を向上させる処理である可読性向上処理を行う請求項１記載のマイグレーション装置。
【請求項３】
前記ソースパターン情報は、
ダミーセクションを示す情報を含み、
前記可読性向上処理手段は、
前記原ソース格納部に格納されている原ソースに対して、前記１以上の各ソースパターン情報を適用し、ダミーセクションを含む箇所を決定し、当該箇所に対応するプログラムを、構造体を定義するプログラムに変更する請求項２記載のマイグレーション装置。
【請求項４】
前記ソースパターン情報は、
オフセットを持つ戻りであることを示す情報を含み、
前記可読性向上処理手段は、
前記原ソース格納部に格納されている原ソースに対して、前記１以上の各ソースパターン情報を適用し、オフセットを持つ戻りを含む箇所を決定し、当該箇所に対応するプログラムを、当該プログラムに含まれるオフセットを条件に用いた分岐を示すプログラムに変更する請求項２記載のマイグレーション装置。
【請求項５】
前記ソースパターン情報は、
一命令の他言語のプログラムに変換可能なアセンブラの２以上の命令の箇所を特定するためのパターンの情報であり、
前記可読性向上処理手段は、
前記原ソース格納部に格納されている原ソースに対して、前記１以上の各ソースパターン情報を適用し、前記２以上の命令の箇所を決定し、当該箇所に対応するプログラムを、一命令の他言語のプログラムに変換する請求項２記載のマイグレーション装置。
【請求項６】
前記ソースパターン情報は、
退避コードまたは復帰コードを示す情報を含み、
前記可読性向上処理手段は、
前記原ソース格納部に格納されている原ソースに対して、前記１以上の各ソースパターン情報を適用し、退避コードまたは復帰コードの箇所を決定し、当該箇所に対応するプログラムを、前記原ソースまたは前記目的ソースから削除する請求項２記載のマイグレーション装置。
【請求項７】
前記ソースパターン情報は、
２以上のジャンプ命令が構成する２以上のループの一部が重なっていることを示す情報を含み、
前記可読性向上処理手段は、
前記原ソース格納部に格納されている原ソースに対して、前記１以上の各ソースパターン情報を適用し、２以上のループの一部が重なっている箇所を決定し、当該箇所に対応するプログラムを、予め決められた条件を満たす一のループを優先し、ジャンプ命令を有さないループを示すプログラムに変更する請求項２記載のマイグレーション装置。
【請求項８】
前記箇所特定条件は、原ソース内において予め決められた条件を満たす箇所の範囲を特定するための条件である範囲条件であり、
前記可読性向上処理手段は、
前記原ソース格納部に格納されている原ソースに対して、前記１以上の各範囲条件を適用し、合致する範囲条件に対応する箇所に対して、前記合致する範囲条件に対応する処理であり、プログラムの可読性を向上させる処理である可読性向上処理を行う請求項１記載のマイグレーション装置。
【請求項９】
前記範囲条件は、
実行され得ないプログラムの範囲を判定するための条件であり、
前記可読性向上処理手段は、
前記原ソースを静的解析し、前記合致する範囲条件に対応する箇所のプログラムを特定し、当該プログラムを削除する請求項８記載のマイグレーション装置。
【請求項１０】
前記範囲条件は、
変数を特定するための条件であり、
前記可読性向上処理手段は、
前記原ソースまたは目的ソースから変数を取得し、当該変数の生存区間を取得し、当該変数を、当該生存区間におけるローカル変数として定義する可読性向上処理を行う請求項８記載のマイグレーション装置。
【請求項１１】
前記原ソースは、
アセンブラプログラムとアセンブラ以外の言語のプログラムである他言語プログラムとを有するプログラムであり、
前記原ソースから、アセンブラプログラムを取得するアセンブラプログラム取得部をさらに具備し、
前記変換部は、
前記アセンブラプログラム取得部が取得したアセンブラプログラムを目的ソースに変換する請求項１から請求項１０いずれか一項に記載のマイグレーション装置。
【請求項１２】
記録媒体は、
アセンブラ言語で記述されたアセンブラプログラムであり、マイグレーション対象のプログラムである原ソースを格納し得る原ソース格納部と、
原ソースに対して、プログラムの可読性を向上させるための処理を行う箇所を特定するための条件である１以上の箇所特定条件を格納し得る箇所特定条件格納部とを具備し、
変換部、および出力部により実現され得るプログラムの製造方法であって、
前記変換部が、前記原ソース格納部に格納されている原ソースを、他言語のプログラムであり、目的言語のプログラムである目的ソースに変換する変換ステップと、
前記出力部が、前記変換ステップで変換されて、取得された目的ソースを出力する出力ステップとを具備する他言語プログラムの製造方法であって、
前記変換部は、
前記原ソース格納部に格納されている原ソースに対して、前記１以上の各箇所特定条件を適用し、合致する箇所特定条件に対応する箇所に対して、前記合致する箇所特定条件に対応する処理であり、プログラムの可読性を向上させる処理である可読性向上処理を行うステップを具備するプログラムの製造方法。
【請求項１３】
コンピュータアクセス可能な記録媒体は、
アセンブラ言語で記述されたアセンブラプログラムであり、マイグレーション対象のプログラムである原ソースを格納し得る原ソース格納部と、
原ソースに対して、プログラムの可読性を向上させるための処理を行う箇所を特定するための条件である１以上の箇所特定条件を格納し得る箇所特定条件格納部とを具備し、
コンピュータを、
前記原ソース格納部に格納されている原ソースを、他言語のプログラムであり、目的言語のプログラムである目的ソースに変換する変換部と、
前記変換部が変換して、取得した目的ソースを出力する出力部として機能させるためのプログラムであって、
前記変換部は、
前記原ソース格納部に格納されている原ソースに対して、前記１以上の各箇所特定条件を適用し、合致する箇所特定条件に対応する箇所に対して、前記合致する箇所特定条件に対応する処理であり、プログラムの可読性を向上させる処理である可読性向上処理を行う可読性向上処理手段を具備するものとして、コンピュータを機能させるプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、アセンブラのプログラムから他言語のプログラムを生成するマイグレーション装置等に関するものである。
【背景技術】
【０００２】
従来技術において、レガシーシステムのログを元に稼動ＪＣＬおよびファイルを抽出して、その抽出された稼動ＪＣＬおよびファイルを使用しているＣＯＢＯＬファイル定義から整理されたデータモデルを作成し、その作成されたデータモデルとＭＤＡツールを繋いだので、新しいオープン系システムを再構築することが可能であるレガシーシステム再構築システムがあった（例えば、特許文献１参照）。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特開２００７−３３４号公報（第１頁、第１図等）
【発明の概要】
【発明が解決しようとする課題】
【０００４】
しかしながら、従来技術においては、アセンブラのプログラムから他言語のプログラムの全部または一部を生成することはできなかった。
【０００５】
そして、アセンブラとＣ言語等の他言語とは、仕様、構造が大きく異なり、仮にアセンブラのプログラムをＣ言語等の他言語のプログラムに変換したとしても、そのプログラムを保守する保守者にとって、読みにくいプログラムとなり、そのプログラムの保守は困難になる。つまり、従来技術においては、アセンブラのプログラムをマイグレーションする場合に、保守性を考慮した、可読性の高い他言語のプログラムを生成できなかった。
【課題を解決するための手段】
【０００６】
本第一の発明のマイグレーション装置は、アセンブラ言語で記述されたアセンブラプログラムであり、マイグレーション対象のプログラムである原ソースを格納し得る原ソース格納部と、原ソースに対して、プログラムの可読性を向上させるための処理を行う箇所を特定するための条件である１以上の箇所特定条件を格納し得る箇所特定条件格納部と、原ソース格納部に格納されている原ソースを、他言語のプログラムであり、目的言語のプログラムである目的ソースに変換する変換部と、変換部が変換して、取得した目的ソースを出力する出力部とを具備するマイグレーション装置であって、変換部は、原ソース格納部に格納されている原ソースに対して、１以上の各箇所特定条件を適用し、合致する箇所特定条件に対応する箇所に対して、合致する箇所特定条件に対応する処理であり、プログラムの可読性を向上させる処理である可読性向上処理を行う可読性向上処理手段を具備するマイグレーション装置である。
【０００７】
かかる構成により、アセンブラのプログラムをマイグレーションする場合に、保守性を考慮した、可読性の高い他言語のプログラムを生成できる。
【０００８】
また、本第二の発明のマイグレーション装置は、第一の発明に対して、箇所特定条件は、プログラムのパターンに関する情報であるソースパターン情報であり、可読性向上処理手段は、原ソース格納部に格納されている原ソースに対して、１以上の各ソースパターン情報を適用し、合致するソースパターン情報に対応する箇所に対して、合致するソースパターン情報に対応する処理であり、プログラムの可読性を向上させる処理である可読性向上処理を行うマイグレーション装置である。
【０００９】
かかる構成により、予め決められたパターンに合致するアセンブラのプログラムを、保守性を考慮した、可読性の高い他言語のプログラムに変換できる。
【００１０】
また、本第三の発明のマイグレーション装置は、第二の発明に対して、ソースパターン情報は、ダミーセクションを示す情報を含み、可読性向上処理手段は、原ソース格納部に格納されている原ソースに対して、１以上の各ソースパターン情報を適用し、ダミーセクションを含む箇所を決定し、箇所に対応するプログラムを、構造体を定義するプログラムに変更するマイグレーション装置である。
【００１１】
かかる構成により、アセンブラのプログラムの中のダミーセクションのプログラムを、保守性を考慮した、可読性の高い他言語のプログラムに変換できる。
【００１２】
また、本第四の発明のマイグレーション装置は、第二の発明に対して、ソースパターン情報は、オフセットを持つ戻りであることを示す情報を含み、可読性向上処理手段は、原ソース格納部に格納されている原ソースに対して、１以上の各ソースパターン情報を適用し、オフセットを持つ戻りを含む箇所を決定し、箇所に対応するプログラムを、プログラムに含まれるオフセットを条件に用いた分岐を示すプログラムに変更するマイグレーション装置である。
【００１３】
かかる構成により、アセンブラのプログラムの中のオフセットを持つ戻り処理のプログラムを、保守性を考慮した、可読性の高い他言語のプログラムに変換できる。
【００１４】
また、本第五の発明のマイグレーション装置は、第二の発明に対して、ソースパターン情報は、一命令の他言語のプログラムに変換可能なアセンブラの２以上の命令の箇所を特定するためのパターンの情報であり、可読性向上処理手段は、原ソース格納部に格納されている原ソースに対して、１以上の各ソースパターン情報を適用し、２以上の命令の箇所を決定し、箇所に対応するプログラムを、一命令の他言語のプログラムに変換するマイグレーション装置である。
【００１５】
かかる構成により、予め決められたパターンに合致する、アセンブラのプログラムの中の２以上の命令からなるプログラムを、保守性を考慮した、可読性の高い他言語の一命令のプログラムに変換できる。
【００１６】
また、本第六の発明のマイグレーション装置は、第二の発明に対して、ソースパターン情報は、退避コードまたは復帰コードを示す情報を含み、可読性向上処理手段は、原ソース格納部に格納されている原ソースに対して、１以上の各ソースパターン情報を適用し、退避コードまたは復帰コードの箇所を決定し、箇所に対応するプログラムを、原ソースまたは目的ソースから削除するマイグレーション装置である。
【００１７】
かかる構成により、アセンブラのプログラムの中の退避コードまたは復帰コードを、保守性を考慮した、可読性の高い他言語のプログラムに変換できる。
【００１８】
また、本第七の発明のマイグレーション装置は、第二の発明に対して、ソースパターン情報は、２以上のジャンプ命令が構成する２以上のループの一部が重なっていることを示す情報を含み、可読性向上処理手段は、原ソース格納部に格納されている原ソースに対して、１以上の各ソースパターン情報を適用し、２以上のループの一部が重なっている箇所を決定し、箇所に対応するプログラムを、予め決められた条件を満たす一のループを優先し、ジャンプ命令を有さないループを示すプログラムに変更するマイグレーション装置である。
【００１９】
かかる構成により、アセンブラのプログラムの中の２以上のループの一部が重なっている箇所を、保守性を考慮した、可読性の高い他言語のプログラムに変換できる。
【００２０】
また、本第八の発明のマイグレーション装置は、第一の発明に対して、箇所特定条件は、原ソース内において予め決められた条件を満たす箇所の範囲を特定するための条件である範囲条件であり、可読性向上処理手段は、原ソース格納部に格納されている原ソースに対して、１以上の各範囲条件を適用し、合致する範囲条件に対応する箇所に対して、合致する範囲条件に対応する処理であり、プログラムの可読性を向上させる処理である可読性向上処理を行うマイグレーション装置である。
【００２１】
かかる構成により、アセンブラのプログラムの中の予め決められた条件を満たす箇所の範囲を特定し、保守性を考慮して、当該範囲に対応する可読性の高い他言語のプログラムに変換できる。
【００２２】
また、本第九の発明のマイグレーション装置は、第八の発明に対して、範囲条件は、実行され得ないプログラムの範囲を判定するための条件であり、可読性向上処理手段は、原ソースを静的解析し、合致する範囲条件に対応する箇所のプログラムを特定し、プログラムを削除するマイグレーション装置である。
【００２３】
かかる構成により、静的解析し、到達できない箇所のアセンブラプログラムを削除することにより、可読性の高い他言語のプログラムを得ることができる。
【００２４】
また、本第十の発明のマイグレーション装置は、第八の発明に対して、範囲条件は、変数を特定するための条件であり、可読性向上処理手段は、原ソースまたは目的ソースから変数を取得し、変数の生存区間を取得し、変数を、生存区間におけるローカル変数として定義する可読性向上処理を行うマイグレーション装置である。
【００２５】
かかる構成により、アセンブラプログラム内の変数の生存区間を特定し、当該変数を当該生存区間におけるローカル変数とすることにより、可読性の高い他言語のプログラムを得ることができる。
【００２６】
また、本第十一の発明のマイグレーション装置は、第一から第十いずれか１つの発明に対して、原ソースは、アセンブラプログラムとアセンブラ以外の言語のプログラムである他言語プログラムとを有するプログラムであり、原ソースから、アセンブラプログラムを取得するアセンブラプログラム取得部をさらに具備し、変換部は、アセンブラプログラム取得部が取得したアセンブラプログラムを目的ソースに変換するマイグレーション装置である。
【００２７】
かかる構成により、アセンブラ以外の言語のプログラムである他言語プログラムと連結して動作するアセンブラのプログラムをマイグレーションする場合に、保守性を考慮した、可読性の高い他言語のプログラムを生成できる。
【発明の効果】
【００２８】
本発明によるマイグレーション装置によれば、アセンブラのプログラムをマイグレーションする場合に、保守性を考慮した、可読性の高い他言語のプログラムを生成できる。
【図面の簡単な説明】
【００２９】
【図１】実施の形態１におけるマイグレーション装置１のブロック図
【図２】同マイグレーション装置１の動作について説明するフローチャート
【図３】同静的解析処理について説明するフローチャート
【図４】同原ソースを示す図
【図５】同箇所特定条件管理表を示す図
【図６】同生成されたＣ言語のプログラムを示す図
【図７】同アセンブラプログラムを示す図
【図８】同生成されたＣ言語のプログラムを示す図
【図９】同箇所特定条件管理表を示す図
【図１０】同アセンブラプログラムを示す図
【図１１】同生成されたＣ言語のプログラムを示す図
【図１２】同中間表現を含む変換例を示す図
【図１３】同中間表現を含む変換例を示す図
【図１４】同ループの処理を示す図
【図１５】同変換対象のアセンブラプログラムの例を示す図
【図１６】同Ｃ言語のプログラムの例を示す図
【図１７】同ループの処理を示す図
【図１８】同変換対象のアセンブラプログラムの例を示す図
【図１９】同Ｃ言語のプログラムの例を示す図
【図２０】同Ｃ言語のプログラムの例を示す図
【図２１】同Ｃ言語のプログラムの例を示す図
【図２２】同コンピュータシステムの概観図
【図２３】同コンピュータシステムのブロック図
【発明を実施するための形態】
【００３０】
以下、マイグレーション装置等の実施形態について図面を参照して説明する。なお、実施の形態において同じ符号を付した構成要素は同様の動作を行うので、再度の説明を省略する場合がある。
【００３１】
（実施の形態１）
【００３２】
本実施の形態において、アセンブラのプログラム集合の中から、予め決められたソースパターンに合致するソース列に対して、可読性向上のための処理を施し、蓄積するマイグレーション装置について説明する。予め決められたソースパターンとは、例えば、ダミーセクションの箇所を特定するパターン、オフセットを持つ戻りの箇所を特定するパターン、一命令の他言語のプログラムに変換可能なアセンブラの２以上の命令の箇所を特定するためのパターン、退避コードまたは復帰コードの箇所を特定するためのパターン、２以上のループの一部が重なっている箇所を特定するためのパターン等である。なお、他言語のプログラムとは、アセンブラ以外の言語のプログラムのことである。
【００３３】
また、本実施の形態において、アセンブラのプログラム集合の中の、予め決められた条件を満たす箇所の範囲を特定し、当該箇所に対応する処理を行うマイグレーション装置について説明する。なお、当該箇所に対応する処理とは、例えば、削除処理、ローカル変数の定義を生成する処理等である。
【００３４】
図１は、本実施の形態におけるマイグレーション装置１のブロック図である。
【００３５】
マイグレーション装置１は、格納部１１、処理部１２、および出力部１３を備える。
【００３６】
格納部１１は、原ソース格納部１１１、箇所特定条件格納部１１２、および変換情報格納部１１３を備える。
【００３７】
処理部１２は、アセンブラプログラム取得部１２１、および変換部１２２を備える。変換部１２２は、可読性向上処理手段１２２１を備える。
【００３８】
格納部１１は、各種の情報を格納し得る。各種の情報とは、後述する原ソース、箇所特定条件、変換情報などである。
【００３９】
原ソース格納部１１１は、原ソースを格納し得る。原ソースは、通常、アセンブラ言語で記述されたアセンブラプログラムであり、マイグレーション対象のプログラムである。また、原ソースとは、アセンブラプログラムとアセンブラ以外の言語のプログラムである他言語プログラムとを有するプログラムであっても良い。なお、他言語プログラムは、ここでは、例えば、高級言語のプログラムである。高級言語は、ＣＯＢＯＬ、Ｃ言語、Ｃ＋＋、ＪＡＶＡ（登録商標）等、問わない。また、他言語プログラムは、例えば、アセンブラプログラムを呼び出して利用しているプログラムである。また、アセンブラプログラムにおけるアセンブラの種類は問わない。アセンブラは、ここでは、アセンブリ言語と言っても良い。アセンブラは、例えば、ＩＢＭ  Ｓｙｓｔｅｍ／３７０で使用されているアセンブラである。
【００４０】
また、原ソース格納部１１１が格納している原ソースは、アセンブラ言語で記述されたアセンブラプログラムを変換した中間言語のプログラム（中間表現と言っても良い）でも良い。中間言語のプログラムは、例えば、アセンブラプログラムの一の命令が行う複数の処理を２以上の処理に分解し、得られた２以上の命令群である。なお、中間言語のプログラムの一の命令は、アセンブラプログラムの一の命令に対応づいているものがあっても良い。また、アセンブラプログラムを中間言語のプログラムに変換する処理は、後述する変換部１２２が行っても良いし、他の装置で行われても良い。
【００４１】
箇所特定条件格納部１１２は、１以上の箇所特定条件を格納し得る。箇所特定条件とは、原ソースに対して、プログラムの可読性を向上させるための処理を行う箇所を特定するための条件である。箇所特定条件は、例えば、アセンブラプログラムのパターンに関する情報であるソースパターン情報である。箇所特定条件は、例えば、原ソース内において、予め決められた条件を満たす箇所の範囲を特定するための条件である範囲条件である。箇所特定条件格納部１１２は、箇所特定条件に対応付けて、アセンブラプログラムを他言語に変換する情報を保持していても良い。アセンブラプログラムを他言語に変換する情報は、例えば、高級言語のプログラムのパターンに関する高級言語パターン情報である。また、アセンブラプログラムを他言語に変換する情報は、例えば、アセンブラプログラムを他言語に変換するプログラムにより構成されている。なお、ソースパターン情報とは、例えば、ダミーセクションを示す情報、オフセットを持つ戻りであることを示す情報、一命令の他言語のプログラムに変換可能なアセンブラの２以上の命令を有する原ソース部品を特定するためのパターンの情報、退避コードまたは復帰コードを示す情報、２以上のジャンプ命令が構成する２以上のループの一部が重なっていることを示す情報等であっても良い。
【００４２】
変換情報格納部１１３は、１以上の変換情報を格納し得る。変換情報とは、アセンブラのプログラムを高級言語等の他言語のプログラムに変換するための情報である。変換情報は、通常、可読性を向上するとは限らないプログラム変換のための情報である。変換情報は、例えば、アセンブラプログラムのパターンを示すアセンブラパターン情報と、他言語プログラムのパターンを示す他言語パターン情報とを有する。変換情報は、例えば、アセンブラプログラムのパターンを示すアセンブラパターン情報と、アセンブラプログラムを他言語に変換するプログラムである。
【００４３】
変換情報は、アセンブラのプログラムを他のアセンブラのプログラムに変換するための情報でも良い。かかる場合、他のアセンブラのプログラムは、通常、他言語のプログラムへの変換を容易にするプログラムである。
【００４４】
また、変換情報は、他言語のプログラムを他の他言語のプログラムに変換するための情報でも良い。かかる場合、他の他言語のプログラムは、通常、元の他言語のプログラムより可読性が向上したプログラムである。
【００４５】
また、変換情報は、中間言語のプログラムをアセンブラのプログラムに変換するための情報でも良い。
【００４６】
また、変換情報は、中間言語のプログラムを他の中間言語のプログラムに変換するための情報でも良い。かかる場合、他の中間言語のプログラムは、通常、他言語のプログラムへの変換を容易にするプログラムである。
【００４７】
変換情報は、例えば、「ＤＳＥＣＴ以外のＵＳＩＮＧ命令は削除することを示す情報」「ＤＳＥＣＴ以外のＤＲＯＰ命令は削除することを示す情報」「アセンブラ"Ｍ  ＄変数１，＄変数２"はＣ言語"＄変数１＝＄変数１＊＄変数２"に変換することを示す情報」「アセンブラ"Ａ  ＄変数１，＄変数２"はＣ言語"＄変数１＝＄変数１＋＄変数２"に変換することを示す情報」などである。なお、「＄変数１」等は、任意の変数を示す文字列である。
【００４８】
処理部１２は、各種の処理を行う。各種の処理とは、例えば、アセンブラプログラム取得部１２１、変換部１２２、可読性向上処理手段１２２１が行う処理である。
【００４９】
アセンブラプログラム取得部１２１は、原ソースから、アセンブラプログラムを取得する。原ソースがアセンブラプログラムと他言語プログラムとを有するプログラムである場合、アセンブラプログラム取得部１２１は、原ソースからアセンブラプログラムを抽出する。なお、例えば、アセンブラプログラム取得部１２１は、アセンブラプログラムの開始を示す文字列と終了を示す文字列とを用いて、開始を示す文字列と終了を示す文字列との間のプログラム（文字列）を、原ソースから取得する。また、例えば、アセンブラプログラム取得部１２１は、アセンブラプログラムであることを示す拡張子（例えば、「asm」）を有するファイルを原ソース格納部１１１から取得する。また、例えば、アセンブラプログラム取得部１２１は、アセンブラプログラムの命令または命令パターンに合致するプログラム（文字列）を、原ソースから取得する。なお、かかる場合、アセンブラプログラムのすべての命令または命令パターンは、格納部１１に格納されている、とする。
【００５０】
変換部１２２は、原ソース格納部１１１に格納されている原ソース（ここでは、アセンブラプログラム）を、他言語のプログラムであり、目的言語のプログラムである目的ソースに変換する。なお、目的言語のプログラムは、Ｃ言語などの他言語のプログラムである。
【００５１】
変換部１２２は、アセンブラプログラム取得部１２１が取得したアセンブラプログラムを目的ソースに変換しても良い。かかる場合、変換部１２２は、アセンブラプログラム以外のプログラム（例えば、Ｊａｖａ、ＣＯＢＯＬ等のプログラム）を、目的ソースに変換しても良い。アセンブラプログラム以外のプログラムとは、アセンブラプログラム取得部１２１が原ソース格納部１１１から取得しなかったプログラムであり、原ソース格納部１１１に格納されているプログラムである。なお、アセンブラプログラム以外のプログラムを、目的ソースに変換するプログラムは公知技術であるので、詳細な説明は省略する。
【００５２】
変換部１２２は、１以上の変換情報を用いて、アセンブラプログラムを目的ソースに変換しても良い。また、変換部１２２は、１以上の箇所特定条件を用いて、アセンブラプログラムを目的ソースに変換する。つまり、変換部１２２は、例えば、箇所特定条件に合致する変換対象のプログラムの箇所に対して、当該箇所特定条件に対応する変換情報を用いて、当該変換対象のプログラムの箇所を変換して、変換後のプログラムを取得する。
【００５３】
変換対象のプログラムは、通常、アセンブラプログラムであるが、中間言語のプログラム、目的ソースのプログラムでも良い。また、変換後のプログラムは、通常、目的ソースのプログラムであるが、アセンブラプログラム、中間言語のプログラムでも良い。
【００５４】
可読性向上処理手段１２２１は、プログラムの可読性を向上させる処理である可読性向上処理を行う。可読性向上処理は、例えば、アセンブラのダミーセクションの定義をＣ言語等の他言語の構造体の定義に書き換える処理である。また、可読性向上処理は、例えば、アセンブラのオフセットを持つ戻り処理を、適切な他言語のプログラムに書き換える処理である。また、可読性向上処理は、例えば、２以上の命令群のアセンブラプログラムを、１命令の他言語のプログラムに書き換える処理である。なお、１命令の他言語のプログラムとは、例えば、Ｃ言語において、「；」が一つで足りる命令である。また、可読性向上処理は、例えば、アセンブラプログラム中の退避コードまたは復帰コードを削除する処理である。また、可読性向上処理は、例えば、アセンブラプログラム中の複数のループ処理を、適切な他言語のプログラムに書き換える処理である。また、可読性向上処理は、例えば、到達できないアセンブラプログラムの箇所を削除する処理である。また、可読性向上処理は、例えば、アセンブラプログラムの変数の生存区間を検査し、他言語のローカル変数とする処理である。
【００５５】
また、可読性向上処理は、例えば、２以上の命令群のアセンブラプログラムを、２以上の命令の目的ソースのプログラムに書き換える処理である。つまり、一の命令のアセンブラプログラムは２以上の命令群を有する中間言語のプログラムに変換され得る。また、２以上の命令群の中間言語のプログラムは、一または２以上の命令の目的ソースのプログラムに変換され得る。そして、かかる場合、２以上の命令群のアセンブラプログラムを、２以上の命令の目的ソースのプログラムに書き換えられ得る。さらに具体的には、２以上の命令群（ac1,ac2）のアセンブラプログラムが存在する場合、アセンブラプログラムの第一の命令（ac1）が中間言語のプログラム（mc1,mc2）に変換され、アセンブラプログラムの第二の命令（ac2）が中間言語のプログラム（mc3,mc4）に変換された、とする。そして、中間言語のプログラムの第一の命令（mc1）は、目的ソースのプログラムの命令（ts1）に変換され、中間言語のプログラムの第二、第三の命令（mc2,mc3）は、目的ソースのプログラムの命令（ts2）に変換され、中間言語のプログラムの第四の命令（mc4）は、目的ソースのプログラムの命令（ts3）に変換された、とする。かかる場合、２つの命令を有するアセンブラプログラム（ac1,ac2）が、３つの命令（ts1,ts2,ts3）を有する目的ソースのプログラムに変換される。
【００５６】
さらに具体的には、可読性向上処理は、原ソース格納部１１１に格納されている原ソースが有するアセンブラプログラムに対して、１以上の各箇所特定条件を適用し、合致する箇所特定条件に対応する箇所に対して、合致する箇所特定条件に対応する処理である。
【００５７】
第一の可読性向上処理は、箇所特定条件がプログラムのパターンに関する情報であるソースパターン情報である場合である。かかる場合、可読性向上処理手段１２２１は、原ソース格納部１１１に格納されている原ソースが有するアセンブラプログラムに対して、１以上の各ソースパターン情報を適用し、合致するソースパターン情報に対応する箇所に対して、合致するソースパターン情報に対応する処理であり、プログラムの可読性を向上させる処理である可読性向上処理を行う。合致するソースパターン情報に対応する処理は、通常、プログラムで実現される。
【００５８】
第二の可読性向上処理は、箇所特定条件は、原ソース内において予め決められた条件を満たす箇所の範囲を特定するための条件である範囲条件である場合である。かかる場合、可読性向上処理手段１２２１は、原ソース格納部１１１に格納されている原ソースが有するアセンブラプログラムに対して、１以上の各範囲条件を適用し、合致する範囲条件に対応する箇所に対して、合致する範囲条件に対応する処理であり、プログラムの可読性を向上させる処理である可読性向上処理を行う。なお、合致する範囲条件に対応する処理は、通常、プログラムで実現される。
【００５９】
また、範囲条件は、例えば、着目した一の変数が使用されている生存区間を特定する条件である。生存区間は、着目した一の変数が出現するプログラムの範囲である、と言える。また、範囲条件は、例えば、アセンブラプログラムを静的解析した結果、実行され得ないプログラムの範囲を特定する条件である。
【００６０】
（Ａ）以下、第一の可読性向上処理の具体例を説明する。第一の可読性向上処理の例は、以下の（Ａ−１）から（Ａ−５）の５つである。
【００６１】
（Ａ−１）ソースパターン情報が、ダミーセクションを示す情報を含む場合である。かかる場合、可読性向上処理手段１２２１は、原ソース格納部１１１に格納されている原ソースに対して、１以上の各ソースパターン情報を適用し、ダミーセクションを含む箇所を決定し、箇所に対応するプログラムを、構造体を定義する他言語のプログラムを取得する。
【００６２】
（Ａ−２）ソースパターン情報が、オフセットを持つ戻りであることを示す情報を含む場合である。かかる場合、可読性向上処理手段１２２１は、原ソース格納部１１１に格納されている原ソースに対して、１以上の各ソースパターン情報を適用し、オフセットを持つ戻りを含む箇所を決定し、箇所に対応するプログラムを、プログラムに含まれるオフセットを条件に用いた分岐を示す他言語のプログラムを取得する。
【００６３】
（Ａ−３）ソースパターン情報が、一命令の他言語のプログラムに変換可能なアセンブラの２以上の命令の箇所を特定するためのパターンの情報であり含む場合である。かかる場合、可読性向上処理手段１２２１は、原ソース格納部１１１に格納されている原ソースに対して、１以上の各ソースパターン情報を適用し、２以上の命令の箇所を決定し、箇所に対応するプログラムを、一命令の他言語のプログラムを取得する。
【００６４】
（Ａ−４）ソースパターン情報が、退避コードまたは復帰コードを示す情報を含む場合である。かかる場合、可読性向上処理手段１２２１は、原ソース格納部１１１に格納されている原ソースに対して、１以上の各ソースパターン情報を適用し、退避コードまたは復帰コードの箇所を決定し、箇所に対応するプログラムを、原ソースまたは目的ソースから削除する。可読性向上処理手段１２２１は、退避コードまたは復帰コードが対象とするレジスタまたは変数が、退避コードまたは復帰コードが出現する関数内で使用されていないか否かを判断し、使用されていない場合に、退避コードまたは復帰コードを削除することは好適である。
【００６５】
（Ａ−５）ソースパターン情報が、２以上のジャンプ命令が構成する２以上のループの一部が重なっていることを示す情報を含む場合である。かかる場合、可読性向上処理手段１２２１は、原ソース格納部１１１に格納されている原ソースに対して、１以上の各ソースパターン情報を適用し、２以上のループの一部が重なっている箇所を決定し、箇所に対応するプログラムを、予め決められた条件を満たす一のループを優先し、ジャンプ命令を有さないループを示す他言語のプログラムに変更する。
【００６６】
ここで、予め決められた条件とは、例えば、以下の（１）（２）の２つである。
（１）ボトムが起点から最も遠いループであること。
【００６７】
この条件の場合、ループが複数あれば、 可読性向上処理手段１２２１は、ボトムが起点から遠いループを優先し、当該優先されたループの箇所を、他言語のループのプログラムに書き換え、当該優先されたループの箇所からジャンプ命令を無くす。これは、複雑な構造がある場合に、なるべくループへの飛び込みを避けることにより、プログラムの可読性を良くする趣旨である。なお、この場合、ループからの飛び出しは容認する。
【００６８】
また、ここで、起点とは、複数のループを含むプログラム群の最初の命令（行と言っても良い）または基本ブロックである。また、ボトムとは、複数のループを含むプログラム群の最後の命令（行と言っても良い）または基本ブロックである。さらに、他言語のループのプログラムとは、例えば、Ｃ言語の場合、「while」や「for」を用いたプログラムである。
（２）ボトムが同じループが複数ある場合、ループのトップが起点から最も近いループであること。
【００６９】
この条件の場合、ボトムが同じループが複数あれば、可読性向上処理手段１２２１は、トップが起点から最も近いループを優先し、当該優先されたループの箇所を、他言語のループのプログラムに書き換え、当該優先されたループの箇所からジャンプ命令を無くす。
【００７０】
本条件に対応するマイグレーション処理を行うことにより、可読性が向上するだけではなく、外側のループから処理することになり、全体の計算量が少なくなる、という効果がある。
【００７１】
（Ｂ）以下、第二の可読性向上処理の具体例を説明する。第二の可読性向上処理の例は、以下の（Ｂ−１）から（Ｂ−２）の２つである。
【００７２】
（Ｂ−１）範囲条件が、実行され得ないプログラムの範囲を判定するための条件である場合である。かかる場合、可読性向上処理手段１２２１は、原ソースを静的解析し、合致する範囲条件に対応する箇所のプログラムを特定し、プログラムを削除する。
【００７３】
（Ｂ−２）範囲条件が、変数を特定するための条件である場合である。かかる場合、可読性向上処理手段１２２１は、原ソースまたは目的ソースから変数を取得し、変数の生存区間を取得し、変数を、生存区間におけるローカル変数として定義する可読性向上処理を行う。
【００７４】
なお、可読性向上処理手段１２２１は、例えば、原ソースまたは目的ソースに出現する一の変数に対して、出現する１以上の基本ブロックを特定する。そして、可読性向上処理手段１２２１は、特定した１以上の基本ブロックを一の関数として定義する。そして、可読性向上処理手段１２２１は、当該一の関数の命令の前に、当該一の変数を定義する。  例えば、変換する他言語がＣ言語の場合、可読性向上処理手段１２２１は、例えば、「function_name（）{  １以上の変数定義;  １以上の基本ブロックを変換した他言語の命令列;}」を取得する。なお、「function_name」は関数名であり、可読性向上処理手段１２２１が、予め決められた規則に基づいて生成した関数名であることは好適である。また、「１以上の変数定義」は、例えば、「char 変数名;」「int 変数名;」などであり、可読性向上処理手段１２２１は、Ｃ言語の文法に従って、変数の型、変数名を取得し、記載する。なお、変数名は、予め決められたルールに基づいて、決定されることは好適である。
【００７５】
出力部１３は、変換部１２２が変換して、取得した目的ソースを出力する。また、出力部１３は、変換できないアセンブラプログラムが存在する場合、変換できないアセンブラプログラムが存在する旨のエラーを出力しても良い。ここで、出力とは、通常、記録媒体への蓄積であるが、ディスプレイへの表示、プロジェクターを用いた投影、プリンタでの印字、音出力、外部の装置への送信、他の処理装置や他のプログラムなどへの処理結果の引渡しなどを含む概念である。
【００７６】
格納部１１、原ソース格納部１１１、箇所特定条件格納部１１２、および変換情報格納部１１３は、不揮発性の記録媒体が好適であるが、揮発性の記録媒体でも実現可能である。
【００７７】
格納部１１等に情報が記憶される過程は問わない。例えば、記録媒体を介して情報が格納部１１等で記憶されるようになってもよく、通信回線等を介して送信された情報が格納部１１等で記憶されるようになってもよく、あるいは、入力デバイスを介して入力された情報が格納部１１等で記憶されるようになってもよい。
【００７８】
処理部１２、アセンブラプログラム取得部１２１、変換部１２２、可読性向上処理手段１２２１、および出力部１３は、通常、ＭＰＵやメモリ等から実現され得る。処理部１２等の処理手順は、通常、ソフトウェアで実現され、当該ソフトウェアはＲＯＭ等の記録媒体に記録されている。但し、ハードウェア（専用回路）で実現しても良い。
【００７９】
出力部１３は、例えば、出力デバイスのドライバーソフトまたは、出力デバイスのドライバーソフトと出力デバイス等で実現され得る、と考えても良い。
【００８０】
次に、マイグレーション装置１の動作について、図２のフローチャートを用いて説明する。
【００８１】
（ステップＳ２０１）アセンブラプログラム取得部１２１は、原ソース格納部１１１に格納されている原ソースから、アセンブラプログラムを取得する。
【００８２】
（ステップＳ２０２）変換部１２２は、ステップＳ２０１で取得されたアセンブラプログラムに対して、静的解析処理を行う。静的解析処理について、図３のフローチャートを用いて説明する。
【００８３】
（ステップＳ２０３）変換部１２２は、カウンタｉに１を代入する。
【００８４】
（ステップＳ２０４）変換部１２２は、ｉ番目の基本ブロックが存在するか否かを判断する。ｉ番目の基本ブロックが存在する場合はステップＳ２０５に行き、ｉ番目の基本ブロックが存在しない場合は処理を終了する。
【００８５】
（ステップＳ２０５）可読性向上処理手段１２２１は、カウンタｊに１を代入する。
【００８６】
（ステップＳ２０６）可読性向上処理手段１２２１は、ｊ番目の箇所特定条件が箇所特定条件格納部１１２に存在するか否かを判断する。ｊ番目の箇所特定条件が存在する場合はステップＳ２０７に行き、存在しない場合はステップＳ２１３に行く。
【００８７】
（ステップＳ２０７）可読性向上処理手段１２２１は、箇所特定条件格納部１１２からｊ番目の箇所特定条件を取得する。
【００８８】
（ステップＳ２０８）可読性向上処理手段１２２１は、ｉ番目の基本ブロックがｊ番目の箇所特定条件に合致するか否かを判断する。合致する場合はステップＳ２０９に行き、合致しない場合はステップＳ２１２に行く。なお、ｉ番目の基本ブロックの一部のアセンブラプログラムがｊ番目の箇所特定条件に合致する場合も、ｉ番目の基本ブロックがｊ番目の箇所特定条件に合致するとする。また、ｉ番目の基本ブロックのアセンブラプログラムが変換された中間表現（中間コードと言っても良い）の全部または一部が、ｊ番目の箇所特定条件に合致する場合も、ｉ番目の基本ブロックがｊ番目の箇所特定条件に合致するとする。
【００８９】
（ステップＳ２０９）可読性向上処理手段１２２１は、ｊ番目の箇所特定条件に合致する箇所を対象として、ｊ番目の箇所特定条件に対応する処理を行い、当該合致する箇所に対応する他言語のプログラムを取得する。
【００９０】
（ステップＳ２１０）可読性向上処理手段１２２１は、ｉ番目の基本ブロックのすべてが、他言語のプログラムに変換されたか否かを判断する。ｉ番目の基本ブロックのすべてが変換された場合はステップＳ２１１に行き、ｉ番目の基本ブロックにおいて未変換の箇所を含む場合はステップＳ２１２に行く。
【００９１】
（ステップＳ２１１）変換部１２２は、カウンタｉを１、インクリメントする。ステップＳ２０４に戻る。
【００９２】
（ステップＳ２１２）可読性向上処理手段１２２１は、カウンタｊを１、インクリメントする。ステップＳ２０６に戻る。
【００９３】
（ステップＳ２１３）変換部１２２は、カウンタｋに１を代入する。
【００９４】
（ステップＳ２１４）変換部１２２は、変換情報格納部１１３にｋ番目の変換情報が存在するか否を判断する。ｋ番目の変換情報が存在する場合はステップＳ２１５に行き、ｋ番目の変換情報が存在しない場合はステップＳ２１９に行く。
【００９５】
（ステップＳ２１５）変換部１２２は、ｉ番目の基本ブロックがｋ番目の変換情報に対応するか否かを判断する。ｉ番目の基本ブロックがｋ番目の変換情報に対応する場合はステップＳ２１６に行き、対応しない場合はステップＳ２１８に行く。なお、ｉ番目の基本ブロックがｋ番目の変換情報に対応することは、ｉ番目の基本ブロックの中に、変換情報が有するアセンブラパターン情報に合致するアセンブラプログラムを少なくとも一部に含むことである。
【００９６】
（ステップＳ２１６）変換部１２２は、ｋ番目の変換情報を用いて、ｋ番目の変換情報に対応するアセンブラプログラムを、他言語のプログラムに変換する。変換部１２２は、例えば、ｋ番目の変換情報に対応するアセンブラプログラムを、ｋ番目の変換情報が有する他言語パターン情報を用いて、他言語のプログラムを取得する。
【００９７】
（ステップＳ２１７）変換部１２２は、ｉ番目の基本ブロックに含まれるすべてのアセンブラプログラムの変換が完了したか否かを判断する。ｉ番目の基本ブロックの変換が完了した場合はステップＳ２１１に行き、変換が完了していない場合はステップＳ２１８に行く。
【００９８】
（ステップＳ２１８）変換部１２２は、カウンタｋを１、インクリメントする。ステップＳ２１４に戻る。
【００９９】
（ステップＳ２１９）出力部１３は、ｉ番目の基本ブロックの中に変換できないプログラムが存在する旨のエラーを出力する。
【０１００】
なお、図２のフローチャートにおいて、原ソースがアセンブラ言語以外の他言語のプログラムを含む場合、当該他言語のプログラムも、マイグレーションのために変換することは好適である。かかる変換処理は、例えば、特許第４３５４５１４号、特許第４６９８９４３号、特許第５１２４６６０号、特許第５２５３１１５号等に記載の公知技術等を用いて行うことができる。
【０１０１】
次に、ステップＳ２０２の静的解析処理の一例について、図３のフローチャートを用いて説明する。なお、静的解析処理は、ここでは、基本ブロックの範囲を確定する処理と、基本ブロック間のリンクを生成する処理と、実行され得ないプログラムの箇所を特定するための処理である。
【０１０２】
（ステップＳ３０１）変換部１２２は、カウンタｉに１、カウンタｊに１を代入する。
【０１０３】
（ステップＳ３０２）変換部１２２は、ステップＳ２０１で取得されたアセンブラプログラムの中の命令であり、次に実行され得るｉ番目の命令が存在するか否かを判断する。ｉ番目の命令が存在する場合はステップＳ３０３に行き、ｉ番目の命令が存在しない場合はステップＳ３１１に行く。
【０１０４】
（ステップＳ３０３）変換部１２２は、ｉ番目の命令は分岐命令であるか否かを判断する。分岐命令である場合はステップＳ３０７に行き、分岐命令でない場合はステップＳ３０４に行く。
【０１０５】
（ステップＳ３０４）変換部１２２は、ｉ番目の命令に対して、他の命令から分岐されてくる可能性があるか否か（ジャンプの先として指定されている命令が存在するか否か）を判断する。他の命令から分岐されてくる可能性がある場合はステップＳ３０７に行き、他の命令から分岐されてくる可能性がない場合はステップＳ３０５に行く。
【０１０６】
（ステップＳ３０５）変換部１２２は、ｉ番目をバッファに配置する。なお、バッファは、基本ブロックを作り出すためのワーク用の記憶領域である。
【０１０７】
（ステップＳ３０６）変換部１２２は、カウンタｉを１、インクリメントする。ステップＳ３０２に戻る。
【０１０８】
（ステップＳ３０７）変換部１２２は、バッファ内の１以上の命令群をｊ番目の基本ブロックとする処理を行う。かかる処理は、例えば、基本ブロックを構成する１以上の命令に対して、「ｊ」を付加したり、「ｊ」をリンク付けたり、基本ブロックを構成する１以上の命令を他と区別してバッファに格納したりすること等である。なお、バッファ内に命令を有しない場合は、何らの処理も行わず、ステップＳ３０５に戻る。
【０１０９】
（ステップＳ３０８）変換部１２２は、ｊ番目の基本ブロックからのリンク先が存在する場合、当該リンク先の基本ブロックの識別子を、ｊ番目の基本ブロックに付加する。かかる処理は、基本ブロック間の制御フローが判断され得る情報を構成する処理であれば、何でも良い。
【０１１０】
（ステップＳ３０９）変換部１２２は、バッファ内の命令群を削除する。
【０１１１】
（ステップＳ３１０）変換部１２２は、カウンタｊを１、インクリメントする。ステップＳ３０５に戻る。
【０１１２】
（ステップＳ３１１）変換部１２２は、未処理の命令（箇所）に未処理を示すフラグを付す。なお、未処理の命令は、実行され得ない命令である。また、未処理の命令は存在しない可能性もあり、かかる場合、本ステップは実行されない。上位処理にリターンする。なお、  なお、図３のフローチャートにおいて、可読性向上処理手段１２２１は、未処理を示すフラグを付した箇所のアセンブラプログラムを削除することは好適である。
【０１１３】
また、図３のフローチャートにおいて示した静的解析処理は一例であり、異なるアルゴリズムにより、基本ブロックの範囲を確定する処理と、基本ブロック間のリンクを生成する処理と、実行され得ないプログラムの箇所を特定するための処理を行っても良い。
【０１１４】
以下、本実施の形態におけるマイグレーション装置１の具体的な動作について説明する。今、マイグレーション対象のアセンブラプログラムは、ＩＢＭアセンブラである。また、目的言語のプログラムはＣ言語のプログラムである。
【０１１５】
かかる状況において、以下に、４つの具体例を用いて、マイグレーション装置１を説明する。
（具体例１）
【０１１６】
具体例１は、第一の可読性向上処理および第二の可読性向上処理の具体例である。具体例１は、ソースパターン情報が、ダミーセクションを示す情報を含む場合であり、かつ退避コードと復帰コードを示す情報を含む場合である。また、具体例１において、範囲条件が、実行され得ないプログラムの範囲を判定するための条件である場合も述べる。つまり、具体例１は、上記の（Ａ−１）、（Ａ−４）、（Ｂ−１）に該当する。
【０１１７】
今、原ソース格納部１１１は、図４に示す原ソースを格納している、とする。原ソースは、アセンブラ言語のプログラムの一部である。
【０１１８】
また、箇所特定条件格納部１１２は、図５に示す箇所特定条件管理表を格納している、とする。箇所特定条件管理表は、「ＩＤ」「箇所特定条件」「変換情報」を有する１以上のレコードを格納している。「ＩＤ」はレコードを識別する情報である。「箇所特定条件」は、可読性向上処理を行う変換対象の箇所を特定する情報である。「箇所特定条件」は「開始条件」「終了条件」を有しても良い。「開始条件」は「箇所特定条件」に合致する箇所の開始の箇所を特定する条件である。「終了条件」は「箇所特定条件」に合致する箇所の終了の箇所を特定する条件である。つまり、「開始条件」に合致する箇所と「終了条件」に合致する箇所との間の範囲が「箇所特定条件」により特定される範囲である。また、「箇所特定条件」は一つの条件のみでも良い。また、「変換情報」は、「アセンブラ」「他言語」を有し得る。「アセンブラ」「他言語」は、「箇所特定条件」により特定された範囲において、「アセンブラ」に合致する命令や定義に対して、「他言語」に対応する他言語を生成することを意味する。また、「変換情報」は、変化のための処理を記述する情報等でも良い。
【０１１９】
図５において、「ＩＤ＝１」の開始条件「＄１ 'DSECT'」の「＄１」はすべての文字列が合致する。つまり、例えば、アセンブラプログラム「PKTDSECT DSECT」は開始条件「＄１   'DSECT'」に合致する。また、「ＩＤ＝１」の終了条件「'CSECT' or 'DCECT' or 'COM' or 'DXD' or 'END' or プログラムの終末」は文字列「CSECT」または文字列「DSECT」または文字列「COM」または文字列「END」に合致する、またはプログラムの終端である場合に真となる。さらに、アセンブラ「＄２ 'DS' 'PL'[1-99]」の[1-99]は、1から99のいずれかの数字であり、「＄２ 'DS' 'PL'[1-99]」は、例えば、「PKT00 DS PL8」が合致する。そして、他言語「'char' ＄２'['[1-99]'];'」は、例えば、「char PKT00[8];」を生成することを示す。  また、図５の「ＩＤ＝２」の箇所特定条件「'STM' 数字','数字','＄１」は、例えば、「STM 13,12,REGSAVEA」が合致することを示す。つまり、「＄１」は任意の文字列に合致する。
【０１２０】
そして、図５の「ＩＤ＝２」の変換情報は、「'STM' ＄レジスタ番号１',' ＄レジスタ番号２','＄１」に合致する命令について、変数＄１がレジスタ退避用の番地を指しており、かつ＄レジスタ番号１で特定されるレジスタから＄レジスタ番号２で特定されるレジスタのうち、当該合致する命令より前に値が定義されていない（使用されていない）レジスタが存在する場合、当該使用されていないレジスタの退避を行う他言語の命令は生成されないことを示す。当該レジスタは使用されていないからである。なお、上記を言い換えれば、「ＩＤ＝２」の変換情報は、「'STM' ＄レジスタ番号１',' ＄レジスタ番号２','＄１」に合致する命令について、変数＄１がレジスタ退避用の番地を指しており、かつ＄レジスタ番号１で特定されるレジスタから＄レジスタ番号２で特定されるレジスタのうち、当該命令より前に値が定義されている（使用されている）レジスタのみに対して、退避を行う他言語の命令を生成することを示す。
【０１２１】
また、図５の「ＩＤ＝３」の変換情報は、「'LM' ＄レジスタ番号３',' ＄レジスタ番号４','＄１」内の変数＄１がレジスタ退避用の番地を指しており、かつ＄レジスタ番号３で特定されるレジスタから＄レジスタ番号４で特定されるレジスタのうち、当該命令より後に値が参照されていない（使用されていない）レジスタが存在する場合、当該使用されていないレジスタの復帰を行う他言語の命令は生成されないことを示す。当該レジスタは使用されていないからである。なお、上記を言い換えれば、「ＩＤ＝３」の変換情報は、「'LM' ＄レジスタ番号３',' ＄レジスタ番号４','＄１」内の変数＄１がレジスタ退避用の番地を指しており、かつ＄レジスタ番号３で特定されるレジスタから＄レジスタ番号４で特定されるレジスタのうち、当該命令より後に値が参照されている（使用されている）レジスタのみに対して、復帰を行う他言語の命令を生成することを示す。
【０１２２】
以上に基づいて、マイグレーション装置１は、処理を開始した、とする。すると、アセンブラプログラム取得部１２１は、原ソース格納部１１１に格納されている原ソースから、図４に示すアセンブラプログラムを取得する。
【０１２３】
次に、変換部１２２は、取得されたアセンブラプログラムに対して、静的解析処理を行う。そして、変換部１２２は、アセンブラプログラムを基本ブロックに分割する。そして、可読性向上処理手段１２２１は、未処理の命令（箇所）のアセンブラプログラムを削除する。
【０１２４】
次に、変換部１２２は、基本ブロック毎に、Ｃ言語に変換する。つまり、可読性向上処理手段１２２１は、図５の「ＩＤ＝１」の箇所特定条件を図４のアセンブラプログラムに適用し、当該箇所特定条件に合致するダミーセクションの領域を検知する。そして、「ＩＤ＝１」の変換情報の各「アセンブラ」に合致する命令や定義を、対応する「他言語」の情報を用いて、Ｃ言語に変換する。そして、可読性向上処理手段１２２１は、アセンブラのダミーセクションの定義を、Ｃ言語の構造体の定義に変換する。つまり、可読性向上処理手段１２２１は、図４の４０１の箇所のアセンブラプログラムを、図５の「ＩＤ＝１」のレコードの情報を用いて、図６の６０１のＣ言語のプログラムを生成する。
【０１２５】
次に、変換部１２２は、図５の「ＩＤ＝２」の箇所特定条件を図４のアセンブラプログラムに適用し、退避コードの領域を検知する。そして、「ＩＤ＝２」の変換情報に合致するように、退避コードの箇所を削除する。なお、ここで、変数「REGSAVEA」は、退避コードが出現する関数内では使用されていないとする。つまり、可読性向上処理手段１２２１は、図４の４０２の箇所のアセンブラプログラムを、図５の「ＩＤ＝２」のレコードの情報を用いて、図６の６０２のＣ言語のプログラム「BB1:  ;」を生成する。なお、「BB1:」はラベルである。また、変換部１２２は、「すべての基本ブロックの先頭にラベルを生成する」という予め決められたルールに従って、「BB1:」を生成する。なお、予め決められたルールは、例えば、変換部１２２が保持している。
【０１２６】
次に、変換部１２２は、図５の「ＩＤ＝３」の箇所特定条件を図４のアセンブラプログラムに適用し、復帰コードの領域を検知する。そして、「ＩＤ＝３」の変換情報に合致するように、復帰コードの箇所を削除する。なお、ここで、変数「REGSAVEA」は、復帰コードが出現する関数内では使用されていないとする。つまり、可読性向上処理手段１２２１は、図４の４０３の箇所のアセンブラプログラムを、図５の「ＩＤ＝３」のレコードの情報を用いて、図６の６０３のＣ言語のプログラム「BB2:  ;」を生成する。なお、「BB2:」はラベルである。また、変換部１２２は、予め決められたルールに従って、「BB2:」を生成する。なお、予め決められたルールは、例えば、変換部１２２が保持している。
【０１２７】
また、次に、ソースパターン情報が、退避コードを示す情報を含む場合の別の例を説明する。
【０１２８】
今、原ソース格納部１１１の原ソースが有するアセンブラプログラムの一命令は、「STM 5,8,SAVE」であったとする。この一命令は、レジスタ５からレジスタ８の内容を退避する命令である。
【０１２９】
そして、可読性向上処理手段１２２１は、この一命令が図５の「ＩＤ＝２」の箇所特定情報「'STM' ＄レジスタ番号１',' ＄レジスタ番号２','＄１」に合致する、と判断する。そして、可読性向上処理手段１２２１は、この一命令を、例えば、レジスタ５（ｒ５）レジスタ６（ｒ６）、レジスタ７（ｒ７）、レジスタ８（ｒ８）の内容を退避する中間表現に変換する。この中間表現は、例えば、以下である。
store（r5,SAVE）；
tmp1=SAVE+4;
store(r6,tmp1);
tmp2=SAVE+8;
store(r7,tmp2);
tmp3=SAVE+12;
store(r8,tmp3);
【０１３０】
この中間表現は、変数「SAVE」が示すアドレスを先頭として、４バイトずつずらしなから、ｒ５からｒ８の各レジスタの値を退避する命令群である。
【０１３１】
次に、可読性向上処理手段１２２１は、レジスタ５からレジスタ８のうち、例えば、レジスタ５のみが、当該命令「STM 5,8,SAVE」の前に使用されている、と判断した、とする。
【０１３２】
次に、可読性向上処理手段１２２１は、上記の中間表現のうち、レジスタ５（ｒ５）の値のみを退避する目的ソースを生成する。つまり、可読性向上処理手段１２２１は、上記の中間表現から、レジスタ６からレジスタ８の値の退避に対応する命令群「tmp1=SAVE+4;  store(r6,tmp1);  tmp2=SAVE+8;  store(r7,tmp2);  tmp3=SAVE+12;  store(r8,tmp3);」を削除する。そして、可読性向上処理手段１２２１は、中間表現「store（r5,SAVE）；」を得る。
【０１３３】
次に、可読性向上処理手段１２２１は、中間表現「store（r5,SAVE）；」を目的ソース「*(unit32_t *)SAVE = r5;」に変換する。そして、可読性向上処理手段１２２１は、最終的に、Ｃ言語のプログラムの命令「*(unit32_t *)SAVE = r5;」を得る。
（具体例２）
【０１３４】
具体例２も、第一の可読性向上処理の具体例である。具体例２は、ソースパターン情報が、オフセットを持つ戻りであることを示す情報を含む場合である。つまり、具体例２は、上記の（Ａ−２）に該当する。
【０１３５】
今、原ソース格納部１１１の原ソースが有するアセンブラプログラムは、図７に示すアセンブラプログラムである、とする。図７の７０１の命令は、サブルーチンPROC1の呼び出し命令である。７０１は、戻り番地（次の命令７０２）をレジスタ（１４で識別されるレジスタ）に保存し、７０５のPROC1にジャンプするという命令である。また、７０２は、自分の番地（＊）に８バイト足したところ（７０４の命令）にジャンプすることを示す。さらに、７０６は、サブルーチンからの戻り命令である。７０６は、レジスタ１４＋４（オフセット）の番地（命令７０３の箇所）にジャンプする命令である。
【０１３６】
また、格納部１１には、図８に示す変換情報管理表が格納されている。変換情報管理表は、「ＩＤ」「箇所特定条件」「適用条件」「変換情報」を有するレコードを１以上有する。「ＩＤ」は、レコードを識別する情報である。「適用条件」とは、「変換情報」が適用される条件であり、箇所特定条件に追加される条件である。「適用条件」は、箇所特定条件にさらに付加される条件である、と言える。また、「ＩＤ＝２」の適用条件「＄４のサブルーチンの最終部分が「ＩＤ＝１」の箇所特定条件の場合」とは、変数＄４で特定されるサブルーチンの最終部分が「Ｂ  ＄１（，＄２）」に合致する場合である。また、「ＩＤ＝２」の変換情報のうち、＄ラベルを含む文字列は、任意のラベルが該当し得る。＄ラベルに対して、可読性向上処理手段１２２１は、＄ラベルを含む異なる文字列に対して、ユニークなラベルを生成する。なお、２つの＄ラベルＸは同じラベルに置き換えられる。
【０１３７】
そして、可読性向上処理手段１２２１は、図７のアセンブラプログラムの中の命令７０１から命令７０４が、図８の「ＩＤ＝２」の箇所特定条件に合致する、と判断する。
【０１３８】
また、可読性向上処理手段１２２１は、図７のアセンブラプログラムの中の命令７０５以降のサブルーチンが、図８の「ＩＤ＝２」の適用条件に合致する、と判断する。
【０１３９】
そして、可読性向上処理手段１２２１は、図７のアセンブラプログラムの中の命令７０１から命令７０６に、図８の「ＩＤ＝２」の変換情報を適用し、図９の命令９０１から命令９０６を得る。
【０１４０】
また、可読性向上処理手段１２２１は、図７のアセンブラプログラムの中の命令７０６が、図８の「ＩＤ＝１」の箇所特定条件に合致する、と判断する。
【０１４１】
そして、可読性向上処理手段１２２１は、図７のアセンブラプログラムの中の命令７０６に、図８の「ＩＤ＝１」の変換情報を適用し、図９の命令９０７、命令９０８を得る。
【０１４２】
以上により、可読性向上処理手段１２２１は、原ソース（図７参照）に対して、１以上の各ソースパターン情報を適用し、オフセットを持つ戻りを含む箇所（図７の命令７０６「B 4(,14)」）を決定し、当該箇所に対応するプログラムを、当該プログラムに含まれるオフセットを条件に用いた分岐（図９の９０４）を示すプログラム（図９参照）に変更できた。
（具体例３）
【０１４３】
具体例３も、第一の可読性向上処理の具体例である。具体例３は、ソースパターン情報が、一命令の他言語のプログラムに変換可能なアセンブラの２以上の命令の箇所を特定するためのパターンの情報であり含む場合である。つまり、具体例３は、上記の（Ａ−３）に該当する。
【０１４４】
今、箇所特定条件格納部１１２は、図１０に示す箇所特定条件管理表を保持している。図１０の箇所特定条件管理表は「ＩＤ」「ソースパターン情報」「他言語パターン情報」を有するレコードを１以上格納している。「ＩＤ」はレコードを識別する情報である。「ソースパターン情報」はアセンブラの２以上の命令の箇所を特定するためのパターンの情報である。「他言語パターン情報」は、変換する他言語（ここではＣ言語）のパターンを示す情報である。
【０１４５】
図１０の「ＩＤ＝１」のソースパターン情報の「＄１」は任意の文字列であり、「＄変数」は任意の変数またはレジスタを示す情報である。また、「ＩＤ＝１」の他言語パターン情報のlength（＄１）は、文字列＄１の長さを示す。
【０１４６】
また、図１０の「ＩＤ＝２」のソースパターン情報の「＄２」は任意の文字であり、「＄変数」は任意の変数またはレジスタを示す情報である。
【０１４７】
また、図１０の「ＩＤ＝３」「ＩＤ＝４」のソースパターン情報の各「＄変数」は、変数の後の数字が異なれば、異なる変数である、とする。
【０１４８】
また、原ソース格納部１１１には、図１１に示すアセンブラプログラムが格納されている。とする。
【０１４９】
かかる場合、可読性向上処理手段１２２１は、図１１の１１０１の箇所が  図１０の「ＩＤ＝１」のソースパターン情報に合致すると判断し、「ＩＤ＝１」の他言語パターン情報に従って、１１０１を図１２の１２０１のＣ言語に変換する。
【０１５０】
また、可読性向上処理手段１２２１は、図１１の１１０２の箇所が  図１０の「ＩＤ＝２」のソースパターン情報に合致すると判断し、「ＩＤ＝２」の他言語パターン情報に従って、１１０２を図１２の１２０２のＣ言語に変換する。
【０１５１】
また、可読性向上処理手段１２２１は、図１１の１１０３の箇所が  図１０の「ＩＤ＝３」のソースパターン情報に合致すると判断し、「ＩＤ＝３」の他言語パターン情報に従って、１１０３を図１２の１２０３のＣ言語に変換する。
【０１５２】
また、可読性向上処理手段１２２１は、図１１の１１０４の箇所が  図１０の「ＩＤ＝４」のソースパターン情報に合致すると判断し、「ＩＤ＝４」の他言語パターン情報に従って、１１０２を図１２の１２０４のＣ言語に変換する。
【０１５３】
以上の処理の結果、可読性向上処理手段１２２１は、図１１のアセンブラプログラムから、図１２のＣ言語のプログラムを得る。
【０１５４】
なお、可読性向上処理手段１２２１は、アセンブラプログラムを中間表現に変換し、中間表現からＣ言語のプログラムを構成しても良い。例えば、可読性向上処理手段１２２１は、図１１の１１０１のアセンブラ（図１３の１３０１）を、図１３の１３０２の中間表現１に変換する。そして、１３０２をｔｒｅｅ構造にした図が、１３０３である。そして、可読性向上処理手段１２２１は、１３０３のｔｒｅｅ構造を、中間表現２の１３０４のｔｒｅｅ構造に変換する。なお、格納部１１には、ｔｒｅｅ構造間の変換のための情報が格納されている、とする。また、１３０４のｔｒｅｅ構造は、１３０５の中間表現２に対応する。そして、次に、可読性向上処理手段１２２１は、１３０５の中間表現２を１３０６のＣ言語のプログラムに変換する。なお、ｔｒｅｅ構造間の変換を行わずに、中間表現１３０２をＣ言語に変換した場合、１３０７のＣ言語のプログラムとなる。
【０１５５】
同様に、可読性向上処理手段１２２１は、図１１の１１０２のアセンブラ（１４０１）を、図１４の１４０２の中間表現１に変換する。そして、１４０２をｔｒｅｅ構造にした図が、１４０３である。そして、可読性向上処理手段１２２１は、１４０３のｔｒｅｅ構造を、中間表現２の１４０４のｔｒｅｅ構造に変換する。なお、１４０４のｔｒｅｅ構造は、１４０５の中間表現２に対応する。そして、次に、可読性向上処理手段１２２１は、１４０５の中間表現２を１４０６のＣ言語のプログラムに変換する。なお、１４０２をＣ言語に変換した場合、１４０７となる。
（具体例４）
【０１５６】
具体例４も、第一の可読性向上処理の具体例である。具体例４は、ソースパターン情報が、２以上のジャンプ命令が構成する２以上のループの一部が重なっていることを示す情報を含む場合である。つまり、具体例４は、上記の（Ａ−５）に該当する。
【０１５７】
また、２以上のジャンプ命令が構成する２以上のループの一部が重なっている箇所が、アセンブラプログラムに存在する場合、変換部１２２は、（１）「ボトムが起点から最も遠いループを優先する」、（２）「ボトムが同じループが複数ある場合、トップが起点から最も近いループを優先する」の方針により、一のループを優先し、当該一のループをジャンプ命令ではなく、他言語のループのプログラムに変更する。
【０１５８】
今、変換部１２２は、アセンブラプログラムを静的解析し、当該アセンブラプログラムが複数（ここでは、４つ）の基本ブロック間のリンク関係を有する、と判断した、とする。そして、変換部１２２は、図１５（ａ）に示す、ｂ１、ｂ２、ｂ３、ｂ４の４つの基本ブロック間のリンクを示す情報を得た、とする。なお、基本ブロック間のリンク関係とは、基本ブロック間の処理の流れを示しており、一の基本ブロックから出て行く２以上のリンク（矢印）が存在する場合は分岐があることを示す。また、図１５の１５０１、１５０２はループを構成するリンクである。そして、図１５（ａ）では、（１）「ボトムが起点から最も遠いループを優先する」の条件に従い、１５０２のループが優先される。つまり、可読性向上処理手段１２２１は、１５０２のループを、Ｃ言語の、例えば、「while」文に書き換え、goto文を無くす。なお、基本ブロックｂ３からｂ１へのリンク１５０１を構成するgoto命令は、残ることとなる。
【０１５９】
さらに具体的には、変換対象のアセンブラプログラムが、図１６のプログラムであった、とする。図１６において、L0、L1はラベルである。「BE L0」「BE L1」は、ジャンプ命令である。そして、命令１〜命令８は任意の命令である。
【０１６０】
そして、変換部１２２は、図１６のアセンブラプログラムを静的解析し、当該アセンブラプログラムがb1〜b4の４つの基本ブロックを取得した、とする。
【０１６１】
そして、変換部１２２は、２以上のループの一部が重なっている図１６の場合に、（１）「ボトムが起点から最も遠いループを優先する」に基づいて、b4のブロックをボトムとするループ（図１５の１５０２のループ）を優先させた場合、変換部１２２は、図１７（ａ）のプログラムを取得する。そして、b3のブロックをボトムとするループを構成するgoto文１６０１はそのまま残る。ただし、図１７（ａ）の１７０１は、ループから飛び出すgoto文であり、可読性の低下度合いは低い。
【０１６２】
一方、仮に、変換部１２２は、２以上のループの一部が重なっている図１６の場合に、b3のブロックをボトムとするループ（図１５の１５０１のループ）を優先させた場合、変換部１２２は、図１７（ｂ）のプログラムを取得する。そして、b4のブロックをボトムとするループを構成するgoto文１７０２はそのまま残る。そして、図１７（ｂ）の１７０２は、ループへ飛び込むgoto文であり、可読性は著しく低下し、望ましくない。
【０１６３】
また、変換部１２２は、上記とは別のアセンブラプログラムを静的解析し、当該アセンブラプログラムが複数（ここでは、４つ）の基本ブロック間のリンク関係を有する、と判断した、とする。そして、変換部１２２は、図１８（ａ）に示す、ｔ１、ｔ２、ｔ３、ｔ４の４つの基本ブロック間のリンクを示す情報を得た、とする。また、図１８の１８０１、１８０２はループを構成するリンクである。そして、図１８（ａ）では、（２）「ボトムが同じループが複数ある場合、トップが起点から最も近いループを優先する」の条件に従い、１８０１のループが優先される。つまり、可読性向上処理手段１２２１は、１８０１のループを、Ｃ言語の、例えば、「for」文に書き換え、goto文を無くす。なお、基本ブロックｔ４からｔ２へのリンク１８０２を構成するgoto命令は、残ることとなる。
【０１６４】
さらに具体的には、変換対象のアセンブラプログラムが、図１９のプログラムであった、とする。図１９において、L0、L1はラベルである。「BE L1」「B L0」は、ジャンプ命令である。そして、命令１〜命令８は任意の命令である。
【０１６５】
そして、変換部１２２は、図１９のアセンブラプログラムを静的解析し、当該アセンブラプログラムがt1〜t4の４つの基本ブロックを取得した、とする。
【０１６６】
そして、変換部１２２は、２以上のループの一部が重なっている図１９の場合に、（２）「ボトムが同じループが複数ある場合、トップが起点から最も近いループを優先する」に基づいて、t1のブロックをトップとするループ（図１８の１８０１のループ）を優先させた場合、変換部１２２は、図２０（ａ）のプログラムを取得する。そして、２００１内の他のgoto文はそのまま残る。ただし、図２０（ａ）のgoto文の行き先がループ内に存在するので、可読性はあまり低下しない。
【０１６７】
一方、仮に、変換部１２２は、２以上のループの一部が重なっている図１８の場合に、t2のブロックをトップとするループ（図１８の１８０２のループ）を優先させた場合、変換部１２２は、図２０（ｂ）のプログラムを取得する。そして、２００２内の他のgoto文はそのまま残る。そして、図２０（ｂ）のgoto文の行き先は、プログラムの任意の箇所になり得るので、プログラム全体の中から、goto文の行き先を探す必要があり、可読性は著しく減少する。
【０１６８】
なお、変換部１２２がすべてのgoto文を他言語のループに変換する場合、図２１に示すように、トップにt1 とt2 のどちらを選んでも最終的な変換結果は同じになる。ただし、トップにt1 を選んだ方が計算量が少なくなる。
【０１６９】
以上、本実施の形態によれば、アセンブラのプログラムをマイグレーションする場合に、保守性を考慮した、可読性の高い他言語のプログラムを生成できる。
【０１７０】
また、本実施の形態によれば、予め決められたパターンに合致するアセンブラのプログラムを、保守性を考慮した、可読性の高い他言語のプログラムに変換できる。
【０１７１】
さらに、本実施の形態によれば、アセンブラのプログラムの中の予め決められた条件を満たす箇所の範囲を特定し、保守性を考慮して、当該範囲に対応する可読性の高い他言語のプログラムに変換できる。
【０１７２】
なお、本実施の形態における処理は、ソフトウェアで実現しても良い。そして、このソフトウェアをソフトウェアダウンロード等により配布しても良い。また、このソフトウェアをＣＤ−ＲＯＭなどの記録媒体に記録して流布しても良い。なお、このことは、本明細書における他の実施の形態においても該当する。なお、本実施の形態におけるマイグレーション装置１を実現するソフトウェアは、以下のようなプログラムである。つまり、このプログラムは、コンピュータアクセス可能な記録媒体は、アセンブラ言語で記述されたアセンブラプログラムであり、マイグレーション対象のプログラムである原ソースを格納し得る原ソース格納部と、原ソースに対して、プログラムの可読性を向上させるための処理を行う箇所を特定するための条件である１以上の箇所特定条件を格納し得る箇所特定条件格納部とを具備し、コンピュータを、前記原ソース格納部に格納されている原ソースを、他言語のプログラムであり、目的言語のプログラムである目的ソースに変換する変換部と、前記変換部が変換して、取得した目的ソースを出力する出力部として機能させるためのプログラムであって、前記変換部は、前記原ソース格納部に格納されている原ソースに対して、前記１以上の各箇所特定条件を適用し、合致する箇所特定条件に対応する箇所に対して、前記合致する箇所特定条件に対応する処理であり、プログラムの可読性を向上させる処理である可読性向上処理を行う可読性向上処理手段を具備するものとして、コンピュータを機能させるプログラムである。
【０１７３】
また、上記プログラムにおいて、前記箇所特定条件は、プログラムのパターンに関する情報であるソースパターン情報であり、前記可読性向上処理手段は、前記原ソース格納部に格納されている原ソースに対して、前記１以上の各ソースパターン情報を適用し、合致するソースパターン情報に対応する箇所に対して、前記合致するソースパターン情報に対応する処理であり、プログラムの可読性を向上させる処理である可読性向上処理を行うものとして、コンピュータを機能させるプログラムであることは好適である。
【０１７４】
また、上記プログラムにおいて、前記ソースパターン情報は、ダミーセクションを示す情報を含み、前記可読性向上処理手段は、前記原ソース格納部に格納されている原ソースに対して、前記１以上の各ソースパターン情報を適用し、ダミーセクションを含む箇所を決定し、当該箇所に対応するプログラムを、構造体を定義するプログラムに変更するものとして、コンピュータを機能させるプログラムであることは好適である。
【０１７５】
また、上記プログラムにおいて、前記ソースパターン情報は、オフセットを持つ戻りであることを示す情報を含み、前記可読性向上処理手段は、前記原ソース格納部に格納されている原ソースに対して、前記１以上の各ソースパターン情報を適用し、オフセットを持つ戻りを含む箇所を決定し、当該箇所に対応するプログラムを、当該プログラムに含まれるオフセットを条件に用いた分岐を示すプログラムに変更するものとして、コンピュータを機能させるプログラムであることは好適である。
【０１７６】
また、上記プログラムにおいて、前記ソースパターン情報は、一命令の他言語のプログラムに変換可能なアセンブラの２以上の命令の箇所を特定するためのパターンの情報であり、前記可読性向上処理手段は、前記原ソース格納部に格納されている原ソースに対して、前記１以上の各ソースパターン情報を適用し、前記２以上の命令の箇所を決定し、当該箇所に対応するプログラムを、一命令の他言語のプログラムに変換するものとして、コンピュータを機能させるプログラムであることは好適である。
【０１７７】
また、上記プログラムにおいて、前記ソースパターン情報は、退避コードまたは復帰コードを示す情報を含み、前記可読性向上処理手段は、前記原ソース格納部に格納されている原ソースに対して、前記１以上の各ソースパターン情報を適用し、退避コードまたは復帰コードの箇所を決定し、当該箇所に対応するプログラムを、前記原ソースまたは前記目的ソースから削除するものとして、コンピュータを機能させるプログラムであることは好適である。
【０１７８】
また、上記プログラムにおいて、前記ソースパターン情報は、２以上のジャンプ命令が構成する２以上のループの一部が重なっていることを示す情報を含み、前記可読性向上処理手段は、前記原ソース格納部に格納されている原ソースに対して、前記１以上の各ソースパターン情報を適用し、２以上のループの一部が重なっている箇所を決定し、当該箇所に対応するプログラムを、予め決められた条件を満たす一のループを優先し、ジャンプ命令を有さないループを示すプログラムに変更するものとして、コンピュータを機能させるプログラムであることは好適である。
【０１７９】
また、上記プログラムにおいて、前記箇所特定条件は、原ソース内において予め決められた条件を満たす箇所の範囲を特定するための条件である範囲条件であり、前記可読性向上処理手段は、前記原ソース格納部に格納されている原ソースに対して、前記１以上の各範囲条件を適用し、合致する範囲条件に対応する箇所に対して、前記合致する範囲条件に対応する処理であり、プログラムの可読性を向上させる処理である可読性向上処理を行うものとして、コンピュータを機能させるプログラムであることは好適である。
【０１８０】
また、上記プログラムにおいて、前記範囲条件は、実行され得ないプログラムの範囲を判定するための条件であり、前記可読性向上処理手段は、前記原ソースを静的解析し、前記合致する範囲条件に対応する箇所のプログラムを特定し、当該プログラムを削除するものとして、コンピュータを機能させるプログラムであることは好適である。
【０１８１】
また、上記プログラムにおいて、前記範囲条件は、変数を特定するための条件であり、前記可読性向上処理手段は、前記原ソースまたは目的ソースから変数を取得し、当該変数の生存区間を取得し、当該変数を、当該生存区間におけるローカル変数として定義する可読性向上処理を行うものとして、コンピュータを機能させるプログラムであることは好適である。
【０１８２】
また、上記プログラムにおいて、前記原ソースは、アセンブラプログラムとアセンブラ以外の言語のプログラムである他言語プログラムとを有するプログラムであり、コンピュータを、前記原ソースから、アセンブラプログラムを取得するアセンブラプログラム取得部としてさらに機能させ、前記変換部は、前記アセンブラプログラム取得部が取得したアセンブラプログラムを目的ソースに変換するものとして、コンピュータを機能させるプログラムであることは好適である。
【０１８３】
また、図２２は、本明細書で述べたプログラムを実行して、上述した種々の実施の形態のマイグレーション装置等を実現するコンピュータの外観を示す。上述の実施の形態は、コンピュータハードウェア及びその上で実行されるコンピュータプログラムで実現され得る。図２２は、このコンピュータシステム３００の概観図であり、図２３は、システム３００のブロック図である。
【０１８４】
図２２において、コンピュータシステム３００は、ＣＤ−ＲＯＭドライブを含むコンピュータ３０１と、キーボード３０２と、マウス３０３と、モニタ３０４とを含む。
【０１８５】
図２３において、コンピュータ３０１は、ＣＤ−ＲＯＭドライブ３０１２に加えて、ＭＰＵ３０１３と、ＭＰＵ３０１３、ＣＤ−ＲＯＭドライブ３０１２に接続されたバス３０１４と、ブートアッププログラム等のプログラムを記憶するためのＲＯＭ３０１５と、ＭＰＵ３０１３に接続され、アプリケーションプログラムの命令を一時的に記憶するとともに一時記憶空間を提供するためのＲＡＭ３０１６と、アプリケーションプログラム、システムプログラム、及びデータを記憶するためのハードディスク３０１７とを含む。ここでは、図示しないが、コンピュータ３０１は、さらに、ＬＡＮへの接続を提供するネットワークカードを含んでも良い。
【０１８６】
コンピュータシステム３００に、上述した実施の形態のマイグレーション装置１等の機能を実行させるプログラムは、ＣＤ−ＲＯＭ３１０１に記憶されて、ＣＤ−ＲＯＭドライブ３０１２に挿入され、さらにハードディスク３０１７に転送されても良い。これに代えて、プログラムは、図示しないネットワークを介してコンピュータ３０１に送信され、ハードディスク３０１７に記憶されても良い。プログラムは実行の際にＲＡＭ３０１６にロードされる。プログラムは、ＣＤ−ＲＯＭ３１０１またはネットワークから直接、ロードされても良い。
【０１８７】
プログラムは、コンピュータ３０１に、上述した実施の形態のマイグレーション装置１等の機能を実行させるオペレーティングシステム（ＯＳ）、またはサードパーティープログラム等は、必ずしも含まなくても良い。プログラムは、制御された態様で適切な機能（モジュール）を呼び出し、所望の結果が得られるようにする命令の部分のみを含んでいれば良い。コンピュータシステム３００がどのように動作するかは周知であり、詳細な説明は省略する。
【０１８８】
また、上記プログラムを実行するコンピュータは、単数であってもよく、複数であってもよい。すなわち、集中処理を行ってもよく、あるいは分散処理を行ってもよい。
【０１８９】
また、上記各実施の形態において、各処理は、単一の装置によって集中処理されることによって実現されてもよく、あるいは、複数の装置によって分散処理されることによって実現されてもよい。
【０１９０】
本発明は、以上の実施の形態に限定されることなく、種々の変更が可能であり、それらも本発明の範囲内に包含されるものであることは言うまでもない。
【産業上の利用可能性】
【０１９１】
以上のように、本発明にかかるマイグレーション装置は、アセンブラのプログラムをマイグレーションする場合に、保守性を考慮した、可読性の高い他言語のプログラムを生成できるという効果を有し、マイグレーション装置等として有用である。
【符号の説明】
【０１９２】
１  マイグレーション装置
１１  格納部
１２  処理部
１３  出力部
１１１  原ソース格納部
１１２  箇所特定条件格納部
１１３  変換情報格納部
１２１  アセンブラプログラム取得部
１２２  変換部
１２２１  可読性向上処理手段
【図１】
2017054277.tif 000003
【図２】
2017054277.tif 000004
【図３】
2017054277.tif 000005
【図４】
2017054277.tif 000006
【図５】
2017054277.tif 000007
【図６】
2017054277.tif 000008
【図７】
2017054277.tif 000009
【図８】
2017054277.tif 000010
【図９】
2017054277.tif 000011
【図１０】
2017054277.tif 000012
【図１１】
2017054277.tif 000013
【図１２】
2017054277.tif 000014
【図１３】
2017054277.tif 000015
【図１４】
2017054277.tif 000016
【図１５】
2017054277.tif 000017
【図１６】
2017054277.tif 000018
【図１７】
2017054277.tif 000019
【図１８】
2017054277.tif 000020
【図１９】
2017054277.tif 000021
【図２０】
2017054277.tif 000022
【図２１】
2017054277.tif 000023
【図２２】
2017054277.tif 000024
【図２３】
2017054277.tif 000025