(57)【要約】      （修正有）【課題】コンパイラオプション付加の有無によりソースコードが影響を受ける個所を容易に検出する。【解決手段】コンパイラが、ソースコードを、オブジェクトコードによるコンピュータのデータ処理内容を変更させる指示を含むオプション情報を使用する場合と、前記オプション情報を使用しない場合とについて、前記ソースコードと前記オブジェクトコードとを仲介する中間語コードに変換し、前記コンパイラの出力である前記中間語コードを処理する中間語コード処理部が、前記オプション情報使用時の前記中間語コードと、前記オプション情報不使用時の前記中間語コードとを比較してデータ処理内容が変更されている個所を抽出し、データ処理内容変更箇所を、前記ソースコード中の対応するロケーションと関連づけ、前記データ処理内容変更箇所の前記ソースコード中の前記ロケーションを出力する。【選択図】図１
2012226706.tif 000002
【特許請求の範囲】
【請求項１】
コンピュータによって実行されるプログラムのソースコードを前記ソースコードから前記コンピュータで実行可能なオブジェクトコードに変換するコンパイラが、前記ソースコードを、前記オブジェクトコードによる前記コンピュータのデータ処理内容を変更させる指示を含む情報であるオプション情報を使用する場合と、前記オプション情報を使用しない場合とについて、前記ソースコードと前記オブジェクトコードとを仲介する中間語コードに変換し、
前記コンパイラの出力である前記中間語コードを処理する中間語コード処理部が、前記オプション情報使用時の前記中間語コードと、前記オプション情報不使用時の前記中間語コードとを比較してデータ処理内容が変更されている個所を抽出し、
前記データ処理内容変更箇所を、前記ソースコード中の対応するロケーションと関連づけ、
前記データ処理内容変更箇所の前記ソースコード中の前記ロケーションを出力する、
データ処理変更箇所検出方法。
【請求項２】
前記中間語コードが、前記オブジェクトコードを、前記ソースコードに付与されている前記ロケーションに関する情報であるロケーション情報と対応付けられた木構造によって記述されている、
請求項１に記載のデータ処理変更箇所検出方法。
【請求項３】
前記中間語コード処理部が、前記ソースコード中の前記ロケーション情報と、前記木構造を有する前記中間語コードに含まれる部分木とを対応付け、前記オプション情報使用時の前記中間語コードと、前記オプション情報不使用時の前記中間語コードとを前記部分木毎に比較して前記データ処理内容変更箇所を検出する、
請求項２に記載のデータ処理変更箇所検出方法。
【請求項４】
コンピュータによって実行されるプログラムのソースコードを前記ソースコードから前記コンピュータで実行可能なオブジェクトコードに変換するコンパイラであって、前記ソースコードを、前記オブジェクトコードによる前記コンピュータのデータ処理内容を変更させる指示を含む情報であるオプション情報を使用する場合と、前記オプション情報を使用しない場合とについて、前記ソースコードと前記オブジェクトコードとを仲介する中間語コードに変換する前記コンパイラと、
前記コンパイラの出力である前記中間語コードを処理する中間語コード処理部であって、前記オプション情報使用時の前記中間語コードと、前記オプション情報不使用時の前記中間語コードとを比較してデータ処理内容が変更されている個所を抽出し、
前記データ処理内容変更箇所を、前記ソースコード中の対応するロケーションと関連づけ、
前記データ処理内容変更箇所の前記ソースコード中の前記ロケーションを出力する、前記中間語コード処理部と、
を備えているデータ処理変更箇所検出装置。
【請求項５】
コンピュータによって実行されるプログラムのソースコードを前記ソースコードから前記コンピュータで実行可能なオブジェクトコードに変換するコンパイラと、前記コンパイラの出力である中間語コードを処理する中間語コード処理部とを備える計算機システムに、
前記ソースコードを、前記オブジェクトコードによる前記コンピュータのデータ処理内容を変更させる指示を含む情報であるオプション情報を使用する場合と、前記オプション情報を使用しない場合とについて、前記ソースコードと前記オブジェクトコードとを仲介する中間語コードに変換するステップと、
前記オプション情報使用時の前記中間語コードと、前記オプション情報不使用時の前記中間語コードとを比較してデータ処理内容が変更されている個所を抽出するステップと、
前記データ処理内容変更箇所を、前記ソースコード中の対応するロケーションと関連づけるステップと、
前記データ処理内容変更箇所の前記ソースコード中の前記ロケーションを出力するステップと、
を実行させる、データ処理変更箇所検出プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、データ処理変更箇所検出方法、データ処理変更箇所検出装置、及びデータ処理変更箇所検出プログラムに関する。
【背景技術】
【０００２】
周知のように、コンパイラは、ソースコードとして記述されているコンピュータプログラム（以下「プログラム」）を機械語であるオブジェクトコードで記述されたプログラムに変換するために使用されるソフトウェアである。
【０００３】
コンパイラにはオプションと呼ばれる機能が付加されている。オプションは、特定のプログラミング言語で記述されたソースコードにおいて、あるデータ処理が備えている機能を別の機能に変換することができる。簡単な例では、浮動小数型数値データを整数として読み込む際に、各数値データの小数点以下を切り捨てて読み込むか、四捨五入して読み込むかを、ソースコードへのオプション設定有無によって切り替えることができる。オプションは、オブジェクトコードの最適化の度合いの調整、プログラムが動作するプラットフォーム間での互換性確保などの目的で、ユーザのニーズに合わせて生成するオブジェクトコードを変化させることができる。オプションの有無によりソースコードのうちのどの範囲に影響が及ぶかは、オブジェクトコードの実行結果をソースコードと対照して詳細にチェックする等の煩雑な作業により行う必要がある。
【０００４】
一方、現在では、ソフトウェア開発環境として、生産性向上等の観点から、コンパイラ、デバッガ、エディタなどの開発用ツールを相互に連携させて活用することができるように構成されている統合開発環境が主流である。これらの開発用ツールは相互に連携しており、例えばデバッグ中に変数の値をエディタ上で確認する等の操作が可能である。
【０００５】
エディタによってユーザに有用な情報を提示する例を開示している文献に、例えば特許文献１がある。特許文献１には、プログラム・ソース・ファイル中のプリプロセス命令の解析を行い、その解析により得られたプリプロセス結果を、通常のコンパイル工程やデバッグ工程の前にエディタ画面部へ視覚的に表示するプリプロセス解析表示手段を備えているプログラム・エディタが開示されている。これにより、プリプロセス解析表示手段は、ユーザからコンパイラに指定されるコンパイラの種別、プリプロセッサ命令の誤りを検出して、その結果をエディタ上に表示することができる。
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】特開２０００−１４８５０８号公報
【発明の概要】
【発明が解決しようとする課題】
【０００７】
しかし、特許文献１では、プリプロセッサ命令の誤りのみを検出対象としており、コンパイラと連携してユーザに情報を提供する仕組みにはなっていない。したがって、コンパイラオプションの指定の有無によってコンパイラの生成するオブジェクトコードが変化する部分を抽出するに際し、オブジェクトコードとソースコードとの煩雑な比較対照作業をなくし、あるいは軽減することは出来なかった。
【課題を解決するための手段】
【０００８】
本発明は、上記の及び他の課題を解決するためになされたもので、本発明の一態様は、コンピュータによって実行されるプログラムのソースコードを前記コンピュータで実行可能なオブジェクトコードに変換するコンパイラが、前記ソースコードを、前記オブジェクトコードによる前記コンピュータのデータ処理内容を変更させる指示を含む情報であるオプション情報を使用する場合と、前記オプション情報を使用しない場合とについて、前記ソースコードと前記オブジェクトコードとを仲介する中間語コードに変換し、前記コンパイラの出力である前記中間語コードを処理する中間語コード処理部が、前記オプション情報使用時の前記中間語コードと、前記オプション情報不使用時の前記中間語コードとを比較してデータ処理内容が変更されている個所を抽出し、前記データ処理内容変更箇所を、前記ソースコード中の対応するロケーションと関連づけ、前記データ処理内容変更箇所の前記ソースコード中の前記ロケーションを出力するデータ処理変更箇所検出方法である。
【発明の効果】
【０００９】
上記の本発明の一態様によれば、コンパイラオプション付加の有無によりソースコードが影響を受ける個所を容易に検出することができ、ソフトウェア開発の生産性を向上させることができる。
【図面の簡単な説明】
【００１０】
【図１】図１は、本発明の一実施形態による計算機システム１００のシステム構成を示す図である。
【図２】図２は、本実施形態によるデータ処理変更箇所検出処理の概要を示す模式図である。
【図３】図３は、ソースコード１３１の一例を示す図である。
【図４Ａ】図４Ａは、コンパイラオプションなしの条件で生成された中間語コードの例を示す図である。
【図４Ｂ】図４Ｂは、コンパイラオプションありの条件で生成された中間語コードの例を示す図である。
【図５】図５は、本実施形態における「行ブロック」の概念を示す図である。
【図６】図６は、本実施形態における「行ブロック」の概念を示す図である。
【図７】図７は、行ブロックリストテーブル１２６の構成例を示す図である。
【図８】図８は、行ブロックポインタエントリのデータ構造例を示す図である。
【図９】図９は、差分情報テーブル１２７の構成例を示す図である。
【図１０】図１０は、計算機システム１００の表示画面例１０００を示す図である。
【図１１】図１１は、統合開発環境制御部１２２によるデータ処理フローの一例を示す図である。
【図１２Ａ】図１２Ａは、中間語コード差分情報生成部１２５によるデータ処理フローの一例を示す図である。
【図１２Ｂ】図１２Ｂは、行ブロックリストテーブル生成処理フローの一例を示す図である。
【図１２Ｃ】図１２Ｃは、行ブロックリストテーブルへのデータ追加処理フローの一例を示す図である。
【図１２Ｄ】図１２Ｄは、差分情報テーブル生成処理の一例を示す図である。
【図１２Ｅ】図１２Ｅは、行ブロック比較処理の一例を示す図である。
【図１３】図１３は、エディタによる結果表示処理フローの一例を示す図である。
【発明を実施するための形態】
【００１１】
以下、本発明について、その一実施形態に即して添付図面を参照しながら説明する。  
まず、本実施形態によるデータ処理内容変更箇所検出方法を実行する計算機システム１００の構成について説明する。図１に、データ処理内容変更箇所検出装置としての計算機システム１００の構成例を示している。
【００１２】
図１に示すように、計算機システム１００は、制御部１１０、主記憶装置１２０、補助記憶装置１３０、出力装置１４０、及び入力装置１５０を備えている。計算機システム１００は、プログラムのソースコードを入力として受け取り、そのソースコードをコンパイルしてオブジェクトコードとして出力する機能を有する。本実施形態の計算機システム１００では、この基本機能に加えて、コンパイラオプションの有無によるデータ処理内容変更箇所検出機能が設けられている。
【００１３】
制御部１１０は、後述する主記憶装置に格納されているプログラムを実行することにより本計算機システム１００の機能を実現するブロックである。制御部１１０は、例えばＣＰＵ（Central Processing Unit）、ＭＰＵ（Micro Processing Unit）等のプロセッサを備えている。
【００１４】
主記憶装置１２０は、例えばＲＡＭ（Random Access Memory）、ＲＯＭ（Read Only Memory）等の半導体メモリ素子を備えている。主記憶装置１２０には、本計算機システム１００の機能を実現するための、後述する各種プログラム、及びそれらのプログラムによって使用される、あるいはそれらのプログラムによって生成されたデータが格納されている。
【００１５】
補助記憶装置１３０は、後述する入力装置１５０等から入力されるコンパイル対象であるプログラムのソースコードを格納している。補助記憶装置１３０は、例えばハードディスクドライブ（Hard Disk Drive、ＨＤＤ）、半導体記憶ドライブ（Solid State Drive、ＳＳＤ）、光ディスクドライブ等の記憶デバイスを備えている。
【００１６】
出力装置１４０は、制御部１１０によるプログラムの実行結果、計算機システム１００への操作入力等に関するユーザインタフェース画面を表示する、液晶ディスプレイ等の表示デバイス、プリンタ、スピーカ等の出力デバイスを含む。
【００１７】
入力装置１５０は、キーボード、マウス、ペンタブレット、マイク等の入力デバイスを含む。制御部１１０、主記憶装置１２０、補助記憶装置１３０、出力装置１４０、及び入力装置１５０は、適宜の通信規格によるデータバス１６０によって、通信可能に接続されている。なお、データバス１６０には、計算機システム１００を外部の通信ネットワークに接続するための通信インタフェースを接続してもよい。
【００１８】
次に、主記憶装置１２０に格納されているプログラム及びデータテーブル類について説明する。図１に示すように、計算機システム１００の主記憶装置１２０には、オペレーティングシステム（Operating System、ＯＳ）１２１、統合開発環境制御部１２２、コンパイラ１２３、エディタ１２４、及び中間語コード差分情報生成部１２５（中間語コード処理部）の各プログラムが格納されている。また、主記憶装置１２０には、行ブロックリストテーブル１２６及び差分情報テーブル１２７が格納されている。
【００１９】
ＯＳ１２１は、一般的なコンピュータとしての計算機システム１００において、メモリ管理、データ入出力等の基本動作を制御するためのソフトウェアであり、一般的なコンピュータにおいて利用される種々のＯＳを採用して稼働させることができる。
【００２０】
統合開発環境制御部１２２は、計算機システム１００を用いてソフトウェア開発を実施する場合に、後述するコンパイラ１２３、エディタ１２４、及び中間語コード差分情報生成部１２５が相互に連係して動作するための基盤である統合開発環境（Integrated Development Environment、ＩＤＥ）を提供する統合ソフトウェアであり、ＯＳ１２１上で稼働する。また、統合開発環境制御部１２２は、プロジェクト管理機能、バージョン管理機能等の、ソフトウェア開発に必要とされる各種機能を提供している。
【００２１】
コンパイラ１２３は、補助記憶装置１３０等に格納されているソースコード１３１を読み出してオブジェクトコードに変換する処理であるコンパイルを実行するプログラムである。本実施形態のコンパイラ１２３は、後述するように、ソースコード１３１を直接オブジェクトコードに変換するほか、中間語コードに変換する機能を有している。
【００２２】
エディタ１２４は、開発対象ソフトウェアのソースコード、あるいはオブジェクトコードを操作するために使用される、例えばテキストエディタである。
【００２３】
中間語コード差分情報生成部１２５は、本実施形態の計算機システム１００における主要な機能であるデータ処理内容変更箇所検出機能において、コンパイラ１２３がコンパイラオプションありの場合にソースコード１３１から生成した中間語コードと、コンパイラオプションなしの場合にソースコード１３１から生成した中間語コードとを比較してその差分情報を抽出する機能を備えるプログラムである。
【００２４】
行ブロックリストテーブル１２６は、コンパイルしたソースコードと、生成された中間語コードとを対照して記録しているテーブルである。行ブロックリストテーブル１２６の構成例については後述する。
【００２５】
差分情報テーブル１２７は、中間語コード差分情報生成部１２５が生成したコンパイラオプション有無による中間語コードのデータ処理変更箇所を、ソースコード１３１の行番号（ソースコード１３１中のロケーションを示すロケーション情報）と対照させて記録しているテーブルである。差分情報テーブル１２７の構成例については後述する。
【００２６】
中間語コード（オプションなし）１２８Ａ及び中間語コード（オプションあり）１２８Ｂは、ソースコード１３１からコンパイラ１２３がコンパイラオプションなし及びありの条件で生成した中間語コードであり、主記憶装置１２０内に一時的に格納される。
【００２７】
次に、本実施形態において実施されるデータ処理変更箇所検出処理の概要について説明する。図２は、本実施形態によるデータ処理変更箇所検出処理の概要を示す模式図である。図中の白抜き矢印は、処理の進行を模式的に表している。
【００２８】
まず、統合開発環境制御部１２２は補助記憶装置１３０からソースコード１３１を読み込んで、コンパイラ１２３に渡す。コンパイラ１２３は、コンパイラオプションなしの条件でソースコード１３１から生成した中間語コード（オプションなし）１２８Ａ、及びコンパイラオプションありの条件でソースコード１３１から生成した中間語コード（オプションあり）１２８Ｂを統合開発環境制御部１２２に返す。統合開発環境制御部１２２は、受領したこれらの中間語コード１２８Ａ、１２８Ｂを主記憶装置１２０に格納する。
【００２９】
次いで、統合開発環境制御部１２２は、中間語コード差分情報生成部１２５を起動し、中間語コード（オプションなし）１２８Ａ、及び中間語コード（オプションあり）１２８Ｂを主記憶装置１２０から読み出して行ブロックリストテーブル１２６を生成して比較し、差分情報テーブル１２７を生成して統合開発環境制御部１２２に渡す。
【００３０】
統合開発環境制御部１２２はこの差分情報テーブル１２７をエディタ１２４に渡して、出力装置１４０を介してユーザに提示する。なお、差分情報テーブル１２７に記録されている情報の出力装置１４０を通じた出力処理は、エディタ１２４以外の部分、例えば統合開発環境制御部１２２が実行してもよい。また、差分情報テーブル１２７を生成する処理以降に代えて、例えばコンパイラオプション有無によって生成した中間語コード１２８Ａ、１２８Ｂをダンプリスト等の出力形態で出力させるようにしてもよい。
【００３１】
図３にソースコード１３１の一例を示している。図３のソースコード１３１には、行番号１〜５と、それぞれに対する処理を示すコードが対応付けて記録されている。  
まず、行番号１では、浮動小数型変数Ａが定義され、Ａの初期値として１．５が設定される。  
行番号２では、整数型配列Ｂが定義される。定義される配列は、Ｂ［１］〜Ｂ［１０］の１０個である。  
行番号３では、ループ処理が行われる。括弧内はループ処理の回数を示し、図３の例ではループ処理を１０回反復して行うことを示している。  
行番号４には、行番号３のループ処理の内容が記述されている。具体的には、配列Ｂのｉ番目にＡの値を代入する処理である。ここで、変数ｉは配列Ｂの添え字である。ｉは行番号３のループ処理によって１から１０まで順に増加する。このループ処理により、配列Ｂ［１］〜Ｂ［１０］にＡの値が代入される。  
ここで、変数Ａが小数値を持つのに対し、配列Ｂ［ｉ］には整数しか代入することができないため、変数Ａの小数値を丸める処理が必要となる。例えば、丸め処理として「切捨て」を採用すれば、Ｂ［ｉ］には数値１が代入され、丸め処理として「四捨五入」を採用すれば、Ｂ［ｉ］には数値２が代入される。コンパイラ１２３は、この丸め処理として切捨てか四捨五入のいずれを採用するかを、コンパイラオプションによって指定することができる。
【００３２】
次に、図３に例示したソースコード１３１からコンパイラ１２３が生成する中間語コードについて説明する。図４Ａにコンパイラオプションなしの条件で生成された中間語コードの例を、図４Ｂにコンパイラオプションありの条件で生成された中間語コードの例をそれぞれ示している。コンパイラ１２３は、ソースコード１３１の意味解析を実行して図４Ａ、図４Ｂに例示する構文木を生成する。以下、「中間語コード」の用語は、この得られた木構造の中間語コードを意味するものとする。
【００３３】
図４Ａを参照すると、ソースコード１３１は木構造で記述されたノードの集合として記述され、ルート（root）ノード４００で開始される。中間語コードには、変換元であるソースコード１３１の各行頭を示す抽象表現である、行先頭ノード４１０、４２０、４３０、４４０が存在している。
【００３４】
ソースコード１３１の行番号１の処理は、行先頭（１）（ノード４１０）以下に記述され、変数Ａ（ノード４１２）に数値データ１．５（ノード４１３）を代入（ノード４１１）となっている。行先頭（１）ノード４１０の直下にある代入ノード４１１は、行先頭（１）ノードの「子ノード」と定義される。一方、変数Ａノード４１２と数値１．５ノード４１３とは、「兄弟ノード」であると定義され、上位の変数Ａノード４１２が「兄ノード」となる。ノード４１１の代入処理では、第２子ノード（弟ノード）４１３の値１．５が第１子ノード（兄ノード）４１２の変数Ａに代入される。
【００３５】
ソースコード１３１の行番号２では、配列Ｂ［ｉ］の定義のみが行われるため、中間語コードで表す要素はない。このため、行番号２に対応する行先頭（２）（ノード４２０）の子ノードにはダミー（dummy）のノード４２１を設けておく。これは、後述する中間語コードの比較を行ブロック単位で（木構造中間語コードを構成する部分木単位で）行うためである。これにより、全ての行先頭ノードには必ず１つ以上の子ノードが付属することになる。
【００３６】
ソースコード１３１の行番号３では、行先頭（３）（ノード４３０）の下に、ループ処理実行を指示するノード（ノード４３１）が存在する。ループ処理は、ソースコード１３１に関して説明したように、自身に付属する第１子ノード（ノード４３２）の回数分だけ第２子ノード（ノード４４０）に定義されている処理を繰り返し実行する。図４Ａの例では、ループ処理ノード（ノード４３１）の第２子ノード（ノード４４０）に行先頭（４）が記述されているので、ループ処理は、行先頭（４）ノード（ノード４４０）から末尾の整数切捨てノード（ノード４４５Ａ）までに記述されている代入処理を繰り返し実行する。
【００３７】
ソースコード１３１の行番号４では、前記のように、行先頭（４）ノード（ノード４４０）の下に、代入処理実行を指示するノード（ノード４４１）が存在する。代入処理では、第１子ノードである配列Ｂ［ｉ］ノード（ノード４４２）に、第２子ノード（配列Ｂ［ｉ］ノードの弟ノード）である型変換処理ノード（ノード４４３）によって型変換処理された数値データが代入される。型変換処理では、型変換処理ノード（ノード４４３）の下にある第２子ノード（ノード４４５Ａ）で定義されている丸め方法に従って第１子ノード（ノード４４５Ａの兄ノードであるノード４４４）に記述されている変数Ａの型を変換する。
【００３８】
以上が、図３に例示したソースコード１３１を、コンパイラオプションなしの条件でコンパイルした場合に生成される中間語コードの構成例である。
【００３９】
一方、図３に例示したソースコード１３１を、コンパイラオプションありの条件でコンパイルした場合に生成される中間語コードの構成例を図４Ｂに示している。図４Ｂに示すコンパイラオプションありの場合の中間語コードは、ノード４００からノード４４４まで、図４Ａのコンパイラオプションなしの場合と同一であるが、型変換処理ノード（ノード４４３）直下にある第２子ノードである整数四捨五入ノード（ノード４４５Ｂ）が図４Ａのノード４４５Ａである整数切捨てノードと異なる。このノード４４５Ａとノード４４５Ｂとの差異により、図４Ａの型変換処理（ノード４４３）では変数Ａの小数データは切り捨てられ、図４Ｂの型変換処理（ノード４４３）では変数Ａについては小数点以下第１位の四捨五入による整数化が行われる。この差異は、ソースコード１３１の行番号４でのコンパイラオプションの有無に起因するものであるから、以下、この中間語コード上における差異と起因するソースコード１３１の行番号とを対応付ける方法を説明する。
【００４０】
まず、コンパイラオプションあり及びなしの両条件で生成した中間語コードを比較してその差異を検出する処理の前提となる構成を説明する。図５は、本実施形態における「行ブロック」の概念を示す図である。本実施形態において、行ブロックは、原則として該当行の行先頭ノード（図５の行先頭（３）ノード（ノード４３０））から、その下位に配置されている子ノード全てを含む。ただし、子ノードの中に該当行以外の行先頭ノード（図５の行先頭（４）ノード（ノード４４０））が検出された場合には、その検出された行先頭ノード以下の子ノードを除外する。従って、ソースコード１３１の行番号３に対応する行ブロックは、図５に示すように行先頭（３）ノード（ノード４３０）から行先頭（４）ノード（ノード４４０）までのノードの集合となる。
【００４１】
一方、図６には、ソースコード１３１（コンパイラオプションなし）の行番号４に対応する行ブロックを例示している。図６の例では、行先頭（４）ノード（ノード４４０）以下のノード群には他の行先頭ノードが含まれていない。従って、ソースコード１３１の行番号４に対応する行ブロックは、行先頭（４）ノード（ノード４４０）から整数切捨てノード（ノード４４５Ａ）までのノードの集合として定義される。なお、以上のように、行ブロックはコンパイラ１２３によって生成された中間語コードを中間語コード差分情報生成部１２５が解析する際に利用する、中間語コードのノードをグループ化する単位であって、行ブロック自体を表すデータは存在しない。
【００４２】
次に、中間語コード差分情報生成部１２５が中間語コードの解析及び比較処理に用いる行ブロックリストテーブル１２６について説明する。行ブロックリストテーブル１２６は、各行ブロックに含まれるノードの内容である行ブロックリスト１２６２を、ソースコード１３１の対応する行番号１２６１と対応付けて記録しているテーブルである。本実施形態の行ブロックリストテーブル１２６に記録されている行ブロックリスト１２６２の内容は、行ブロックポインタエントリを順次格納してなる単方向リスト構造をとなっている。
【００４３】
行ブロックポインタエントリは、行ブロックリスト１２６２に含まれているノードと、そのノードの次のノードが格納されている主記憶装置１２０内のアドレスを指示するポインタとの組み合わせを順に記録してなる。ソースコード１３１の行番号１に対応する行ブロックでは、ノードの内容である「代入」、「Ａ」、及び「１．５」について、それぞれ自ノード及び次ノードが格納されているアドレスが対応付けられる。なお、行ブロックの最終ノードには、次ノードへのポインタが対応付けられないので、例えば無効なデータ「null」を対応付けて記録しておく。図８には行ブロックリストテーブル１２６の要素である行ブロックポインタエントリのデータ構造例を示している。中間語コード差分情報生成部１２５は、コンパイラオプションありとなしの場合でそれぞれ生成した中間語コード１２８Ａ、１２８Ｂについて作成された行ブロックリストテーブル１２６に記録されている行ブロックポインタエントリに従って主記憶装置１２０に格納されている各ノードデータを比較していくことで、ソースコード１３１のいずれの行番号の処理がコンパイラオプション有無によって影響を受けるか検出することができる。中間語コード差分情報生成部１２５が実行する具体的な処理内容については後述する。
【００４４】
図９に、中間語コード差分情報生成部１２５が生成して主記憶装置１２０に格納する差分情報テーブル１２７の構成例を示している。差分情報テーブル１２７は、項番１２７１、行番号１２７２、及びオプション種別１２７３を対応付けて格納しており、中間語コード１２８Ａ、１２８Ｂを比較して抽出した差分情報を示している。項番１２７１は差分情報テーブル１２７の各レコードに付された識別番号、行番号１２７２は、中間語コード１２８Ａ、１２８Ｂの差異が検出された行ブロックに対応するソースコード１３１の行番号、オプション種別１２７３は、中間語コード１２８Ａ、１２８Ｂの差異を生じさせたコンパイラオプションの種別を示している。図９の例では、図４Ａ、図４Ｂに例示した中間語コード１２８Ａ、１２８Ｂについて、中間語コード差分情報生成部１２５が、ソースコード１３１の行番号４において四捨五入オプションを付加したことによる差異を検出したことが項番１に記録されている。
【００４５】
図１０に、計算機システム１００の出力装置１４０が、例えば液晶ディスプレイ等の表示デバイスに出力する表示画面例１０００を示している。図１０の表示画面例１０００では、ソースコード１３１のイメージで、行番号１０１０と対応する処理コード１０２０が対応付けられて表示されており、ソースコード１３１上のコンパイラオプション有無による差異検出箇所１０２１が、ハイライト表示などによって示されている。
【００４６】
次に、以上の構成により実現される、本実施形態のデータ処理内容変更箇所検出方法の具体的なデータ処理について説明する。まず、計算機システム１００の基本的なデータ処理を制御する統合開発環境制御部１２２によるデータ処理内容について説明する。図１１に、統合開発環境制御部１２２によるデータ処理フローの一例を示している。本実施形態のデータ処理変更箇所検出処理は、計算機システム１００のコンパイラ１２３、中間語コード差分情報生成部１２５、エディタ１２４が連携して実行される。その際に、統合開発環境制御部１２２は、コンパイラ１２３、中間語コード差分情報生成部１２５、エディタ１２４の連携を仲介する。
【００４７】
まず、統合開発環境制御部１２２は、入力装置１５０等の入力デバイスあるいは通信ネットワークを介してユーザからデータ処理変更箇所検出処理開始の指示を受け取る（Ｓ１１０１）。この指示には、補助記憶装置１３０に格納されているソースコード１３１の指定、及びコンパイラオプションの指定を含む。
【００４８】
指示を受けた統合開発環境制御部１２２は、指示に含まれているコンパイラオプションを「オプションＸ」として主記憶装置１２０に格納する（Ｓ１１０２）。次いで、統合開発環境制御部１２２は、指定されたソースコード１３１を、コンパイラオプションＸを指定せずにコンパイラ１２３によりコンパイルさせ、中間語コード１２８Ａを生成させた後、これを主記憶装置１２０に格納する（Ｓ１１０３）。次いで、統合開発環境制御部１２２は、指定されたソースコード１３１を、コンパイラオプションＸを指定してコンパイラ１２３によりコンパイルさせ、中間語コード１２８Ｂを生成させた後、これを主記憶装置１２０に格納する（Ｓ１１０４）。
【００４９】
統合開発環境制御部１２２は、主記憶装置１２０に格納されている中間語コード１２８Ａ、１２８Ｂを中間語コード差分情報生成部１２５に読み込ませて両者の差分情報を生成させ、その差分情報に基づいて差分情報テーブル１２７を作成して主記憶装置１２０に格納させる（Ｓ１１０５）。
【００５０】
統合開発環境制御部１２２は、エディタ１２４に差分情報テーブル１２７が作成されたことを通知し、出力装置１４０を通じて出力させる（Ｓ１１０６）。
【００５１】
以上の統合開発環境制御部１２２によるデータ処理によれば、コンパイラオプション有無によってソースコード１３１のデータ処理が変更される個所（コンパイラオプションによるソースコード１３１の効果範囲）を簡単に検出してユーザに知らせることができる。
【００５２】
次に、前記した統合開発環境制御部１２２による制御の下に、中間語コード差分情報生成部１２５が実行するデータ処理変更箇所検出処理について説明する。図１２Ａに、中間語コード差分情報生成部１２５によって実行されるデータ処理全体フローを示している。
【００５３】
まず、中間語コード差分情報生成部１２５は、主記憶装置１２０に格納されている、コンパイラオプションなしで生成された中間語コード１２８Ａを中間語コードＩとして取得し（Ｓ１２００）、この中間語コードＩから行ブロックリストテーブル１２６を生成する（Ｓ１３００）。次いで、中間語コード差分情報生成部１２５は、主記憶装置１２０に格納されている、コンパイラオプションありで生成された中間語コード１２８Ｂを中間語コードＩとして取得し（Ｓ１４００）、この中間語コードＩから行ブロックリストテーブル１２６を生成する（Ｓ１３００）。最後に、中間語コード差分情報生成部１２５は、Ｓ１３００で生成した中間語コード１２８Ａ、１２８Ｂの行ブロックリストテーブル１２６を比較して差分情報テーブル１２７を生成し処理を終了する（Ｓ１５００）。
【００５４】
次に、図１２Ａの全体処理フローを構成している各データ処理ステップについて順次説明する。図１２Ｂに、Ｓ１３００の行ブロックリストテーブル生成処理フローの一例を示している。行ブロックリストテーブル生成処理は、中間語コード差分情報生成部１２５が中間語コード１２８Ａ、１２８Ｂを比較して差分情報を抽出する際に使用する行ブロックリストテーブル１２６を、コンパイラ１２３が生成した各中間語コード１２８Ａ、１２８Ｂから生成する。なお、以下に参照する処理フローで使用される変数名については、順次説明する。
【００５５】
まず、中間語コード差分情報生成部１２５は、変数curにテーブル生成の対象となる中間語コードＩ（１２８）のrootノードを代入する（Ｓ１３１０）。ここで、変数curは、生成された中間語コード１２８を構成している各ノードが対応付けられる変数であり、変数curを比較することで中間語コード１２８におけるノードの差異が検出される。
【００５６】
中間語コード差分情報生成部１２５は、rootノードが行先頭ノードであるか判定し（Ｓ１３２０）、行先頭ノードであると判定した場合（Ｓ１３２０、Ｙｅｓ）、後述する行ブロックリストテーブル１２６へのデータ追加処理を実行する（Ｓ１３３０）。行先頭ノードでないと判定した場合（Ｓ１３２０、Ｎｏ）、中間語コード差分情報生成部１２５は、Ｓ１３４０へ処理を進める。
【００５７】
Ｓ１３４０で、中間語コード差分情報生成部１２５は、変数curに子ノードが存在するか判定する（Ｓ１３４０）。子ノードが存在すると判定した場合（Ｓ１３４０、Ｙｅｓ）、中間語コード差分情報生成部１２５は、検出された変数curの子ノードを変数curとしてＳ１３２０に処理を戻す（Ｓ１３４１）。子ノードが存在しないと判定した場合（Ｓ１３４０、Ｎｏ）、中間語コード差分情報生成部１２５は、Ｓ１３５０に処理を進める。
【００５８】
Ｓ１３５０で、中間語コード差分情報生成部１２５は、変数curに兄弟ノードが存在するか判定する（Ｓ１３５０）。兄弟ノードが存在すると判定した場合（Ｓ１３５０、Ｙｅｓ）、中間語コード差分情報生成部１２５は、検出された変数curの兄弟ノードを変数curとしてＳ１３２０に処理を戻す（Ｓ１３５１）。兄弟ノードが存在しないと判定した場合（Ｓ１３５０、Ｎｏ）、中間語コード差分情報生成部１２５は、Ｓ１３６０に処理を進める。
【００５９】
Ｓ１３６０で、中間語コード差分情報生成部１２５は、変数curに親ノードが存在するか判定する（Ｓ１３６０）。親ノードが存在すると判定した場合（Ｓ１３６０、Ｙｅｓ）、中間語コード差分情報生成部１２５は、検出された変数curの親ノードを変数curとしてＳ１３５０に処理を戻す（Ｓ１３６１）。親ノードが存在しないと判定した場合（Ｓ１３６０、Ｎｏ）、中間語コード差分情報生成部１２５は処理を終了する。
【００６０】
以上の処理により、ソースコード１３１を構成しているすべての行番号に対応するノードをすべて含む行ブロックリストテーブル１２６が生成される。
【００６１】
次に、図１２Ｂの行ブロックリストテーブル１２６の生成処理フローにおける、データ追加処理Ｓ１３３０について説明する。この処理フローでは、図８に例示した行ブロックポインタエントリを使用して、行ブロックリストテーブル１２６に中間語コード１２８のデータを追加する。
【００６２】
まず、中間語コード差分情報生成部１２５は、変数ｎに行先頭ノードのソースコード１３１における行番号を代入する。変数ｎは、行ブロックリストテーブル１２６の行番号１２６１となる。
【００６３】
次いで、中間語コード差分情報生成部１２５は、変数new_entryの変数ptrに行先頭ノードのアドレスを、変数new_entryの変数nextに値nullを代入する（Ｓ１３３１）。変数new_entryは新規の行ブロックポインタエントリを、変数ptrは中間語コード１２８のノードが格納されているアドレスを、変数nextは中間語コード１２８の次のノードが格納されているアドレスを、それぞれ示している。
【００６４】
中間語コード差分情報生成部１２５は、変数ｎと一致する行番号１２６１が行ブロックリストテーブル１２６に存在するか判定し（Ｓ１３３３）、存在すると判定した場合（Ｓ１３３３、Ｙｅｓ）、処理をＳ１３３４に進める。変数ｎと一致する行番号１２６１が行ブロックリストテーブル１２６に存在しないと判定した場合（Ｓ１３３３、Ｎｏ）、中間語コード差分情報生成部１２５は、変数ｎに対応する行番号１２６１の行ブロックリスト１２６２の項目を行ブロックリストテーブル１２６に追加し（Ｓ１３３５）、変数new_entryの変数ptrに記録されているアドレスを追加した項目のリストに記録して処理を終了する（Ｓ１３３６）。
【００６５】
Ｓ１３３４では、変数ｎに一致する行番号に対応するリストの先頭エントリに記録されているアドレスを、変数cur_entryに代入する。中間語コード差分情報生成部１２５は、cur_entryであるエントリについて記録されている変数nextの値がnullであるか判定し（Ｓ１３３７）、nullであると判定した場合（Ｓ１３３７、Ｙｅｓ）、リストnew_entryに記録されているアドレスをcur_entryの変数nextに代入して処理を終了する（Ｓ１３３９）。変数nextの値がnullでないと判定した場合（Ｓ１３３７、Ｎｏ）、中間語コード差分情報生成部１２５は、リストcur_entryについて変数nextのアドレスをcur_entryとしてＳ１３３７に処理を戻す。
【００６６】
以上の処理により、行ブロックリストテーブル１２６に、ソースコード１３１の新たな行番号に対応する行ブロックリストが生成され、行ブロックリストテーブル１２６に記録される。
【００６７】
次に、図１２Ｂで作成した行ブロックリストテーブル１２６を使用する、差分情報テーブル１２７生成処理について説明する。図１２Ｄに、差分情報テーブル１２７生成処理フローの一例を示している。
【００６８】
まず、中間語コード差分情報生成部１２５は、変数idx及び変数d_idxに、それぞれ初期値として１を代入する（Ｓ１５１０）。変数idxは、図８の行ブロックリストテーブル１２６の行番号１２６１を、変数d_idxは、図９の差分情報テーブル１２７における項番１２７１を表している。
【００６９】
次いで、中間語コード差分情報生成部１２５は、変数idxの値が行ブロックリストテーブル１２６に記録されている項目数（レコード数）以下であるか判定し（Ｓ１５２０）、項目数以下であると判定した場合（Ｓ１５２０、Ｙｅｓ）、処理をＳ１５２１へ進める。変数idxの値が項目数を超えていると判定した場合（Ｓ１５２０、Ｎｏ）、中間語コード差分情報生成部１２５は、すべての行ブロックリストについて差分情報テーブル１２７への反映が完了したものとして処理を終了する。
【００７０】
Ｓ１５２１で、中間語コード差分情報生成部１２５は、行ブロックリストテーブル１２６のidx番目の項目に記録されている行ブロックリスト１２６２を変数itemとして取得する。中間語コード差分情報生成部１２５は、変数line_numに変数itemに対応する行番号１２６１を代入する（Ｓ１５２２）。変数line_numは、行ブロックリストテーブル１２６における行番号１２６１、すなわちソースコード１３１の行番号を示している。
【００７１】
次に、中間語コード差分情報生成部１２５は、変数itemに対応する行ブロックリスト１２６２の先頭エントリを変数base_entryに、変数base_entryの変数nextに対応する項目を変数comp_entryに代入する（Ｓ１５２３、Ｓ１５２４）。変数base_entryは他のノードと比較されるノードのアドレスを、変数comp_entryは変数base_entryのノードと比較される他のノードのアドレスを示している。
【００７２】
中間語コード差分情報生成部１２５は、変数comp_entryの値がnullであるか判定し、nullでないと判定した場合（Ｓ１５３０、Ｎｏ）、Ｓ１５３５の行ブロック比較処理を実行する。行ブロック比較処理については後述する。
【００７３】
Ｓ１５４０では、中間語コード差分情報生成部１２５は、Ｓ１５３５の行ブロック比較処理から返された差分フラグの状態がＯＮであるか判定し、ＯＮでないと判定した場合（Ｓ１５４０、Ｎｏ）、変数comp_entryの変数nextの値を変数comp_entryに代入する（Ｓ１５４１）。次いで、中間語コード差分情報生成部１２５は、変数comp_entryに記録されている値がnullであるか判定し（Ｓ１５５０）、nullであると判定した場合（Ｓ１５５０、Ｙｅｓ）、次の行ブロックポインタエントリについて処理を行うために変数idxを１だけ増分してＳ１５２０へ処理を戻す。
【００７４】
変数comp_entryに記録されている値がnullでないと判定した場合（Ｓ１５５０、Ｎｏ）、中間語コード差分情報生成部１２５は、処理をＳ１５３５へ戻す。
【００７５】
一方、Ｓ１５３０でcomp_entryに対応する値がnullであると判定した場合（Ｓ１５３０、Ｙｅｓ）、あるいはＳ１５４０で差分フラグがＯＮであると判定した場合、中間語コード差分情報生成部１２５は、差分情報テーブル１２７のd_idx番目の項目を変数d_itemに対応付ける（Ｓ１５３１）。次いで、中間語コード差分情報生成部１２５は、変数d_itemで項番１２７１が特定される差分情報テーブル１２７のレコードの行番号１２７２、オプション種別１２７３に、変数line_num、及びオプションＸを記録する（Ｓ１５３２、Ｓ１５３３）。中間語コード差分情報生成部１２５は、d_idxを１だけ増分し（Ｓ１５３４）、処理をＳ１５５１に進める。
【００７６】
以上の処理により、行ブロックリストテーブル１２６から検出されたコンパイラオプション有無によるデータ処理変更箇所が、ソースコード１３１の行番号と対応付けて差分情報テーブル１２７に記録される。
【００７７】
次に、中間語コード差分情報生成部１２５によって実行される行ブロック比較処理（図１２ＤのＳ１５３５）について説明する。
【００７８】
まず、中間語コード差分情報生成部１２５は、比較対照する中間語コード１２８に差異があることを示すフラグである差分フラグを初期状態であるＯＦＦとする（Ｓ１５３５１）。次いで、中間語コード差分情報生成部１２５は、変数node_A、node_Bに、base_entryの行ブロック先頭ノード、comp_entryの行ブロック先頭ノードをそれぞれ入力し（Ｓ１５３５２）、node_Aの内容とnode_Bの内容とが一致するか判定する（Ｓ１５３５３）。一致しないと判定した場合（Ｓ１５３５３、Ｎｏ）、中間語コード差分情報生成部１２５は、差分フラグをＯＮとして処理を差分情報テーブル生成処理に返す（Ｓ１５３６７）。
【００７９】
node_Aの内容とnode_Bの内容とが一致すると判定した場合（Ｓ１５３５３、Ｙｅｓ）、中間語コード差分情報生成部１２５は、node_Aが変数line_numと異なる行番号のノードであるか判定し、異なる行番号のノードであると判定した場合（Ｓ１５３５４、Ｙｅｓ）、処理をＳ１５３６２へ進める。node_Aが変数line_numと異なる行番号のノードでないと判定した場合（Ｓ１５３５４、Ｎｏ）、中間語コード差分情報生成部１２５は、node_A、node_B両方に子ノードが存在するか判定し、存在すると判定した場合（Ｓ１５３５５、Ｙｅｓ）、node_Aの子ノード、node_Bの子ノードを、それぞれ新たなnode_A、node_Bとして（Ｓ１５３５６）、処理をＳ１５３５２へ戻す。
【００８０】
一方、中間語コード差分情報生成部１２５は、node_A、node_Bのいずれかに子ノードが存在しないと判定した場合（Ｓ１５３５５、Ｎｏ）、さらにnode_A、node_Bのいずれにも子ノードが存在しないか判定する（Ｓ１５３６１）。いずれにも子ノードが存在しないと判定した場合（Ｓ１５３６１、Ｙｅｓ）、中間語コード差分情報生成部１２５は、node_A、node_B両方に兄弟ノードが存在するか判定し（Ｓ１５３６２）、存在すると判定した場合（Ｓ１５３６２、Ｙｅｓ）、node_Aの兄弟ノード、node_Bの兄弟ノードを、それぞれ新たなnode_A、node_Bとして（Ｓ１５３６３）、処理をＳ１５３５２へ戻す。
【００８１】
一方、中間語コード差分情報生成部１２５は、node_A、node_Bのいずれかに子ノードが存在しないと判定した場合（Ｓ１５３６１、Ｎｏ）、差分フラグをＯＮとして処理を差分情報テーブル生成処理に戻す。
【００８２】
Ｓ１５３６２でnode_A、node_Bのいずれかに兄弟ノードが存在しないと判定した場合（Ｓ１５３６２、Ｎｏ）、中間語コード差分情報生成部１２５は、さらにnode_A、node_Bのいずれにも兄弟ノードが存在しないか判定する（Ｓ１５３６４）。いずれにも兄弟ノードが存在しないと判定した場合（Ｓ１５３６４、Ｙｅｓ）、中間語コード差分情報生成部１２５は、node_Aの親ノードがline_numの行先頭ノードであるか判定し（Ｓ１５３６５）、line_numの行先頭ノードでないと判定した場合（Ｓ１５３６５、Ｎｏ）、当該行ブロックについての比較処理を終了する。
【００８３】
一方、node_B両方に兄弟ノードが存在するか判定し（Ｓ１５３６２）、存在すると判定した場合（Ｓ１５３６２、Ｙｅｓ）、node_Aの兄弟ノード、node_Bの兄弟ノードを、それぞれ新たなnode_A、node_Bとして（Ｓ１５３６３）、処理をＳ１５３５２へ戻す。また、Ｓ１５３６４でnode_A、node_Bのいずれかに兄弟ノードが存在しないと判定した場合（Ｓ１５３６４、Ｎｏ）、中間語コード差分情報生成部１２５は、差分フラグをＯＮとして処理を差分情報テーブル生成処理に戻す。
【００８４】
また、中間語コード差分情報生成部１２５は、Ｓ１５３６５でnode_Aの親ノードがline_numの行先頭ノードであると判定した場合（Ｓ１５３６５、Ｙｅｓ）、node_Aの親ノード、node_Bの親ノードを、それぞれ新たなnode_A、node_Bとして（Ｓ１５３６６）、処理をＳ１５３６２へ戻す。
【００８５】
以上の処理により、ソースコード１３１の各行番号に対応する行ブロックについて、コンパイラオプション有無による差異が存在するかを判定することができる。
【００８６】
次に、エディタ１２４によるデータ処理変更箇所検出処理の結果出力処理について説明する。図１３に、図１２Ａ〜図１２Ｅに例示したデータ処理変更箇所検出処理によってソースコード１３１の行番号と対応して特定された中間語コード１２８上の差異を、図１０の表示画面例１０００の形態で出力する処理フローの一例を示している。
【００８７】
まず、エディタ１２４は、変数idxに初期値である１を代入する（Ｓ１６０１）。次いで、エディタ１２４は、変数idxの値が差分情報テーブル１２７に含まれる総項数（総レコード数）を超えているか判定し（Ｓ１６０２）、超えていると判定した場合（Ｓ１６０２、Ｎｏ）、差分情報テーブル１２７に含まれるすべてのレコードについて処理を完了したものとして本処理を終了する。
【００８８】
Ｓ１６０２で、変数idxの値が差分情報テーブル１２７に含まれる総項数以下であると判定した場合（Ｓ１６０２、Ｙｅｓ）、エディタ１２４は、差分情報テーブル１２７のidx番目のレコードを変数itemとし（Ｓ１６０３）、項目itemに含まれている行番号を変数line_numとする（Ｓ１６０４）。次いで、エディタ１２４は、出力装置１４０を通じて表示されるソースコード１３１のline_num番目の行に、コンパイラオプション有無により生じた差異が存在することを示すハイライト表示等の差別化処理を行う（Ｓ１６０５）。
【００８９】
エディタ１２４は、変数idxの値を１だけ増分して（Ｓ１６０６）、差分情報テーブル１２７の次レコード以降についてＳ１６０２以降の処理を実行する。
【００９０】
以上の処理により、コンパイラオプション有無によってソースコード１３１が影響を受ける効果範囲をユーザに対して明確に提示することができる。
【実施例】
【００９１】
上記した本実施形態によるデータ処理変更箇所検出処理の効果をより明確にするため、以下にその一実施例を示して説明する。
【００９２】
本実施例では、あるデータ処理システムを、プラットフォームＡからプラットフォームＢへ移行させる、マイグレーション処理を実施する場合を想定する。このマイグレーション時に、データ処理システムを構成しているいずれかの処理「Func Z」において、プラットフォームＢにおいて処理を実行させた場合に結果差分が発生したとする。また、データ処理システムプログラムをプラットフォームＢのオブジェクトコードに変換するコンパイラには、プラットフォームＡとの互換性を維持するためのオプションである「-compati_A」が提供されているものとする。この場合、「-compati_A」オプションを適用した場合に、問題となっている「Func Z」処理以外の処理に影響が及ぶかを検証し、問題がないことを確認しなければならない。
【００９３】
従来技術によれば、データ処理システムプログラムを実際にプラットフォームＢ対応のコンパイラによりコンパイルし、テストデータによってデータ処理システムを動作させて結果の妥当性を検証する作業を行わなければならない。この場合、データ処理システムを実際に動作させなければならないため、そのためのコスト、労力が過大となる場合がある。さらに、検証用テストデータによって検証結果が変わるおそれがあり、検証に十分耐えるテストデータを用意することにも一定の困難が生じる。
【００９４】
これに対して本実施形態に関わるデータ処理変更箇所検出処理によれば、実際にデータ処理システムをどうさせることなく、「-compati_A」オプション有無の条件によって統合開発環境においてコンパイルを実行するのみでオブジェクトコードに変更を生じさせるソースコードの効果範囲を明確に検出することができるため、従来技術に付随した課題を解決することができるものである。
【００９５】
なお、以上説明した発明の実施の形態は、本発明の理解を容易にするためのものであり、本発明を限定するものではない。本発明は、その趣旨を逸脱することなく、変更、改良することができると共に、本発明にはその等価物も含まれる。
【符号の説明】
【００９６】
１００  計算機システム
１２２  統合開発環境制御部
１２３  コンパイラ
１２４  エディタ
１２５  中間語コード差分情報生成部
１２６  行ブロックリストテーブル
１２７  差分情報テーブル
１２８Ａ、１２８Ｂ  中間語コード
１３１  ソースコード
【図１】
2012226706.tif 000003
【図２】
2012226706.tif 000004
【図３】
2012226706.tif 000005
【図４Ａ】
2012226706.tif 000006
【図４Ｂ】
2012226706.tif 000007
【図５】
2012226706.tif 000008
【図６】
2012226706.tif 000009
【図７】
2012226706.tif 000010
【図８】
2012226706.tif 000011
【図９】
2012226706.tif 000012
【図１０】
2012226706.tif 000013
【図１１】
2012226706.tif 000014
【図１２Ａ】
2012226706.tif 000015
【図１２Ｂ】
2012226706.tif 000016
【図１２Ｃ】
2012226706.tif 000017
【図１２Ｄ】
2012226706.tif 000018
【図１２Ｅ】
2012226706.tif 000019
【図１３】
2012226706.tif 000020