(57)【要約】【課題】比較対象のプログラムソースの行数が大きくなっても、処理の演算回数は線形的にしか増加せず、安定した処理時間を実現する。【解決手段】変更前０２０と変更後０２１のプログラムソースのそれぞれを、一定の大きさのブロックで区切りながら、そのブロック同志で比較を行い、完了したならば次のブロックに関して比較を行う処理を繰り返す。そして、ブロック内の比較は、１行同志を比較するのではなく、まず大きな範囲（連続行）が一致する場所を探し（２００）、一致箇所が見つかるまでに読み飛ばされた部位があれば、その部位について今度はやや小さな範囲（連続行）が一致する部位を探す（３００）。ここでも、一致箇所が見つかるまでに読み飛ばされた行があった場合に、初めて１行同志の比較を行う（４００）。比較結果出力処理部５００では、アンマッチ部位を比較結果として出力する（０１３）。【選択図】図１
2008059514.tif 000002
【特許請求の範囲】
【請求項１】
変更前プログラムソースと変更後プログラムソースそれぞれを、一定の大きさのブロックに区切って、テーブルに格納するテーブル格納処理手段と、
前記テーブルに格納した変更前プログラムソースと変更後プログラムソースの比較を実行する大、中および小の各比較処理手段と、
アンマッチ部位を比較結果として出力する比較結果出力処理手段と、
前記テーブル格納処理手段、前記大、中および小の各比較処理手段、ならびに前記比較結果出力処理手段で使用する情報を格納したテーブル処理パラメタ記憶手段と
を有することを特徴としたプログラムソース比較システム。
【請求項２】
請求項１に記載のプログラムソース比較システムにおいて、
前記大、中および小の各比較処理手段は、変更前と変更後のプログラムソースのそれぞれを、予め定めた大きさのブロックで区切りながら、最も大きなブロック同士で比較を行って、連続行が一致する場所を探し、比較が完了したならば、次の大きさのブロック同士で比較を行って、連続行が一致する場所を探す処理を繰り返し、一致する場所が見つかるまでに読み飛ばされた部位があれば、前記読み飛ばされた部位についてやや小さな範囲で一致する部位を探すことを特徴とするプログラムソース比較システム。
【請求項３】
請求項１に記載のプログラムソース比較システムにおいて、
前記テーブル処理パラメタ記憶手段は、前記テーブルに格納する行数、大および中の各比較処理手段で使用する連続一致行数の値、ならびに、２回目以降、前記テーブルに格納する際に、最後に存在した一致行の次の行を開始行として、それぞれ記憶することを特徴とするプログラムソース比較システム。
【請求項４】
請求項１または２に記載のプログラムソース比較システムにおいて、
前記ブロックをまたぐ前後の部分について、誤った判定を下さないように、２回目以降のテーブルへの格納の際に、最後に存在した一致行の次の行を開始行として、テーブル処理パラメタ記憶手段に記憶することを特徴とするプログラムソース比較システム。
【請求項５】
コンピュータによる変更前と変更後の各プログラムソース比較方法であって、
比較開始位置から比較終了位置までの行数が指定された比較連続行数より少ないか否かを判定して、少ない場合には一致部位無しと判断し、
少なくない場合には、変更前プログラムソース格納テーブルの比較開始位置にｉ、変更後プログラムソース格納テーブルの比較開始位置にｊをセットして、連続行が一致するか否かを判定し、一致した場合には一致部位有りとして処理を終了し、
一致部位が見つからなかった場合には、変更後プログラムソース格納テーブルの比較開始位置ｊに１を加えた値を設定し、再度の比較判定を行い、
まだ一致部位が見つからなかった場合には、変更前プログラムソース格納テーブルの比較開始位置ｉに１を加えた値を設定し、再度の比較判定を行い、
以降、一致部位が見つかるまで、ｉ，ｊの値を変化させながら比較判定を繰り返し、
一致部位が見つからなかった場合には、両テーブルについてより小さなブロックでの比較処理を実行し、
一致部位が見つかった場合には、見つかるまでに読み飛ばされた行が存在しないとき、一致した最終行に１を加えて再度比較判定を行い、両方のテーブルに存在したとき、再度比較を行う前に、両テーブルに一致した先頭行から１だけ減じた値をセットして、より小さなブロックの比較処理を実行し、少なくとも一方のテーブルに存在したとき、読み飛ばされた行をアンマッチとみなし、一致した最終行に１を加えた値を比較開始位置として次の一致部位をサーチすることを特徴とするプログラムソース比較方法。
【請求項６】
変更前と変更後の各プログラムソース比較用プログラムであって、
コンピュータに、比較開始位置から比較終了位置までの行数が指定された比較連続行数より少ないか否かを判定して、少ない場合には一致部位無しと判断する手順、少なくない場合には、変更前プログラムソース格納テーブルの比較開始位置にｉ、変更後プログラムソース格納テーブルの比較開始位置にｊをセットして、連続行が一致するか否かを判定する手順、一致した場合には一致部位有りとして処理を終了する手順、一致部位が見つからなかった場合には、変更後プログラムソース格納テーブルの比較開始位置ｊに１を加えた値を設定し、再度の比較判定を行う手順、まだ一致部位が見つからなかった場合には、変更前プログラムソース格納テーブルの比較開始位置ｉに１を加えた値を設定し、再度の比較判定を行う手順、以降、一致部位が見つかるまで、ｉ，ｊの値を変化させながら比較判定を繰り返す手順、一致部位が見つからなかった場合には、両テーブルについてより小さなブロックでの比較処理を実行する手順、一致部位が見つかった場合に、見つかるまでに読み飛ばされた行が存在しないとき、一致した最終行に１を加えて再度比較判定を行う手順、両方のテーブルに存在したとき、再度比較を行う前に、両テーブルに一致した先頭行から１だけ減じた値をセットして、より小さなブロックでの比較処理を実行する手順、少なくとも一方のテーブルに存在したとき、読み飛ばされた行をアンマッチとみなし、一致した最終行に１を加えて値を比較開始位置として次の一致部位をサーチする手順を、実行させるためのプログラムソース比較用プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、プログラムソースに対して変更を加えた場合に、その変更した部位を明確にするための、変更前プログラムソースと変更後のプログラムソースの比較システムおよび比較方法、ならびにそのプログラムに関する。
【背景技術】
【０００２】
プログラムソースに対して変更を加えた際に、その変更箇所を検出する方法としては、例えば、特開平５−９４３４３号公報に記載の『ソースプログラム修正箇所抽出方法』がある。これは、ライン群一致テーブルとライン一致テーブルを作成し、ライン一致テーブルを使用して修正されたプログラムソースを抽出することにより、修正後のプログラムソース中で修正前のプログラムソースの中間に修正されたプログラムソースが追加されている場合にも、全てのプログラム修正箇所を誤りなく抽出することができる。
具体的には、整数ｍを照合開始ライン、整数ｎを照合終了ラインに位置付け、基準プログラムソースを有するラインの最大数をＭとして、整数ｍを第１の添字とし整数ｎを第２の添字とし、これらｍとｎを持つ配列の要素Ａ（ｍ，ｎ）につきＡ（１，１）からＡ（Ｍ，Ｎ）までのＭの二乗個の配列要素の全てについて、一致部位が被照合プログラムソースに存在するかの判定を行っている。
【０００３】
【特許文献１】特開平５−９４３４３号公報
【発明の開示】
【発明が解決しようとする課題】
【０００４】
従来の技術では、変更前後のプログラムソースの行数が大きくなれば、なるほど、一致部位を照合するため演算回路が幾何級数的に増えてしまい、プログラムソース全体の比較が終えるまでの処理時間も同様に長くなる、という問題があった。
【０００５】
（目的）
本発明の目的は、上記問題を解消するため、比較対象のプログラムソースの行数が大きくなっても、処理の演算回数は線形的にしか増加せず、安定した処理時間を実現できるプログラムース比較システムおよび比較方法、ならびにそのプログラムを提供することにある。
【課題を解決するための手段】
【０００６】
本発明のプログラムソース比較方法は、変更前と変更後のプログラムソースのそれぞれを、一定の大きさのブロックで区切りながら、そのブロック同志で比較を行い、完了したならば次のブロックに関して比較を行う処理を繰り返す。そして、ブロック内の比較は、１行同志を比較するのではなく、まず大きな範囲（連続行）が一致する場所を探し、一致箇所が見つかるまでに読み飛ばされた部位があれば、その部位について今度はやや小さな範囲（連続行）が一致する部位を探す。ここでも、一致箇所が見つかるまでに読み飛ばされた行があった場合に、初めて１行同志の比較を行う。この比較方法をブロック内で繰り返していく。
【０００７】
また、本発明のプログラムソース比較方法では、ブロックをまたぐ前後の部分について、誤った判定を下さない機能を備える。すなわち、テーブル処理パラメタとして備えられる次回比較開始位置調整数がそれに該当する。これは、テーブル格納の境界の前後で不当にアンマッチ判定を起こさないようにするために、２回目以降のテーブル格納の際は最後に存在した一致行の次の行からテーブルに格納するが、その行の値が当該パラメタの数値より小さかった場合には、当該パラメタの値を最後の一致行とみなす。
【発明の効果】
【０００８】
本発明によれば、比較対象のプログラムソースの行数が大きくなっても、処理の演算回数は線形的にしか増加しないため、従来の方法に比べて安定した処理時間を実現することができる。
【発明を実施するための最良の形態】
【０００９】
以下、本発明の実施例を図面により詳細に説明する。
図１は、本発明の一実施例に係るプログラムソース比較システムの全体構成図である。
本発明のプログラムソース比較システムは、比較対象の変更前プログラムソース０２０と変更後のプログラムソース０２１を、それぞれ一定の大きさのブロックに区切って、内部テーブル０３０，０３１に格納するテーブル格納処理部１００と、内部テーブル０３０，０３１を使用して、大区切範囲、中区切範囲、小区切範囲でそれぞれ比較を行う大比較処理部２００、中比較処理部３００、小比較処理部４００と、アンマッチ部位を比較結果０１３として出力する比較結果出力処理部５００と、テーブル格納処理部１００、大比較処理部２００、中比較処理部３００および比較結果出力処理部５００で使用するテーブル処理パラメタ記憶部０１４から構成される。
テーブル処理パラメタ記憶部０１４は、テーブル格納処理部１００の動作に対するテーブル行数と、大比較処理部２００の動作に対する大比較連続行数と、中比較処理部３００の動作に対する中比較連続行数と、比較結果出力処理部５００の動作に対する次回比較開始位置調整数とからなる。
【００１０】
図１のプログラムソース比較システムの大まかな処理の流れとしては、次の通りである。
１）変更前プログラムソース０２０と変更後プログラムソース０２１を読み込み、一定の大きさの内部テーブル０３０，０３１にそれぞれ格納し、
２）その内部テーブル０３０，０３１の中で先頭から順次スクロールし、最初に一定の行数（大比較連続行数０１４）分が同一である、まとまった部分を見つける。
３）その際に、読み飛ばされた部分について、別の一定行数（中比較連続行数０１４）分が同一である、まとまった部分を見つける。
４）その際に、読み飛ばされた部分について、一行分が同一である部分を見つける（なお、２）〜４）については、内部テーブル内の全ての行が処理されるまで繰り返し行う）。
５）一致しなかった行について、比較結果を出力する。
上記１）〜５）を、変更前プログラムソース０２０および変更後プログラムソース０２１の読み込みが完了するまで繰り返し行う。
【００１１】
図２は、図１における変更前プログラムソース０２０と変更後プログラムソース０２１の構成を示す図である。
横長の小さな枠一つが、プログラムソース０２０の１行に該当する。
枠の外側に振られた数字は、そのプログラム内での行番号を意味する。また、枠の中に記述した文字列は、比較対象となるプログラムソースの命令文を意味する。
【００１２】
図３は、テーブル格納処理部１００の動作中、電子計算機の主記憶装置上に一時的に作成される内部テーブルの説明図である。
これらのテーブルは、Ｔ行（図４のＮｏ．１参照）からなる。
変更前プログラムソース０２０を格納するテーブルを、テーブル１（０３０）、変更後プログラムソース０２１を格納するテーブルを、テーブル２（０３１）とする。
横長の小さな枠一つが１行に該当する。枠の外側に振られた数字は、そのテーブル内での行番号を意味する。
【００１３】
図４は、図１におけるテーブル処理パラメタ記憶部の記憶内容の説明図である。
テーブル処理パラメタ記憶部０１４には、格納テーブルの行数を表すテーブル行数と、大比較処理部２００で使用する連続一致行数の値を表す大比較連続行数と、中比較処理部３００で使用する連続一致行数の値を表す中比較連続行数と、２回目以降のテーブル格納の際は最後に存在した一致行の次の行からテーブルに格納するが、その行の値が当該パラメタの数値より小さかった場合に、当該パラメタの値を最後の一致行とみなす次回比較開始位置調整数とが記憶されている。
その下方のデータ例に示すように、外部入力により指定される値としては、９９９行（テーブル行数）、９行（大比較連続行数）、３行（中比較連続行数）、９５０（次回比較開始位置調整数）の場合、あるいは、５００（テーブル行数）、５行（大比較連続行数）、２行（中比較連続行数）、４９０（次回比較開始位置調整数）の場合、あるいは、５０（テーブル行数）、９行（大比較連続行数）、３行（中比較連続行数）、４０（次回比較開始位置調整数）の場合などが考えられる。
【００１４】
図５は、図１における各処理部１００〜５００で使用する変数についての説明図である。
図５の１〜９に示された変数は、変更前プログラムソース０２０が格納されたテーブル１（０３０）と、変更後プログラムソース０２１が格納されたテーブル２（０３１）にそれぞれ持たせる。
大比較一致済最終行とは、大比較処理部２００において、最後に見つかった一致部位のテーブル内の最終行である。
中比較一致済最終行とは、中比較処理部３００において、最後に見つかった一致部位のテーブル内の最終行である。
小比較一致済最終行とは、小比較処理部４００において、最後に見つかった一致部位のテーブル内の最終行である。
【００１５】
大比較開始位置とは、大比較処理部２００を実行する際の、テーブル内の比較開始行であり、処理開始時点では、初期値として１が設定されているものとする。処理部２００の中で設定される。
中比較開始位置とは、中比較処理部３００を実行する際の、テーブル内の比較開始行であり、大比較処理部２００の中で設定される。
小比較開始位置とは、小比較処理部４００を実行する際の、テーブル内の比較開始行であり、中比較処理部３００の中で設定される。
大比較終了位置とは、大比較処理部２００を実行する際の、テーブル内の比較終了行であり、すなわち、テーブルに格納した際のデータが存在する、テーブル格納処理部１００の中で設定される。
中比較終了位置とは、中比較処理部３００を実行する際の、テーブル内での比較終了行であり、大比較処理部２００の中で設定される。
小比較終了位置とは、小比較処理部４００を実行する際の、テーブル内での比較終了行であり、中比較処理部３００の中で設定される。
【００１６】
図６は、図１における比較結果部の具体例を示す図である。
図６の左側には変更前のプログラムソースが、右側には変更後のプログラムソースが、変更のあった部位のみが表示されている。
変更前プログラムと変更後プログラムとを比べて、変更のあった行については、罫線で囲んだ上に、〔置換〕というマークが表示される。また、変更後プログラムソースに追加行が発生した場合には、矢印と〔追加〕というマークが表示される。また、変更前プログラムソースの行を削除した場合には、矢印と〔削除〕というマークが表示される。
【００１７】
以下、まず動作フローチャート（〔図７〕〜〔図１１〕）に沿って各部の動作の流れを説明した後に、具体例（〔図１２〕〜〔図１６〕）をもとに本発明の内容を説明する。
【００１８】
図７は、本発明におけるテーブル格納処理部の動作フローチャートである。
まず、図３に示すテーブル１（０３０）、テーブル２（０３１）内のデータをクリアする（ステップ１０１）。次に行う処理（ステップ１０２）は、最初にこのテーブル格納処理部１００が行う動作の際には、実行されない。２回目以降のテーブル格納処理において、実行されるものとする。
具体的には、ステップ１０２では、以下の動作を実行する。
テーブル１に関する引継ぎ部位（〔図１６−１〕のステップ５１１）をテーブル１の先頭行から格納する。
テーブル２に関する引継ぎ部位（〔図１６−１〕のステップ５１２）をテーブル２の先頭行から格納する。
なお、引継部位に関する説明は後述する。
【００１９】
次に、変更前プログラムソース（〔図２〕の０２０）、変更後プログラムソース（〔図２〕の０２１）をそれぞれ読み込み（ステップ１０３）、読み込んだ変更前プログラムソースについては、テーブル１に格納し、変更後プログラムソースについてはテーブル２に格納していく（ステップ１０５）。
この格納は、テーブルの最終行（Ｔ行）に達するか（ステップ１０６）、読み込むプログラムソースの最終行に達する（ステップ１０４）まで行われる。
最後に、両テーブルについて、テーブルの何行目までが格納されたか、その値を大比較終了位置（図５のＮｏ．７）に設定し（ステップ１０７）、大比較処理部２００の動作に進む。
【００２０】
図９は、本発明における大比較処理部の動作フローチャートである。
まず、図３で示されたテーブル１（０３０）、テーブル２（０３１）それぞれについて、大比較開始位置（図５のＮｏ．４）の値から１を減じた値を大比較一致済最終行（図５のＮｏ．１）に設定しておく（ステップ２０１）。
テーブル１に関して、大比較開始位置＞大比較終了位置  を満たした場合、あるいは、
テーブル２に関して、大比較開始位置＞大比較終了位置  を満たした場合（ステップ２０２）は、比較結果出力処理部５００の処理に進む。
また、比較結果出力処理部５００に進まない場合には、テーブル１とテーブル２のそれぞれの大比較開始位置から、大比較終了位置までの範囲内で、連続Ｌ行（図４のＮｏ．２）が最初に一致する部位をサーチする（ステップ２０３）。この一致部位サーチ（ステップ２０３）の詳細なロジックは、図１７に示す通りである。
【００２１】
図１７（一致部位サーチ）において、図中のｐの値は、ここではＬ（図４のＮｏ．２の大比較連続行数）とみなす。
まず、テーブル１、テーブル２のどちらかが、ステップ９００の式を満たす場合には、一致部位無しとみなし（ステップ９０９）、図１７の処理を終了する。
これは、テーブル１、テーブル２のいずれかについて、大比較開始位置から大比較終了位置までの行数が、Ｌより小さい場合には、大比較そのものができないので、それに対応するための処理である。
ステップ９００を満たさない場合には、テーブル１のカウンタｉに、初期値としてテーブル１の大比較開始位置を設定し、テーブル２のカウンタｊには、初期値としてテ−ブル２の大比較開始位置を設定する（ステップ９０１）。
【００２２】
次に、テーブル１のｉ行目から（ｉ＋Ｌ−１）行目までの連続Ｌ行が、テーブル２のｊ行目から（ｊ＋Ｌ−１）行目までの連続Ｌ行と一致するか否かを判定する（ステップ９０２）。
一致した場合には、一致部位が見つかったものとみなし（ステップ９０３）、図１７の処理を終了する。
一致しない場合には、テーブル２の比較位置だけを１行下げて、すなわちカウンタｊに１を加算し（ステップ９０４）、再度ステップ９０２の判定を行う。ただし、カウンタｊに１を加算することで、テーブル２の比較対象部位の最終行がテーブル２の大比較終了位置を越えた場合（ステップ９０５でＹＥＳとなった場合）には、テーブル２のカウンタｊをゼロクリアし（ステップ９０６）、テーブル１のカウンタｉに１を加算し（ステップ９０７）、ステップ９０２の判定を行う。
以降、一致部位が見つかるまで（ステップ９０３）、ｉ，ｊそれぞれのカウンタを上述の通りに変化させながら、ステップ９０２の判定を繰り返す。ただし、カウンタｉに１を加算することで、テーブル１の比較対象部位の最終行がテーブル１の大比較終了位置を越えた場合（ステップ９０８でＹＥＳとなった場合）には、一致部位が見つからなかったものとみなし（ステップ９０９）、図１７の処理を終了する。
【００２３】
図９に戻って、一致部位が見つからなかった場合には（ステップ２０５）、両テーブル１，２それぞれについて、中比較開始位置（図５のＮｏ．５）、中比較終了位置（図５のＮｏ．８）の設定を大比較一致済最終行に１を加えた値を中比較開始位置に設定し、大比較終了位置の値を中比較終了位置に設定し（ステップ２０９）、中比較処理部３００の動作に進む。
一致部位が見つかった場合には（ステップ２０５）、次回の大比較処理のために、テーブル１、テーブル２それぞれについて一致した最終行の値を大比較一致済最終行にセットする（ステップ２０４）。
一致部位が見つかった場合には、次回の大比較処理のために、テーブル１、テーブル２それぞれについて一致した最終行の値を大比較一致済最終行にセットする（ステップ２０４）。
【００２４】
一致部位が見つかった場合には、以下の３つのパターンに分類される。
１）一致部位が見つかるまでに、読み飛ばされた行がテーブル１、テーブル２のどちらにも存在しなかった場合（ステップ２０６）。
２）一致部位が見つかるまでに、読み飛ばされた行がテーブル１、テーブル２の両方に存在した場合（ステップ２０７）。
３）一致部位が見つかるまでに、読み飛ばされた行がテーブル１、テーブル２のどちらか片方に存在した場合（ステップ２０８）。
ここで、『読み飛ばされた行』とは、テーブル内の行番号（図３の（０３２）が、大比較開始位置から（一致部位の先頭行−１）行の範囲に該当する部位を意味する。
【００２５】
上記３つのパターン１）２）３）について、次に行う処理は以下の通りである。
１）ステップ２０６の場合には、両テーブルそれぞれについて、（一致した最終行＋１）の値を大比較開始位置にセットしておき（ステップ２１２）、引き続き次の一致部位をサーチする（ステップ２１３）。
２）ステップ２０７の場合には、両テーブルそれぞれについて、中比較開始位置（図５のＮｏ．５）、中比較終了位置（図５のＮｏ．８）の設定を大比較開始位置を中比較開始位置に設定し、一致した先頭行−１の値を中比較終了位置に設定し（ステップ２１０）、次回の大比較処理のために両テーブルそれぞれについて、（一致した最終行＋１）の値を大比較開始位置にセットしておき（ステップ２１２）、一旦、中比較処理部３００の動作に進む。
３）ステップ２０８の場合には、読み飛ばされた行をアンマッチと見なし（ステップ２１１）、両テーブルそれぞれについて、（一致した最終行＋１）の値を大比較開始位置にセットしておき（ステップ２１２）、引き続き次の一致部位をサーチする（ステップ２１３）。
【００２６】
図１０は、本発明における中比較処理部の動作フローチャートである。
まず、図３で示されたテーブル１（０３０）、テーブル２（０３１）のそれぞれについて、中比較開始位置（図５のＮｏ．５）の値から１を減じた値を中比較一致済最終行（図５のＮｏ．２）に設定しておく（ステップ３０１）。
テーブル１に関して、中比較開始位置＞中比較終了位置  を満たした場合、あるいは、
テーブル２に関して、中比較開始位置＞中比較終了位置  を満たした場合（ステップ３０２）には、大比較処理部２００の動作に戻る。
大比較処理部２００の動作に戻らない場合には、テーブル１とテーブル２のそれぞれの中比較開始位置から、中比較終了位置までの範囲内で、連続Ｍ行（図４のＮｏ．３）が最初に一致する部位をサーチする（ステップ３０３）。
この一致部位サーチ（ステップ３０３）の詳細なロジックは、図１７の通りである。
【００２７】
図１７において、図中のｐの値は、ここではＭ（図４のＮｏ．３の中比較連続行数）とみなす。
まず、テーブル１、テーブル２のどちらかが、ステップ９００を満たす場合には、一致部位無しとみなし（ステップ９０９）、図１７の処理を終了する。これは、テーブル１、テーブル２のいずれかについて、中比較開始位置から中比較終了位置までの行数が、Ｍより小さい場合は、中比較そのものができないので、それに対応するための処理である。
ステップ９００を満たさない場合には、テーブル１のカウンタｉに、初期値としてテーブル１の中比較開始位置を設定し、テーブル２のカウンタｊには、初期値としてテーブル２の中比較開始位置を設定する（ステップ９０１）。
【００２８】
次に、テーブル１のｉ行目から（ｉ＋Ｍ−１）行目までの連続Ｍ行が、テーブル２のｊ行目から（ｊ＋Ｍ−１）行目までの連続Ｍ行と一致するか否かを判定する（ステップ９０２）。一致した場合には、一致部位が見つかったものとみなし（ステップ９０３）、図１７の処理を終了する。
一致しない場合には、テーブル２の比較位置だけを１行下げて、すなわちカウンタｊに１を加算して（ステップ９０４）、再度、ステップ９０２の判定を行う。ただし、カウンタｊに１を加算することで、テーブル２の比較対象部位の最終行がテーブル２の中比較終了位置を越えた場合（ステップ９０５でＹＥＳとなった場合）には、テーブル２のカウンタｊをゼロクリアし（ステップ９０６）、テーブル１のカウンタｉに１を加算し（ステップ９０７）、ステップ９０２の判定を行う。
以降、一致部位が見つかるまでｉ，ｊそれぞれのカウンタを上述の通りに変化させながら、ステップ９０２の判定を繰り返す。
ただし、カウンタｉに１を加算することで、テーブル１の比較対象部位の最終行がテーブル１の中比較終了位置を越えた場合（ステップ９０８でＹＥＳとなった場合）は、一致部位が見つからなかったものとみなし（ステップ９０９）、図１７の処理を終了する。
【００２９】
図１０に戻って、一致部位が見つからなかった場合（ステップ３０５）には、両テーブルそれぞれについて、小比較開始位置（図５のＮｏ．６、中比較終了位置（図５のＮｏ．９）の設定を、中比較一致済最終行に１を加えた値を中比較開始位置として設定し、中比較終了位置を小比較終了位置として設定し（ステップ３０９）、小比較処理部４００に進む。
一致部位が見つかった場合には、次回の中比較処理のために、テーブル１、テーブル２それぞれについて一致した最終行の値を中比較一致済最終行にセットする（ステップ３０４）。
一致部位が見つかった場合には、以下の３パターン１）２）３）に分類される。
１）一致部位が見つかるまでに、読み飛ばされた行がテーブル１、テーブル２のどちらにも存在しなかった場合（ステップ３０６）。
２）一致部位が見つかるまでに、読み飛ばされた行がテーブル１、テーブル２の両方に存在した場合（ステップ３０７）。
３）一致部位が見つかるまでに、読み飛ばされた行がテーブル１、テーブル２のどちらか片方に存在した場合（ステップ３０８）。
ここで、『読み飛ばされた行』とは、テーブル内の行番号（図３の（０３２）が、中比較開始位置から（一致部位の先頭行−１）行の範囲に該当する部位を意味する。
【００３０】
上記３パターン１）２）３）について、次に行う処理は以下の通りである。
１）ステップ３０６の場合には、両テーブルそれぞれについて、（一致した最終行＋１）の値を中比較開始位置にセットしておき（ステップ３１２）、引き続き次の一致部位をサーチする（ステップ３１３）。
２）ステップ３０７の場合には、両テーブルそれぞれについて、小比較開始位置（図６のＮｏ．６）、小比較終了位置（図５のＮｏ．９）の設定を中比較開始位置を、小比較開始位置に設定し、一致した先頭行から１を減じた値を小比較終了位置に設定し（ステップ３１０）、次回の中比較処理のために両テーブルそれぞれについて、（一致した最終行＋１）の値を中比較開始位置にセットしておき（ステップ３１２）、一旦、小比較処理部４００の動作に進む。
３）ステップ３０８の場合には、読み飛ばされた行をアンマッチとみなし（ステップ３１１）、両テーブルそれぞれについて（一致した最終行＋１）の値を中比較開始位置にセットし（ステップ３１２）、引き続き次の一致部位をサーチする（ステップ３１３）。
なお、両テーブルそれぞれについて、中比較開始位置の値が大比較開始位置の値より大きくなった場合には、中比較開始位置の値を大比較開始位置として更新する。すなわち、図５に示すように、テーブル１、テーブル２の変数である大比較開始位置の値が既に設定されていても、この時点で中比較開始位置の値で大比較開始位置の値を更新する（図１０では、これを『大比較開始位置の調整』と記載している）。
【００３１】
図１１は、本発明における小比較処理部の動作フローチャートである。
まず、図３で示されたテーブル１（０３０）、テーブル２（０３１）のそれぞれについて、小比較開始位置（図５のＮｏ．６）の値から１を減じた値を小比較一致済最終行（図５のＮｏ．３）に設定しておく（ステップ４０１）。
テーブル１に関して、小比較開始位置＞小比較終了位置  を満たした場合、あるいは、
テーブル２に関して、小比較開始位書＞小比較終了位置  を満たした場合（ステップ４０２）には、小比較開始位置が小比較終了位置より大きくない方のテーブルについて、開始位置から終了位置までをアンマッチとみなし（ステップ４１０）、中比較処理部３００の動作に戻る。
【００３２】
中比較処理部３００の動作に戻らない場合には、テーブル１とテーブル２のそれぞれの小比較開始位置から小比較終了位置までの範囲内で、最初に一致する行をサーチする（ステップ４０３）。
この一致部位サーチ（ステップ４０３）の詳細なロジックは、図１７に示す通りである。
ただし、図１７中のｐの値は、ここでは１とみなす。
図１７において、まずテーブル１、テーブル２のどちらかがステップ９００を満たす場合には、一致部位無しとみなし（ステップ９０９）、図１７の処理を終了する。
これは、テーブル１、テーブル２のいずれかについて、小比較開始位置から小比較終了位置までの行数が、１より小さい場合には、小比較そのものができないので、それに対応するための処理であるが、この小比較においては、実際にステップ９００において、ＹＥＳが判定されることはあり得ないので、ステップ９００は省略できる。
次に、テーブル２のカウンタｉに、初期値としてテーブル１の小比較開始位置を設定し、テーブル２のカウンタｊには、初期値としてテーブル２の小比較開始位置を設定する（ステップ９０１）。
【００３３】
次に、テーブル１のｉ行目から（ｉ＋１−１）行目までの連続１行が、テーブル２のｉ行目から（ｉ＋１−１）行目までの連続１行と一致するか否かを判定する（ステップ９０２）。つまり、テーブル１のｉ行目が、テーブル２のｊ行目と一致するか否かを判定する。
一致した場合、一致部位が見つかったものとみなし（ステップ９０３）、図１７の処理を終了する。
一致しない場合、テーブル２の比較位置だけを１行下げて、すなわちカウンタｊに１を加算して（ステップ９０４）、再度ステップ９０２の判定を行う。ただし、カウンタｊに１を加算することで、テーブル２の比較対象行がテーブル２の小比較終了位置を越えた場合（（ステップ９０５）でＹＥＳとなった場合）には、テーブル２のカウンタＪをゼロクリアし（ステップ９０６）、テーブル１のカウンタｉに１を加算し（ステップ９０７）、ステップ９０２の判定を行う。
以降、一致部位が見つかるまで、ｉ，ｊそれぞれのカウンタを上述の通りに変化させながら、ステップ９０２の判定を繰り返す。ただし、カウンタｉに１を加算することで、テーブル１の比較対象行がテーブル１の小比較終了位置を越えた場合（（ステップ９０８）でＹＥＳとなった場合）には、一致部位が見つからなかったものとみなし（ステップ９０９）、図１７の処理を終了する。
【００３４】
図１１に戻り、一致行が見つからなかった場合には（ステップ４０５）、両テーブルの読み飛ばされた行をアンマッチとみなし（ステップ４０８）、中比較処理部３００の動作に戻る。なお、『読み飛ばされた行』とは、テーブル内の行番号（図３の（０３２））が、小比較開始位置から小比較終了位置の範囲に該当する部位を意味する。
一致部位が見つかった場合には、次回の小比較処理のために、テーブル１、テーブル２それぞれについて、一致した最終行の値を小比較一致最終行にセットする（ステップ４０４）。
一致部位が見つかった場合には、以下の２パターンに分類される。
１）一致部位が見つかるまでに、読み飛ばされた行がテーブル１、テーブル２の両方あるいはどちらかに存在した場合（ステップ４０６）。
２）一致部位が見つかるまでに、読み飛ばされた行がテーブル１、テーブル２のどちらにも存在しなかった場合（ステップ４０７）。
ここで、『読み飛ばされた行』とは、テーブル内の行番号（図３の（０３２））が、小比較開始位置から（一致行−１）行の範囲に該当する部位を意味する。
【００３５】
上記２パターン１）２）について、次に行う処理は以下の通りである。
１）ステップ４０６の場合には、読み飛ばされた行をアンマッチとみなし（ステップ４０８）、両テーブルそれぞれについて、（一致した行＋１）の値を小比較開始位置にセットし（ステップ４０９）、引き続き次の一致行をサーチする（ステッチ４１３）。
２）ステップ４０７の場合には、両テーブルそれぞれについて、（一致した行＋１）の値を小比較開始位置にセットし（ステップ４０９）、引き続き次の一致行をサーチする（ステップ４１３）。
この場合にも、両テーブルそれぞれについて、小比較開始位置の値が大比較開始位置の値より大きくなった場合には、小比較開始位置の値を大比較開始位置の値として更新する（ステップ４１１）。すなわち、図５に示すテーブル１、テーブル２の変数名（大比較開始位置）の値が既に設定されていても、この時点で小比較開始位置の値で大比較開始位置の値を更新する。
また、両テーブルそれぞれについて、小比較開始位置の値が中比較開始位置の値より大きくなった場合には、小比較開始位置の値を中比較開始位置の値として更新する（ステップ４１２）。すなわち、図５に示すテーブル１、テーブル２の変数名（中比較開始位置）の値が既に設定されていても、この時点で小比較開始位置の値で中比較開始位置の値を更新する。なお、図１１では、このことを、『大比較開始位置、中比較開始位置の調整』と記述している。
【００３６】
図８は、本発明における比較結果出力処理部の動作フローチャートである。
動作開始の後、それ以降、テーブル格納処理部１００の処理を行う際に、再度、テーブルに格納する部位を決定する（ステップ５０１）。具体的には、テーブル１、テーブル２のそれぞれについて、大比較一致済最終行（図５のＮｏ．１）、中比較一致済最終行（図５のＮｏ．２）、小比較一致済最終行（図５のＮｏ．３）の中で最大の値を求める。ただし、両テーブルのこれらの項目全てが、Ａ（図４のＮｏ．４）より小さい場合には、Ａの値を最大値とみなす。
そして、両テーブル１，２のそれぞれについて、（最大値＋１）の値から、実質的なテーブル最終行である大比較終了位（図５のＮｏ．７）までを引継部位とする。
次に、テーブル１，テーブル２のそれぞれについて、アンマッチとみなされた行を出力する（ステップ５０２）。ただし、上記のステップ５０１で求めた最大値より大きな行のアンマッチ行は、次のテーブル格納処理部１００で各テーブルの先頭に再度格納するため、出力しない。
【００３７】
（実例）
図１２から図１６は、以上の処理を実例を用いて説明した図である。
比較対象となるプログラムソースの命令文は、図２で例示したものと同一とし、テーブル処理パラメータは、図４のデータ例におけるＮｏ．３の値と同一とする。すなわち、テーブルの行数５０、大比較連続行数は９、中比較連続行数は３、次回比較開始位置調整数は４０とする。
【００３８】
図１２−１は、  最初のテーブル格納処理部１００の動作が完了した時点の状態を表した図である。
すなわち、テーブル１には、図２の変更前プログラムソース０２０の先頭から５０行目までが、テーブル２には、図２の変更後プログラムソース０２１の先頭行から５０行目までが、それぞれ格納されている。
また、両テーブル１，２の大比較開始位置には、共に初期値として１（図５のＮｏ．４）が設定されている（２５１）。両テーブル１，２の大比較終了位置には、共に５０が、図７のステップ１０７の処理により設定されている（２５２）。
この状態から、大比較処理部２００の処理が行われる様子を説明する。
まず、図９のステップ２０１の処理により、両テーブル１，２とも大比較一致済最終行にゼロがセットされる。両テーブル１，２とも、大比較開始位置は１、大比較終了位置は５０であるため、図９のステップ２０３の一致部位サーチの処理に進む。
【００３９】
この一致部位サーチの処理方法について説明する。
図１２−１のテーブル１上にある長方形の太枠２５３、およびテーブル２上にある長方形の太枠２５４に囲まれた範囲は、大比較処理部２００で比較対象となる連続９行を、模式的に表している。２５３、２５４ともに、最初は各テーブルの先頭に位置している。この状態から、２５４をテーブル２の最終行に至るまで１行ずつ下にスクロールさせながら、２５３と２５４が一致するか否かを判定する。一致しなかった場合には、２５３をテーブル１上で１行下にずらし、再び２５４をテーブル２の先頭から最終行に至るまで１行ずつ下にスクロールさせながら、２５３と２５４が一致するか否かを判定する。
それ以降、同様に２５３をテーブル１の中で１行下げる間に、２５４をテーブル２の先頭から最終行までスクロールさせる操作を、２５３と２５４が最初に一致する部位を見つけるまで繰り返していく（図１７参照、ただし、図中のｐの値を９とみなす）。
【００４０】
図１２−２は、図１２−１で示した方法により、テーブル１の１８行目〜２６行目と、テーブル２の２０行目〜２８行目に一致部位を発見したことを示している。
これにより、図９のステップ２０４にて、テーブル１の大比較一致済最終行に２６が、テーブル２のそれには２８が、それぞれセットされる（２５５）。
この際、読み飛ばされた行が両テーブル１，２に存在するため（図９のステップ２０７）、図９のステップ２１０の処理により、両テーブル１，２の中比較開始位置には大比較開始位置の値である１がセットされ（２５６）、テーブル１の中比較終了位置には、テーブル１で一致した先頭行である１８行目から１をマイナスした値である１９がセットされる（２５７）。これらの設定は、この直後に行う中比較処理部３００の処理範囲を決定しているものである。
【００４１】
最後に、図９のステップ２１２の処理により、テーブル１の大比較開始位置には、テーブル１で一致した最終行に１を加算した値である２７がセットされ、テーブル２の大比較開始位置には、テーブル２で一致した最終行に１を加算した値である２９がセットされる（２５８）。これらの設定は、後々、大比較処理部２００に戻った際の、大比較の処理範囲を決定しておくものである。
続いて、両テーブル１，２の読み飛ばされた部位、具体的にはテーブル１の１行目から１７行目、テーブル２の１行目から１９行目について、中比較処理部３００の処理を行うので、これについては図１３−１で説明する。
【００４２】
図１３−１は、中比較開始時点の両テーブルの状態を示す図である。
ただし、便宜上、この中比較処理部３００の処理に関係のある行のみを図示している。
中比較開始位置の値は、テーブル１、テーブル２共に先程の図１２−２の中で設定した１となっている（３５１）。
同様に、中比較終了位置の値は、それぞれ１７、１９となっている（３５２）。
この状態から、中比較処理部３００の処理が行われる様子を説明する。
まず、図１０のステップ３０１の処理により、両テーブル１，２とも中比較一致済最終行にゼロがセットされる。
両テーブル１，２とも、中比較開始位置＞中比較終了位置を満たさないので、図１０のステップ３０３の一致部位サーチの処理に進む。
【００４３】
上記の一致部位サーチの処理方法について説明する。
図１３−１のテーブル１上にある長方形の太枠３５３、およびテーブル２の上にある長方形の太枠３５４に囲まれた範囲は、中比較処理部３００で比較対象となる連続３行を模式的に表している。太枠３５３、３５４ともに、最初は各テーブルの中比較開始位置３５１に位置している。
この状態から、３５４をテーブル２の中比較終了位置３５２に至るまで１行ずつ下にスクロールさせながら、３５３と３５４が一致するか否かを判定する。一致しなかった場合には、３５３をテーブル１上で１行下にずらし、再び３５４をテーブル２の中比較開始位置３５１から中比較終了位置３５２に至るまで１行ずつ下にスクロールさせながら、３５３と３５４が一致するか否かを判定する。
それ以降、同様に３５３をテーブル１の中で１行下げる間に、３５４をテーブル２の中比較開始位置３５１から中比較終了位置３５２までスクロールさせる操作を、３５３と３５４が最初に一致する部位を見つけるまで繰り返していく（図１７参照、ただし、図中のｐの値を３とみなす）。この例の場合には、３５３および３５４をスクロールさせることなく、各テーブルの中比較開始位置の状態で一致することになる。
【００４４】
図１３−２は、上記１３−１の方法によりテーブル１の１行目〜３行目と、テーブル２の１行目〜３行目が一致したことを示した図である。
これにより、図１０のステップ３０４にて、テーブル１の中比較一致済最終行に３が、テーブル２のそれにも３がセットされる（３５５）。
この際に、読み飛ばされた行が両テーブル１，２に存在しないため（図１０のステップ３０６）、図１０のステップ３１２の処理により、テーブル１の中比較開始位置には、テーブル１で一致した最終行に１を加算した値である４がセットされ、テーブル２の中比較開始位置にも、テーブル２で一致した最終行に１を加算した値である４がセットされる（３５６）。
この設定は、引き続き行う中比較処理部３００の処理範囲を決定しておくものである。
テーブル１、テーブル２の大比較開始位置は、先程の図１２−２で求めた通り、それぞれ２７，２９であり、中比較開始位置の値（それぞれ４，４）より大きいため、図１０のステップ３１４の処理は行われない。
読み飛びされた行が両方のテーブルに無いため、図１０上ではステップ３１３に進み、引き続き図１３−３の太枠の位置から一致部位をサーチする。
【００４５】
図１３−３は、２回目の中比較処理部３００の処理開始時点の状態を示した図である。
両テーブル１，２とも、中比較開始位置＞中比較終了位置を満たさないため、図１０のステップ３０３の一致部位サーチの処理を３５７から３５８の範囲で行う。
【００４６】
図１３−４は、テーブル１の１１行目〜１３行目と、テーブル２の１０行目〜１２行目が一致したことを示す図である。
これにより、図１０のステップ３０４にて、テーブル１の中比較一致済最終行に１３が、テーブル２のそれには１２が、それぞれセットされる（３５９）。
この際、読み飛ばされた行が両テーブル１，２に存在するため（図１０のステップ３０７）、図１０のステップ３１０の処理により、両テーブル１，２の小比較開始位置には、中比較開始位置の値である４がセットされ（３６０）、テーブル１の小比較終了位置には、テーブル１で一致した先頭行である１１行目から１をマイナスした値である１０がセットされ、また、テーブル２の小比較終了位置には、テーブル２で一致した先頭行である１０行目から１をマイナスした値である９がセットされる（３６１）。
これらの設定は、この直後に行う小比較処理部４００の処理範囲を決定しているものである。
【００４７】
最後に、図１０のステップ３１２の処理により、テーブル１の中比較開始位置には、テーブル１で一致した最終行に１を加算した値である１４がセットされ、テーブル２の中比較開始位書には、テーブル２で一致した最終行に１を加算した値である１３がセットされる（３６２）。
これらの設定は、後々中比較処理部３００の処理に戻った際の、中比較の処理範囲を決定しておくものである。
テーブル１、テーブル２の大比較開始位置は、先程の図１２−２で求めた通り、それぞれ２７、２９であり、中比較開始位置の値（それぞれ１４，１３）より大きいため、図１０のステップ３１４の処理は行われない。
続いて、両テーブル１，２の読み飛ばされた部位、具体的にはテーブル１の１行目から１０行目、テーブル２の１行目から９行目について、小比較処理部４００の処理を行うので、図１４−１で説明する。
【００４８】
図１４−１は、小比較開始時点の両テーブルの状態を示す図である。
ただし、便宜上、この小比較処理に関係ある行のみを図示している。同様に、小比較終了位置の値は、それぞれ１０、９になっている（３５２）。
この状態から、小比較処理部４００の処理が行われる様子を説明する。
まず、図１１のステップ４０１の処理により、両テーブル１，２とも小比較一致済最終行に３がセットされる。
両テーブル１，２とも、小比較開始位置＞小比較終了位置を満たさないので、図１１のステップ４０３の一致部位サーチの処理に進む。
【００４９】
上記の一致部位サーチの処理方法について説明する。
図１４−１のテーブル１上にある長方形の太枠４５３、およびテーブル２上にある長方形の太枠４５４に囲まれた範囲は、中比較処理部４００で比較対象となる１行を、模式的に表している。
４５３，４５４ともに、最初は各テーブルの小比較開始位置（４５１）に位置している。
この状態から、４５４をテーブル２の小比較終了位置４５２に至るまで１行ずつ下にスクロールさせながら、４５３と４５４が一致するか否かを判定する。一致しなかった場合には、４５３をテーブル１上で１行下にずらし、再び４５４をテーブル２の小比較開始位置４５１から小比較終了位置４５２に至るまで１行ずつ下にスクロールさせながら、４５３と４５４が一致するか否かを判定する。
以降、同様に、４５３をテーブル１の中で１行下げる間に、４５４をテーブル２の小比較開始位置４５１から小比較終了位置４５２までスクロールさせる操作を、４５３と４５４が最初に一致する部位を見つけるまで繰り返していく（図１７参照）。ただし、図中のｐの値を１とみなす）。この例の場合には、４５３と４５４をスクロールさせることなく、各テーブルの小比較開始位置の状態で一致することになる。
【００５０】
図１４−２は、上記図１４−１で説明した方法により、テーブル１の４行目と、テーブル２の４行目が一致したことを示す図である。
これにより、図１１のステップ４０４にて、テーブル１の小比較一致済最終行に４が、テーブル２のそれにも４がセットされる（４５５）。
この際に、読み飛ばされた行が両テーブル１，２に存在しないため（図１１のステップ４０７）、図１１のステップ４０９の処理により、テーブル１の小比較開始位置には、テーブル１で一致した行に１を加算した値である５がセットされ、テーブル２の小比較開始位置にも、テーブル２で一致した行に１を加算した値である５がセットされる（４５６）。
この設定は、引き続き行う小比較処理部４００の処理範囲を決定しておくものである。
【００５１】
テーブル１、テーブル２の大比較開始位置は、先程の図９のステップ２１２で求めた通り、それぞれ２７，２９であり、小比較開始位置の値（それぞれ５，５）より大きいため、図１１のステップ４１１の処理は行われない。
また、テーブル１、テーブル２の中比較開始位置は、先程の図１３−４で求めた通り、それぞれ１４，１３であり、小比較開始位置の値（それぞれ５，５）より大きいため、図１１のステップ４１２の処理は行われない。
図１１上では、ステップ４１３に進み、引き続き図１４−３の太枠の位置から一致部位をサーチする。
【００５２】
図１４−３は、２回目の小比較処理部４００の開始時点の状態を示す図である。
両テーブル１，２とも、小比較開始位置＞小比較終了位置を満たさないため、図１１のステップ４０３の一致部位サーチの処理を４５７から４５８の範囲で行う。
【００５３】
図１４−４は、テーブル１の７行目と、テーブル２の７行目が一致したことを示す図である。
これにより、図１１のステップ４０４にて、テーブル１の小比較一致済最終行に７が、テーブル２のそれにも７が、それぞれセットされる（４５９）。
この際、読み飛ばされた行が両テーブル１，２に存在するため（図１１のステップ４０６）、図１１のステップ４０８の処理により、これらの読み飛ばされた行をアンマッチと認識する。
そして、図１１のステップ４０９の処理により、テーブル１の小比較開始位置には、テーブル１で一致した行に１を加算した値である８がセットされ、テーブル２の小比較開始位置にも、テーブル２で一致した行に１を加算した値である８がセットされる（４６０）。
この設定は、引き続き行う小比較処理部４００の処理範囲を決定しておくものである。
なお、図１１のステップ４１１およびステップ４１２の処理は、図１４−２と同様の理由で行われない。
【００５４】
これ以降、小比較開始位置４６０が小比較終了位置に至る４６１まで、この小比較処理部４００の処理を繰り返し、一致するまでに読み飛ばされた両テーブル１，２の行をアンマッチ行と判定し（４０６→４０８）、一致行が見つからなかった場合も、両テーブル１，２の読み飛ばされた行をアンマッチ行と判定していく（４０５→４０８）。
もう片側のテーブルの残り行（小比較終了位置まで）をアンマッチ行と判定する（４０２→４１０）。
完了したならば、中比較処理部３００の処理に戻り、前回の中比較処理で設定しておいた中比較開始位置から再度一致部位をサーチする。
これ以降、中比較終了位置に至るまで、中比較処理と小比較処理を繰り返す。
完了したならば、前回の大比較処理部２００で設定しておいた大比較開始位置から再度大比較処理を実行する。
以降、実質的なテーブルの末尾である大比較終了位置（図５のＮｏ．７）に至るまで、これら大中小それぞれの比較処理を繰り返す。
【００５５】
図１５は、テーブルの比較処理が完了した状態を示す図である。
図１５で枠に囲まれた部分は一致した部位、塗り潰し部分はアンマッチと判定された部位を示している。また、“ｎ番目”の表記は、大中小の比較処理を通して一致と判定されていった順番を表している。
この状態から、比較結果出力処理（図８）が行われる。これについては、図１６で説明する。
【００５６】
図１６−１は、図１５の状態に、両テーブルの小比較一致済最終行（５０３，５０７）、中比較一致済最終行（５０６，５１０）、および、大比較一致済最終行（５０４，５０９）の各値を明示した図である。
また、テーブル処理パラメタであるところの次回比較開始位置調整数Ａ（図４のＮｏ．４）も明示してある（５０５，５０８）。
図１５と比べて、両テーブル１，２の末尾が塗りつぶされていないのは、図８のステップ５０１の処理で、調整が行われているためである。すなわち、テーブル内ではアンマッチと判定されたが、次にテーブル（図３の０３０，０３１）に格納されるべきプログラムソース（図２の０２０，０２１）の続き部位と連続性を維持して比較できる様に、一旦、アンマッチの判定を取り消すためである。
一旦、アンマッチの判定を取り消された部位を、引継部位と言うことにする。
【００５７】
図８のステップ５０１の処理を、図１６−１を用いて具体的に説明する。
テーブル１について、大比較一致済最終行（５０４）、中比較一致済最終行（５０６）、小比較一致済最終行（５０３）の中で最大のものは、中比較一致済最終行（５０６）であり、その値は４６である。
また、テーブル２について、大比較一致済最終行（５０９）、中比較一致済最終行（５１０）、小比較一致済最終行（５０７）の中で最大のものは、中比較一致済最終行（５１０）であり、その値は４８である。
そして、この両テーブル１，２の最大値が、次回比較開始位置調整数である４０より小さい場合には、４０の値を最大値とみなすのであるが、この例の場合には、テーブル１の最大値は４６、テーブル２のそれは４８であり、共に４０より大きいため、最大値の置き換えは行われない。
そして、テーブル１の（最大値＋１）の値から、テーブル最終行まで（５１１）について、アンマッチの判定を取り消す（テーブル１の引継部位とする）。また、テーブル２の（最大値＋１）の値から、テーブル最終行まで（５１２）について、アンマッチの判定を取り消す（テーブル２の引継部位とする）。
【００５８】
ここで、次回比較開始位置調整数Ａ（５０５，５０８）の役割を説明する。
図１６−１において、仮に最後に一致した部位が両テーブルの内のかなり上方にあった場合、すなわち、極端な例で言うと、全行がアンマッチとなり、テーブル内に一致部位が全く存在しない場合に、次にテーブルに格納する引継部位を、強制的にＡ（５０５，５０３）の次の行からテーブル最終行の範囲に決定するものである。これにより、無限ループを含む処理性能の劣化を防ぐことができる。
【００５９】
結局、アンマッチとみなされた行は、図１６−１の塗り潰された部位となり、これらの部位について、アンマッチ行出力を行う（図８のステップ５０２）。
図６がその実例である。すなわち、変更前プログラムソースの５，６，９，２９，３９，４３行目に対して、変更後プログラムソースのそれぞれ５，６，９，３１，３２，４５行目が〔置換〕として表示され、変更後プログラムソースの１７，１８，１９，４９，５０行目が〔追加〕として表示されている。
これで、１回目のテーブルにおける、格納、比較、結果出力処理が完全に終了し、次に２回目のテーブル格納処理が行われていく。
【００６０】
図１６−２は、２回目のテーブル格納後の状態を示す図である。
１回目のテーブルから引き継がれた部位が先頭に格納され、その後に各プログラムソースの続きが格納されている。
具体的には、テーブル１に関しては、引継部位である図１６−１の（５１１）が、先頭から４行目にまず格納され（１０８）、続いて５行目からは、変更前プログラムソースの５１行目（図２の０２２）以降が格納されている。
また、テーブル２に関しては、引継部位である図１６−１の（５１２）が、先頭から２行目にまず格納され（１０９）、続いて３行目からは、変更前プログラムソースの５１行目（図２の０２３）以降が格納されている。
【００６１】
図１６−３は、２回目のテーブル格納後、比較処理を行った結果を示す図である。
両テーブル１，２の枠で囲まれた部分（１１０，１１１）が一致とみなされた部分である。
テーブル１に関しては、１回目のテーブルから引き継がれた１〜４行目のうち、１〜３行目（１１０）が、また、テーブル２に関しては、新たに読み込まれた変更後プログラムソースの５１〜５３行目（１１１）が、それぞれ一致箇所として該当する。
これにより、１回目のテーブルではアンマッチと見なされた部位（図１６−１の（５１１））のうち、最初の３行が、２回目のテーブル内では一致とみなされ、テーブルに格納される前後の位置での誤判定を防止することができる。
【図面の簡単な説明】
【００６２】
【図１】本発明の一実施例に係るプログラムソース比較システムの全体ブロック図である。
【図２】本発明における変更前プログラムソースと変更後プログラムソースの構成を示す図である。
【図３】本発明における内部テーブルの構成を示す図である。
【図４】本発明におけるテーブル処理パラメタの一覧とそのデータ例を示す図である。
【図５】本発明における処理で使用する変数の一覧とその説明の図である。
【図６】本発明における処理結果の出力例を示す図である。
【図７】本発明におけるテーブル格納処理部の動作フローチャートである。
【図８】本発明における比較結果出力処理部の動作フローチャートである。
【図９】本発明における大比較処理部の動作フローチャートである。
【図１０】本発明における中比較処理部の動作フローチャートである。
【図１１】本発明における小比較処理部の動作フローチャートである。
【図１２．１】最初のテーブル格納処理が完了した時点の状態説明図である。
【図１２．２】一致部位を発見したことを示したテーブルの状態説明図である。
【図１３．１】中比較開始時点の両テーブルの状態説明図である。
【図１３．２】中比較でテーブル１とテーブル２の一部が一致したことを示す状態説明図である。
【図１３．３】２回目の中比較処理開始時点のテーブルの状態説明図である。
【図１３．４】２回目の中比較でテーブル１とテーブル２の一部が一致したことを示す状態説明図である。
【図１４．１】小比較開始時点の両テーブルの状態説明図である。
【図１４．２】小比較でテーブル１とテーブル２の一部が一致したことを示す状態説明図である。
【図１４．３】２回目の小比較処理開始時点の状態説明図である。
【図１４．４】２回目の小比較でテーブル１とテーブル２の一部が一致したことを示す状態説明図である。
【図１５】テーブル内での比較が完了した時点のテーブルの状態を実例で示す説明図である。
【図１６．１】小比較、中比較、大比較一致済最終行の各値を示す説明図である。
【図１６．２】２回目のテーブル格納後の状態説明図である。
【図１６．３】２回目のテーブル格納後、比較処理を行った結果を示す説明図である。
【図１７】一致部位サーチの詳細処理の動作フローチャートである。
【符号の説明】
【００６３】
０１３  比較結果
０１４  テーブル処理パラメタ記憶部
０２０  変更前プログラムソース
０２１  変更後プログラムソース
０３０  内部テーブル（テーブル１）
０３１  内部テーブル（テーブル２）
１００  テーブル格納処理部
２００  大比較処理部
３００  中比較処理部
４００  小比較処理部
５００  比較結果出力処理部
【図１】
2008059514.tif 000003
【図２】
2008059514.tif 000004
【図３】
2008059514.tif 000005
【図４】
2008059514.tif 000006
【図５】
2008059514.tif 000007
【図６】
2008059514.tif 000008
【図７】
2008059514.tif 000009
【図８】
2008059514.tif 000010
【図９】
2008059514.tif 000011
【図１０】
2008059514.tif 000012
【図１１】
2008059514.tif 000013
【図１２．１】
2008059514.tif 000014
【図１２．２】
2008059514.tif 000015
【図１３．１】
2008059514.tif 000016
【図１３．２】
2008059514.tif 000017
【図１３．３】
2008059514.tif 000018
【図１３．４】
2008059514.tif 000019
【図１４．１】
2008059514.tif 000020
【図１４．２】
2008059514.tif 000021
【図１４．３】
2008059514.tif 000022
【図１４．４】
2008059514.tif 000023
【図１５】
2008059514.tif 000024
【図１６．１】
2008059514.tif 000025
【図１６．２】
2008059514.tif 000026
【図１６．３】
2008059514.tif 000027
【図１７】
2008059514.tif 000028