(57)【要約】      （修正有）【課題】I/Oアクセスのソースコードを発見し、それに基づき、ハードウェアのアクセス構造を抽出することのできるソースコード解析装置を提供する。【解決手段】ソースコードを記録・格納する言語ソースコード保存部１１と、ソースコードの構文情報を記録・格納する構文情報保存部１２と、ソースコードを順次取り出して、構文情報を用いて言語構文解析を行って言語構文解析結果を得る言語構文解析部１３と、変数と定数の対応関係情報を記録・格納する対応関係情報保存部１４と、言語構文解析結果と対応関係情報に基づいて、変数と定数の対応関係を生成する対応関係生成部１５と、変数と定数の対応関係に基づいて、ＨＷレジスタ変数とソースコード間の依存関係を生成するＨＷレジスタ変数推定部１６と、ＨＷレジスタ変数とソースコード間の依存関係に基づいて、ＨＷレジスタ変数の一覧を生成する一覧生成部１７とを、備える。【選択図】図１
2014089568.tif 000002
【特許請求の範囲】
【請求項１】
ソースコードを記録・格納する言語ソースコード保存部と、
前記ソースコードの構文情報を記録・格納する構文情報保存部と、
前記言語ソースコード保存部からソースコードを順次取り出して、前記構文情報を用いて言語構文解析を行って言語構文解析結果を得る言語構文解析部と、
変数と定数の対応関係情報を記録・格納する対応関係情報保存部と、
前記言語構文解析結果と前記対応関係情報に基づいて、変数の値の伝播関係を解析して得られた変数と定数の対応関係を生成する対応関係生成部と、
前記変数と定数の対応関係に基づいて、ハードウェアのアクセス構造を表して読込み・書込み・参照の依存関係を持つＨＷレジスタ変数の推定を行い、前記ＨＷレジスタ変数とソースコード間の依存関係を生成するＨＷレジスタ変数推定部と、
前記ＨＷレジスタ変数とソースコード間の依存関係に基づいて、ＨＷレジスタ変数の一覧を生成する一覧生成部とを、
備えるソースコード解析装置。
【請求項２】
前記ソースコードと変数間の依存関係をグラフ化して表示する表示部を備える請求項１記載のソースコード解析装置。
【請求項３】
前記ＨＷレジスタ変数の推定は、記憶領域のアクセス以外のI/Oアクセスのコードポイントを即値アドレスに基づき抽出する請求項１記載のソースコード解析装置。
【請求項４】
前記即値アドレスに基づく抽出は、メモリアクセスコードのうち、即値アドレスに基づくアドレスのアクセスであるコードを抽出するもので、即値アドレスの参照の参照やその再帰も含む請求項３記載のソースコード解析装置。
【請求項５】
前記ＨＷレジスタ変数の推定は、前記I/Oアクセスコードの、アクセス式の最外側から、配列要素アクセスやメンバアクセスを取り除いたベース式から、前記ＨＷレジスタ変数を抽出する請求項１記載のソースコード解析装置。
【請求項６】
前記ベース式に基づく抽出は、前記I/Oアクセスコードの、構文木を根元の方向に辿りながら、アクセスコードのベース型を求め、ベースアドレス情報とともに、このサイズ及び構造を前記ＨＷレジスタ変数の候補とする請求項５記載のソースコード解析装置。
【請求項７】
前記対応関係生成部における前記変数と定数の対応関係は、変数のアドレス、定数あるいは変数、書き換えられない変数、即値アドレスが割り当てられる変数をもとに作成する請求項１乃至請求項６のいずれか１項に記載のソースコード解析装置。
【請求項８】
抽出された前記ＨＷレジスタ変数が、既に抽出済みの前記ＨＷレジスタ変数のサイズ及び構造において包含される場合には、包含する方の前記ＨＷレジスタ変数にまとめる請求項１乃至請求項７のいずれか１項に記載のソースコード解析装置。
【請求項９】
前記グラフは、変数とそれをアクセスする部位を持った関数をノードとし、ノード間を読み・書きを矢印として結んだグラフである請求項１乃至請求項８のいずれか１項に記載のソースコード解析装置。
【請求項１０】
さらに、
マップとして表示されたＨＷレジスタ変数の一覧に対して、編集機能を付与するＨＷレジスタ変数編集部と、
ＨＷレジスタ変数の一覧を編集するための情報を入力可能とするユーザＩ／Ｆと、
ＨＷレジスタ変数をまとめる際の合併情報を保存するＨＷレジスタ変数合併情報保存部を備える、請求項１乃至請求項９のいずれか１項に記載のソースコード解析装置。
【請求項１１】
前記編集情報は、ハードウェアの仕様書を参照したものである請求項１０記載のソースコード解析装置。
【請求項１２】
前記ソースコードはＣ言語で記述されたものである請求項１乃至請求項１１のいずれか１項に記載のソースコード解析装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明の実施形態は、ソフトウェアのソースコード解析装置に関する。
【背景技術】
【０００２】
膨大なソフトウェアには、ソースコード解析技術が応用される。特に、組込み機器あるいは組込みシステムの制御に用いられる組込みソフトウェアソースコードでは、ハードウェアのアクセス（以下、I/Oアクセスという。）を直接扱う。    
一般に、歴史の長い組込みソフトウェアにおいては、取り扱われるハードウェアの仕様書が揃っていないケースも多い。そのため、組込みソフトウェアで取り扱われるハードウェアのアクセスと仕様を知りたいとの強いニーズがある。
【０００３】
しかしながら、従来、用いられているソースコード解析技術である「抽象構文木」を組込みソフトウェアに適用しても、ハードウェアアクセスは、ソフトウェア言語の概念として表わされない、という問題がある。
【０００４】
また、MMIO(memory mapped I/O)は、ソースコード上、通常のメモリアクセスとI/Oアクセスの区別がなく、I/Oアクセスの識別を行わないので、ハードウェアのアクセスが適切に抽出されない、という問題があった。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開平９−２１８８００号公報
【特許文献２】特開２００７−１８３９５０号公報
【特許文献３】特開２００７−２１９５８６号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
本発明が解決しようとする課題は、I/Oアクセスのソースコードを発見し、それに基づき、ハードウェアのアクセス構造を抽出することのできるソースコード解析装置を提供することである。
【課題を解決するための手段】
【０００７】
実施形態のソースコード解析装置は、ソースコードを記録・格納する言語ソースコード保存部と、前記ソースコードの構文情報を記録・格納する構文情報保存部と、前記言語ソースコード保存部からソースコードを順次取り出して、前記構文情報を用いて言語構文解析を行って言語構文解析結果を得る言語構文解析部と、変数と定数の対応関係情報を記録・格納する対応関係情報保存部と、前記言語構文解析結果と前記対応関係情報に基づいて、変数の値の伝播関係を解析して得られた変数と定数の対応関係を生成する対応関係生成部と、前記変数と定数の対応関係に基づいて、ハードウェアのアクセス構造を表して読込み・書込み・参照の依存関係を持つＨＷレジスタ変数の推定を行い、前記ＨＷレジスタ変数とソースコード間の依存関係を生成するＨＷレジスタ変数推定部と、前記ＨＷレジスタ変数とソースコード間の依存関係に基づいて、ＨＷレジスタ変数の一覧を生成する一覧生成部とを、備える。
【図面の簡単な説明】
【０００８】
【図１】本発明の一実施形態に係るソースコード解析装置の概略構成を示すブロック図である。
【図２】I/Oアクセスのコードポイントの抽出を説明する図である。
【図３】包含関係の処理を説明する図である。
【図４】ＨＷレジスタ変数一覧の提示例を示す図である。
【図５】第１の実施形態に係るソースコード解析装置におけるソースコード処理の流れを示すフローチャートである。
【図６】解析するソースコードの一例を示す図である。
【図７】アクセス式内の即値アドレスに対する参照式として、ベース式及びアクセス式が求められることを示す図である。
【図８】アクセス式がI/Oアクセス式として認識されることを示す図である。
【図９】１つのＨＷレジスタ変数の生成を説明する図である。
【図１０】ＨＷレジスタ変数の依存関係の生成を説明する図である。
【図１１】ＨＷレジスタ変数の一覧の一例を示す図である。
【図１２】図４に示すＨＷレジスタ変数一覧を編集した例を示す図である。
【図１３】第２の実施形態に係るソースコード解析装置の概略構成を示すブロック図である。
【図１４】第２の実施形態に係るソースコード解析装置におけるソースコード処理の流れを示すフローチャートである。
【図１５】ＨＷレジスタ変数の一覧表の編集を説明する図である。
【図１６】編集後のＨＷレジスタ変数の一覧表を示す図である。
【発明を実施するための形態】
【０００９】
以下、本発明の一実施の形態について、図面を参照して説明する。尚、各図において同一箇所については同一の符号を付すとともに、重複した説明は省略する。
【００１０】
まず、本実施形態で用いる主要な用語について説明する。
【００１１】
「ソースコード」とは、テキストで表現されたソフトウェアプログラム表現のことである。
【００１２】
「ソースコード解析技術」とは、ソフトウェアのテキスト構文の分解から、構文要素に対する意味付けの解析までを行う技術である。ソースコードの構造を分析する場合に必須の技術である。情報の可視化技術とこれを合わせて、ソースコードの構造可視化が可能となる。
【００１３】
「組込みソフトウェア」とは、組込み機器あるいは組込みシステムの制御に用いられるソフトウェアをいう。ハードウェア制御を抽象度が低いレベル(レジスタの読み書きのレベル)で記述することが多いことに特徴がある。
【００１４】
「外部設定ファイル」とは、ソースコードのコンパイルに必要なソースコード以外の各種設定ファイルのことを指す。一例として、リンカスクリプトがある。リンカスクリプトは、コンパイルの最終工程のリンク処理を行うプログラムリンカの動作指示ファイルであり、その中で、ソースコードやデータのアドレスを直接指定(後述の即値アドレス)することができる場合が多い。
【００１５】
「アクセス式」とは、記憶領域やハードウェアレジスタ（以下、ＨＷレジスタという）に対する読書きを表す式である。コンパイラで読み書きを意味する表現である。
【００１６】
「ベース式」とは、アクセス式の最外側から、配列要素アクセス・メンバアクセスを取り除いた式である。アクセス式の領域のベースを表す。
【００１７】
「I/Oアクセス式」とは、記憶領域のアクセス以外のアクセス式をいう。CPU（ Central Processing Unit）の外部に接続されたさまざまなハードウェアの要素へのアクセスを表す。
【００１８】
「MMIO(memory mapped I/O)」とは、I/Oアクセスが、CPUのデータアドレスにマップされており、メモリアクセスと同じ命令語でアクセスする。RISC （Reduced Instruction Set Computer）は基本的にはこのアーキテクチャである。
【００１９】
「即値」とは、具体的な数値のことをいう。これがアドレスに用いられる「即値アドレス」は、具体的なアドレスが具体的な数値で表されたものである。
【００２０】
「ＨＷレジスタ変数」とは、ハードウェアのアクセス構造を表す概念上の変数で、通常の変数と同様に読込み・書込み・参照の依存関係を持つ。MMIOの場合は、特殊なアドレスに対する読書きでそのアクセスが表現される。本実施形態においては、HWアクセス部を変数概念化し、ＨＷレジスタ変数と称する。
【００２１】
（第１の実施形態）
本実施形態においては、Ｃ言語で記述されたソースコードを例にとって説明する。本実施形態では、(1) I/Oアクセスのコードポイントを即値アドレスに基づいて抽出し、(2) I/Oアクセスコードのベース式から、ＨＷレジスタ変数を抽出することにより、ＨＷレジスタ変数の推定を行うものである。
【００２２】
図１は、本発明の第１の実施形態に係るソースコード解析装置の概略構成を示すブロック図である。この装置は汎用のコンピュータ（例えばパーソナルコンピュータ（ＰＣ）等）と、同コンピュータ上で動作するソフトウェアとを用いて実現される。コンピュータとしては、ＣＡＤ（Computer Aided Design）やＣＡＥ（Computer Aided Engineering）に好適なエンジニアリングワークステーション（ＥＷＳ）等も含む。本実施形態はこのようなコンピュータに、ソフトウェアソースコード解析に係る一連の手続きを実行させるプログラムとして実施することもできる。
【００２３】
図１に示すように、第１の実施形態に係るソースコード解析装置１００は、主として、言語ソースコード保存部１１、構文情報保存部１２、言語構文解析部１３、対応関係情報保存部１４、対応関係生成部１５、ＨＷレジスタ変数推定部１６、一覧生成部１７、表示部１８より構成されている。
【００２４】
言語ソースコード保存部１１は、外部記憶装置であって、Ｃ言語で記述されたソースコードを記録・格納するものである。例えば、ハードディスク装置や、半導体メモリであるフラッシュメモリを使用したソリッドステートドライブ（ＳＳＤ）装置が好適である。
【００２５】
構文情報保存部１２は、外部記憶装置であって、ソースコードの構文情報を記録・格納するものである。例えば、ハードディスク装置や、半導体メモリであるフラッシュメモリを使用したソリッドステートドライブ（ＳＳＤ）装置が好適である。
【００２６】
言語構文解析部１３は、言語ソースコード保存部１１からソースコードを順次取り出して、構文情報保存部１２に記録・格納されているソースコードの構文情報を用いて言語構文解析を行って言語構文解析結果を得るものである。言語構文解析結果は、対応関係生成部１５に送られる。言語構文解析の詳細については、後述する。
【００２７】
対応関係情報保存部１４は、外部記憶装置であって、変数と定数の対応関係情報を記録・格納するものである。例えば、ハードディスク装置や、半導体メモリであるフラッシュメモリを使用したソリッドステートドライブ（ＳＳＤ）装置が好適である。
【００２８】
対応関係生成部１５は、言語構文解析部１３から言語構文解析結果を入力し、対応関係情報保存部１４から対応関係情報を入力し、変数の値の伝播関係を解析して得られた変数と定数の対応関係を生成する。変数と定数の対応関係は、変数のアドレス、定数あるいは変数、書き換えられない変数、即値アドレスが割り当てられる変数をもとに作る。周知のプログラムスライシング技術などで、対応情報を拡大することができる。生成した対応結果は、ＨＷレジスタ変数推定部１６に送られる。
【００２９】
ＨＷレジスタ変数推定部１６は、対応関係生成部１５から変数と定数の対応関係を入力し、ＨＷレジスタの変数の推定を行う。推定の結果として、“ＨＷレジスタ変数”と“ソースコード間の依存関係”を生成する。ソースコード間の依存関係には、例えばデータの代入と参照の関係を示すデータ依存関係や、プログラム式が実行されるか否かが他のプログラム式の実行結果に依存する制御依存関係がある。
【００３０】
生成したＨＷレジスタ変数とソースコード間の依存関係は、一覧生成部１７に送られる。
【００３１】
一覧生成部１７は、ＨＷレジスタ変数とソースコード間の依存関係に基づいて、ＨＷレジスタ変数の一覧を生成する。
【００３２】
表示部１８は、ソースコードの解析結果として、ソースコードと変数間の依存関係をグラフ化して表示するものである。変数とそれをアクセスする部位を持った関数をノードとし、ノード間を読み・書き（の可能性）を矢印として、結んだグラフを表示する。
【００３３】
次に、以上のように構成されたソースコード解析装置１００によるソースコード解析処理について説明する。
【００３４】
＜言語構文解析＞
一般に、ソースコード中のI/Oアクセスの判別は困難である。Ｃ言語で記述した次のプログラム式を例にとる。
【００３５】
*a=10;
このプログラム式は、「ポインタ変数ａに割り当てられたアドレス値が指し示すメモリにデータの１０が格納（代入）される」ことを意味している。このようにポインタ変数の宣言がされ、ポインタを用いてオブジェクトを間接的に参照するプログラム式の場合には、当該式が、メモリアクセスなのか或いはI/Oアクセスなのかの判別は容易にはできない。当該式の前段までのプログラム式に依存しているからである。
【００３６】
本実施形態における言語構文解析では、ＨＷレジスタ変数の推定を行い、ＨＷレジスタ変数の一覧を提示する。
【００３７】
＜ＨＷレジスタ変数の推定＞
(1) I/Oアクセスのコードポイントを即値アドレスに基づき抽出する。  
I/Oアクセスは、MMIOの場合、ソースコード上、通常のメモリアクセス（メモリに対する読み書き）と同じ記述である。そのアドレスは、即値アドレスであり、ソースコードまたは外部設定ファイルに定義が書かれているはずである。メモリアクセスコードのうち、即値アドレスに基づくアドレスのアクセスであるコードポイントを発見して抽出する。これらの処理には、即値アドレスの参照(reference)の参照やその再帰（recursion）も含む。図２は、I/Oアクセスのコードポイントの抽出を説明する図である。図２に示すように、ポインタ変数ａに割り当てられたアドレス値が指し示すメモリが、実は前段のプログラム式から判断して文脈上定数であるとき、ａの値は即値アドレスであり、当該プログラム式は、I/Oアクセスであると判明する。
【００３８】
尚、即値アドレスと認識するプログラム式をソフトウエアスライシング技術等で拡大することにより、実用性を向上させることができる。
【００３９】
(2) I/Oアクセスコードのベース式から、ＨＷレジスタ変数を抽出する。  
I/Oアクセスコードの、構文木を根元の方向に辿りながら、アクセスコードのベース型(構造体のメンバアクセスである場合には、構造体そのもの)を求める。ベースアドレス情報とともに、このサイズ及び構造をＨＷレジスタ変数の候補とする。
【００４０】
尚、あるＨＷレジスタ変数がサイズ及び構造に関して、他のＨＷレジスタ変数に包含関係で完全に含まれるものがある場合は、含む方だけを残し、ＨＷレジスタ変数のアクセスコードは、上記I/Oアクセスコードであり、読み書きの判断は、メモリアクセスと同様に判断する。図３は、包含関係の処理を説明する図である。図３では、メンバ間接参照演算子->によって、ポインタ名b1という構造体のメンバ名ｍへの間接参照の式から、HWレジ変数候補をIOアクセス式のベース型に基づき抽出した。さらに、*b2=2;というプログラム式からb2を抽出した。ＨＷレジスタ変数の領域は、データ型のサイズに基づくことから、包含されるものは包含するものに吸収する。図３に示す例では、ＨＷレジスタ変数b2は、b1に含まれる。
【００４１】
上述した即値アドレスから推定されるアクセスは、狭い意味のI/Oアクセスに限らない。ここで、狭い意味のI/Oアクセスとは、そのアクセスで主メモリ以外のデータアクセスを表わすものとする。また、主メモリ上のアクセスの場合も、即値アドレスを用いる場合がある。例えば、CPUの割り込みベクタのアドレスは、即値アドレスで表わされる。
【００４２】
本実施形態では、このようなCPUアーキテクチャ等によって決められる即値アドレスも、“広義のI/Oアクセス”、“広義のＨＷレジスタ変数”と見なすことができる。
【００４３】
＜ＨＷレジスタ変数一覧の提示＞
ＨＷレジスタ変数の一覧をメモリマップとして提示する。ＨＷレジスタ変数の推定は、ソースコードからの結果であり、実際の仕様を理解するに際し、例えば１バイトずつ提示するのは適切でない。そこで、アドレスマップの候補を提示するものである。図４は、ＨＷレジスタ変数一覧の提示例を示す図である。図４に示す例では、ソースファイルの内容を指示された内容に従って書き換える前処理指令として、#defineなるマクロ置き換え（マクロの定義）を内容とする制御文で記述されたプログラム式が示されている。マクロ名Ａは関数形式マクロ（引数付きマクロ）であって、ポインタによる参照を受ける文字型定数charの指し示す１６進数の１２００番地のメモリアドレスの内容に書き換えるプログラム式である。同様に、マクロ名Ｂは関数形式マクロ（引数付きマクロ）であって、ポインタによる参照を受ける文字型定数charの指し示す１６進数の１２０１番地のメモリアドレスの内容に書き換えるプログラム式である。マクロ名Ｃ、マクロ名Ｄについても同様である。
【００４４】
さらに、ポインタ変数Ａに割り当てられたアドレス値が指し示すメモリにデータの２が格納（代入）され、ポインタ変数Ｂに割り当てられたアドレス値が指し示すメモリにデータの３が格納（代入）されているプログラム式が提示されている。ポインタ変数Ｃ、ポインタ変数Ｄについても同様である。
【００４５】
図４に示すように、これらのプログラム式を受けて、抽出結果は例えば、アドレス、サイズ、ハードウェア毎にまとめられる。
【００４６】
図５は、第１の実施形態に係るソースコード解析装置におけるソースコード処理の流れを示すフローチャートである。
【００４７】
まず、ソースコード上のすべての式ノードについて、末端優先のループを特定する（ステップＳ５１）。
【００４８】
例えば、図６に示すソースコードを解析する。図６では、４つのプログラム式が示されている。まず第１のプログラム式として、タグ名Ａのstruct構造体型の宣言がされ、型指定子メンバが文字（char型）の定数で指定されたプログラム式が示されている。第２のプログラム式として、関数func4内に、ユーザ定義されたプログラム式が示されている。当該プログラム式は、メンバ名がタグ名Ａのstruct構造体が予約語volatileによって変更を受けやすいオブジェクトであることが示され、Ａはポインタ参照される。
【００４９】
第３のプログラム式として、関数func2内に、ユーザ定義されたプログラム式が示されている。当該プログラム式は、メンバ名が、ポインタ参照される文字定数の指し示すメモリを参照して得られた値を整数（int型）の定数vに代入するものであることを示している。
【００５０】
第４のプログラム式として、関数func1内に、ユーザ定義されたプログラム式が示されている。当該プログラム式は、１をポインタvolatile char*が指示するメモリへ参照することを示している。ここでは、ポインタを用いてオブジェクトを間接的に参照している。
【００５１】
次に、対象となるアクセス式のベース式を求める（ステップＳ５２）。アクセス式のベース式の求め方は、下記のようなルールの再帰適用で抽象構文木構造の探索を実行する。
【００５２】
A.m  → A
A->m → *A
A[x] → *A (xは定数以外)
*(A + x) → *A (Aはポインタ型、xは定数以外)
*(A - x) → *A (Aはポインタ型、xは定数以外)
例えば、探索例は次のようになる。
【００５３】
A[x].m[y] → A[x].m → A[x] → *A
(B+x)->c[y] → (B+x)->c → *(B+x) → *B
図７は、アクセス式内の即値アドレスに対する参照式として、ベース式及びアクセス式が求められることを示す図である。図７に示す各プログラム式において、ベース式は矩形で囲まれ、アクセス式が楕円で囲まれている。第３のプログラム式及び第４のプログラム式では、アクセス式とベース式が同じ領域となっているが、第２のプログラム式では、アクセス式の最外側から、メンバ参照演算子->と構造体メンバｍを取り除いた式がベース式となっていることがわかる。
【００５４】
図８は、ベースアクセス式がI/Oアクセスであることから、アクセス式がI/Oアクセス式として認識されることを示す図である。第２、第３、第４の各プログラム式において、楕円で囲まれているアクセス式が、I/Oアクセス式である。
【００５５】
次に、求めたベース式が、アドレス参照式であり、そのアドレス参照式が“即値アドレス”であるかを判定する（ステップＳ５３）。
【００５６】
ステップＳ５３でＮｏであれば、ベース式がＨＷレジスタ変数の整数加減式であるかを判定する（ステップＳ５４）。
【００５７】
ステップＳ５３でＹｅｓあるいはステップＳ５４でＹｅｓであれば、当該ベース式をＨＷレジスタ変数の候補とする（ステップＳ５５）。尚、ステップＳ５４でＮｏであれば、ステップＳ５１に戻る。
【００５８】
次いで、既存のＨＷレジスタ変数に包含されるかを判定する（ステップＳ５６）。図９は、１つのＨＷレジスタ変数の生成を説明する図である。図９に示すように、生成されたＨＷレジスタ変数は、開始アドレスが１６進数で“１０”、第１のプログラム式からＨＷレジスタ変数のサイズがデータ型のサイズである“１６”となる。また、第３、第４のプログラム式のベース式は、サイズ的に、第２のプログラム式のベース式に包含されることがわかる。
【００５９】
ステップＳ５６でＮｏであれば、候補を正式とし、それと依存関係を追加する（ステップＳ５７）。
【００６０】
ステップＳ５６でＹｅｓであれば、候補を包含先の一部として、依存関係を追加する（ステップＳ５８）。図１０は、ＨＷレジスタ変数の依存関係の生成を説明する図である。図１０に示すように、第２のプログラム式のアクセス式は、書込み処理においてＨＷレジスタ変数を参照し、第３のプログラム式のアクセス式は、読込み処理においてＨＷレジスタ変数を参照し、第４のプログラム式のアクセス式は、書込み処理においてＨＷレジスタ変数を参照していることがわかる。
【００６１】
以上のステップＳ５１からステップＳ５８までを繰り返し実行する。すなわち、ステップＳ５９でループの終了を判定し、ループが終了でなければステップＳ５９を経てＳ５１に移行する。この繰り返しにより、ＨＷレジスタ変数の一覧が生成される。図１１は、ＨＷレジスタ変数の一覧の一例を示す図である。図１１に示すように、一覧表はベースアドレス式毎にまとめられる。
【００６２】
第１の実施形態によれば、膨大なソースコードから、使用されているHWアクセス関連のアドレスマップが、ＨＷレジスタ変数の一覧として得ることができる。
【００６３】
（第２の実施形態）
次に、第２の実施形態について説明する。ＨＷレジスタ変数の一覧が、例えば１バイトずつの表形式で生成された場合には、ハードウェアの仕様が却って理解しにくい。そこで、第２の実施形態は、第１の実施形態で生成したＨＷレジスタ変数一覧をユーザが編集可能とするものである。図１２は、図４に示すＨＷレジスタ変数一覧を編集した例を示す図である。
【００６４】
図１３は、第２の実施形態に係るソースコード解析装置の概略構成を示すブロック図である。図１３に示すように、第２の実施形態に係るソースコード解析装置２００では、第１の実施形態の構成に加えて、ＨＷレジスタ変数編集部１９、ユーザＩ／Ｆ２０、合併情報保存部２１を有している。
【００６５】
ＨＷレジスタ変数編集部１９は、マップとして表示されたＨＷレジスタ変数の一覧に対して、編集機能を付与するものである。
【００６６】
ユーザＩ／Ｆ２０は、ＨＷレジスタ変数の一覧を編集するための情報を入力可能とするものである。ユーザは、例えば、ＨＷ仕様書等を参照して、編集情報を入力する。
【００６７】
合併情報保存部２１は、ＨＷレジスタ変数をまとめる際の合併情報を保存するものである。
【００６８】
図１４は、第２の実施形態に係るソースコード解析装置におけるソースコード処理の流れを示すフローチャートである。図１４に示すフローチャートでは、図５に示すフローチャートで生成したＨＷレジスタ変数一覧をユーザが編集する流れを示している。
【００６９】
まず、ＨＷレジスタ変数の一覧を表示する（ステップＳ１４１）。例えば、図１１に示す一覧である。
【００７０】
次いで、一覧を補正するか否かのユーザ指令を受け付ける（ステップＳ１４２）。
【００７１】
ユーザ指令が一覧を補正する（ステップＳ１４２でＹｅｓ）場合には、ユーザＩ／Ｆ２０を介して受け付けたコマンドまたはＧＵＩによるＨＷレジスタ変数の合併情報を作成する（ステップＳ１４３）。
【００７２】
次いで、合併情報保存部２１からの合併情報に基づき、ＨＷレジスタ変数と依存関係を修正する（ステップＳ１４４）。図１５は、ＨＷレジスタ変数の一覧表の編集を説明する図である。例えば、図１１に示す一覧表に接したユーザは、図１５に示すように４行を選択して、１つに結合を指示したとする。図１６は、編集後のＨＷレジスタ変数の一覧表を示す図である。図１６に示すように、図１５に示した４行がユーザが名付けた新たな識別子を付されて１行にまとまられているが、ソースコードに対する依存関係は承継されている。必要に応じて、ステップＳ１４１からステップＳ１４４までは、繰り返される。
【００７３】
第２の実施形態によれば、推定して得られたＨＷレジスタ変数をユーザが編集することができるので、よりハードウェアの仕様に則した解析を行うことができる。
【００７４】
本発明のいくつかの実施形態を説明したが、これらの実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。これら新規な実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。これら実施形態やその変形は、発明の範囲や要旨に含まれるとともに、特許請求の範囲に記載された発明とその均等の範囲に含まれる。
【符号の説明】
【００７５】
１００，２００・・・ソースコード解析装置
１１・・・言語ソースコード保存部
１２・・・構文情報保存部
１３・・・言語構文解析部
１４・・・対応関係情報保存部
１５・・・対応関係生成部
１６・・・ＨＷレジスタ変数推定部
１７・・・一覧生成部
１８・・・表示部
１９・・・ＨＷレジスタ変数編集部
２０・・・ユーザＩ／Ｆ
２１・・・合併情報保存部
【図１】
2014089568.tif 000003
【図２】
2014089568.tif 000004
【図３】
2014089568.tif 000005
【図４】
2014089568.tif 000006
【図５】
2014089568.tif 000007
【図６】
2014089568.tif 000008
【図７】
2014089568.tif 000009
【図８】
2014089568.tif 000010
【図９】
2014089568.tif 000011
【図１０】
2014089568.tif 000012
【図１１】
2014089568.tif 000013
【図１２】
2014089568.tif 000014
【図１３】
2014089568.tif 000015
【図１４】
2014089568.tif 000016
【図１５】
2014089568.tif 000017
【図１６】
2014089568.tif 000018