JPH1195995A - データフロー解析装置、データフロー解析方法及びそのためのコンピュータプログラムを記録した記録媒体 - Google Patents

データフロー解析装置、データフロー解析方法及びそのためのコンピュータプログラムを記録した記録媒体

Info

Publication number
JPH1195995A
JPH1195995A JP25884197A JP25884197A JPH1195995A JP H1195995 A JPH1195995 A JP H1195995A JP 25884197 A JP25884197 A JP 25884197A JP 25884197 A JP25884197 A JP 25884197A JP H1195995 A JPH1195995 A JP H1195995A
Authority
JP
Japan
Prior art keywords
node
information
flow graph
procedure
definition
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
JP25884197A
Other languages
English (en)
Inventor
Yumiko Matsui
優美子 松井
Hiroaki Kimura
博昭 木村
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Nippon Steel Corp
Original Assignee
Nippon Steel Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Nippon Steel Corp filed Critical Nippon Steel Corp
Priority to JP25884197A priority Critical patent/JPH1195995A/ja
Publication of JPH1195995A publication Critical patent/JPH1195995A/ja
Pending legal-status Critical Current

Links

Landscapes

  • Stored Programmes (AREA)

Abstract

(57)【要約】 【課題】 ある手続きの中で別の手続きの呼び出しがあ
るプログラムのデータフロー解析を正確に、かつ迅速に
行うことができるデータフロー解析装置を提供する。 【解決手段】 関数の中で別の関数の呼び出しがある場
合には、呼び出される関数の簡略化したフローグラフ
を、呼び出す方の関数のフローグラフの中に含めるよう
にする。そして、その際、呼び出される関数のフローグ
ラフを「call」、「entry」、「exit」、
「cond」、「return」という五つのノードで
表し、かつ、そのフローを、「call」ノードから
「entry」ノードへ、「entry」ノードから
「exit」ノード及び「cond」ノードへ、「co
nd」ノードから「exit」ノードへ、「exit」
ノードから「return」ノードへ、というようにエ
ッジを張る。

Description

【発明の詳細な説明】
【0001】
【発明の属する技術分野】本発明は、ある手続きの中か
ら別の手続きの呼び出しがあるコンピュータのソースプ
ログラムについてデータフロー解析を行うデータフロー
解析装置、データフロー解析方法、及びそのためのコン
ピュータプログラムとして記録した記録媒体に関する。
【0002】
【従来の技術】まず、コンピュータプログラムのデータ
フロー解析について、簡単に説明する。尚、本明細書で
例示するソースプログラム(以下単に「プログラム」と
いう)は、すべてC言語で記述されたものであり、ま
た、参照を容易とするために、各行の左端に行番号を付
す。プログラムにおいて、「文S2が変数vに関して文
S1にデータ依存する」とは、 (1)文S1において、変数vが定義されていること (2)文S2において、変数vが使用されること (3)文S1から文S2への実行可能なパスで、変数v
を再定義しないものが存在すること という三つの条件を満足することをいう。
【0003】例えば、図5に示したC言語のプログラム
例において、6行目でjに0が代入されている。すなわ
ち、6行目においてjが「定義」されている。このjに
ついては、11行目において1を加えるという操作が行
われる。すなわち、11行目では、jの値を調べて、そ
の値に1を加えた値が代入しなおされている。このよう
な場合に、jは「使用」されるという。また、9行目に
おいてiが定義され、iに0が代入されているが、同じ
く、14行目においてもiが定義され、−1が代入され
ている。そして、このiの値は、16行目において使用
されている。
【0004】このように、「定義」と「使用」の流れを
追跡してゆくことをデータフロー解析といい、このデー
タフロー解析を利用してデータに与える影響の有無を調
べてゆくことを「影響解析」という。実際にデータのデ
ータフロー解析をコンピュータ上で行うためには、図6
に示すような定義/使用情報をまとめたテーブルを作成
する。図6のテーブルは、図5のプログラムに基づいて
作成したものであり、「def」は定義を表し、「re
f」は使用を表す。例えば、def〔2〕={n}とあ
るのは、2行目において、nが「定義」されていること
を示しており、ref〔2〕=φとあるのは、2行目に
おいて「使用」される変数がないことを示している(φ
は空集合を示す)。6行目についてみると、def
〔6〕={j}とあり、実際に図5のプログラムに対応
してjが「定義」されている。一方、6行目には「使
用」はないので、ref〔6〕=φとなっている。ま
た、11行目についてみると、jについて「定義」も
「使用」もあるので、def〔11〕={j}、ref
〔11〕={j}となっている。このように、データフ
ロー解析では、ソースプログラムの中の「定義」と「使
用」に関する情報を抽出し、その変数がどこで定義さ
れ、どこで使用されているかを調べる。
【0005】尚、図5のようなプログラム例の場合に
は、そのソースプログラムから簡単に定義/使用情報を
抽出することができるが、ソースプログラムが複雑な場
合、特に、ある手続き(関数)の中から別の手続き(関
数)を呼び出すような場合には、まず、ソースプログラ
ムに基づいてフローグラフを作成するのが一般的であ
る。このように、ある手続き(関数)の中から別の手続
き(関数)を呼び出すような場合におけるデータフロー
解析を、特に「手続き間データフロー解析」という。
【0006】次に、手続き間データフロー解析について
説明する。上で説明した図5のプログラムは、単一の手
続き(関数)だけで終わっている。これに対して、図7
に例示したプログラムは、3行目にあるようにfという
名前の関数と、11行目にあるようにgという名前の関
数が含まれている。このように複数の関数が含まれるプ
ログラムでは、ある関数から他の関数を呼び出して使用
するということが起こる。ある関数から他の関数を呼び
出すと、呼び出された関数の中で色々な計算が行われて
何らかの結果が得られ、その結果を用いて元の関数の中
で色々な計算が行われるという複雑な処理が行われる。
したがって、手続き間データフロー解析において、図6
のような「定義」と「使用」のテーブルを作成するとき
には、関数同士の関係をよく吟味する必要がある。
【0007】図8は、図7のプログラムに基づいて作成
されたフローグラフである。同図のフローグラフのう
ち、左側(a)の部分(ノード100〜ノード105)
は関数fに関する部分であり、右側(b)の部分(ノー
ド110〜ノード118)は関数gに関する部分であ
る。そして、関数の呼び出し関係を点線の矢印で示して
ある。図8のフローグラフにおいて、「entry」と
いうノード100及び110は、フローグラフの入口で
あることを示し、「exit」というノード105及び
118は、フローグラフの出口であることを示してい
る。それ以外の各ノードは、図7に示したそれぞれの関
数の実行可能な文に対応している。
【0008】ノード112,113,115は、図7の
プログラムの14行目のfor文に対応するもので、そ
の内容は、まず、iに0を代入し、iが10よりも小さ
い間は、{ }の中身(15行目)を実行し、iが10
になったときは、その次の17行目に移行するというも
のである。したがって、i<10である間は、図8のノ
ード113からノード115までが繰り返され、i=1
0となったときは、ノード116からノード118が実
行される。プログラムの17行目(ノード116)は、
プログラムの1行目で宣言したg_ctrという変数に
1を加えるという処理である。そして、プログラムの1
8行目(ノード117)でmの値が返され、ノード11
8でこの処理を抜けるという処理が行われる。
【0009】
【発明が解決しようとする課題】ところで、関数fにつ
いてデータフロー解析を行おうとした場合、プログラム
の6行目(ノード102)において関数fの中で関数g
が呼び出されている。このとき、この関数gをどのよう
に取り扱うかが問題となる。一般的に行われている方法
は、関数fの解析を行っている途中で別の関数gが呼び
出されたときは、その段階で関数gの解析結果を利用す
るようにしている。
【0010】しかしながら、ある関数の中で、別の関数
が呼び出される場合、呼び出される関数の解析結果のう
ち、呼び出す関数の解析に必要な情報はある一部分であ
り、関数が呼び出されるたびにそれを調べるのでは、処
理が複雑となり、それを実行するためのアルゴリズムも
複雑になり、情報量も増え、処理に時間もかかる。本発
明は、上記事情に基づいてなされたものであり、ある手
続きの中で別の手続きの呼び出しがあるプログラムのデ
ータフロー解析を正確に、かつ迅速に行うことができる
データフロー解析装置を提供することを目的とする。
【0011】
【課題を解決するための手段】上記の目的を達成するた
めに、本発明のデータフロー解析装置は、読み込んだソ
ースプログラムに対して構文解析を行う構文解析手段
と、前記構文解析の結果に基づいてフローグラフを生成
するフローグラフ生成手段と、前記フローグラフに基づ
いて変数の定義及び使用に関する情報を生成する定義/
使用情報生成手段と、前記変数の定義及び使用に関する
情報に基づいてどの定義とどの使用が結びつくかという
定義と使用の連鎖に関する情報を生成する定義−使用連
鎖生成手段とを有するデータフロー解析装置において、
前記フローグラフ生成手段は、ある手続きが他の手続き
を呼び出しているときに、少なくとも、呼び出される手
続きの中で使用される外部に有効な変数があったときに
その情報を対応させてセットする第1のノードと、呼び
出される手続きの中で確実に定義される外部に有効な変
数があるときにその情報を対応させてセットする第2の
ノードと、呼び出される手続きの中で定義される可能性
のある外部に有効な変数があるときにその情報を対応さ
せてセットする第3のノードに分け、前記第1のノード
から前記第2及び第3のノードへ、前記第3のノードか
ら前記第2のノードへ、それぞれエッジを張った呼び出
される手続きについてのフローグラフを生成し、これを
呼び出した方の手続きのフローグラフ中に組み込んだフ
ローグラフを生成し、前記定義/使用情報生成手段は、
前記フローグラフの各ノードにセットされた情報に基づ
いて定義と使用に分けた定義/使用情報を生成すること
を特徴とする。
【0012】前記フローグラフ生成手段は、ある手続き
呼び出し文において呼び出した手続きについて、更に、
呼び出される手続きの実引数中に代入文があったときに
その情報を対応させてセットする第4のノードと、手続
き呼び出し文中の呼び出される関数とは無関係の変数の
定義又は使用の情報を対応させてセットする第5のノー
ドを用い、前記第4のノードから前記第1のノードへ、
前記第2のノードから前記第5のノードへ、それぞれエ
ッジを張ったフローグラフを生成するものとしてもよ
い。
【0013】本発明のデータフロー解析方法は、読み込
んだソースプログラムに対して構文解析を行う構文解析
行程と、前記構文解析の結果に基づいてフローグラフを
生成するフローグラフ生成行程と、前記フローグラフに
基づいて変数の定義及び使用に関する情報を生成する定
義/使用情報生成行程と、前記変数の定義及び使用に関
する情報に基づいてどの定義とどの使用が結びつくかと
いう定義と使用の連鎖に関する情報を生成する定義−使
用連鎖生成行程とを有するデータフロー解析方法におい
て、前記フローグラフ生成行程は、ある手続きが他の手
続きを呼び出しているときに、少なくとも、呼び出され
る手続きの中で使用される外部に有効な変数があったと
きにその情報を対応させてセットする第1のノードと、
呼び出される手続きの中で確実に定義される外部に有効
な変数があるときにその情報を対応させてセットする第
2のノードと、呼び出される手続きの中で定義される可
能性のある外部に有効な変数があるときにその情報を対
応させてセットする第3のノードに分け、前記第1のノ
ードから前記第2及び第3のノードへ、前記第3のノー
ドから前記第2のノードへ、それぞれエッジを張った呼
び出される手続きについてのフローグラフを生成し、こ
れを呼び出した方の手続きのフローグラフ中に組み込ん
だフローグラフを生成し、前記定義/使用情報生成行程
は、前記フローグラフの各ノードにセットされた情報に
基づいて定義と使用に分けた定義/使用情報を生成する
ことを特徴とする。
【0014】前記データフロー解析方法において、前記
フローグラフ生成行程は、ある手続き呼び出し文におい
て呼び出した手続きについて、更に、呼び出される手続
きの実引数中に代入文があったときにその情報を対応さ
せてセットする第4のノードと、手続き呼び出し文中の
呼び出される関数とは無関係の変数の定義又は使用の情
報を対応させてセットする第5のノードを用い、前記第
4のノードから前記第1のノードへ、前記第2のノード
から前記第5のノードへ、それぞれエッジを張ったフロ
ーグラフを生成するものとしてもよい。
【0015】本発明のデータフロー解析のためのコンピ
ュータプログラムを記録した記録媒体は、読み込んだソ
ースプログラムに対して構文解析を行う構文解析機能
と、前記構文解析の結果に基づいてフローグラフを生成
するフローグラフ生成機能と、前記フローグラフに基づ
いて変数の定義及び使用に関する情報を生成する定義/
使用情報生成機能と、前記変数の定義及び使用に関する
情報に基づいてどの定義とどの使用が結びつくかという
定義と使用の連鎖に関する情報を生成する定義−使用連
鎖生成機能とを含むデータフロー解析機能をコンピュー
タに実行させるプログラムを記録した機械読み取り可能
な記録媒体において、前記フローグラフ生成機能は、あ
る手続きが他の手続きを呼び出しているときに、少なく
とも、呼び出される手続きの中で使用される外部に有効
な変数があったときにその情報を対応させてセットする
第1のノードと、呼び出される手続きの中で確実に定義
される外部に有効な変数があるときにその情報を対応さ
せてセットする第2のノードと、呼び出される手続きの
中で定義される可能性のある外部に有効な変数があると
きにその情報を対応させてセットする第3のノードに分
け、前記第1のノードから前記第2及び第3のノード
へ、前記第3のノードから前記第2のノードへ、それぞ
れエッジを張った呼び出される手続きについてのフロー
グラフを生成し、これを呼び出した方の手続きのフロー
グラフ中に組み込んだフローグラフを生成し、前記定義
/使用情報生成機能は、前記フローグラフの各ノードに
セットされた情報に基づいて定義と使用に分けた定義/
使用情報を生成するようにコンピュータを動作させるこ
とを特徴とする。
【0016】前記コンピュータプログラムを記録した記
録媒体において、前記フローグラフ生成機能は、ある手
続き呼び出し文において呼び出した手続きについて、更
に、呼び出される手続きの実引数中に代入文があったと
きにその情報を対応させてセットする第4のノードと、
手続き呼び出し文中の呼び出される関数とは無関係の変
数の定義又は使用の情報を対応させてセットする第5の
ノードを用い、前記第4のノードから前記第1のノード
へ、前記第2のノードから前記第5のノードへ、それぞ
れエッジを張ったフローグラフを生成するものとしても
よい。
【0017】本発明は、上記のように、ある手続きの中
で別の手続きの呼び出しがあった場合に、当該呼び出さ
れた手続きの中で使用される変数があったときにその情
報を対応させてセットする第1のノードと、呼び出した
手続きの中で確実に定義される変数があるときにその情
報を対応させてセットする第2のノードと、呼び出した
手続きの中で定義される可能性のある変数があるときに
その情報を対応させてセットする第3のノードに分け、
前記第1のノードから第2及び第3のノードへ、前記第
2のノードから第3のノードへ、それぞれエッジを張っ
たフローグラフを生成することにより、生成されるフロ
ーグラフの構造が簡単になり、したがって、データフロ
ー解析において行う処理も簡単化される。しかも、各ノ
ードとして上記のようなものを用いることにより、呼び
出された手続きの中の変数の定義、使用に関する情報を
すべて各ノードに対応させることができ、正確なデータ
フロー解析を行うことができる。
【0018】
【発明の実施の形態】以下に図面を参照して、本発明の
実施の形態について説明する。ここで、図1は、本発明
の一実施形態のデータフロー解析装置の機能ブロック
図、図2は、図1のデータフロー解析装置の機能を説明
するのに用いるC言語によるソースプログラム(以下、
「プログラム」という)の一例を示す図、図3は、本実
施形態のフローグラフ生成部により生成されたフローグ
ラフの一例を示す図、図4は、本実施形態の定義/使用
情報生成部により生成された定義/使用情報テーブルの
一例を示す図である。
【0019】図1に示すように、本実施形態のデータフ
ロー解析装置は、読み込んだC言語のプログラムについ
て構文解析を実行する構文解析部10と、構文解析の結
果に基づいてフローグラフを生成するフローグラフ生成
部11と、生成されたフローグラフに基づいてどこで変
数が「定義」され、どこで「使用」されているかという
情報を生成する定義/使用情報生成部12と、定義/使
用情報生成部12によって生成された定義や使用につい
ての情報に基づいて、どこの部分の定義とどこの部分の
使用が結びつくか等に関する「定義と使用の連鎖」に関
する情報を生成する定義−使用連鎖生成部13からな
る。
【0020】尚、本実施形態のデータフロー解析装置
は、上記の各機能を果たすコンピュータプログラムをコ
ンピュータ上で動作させることによって実現されるソフ
トフェアとして供給される。図1のデータフロー解析装
置によって定義と使用の連鎖が生成されると、その結果
に基づいて、コンピュータソフトウェアとして供給され
る入出力解析ツール20によって、手続きの入出力に関
する情報を抽出する入出力解析を行うことができ、ま
た、同じくコンピュータソフトウェアとして供給される
影響解析ツール21によって、変数がプログラムのどの
部分から影響を受けているかを調べる影響解析を行うこ
とができる。
【0021】本実施形態のデータフロー解析装置は、図
1に示す各機能のうち、特に、フローグラフ生成部11
と定義/使用情報生成部12が、従来と異なる特徴を有
している。そこで、以下では、主としてフローグラフ生
成部11と定義/使用情報生成部12の部分について、
図2に示したC言語のプログラム例に基づいて説明す
る。尚、図2では、説明の都合上、各行の左端に行番号
が付してある。
【0022】図2に示したプログラムが読み込まれる
と、まず、構文解析部10により、構文解析が行われ
る。この構文解析部10の機能は、一般的なコンパイラ
が行う標準的な構文解析と同様のものである。図3は、
図2に示したプログラムについて、フローグラフ生成部
11によって生成されたフローグラフのうち、関数fに
関する部分を示したものである。また、図4のテーブル
は、図3に示した各ノードについての「定義(de
f)」と「使用(ref)」としてどのうようなものが
あるかという情報(「定義/使用情報」という)をまと
めたテーブルである。
【0023】図2のプログラム例において、関数fにつ
いて注目する。図2に示したプログラム例を見ると、変
数として、1行目のg1及び2行目のg2という大域変
数が宣言され、関数として、4行目の関数fと13行目
の関数gが含まれている。また、5行目における関数f
の中のif文において、jが0より大きいかどうかを判
断する分岐があり、5行目の条件に合致する方の分岐で
は、6行目において関数g(i+j)が実行される。ま
た、5行目の条件に合致しない方の分岐(else以
下)では、8行目において、g(i)が実行される。す
なわち、いずれの場合も、関数fの中で、関数gの呼び
出しが行われている。
【0024】図3において、ノード1の「entry」
ノードは、図2のプログラムの4行目に対応する。この
4行目では、変数iとjが定義されている。したがっ
て、ノード1についての「定義/使用情報」は、 def〔1〕={i,j}, ref〔1〕=φ となる。尚、ここで、「φ」は対応するものがない、す
なわち空集合であることを表す。また、def及びre
fのあとの括弧〔 〕内の数字は、図3のフローグラフ
の各ノードのノード番号を指している。
【0025】次に、図3のノード2は、図2のプログラ
ムの5行目の条件文(if文)に対応する。この5行目
では、変数の定義は行われていないが、変数jが使用さ
れている。したがって、ノード2についての「定義/使
用情報」は、 def〔2〕=φ, ref〔2〕={j} となる。ノード2の分岐では、yesとnoの二つの場
合に分かれている。すなわち、左側の分岐は、図2のプ
ログラム6行目のg(i+j)についてのものであり、
右側の分岐は、同プログラム8行目のg(i)について
のものである。
【0026】本実施形態のフローグラフ生成部11の特
徴は、関数の中で別の関数の呼び出しがある場合に、呼
び出される関数(ここでは関数g)のフローグラフを、
呼び出す方の関数(ここでは関数f)のフローグラフの
中に含めるようにしていることである。その際、呼び出
される関数のフローグラフを「call」、「entr
y」、「exit」、「conditional」、
「return」という五つのノードで表し(以下で
は、「conditional」については「con
d」と略記する。図3でも同様。)、かつ、そのフロー
を、図3に示すように「call」ノードから「ent
ry」ノードへ、「entry」ノードから「exi
t」ノード及び「cond」ノードへ、「cond」ノ
ードから「exit」ノードへ、「exit」ノードか
ら「return」ノードへ、というようにエッジを張
る。これらの点が、従来のフローグラフ生成部と異って
いる。
【0027】図3に示した5つのノード「call」
(ノード3とノード8)、「entry」(ノード4と
ノード9)、「exit」(ノード5とノード10)、
「cond」(ノード6とノード11)、および「re
turn」(ノード7とノード12)は、本発明におい
て導入されたものである。まず、ノード3及びノード8
の「call」ノードには、呼び出された関数の実引数
中に代入文があったときに、その情報を対応させてセッ
トする。例えば、呼び出された関数の実引数中に、「k
=0」というような、変数kに対して0を代入するよう
な文があれば、その場合にこのノードにセットされる情
報は、「def〔call〕={k}」となる。しかし
ながら、図2のプログラムの関数gには、これに該当す
るような文が含まれておらず、したがって、「cal
l」ノードには「定義」も「使用」もない。その結果、
ノード3及びノード8についての「定義/使用情報」
は、それぞれ、 def〔3〕=φ, ref〔3〕=φ def〔8〕=φ, ref〔8〕=φ となる。
【0028】尚、この「call」ノードは、呼び出さ
れた関数の中に引数の代入文がないことが予め分かって
いれば、必ずしも用意しておく必要はない。次に、ノー
ド4及びノード9の「entry」ノードには、呼び出
した関数の中で使用される外部に有効な変数があったと
きに、その情報を対応させてセットする。図2に示した
プログラムでは、関数fから呼び出している関数はgで
あるから、gの中で使用される変数であるiとjの情報
をこれらのノードに対応させる。この場合、プログラム
の13行目において、関数gは、「g(int n)」
という形で現れる。関数gが、関数fの中で呼び出され
る場合には、このnの部分に、「i+j」又は「i」の
値が入ってくる。すなわち、プログラム5行目のif文
において、j>0に該当する場合はi+jという値が、
j>0に該当しない場合はiという値がnの部分に入
る。そして、このnは、14行目のif文で使用されて
いる。その結果、i及びjは、関数gの中で使用される
ことになる。また、関数gが呼び出されると、15行目
において、大域変数g1が使用されることになる。した
がって、ノード4及びノード9についての「定義/使用
情報」は、それぞれ、 def〔4〕=φ, ref〔4〕={i,j,g1} def
〔9〕=φ, ref
〔9〕={j,g1} となる。
【0029】次に、ノード5及びノード10の「exi
t」ノードには、呼び出した関数の中で確実に定義され
る外部に有効な変数があるときに、その情報を対応させ
てセットする。また、ノード6及びノード11の「co
nd」というノードには、ある条件を満たすときに定義
される変数、すなわち、確実に定義される変数ではない
が、定義される可能性のある変数があるときに、その情
報を対応させてセットする。
【0030】例えば、今、関数fから呼び出される関数
gを見ると(図2のプログラムの13行目から18行目
参照)、変数g1及び変数g2という二つの大域変数が
定義されている。このうち変数g2は、n>0という一
定の条件を満たす場合にだけ定義され、それ以外の場合
には定義されない。これに対して、変数g1は、プログ
ラム17行目において確実に定義される。したがって、
ノード5及びノード10の「exit」ノードにはg1
に関する情報のみを対応させてセットし、ノード6及び
ノード11の「cond」ノードには、変数g2に関す
る情報のみを対応させてセットする。したがって、これ
らのノードについての「定義/使用情報」は、それぞ
れ、 def〔5〕={g1}, ref〔5〕=φ def〔6〕={g2}, ref〔6〕=φ def〔10〕={g1}, ref〔10〕=φ def〔11〕={g2}, ref〔11〕=φ となる。
【0031】次に、ノード7及びノード12の「ret
urn」ノードには、関数呼び出し以外の項目、すなわ
ち、その関数から呼び出される関数とは関係のない変数
の「定義」や「使用」に関する情報を対応させてセット
する。図2のプログラム例では、関数fの中には、関数
gの呼び出し以外に変数の「定義」や「使用」は含まれ
ていない。したがって、ノード7及びノード12につい
ての「定義/使用情報」は、それぞれ、 def〔7〕=φ, ref〔7〕=φ def〔12〕=φ, ref〔12〕=φ となる。
【0032】図2のプログラム例の関数fのように、手
続き呼び出し文が、呼び出された別の関数のみから構成
されている場合には、その関数についてのフローグラフ
を生成する場合にノード7、ノード12の「retur
n」ノードは必須ではない。次に、ノード13は、図2
のプログラム例10行目のreturn文に対応する。
プログラムの10行目では、変数g1+g2が返されて
いるので、変数の使用はあるが、変数の定義はない。し
たがって、ノード13についての「定義/使用情報」
は、 def〔13〕=φ, ref〔13〕={g1,g2} となる。
【0033】図4は、図2のプログラムについて、図3
のようなフローグラフを生成し、それぞれのノードにつ
いて、上で説明した各ノードの「定義/使用情報」をま
とめたテーブルである。図3のフローグラフにおいて、
ノード13の「return g1+g2」というノー
ドは、図2に示すプログラムの10行目に対応する。図
3のフローグラフを外から見たときに、ノード13を見
ると、実際にg1とg2という変数が使用されている
が、これらの変数がどこで定義されたのかを知ろとした
ときに、上の説明から明らかなように、g1とg2は、
「exit」というノードか「cond」というノード
のいずれかで定義されていることが分かる。したがっ
て、逆にノード13から、g1或いはg2の方へ辿って
行って、定義されている場所が何処であるかを知ること
ができる。
【0034】このようにすると、その変数が定義された
場所を正確に調べることができる。また、関数fを解析
するときに呼び出された関数gの中身をすべて解析する
というものではないので、必要な情報量も少なくて済
み、データフロー解析の処理が容易となり、その処理を
実行するためのアルゴリズムも簡単になる。また、図2
のプログラムから分かるように、関数fから関数gを呼
び出す場所は2か所あり、6行目では引数として「i+
j」を使い8行目では引数として「i」を使っている。
このように、引数が異なると、一般には呼び出される手
続き中で使用される外部に有効な変数も異なってくる。
同じ関数gが呼び出されるからといっても、そこに現れ
る情報はすべて同じというのではなく、引数が異なれば
内部の処理も異なるので、それらを分けて考える必要が
ある。したがって、データフロー解析を正確に行おうと
すれば、このような場合には、引数ごとに情報を切り分
ける必要がある。そこで、本実施形態のように、それぞ
れに対して、それぞれについて「call」、「ent
ry」、「exit」、「cond」、「retur
n」という五つのノードを対応させ、情報を適切に切り
分けることによって、情報をなるべく少なくし、かつ正
確な解析を行うことができる。
【0035】実際に、テーブル情報を生成する場合に
は、あらかじめ関数の呼び出し関係を解析しておき、そ
れに基づいて解析する順番を決める。図2のプログラム
の場合は、最初に関数gの解析を行ってから関数fの解
析を行う。つまり、関数gに関して、関数gが呼び出さ
れる場合に、使用される外部に有効な変数の情報、確実
に定義される外部に有効な変数の情報、定義される可能
性のある外部に有効な変数の情報を取り出しておき、そ
れに基づいて関数fのテーブル情報を生成する。
【0036】フローグラフ生成部11によって図3に示
すようなフローグラフを生成し、これに基づいて定義/
使用情報生成部12によって図4のような定義/使用情
報テーブルをセットし、これに基づいて既存の定義−使
用連鎖生成部13が行うデータフロー解析は、図8のよ
うなフローグラフを作成し、それに対応する定義/使用
情報テーブルをセットした後にデータフロー解析を行う
方法に比べて、その処理の内容及びその処理をコンピュ
ータで実行する場合のアルゴリズムが簡単化される。な
ぜならば、図8の場合には、関数fから関数gが呼び出
されるたびに、関数gの内容すべて解析することが必要
となり、その分、情報量が多くなるからである。尚、フ
ローグラフを生成し、これに基づいて定義/使用情報テ
ーブルをセットしたあとのデータフロー解析の処理につ
いては、A.V.Aho,R.Sethi,およびJ.
D.Ullman著「Compiler:Princi
ples,Techniques,and Tool
s」(Addison−Wesly,1986)(邦訳
「コンパイラI,II」サイエンス社、1990年)に詳
細に記述されている。
【0037】ところで、図8のようなフローグラフを作
成し、それに対応する定義/使用情報テーブルをセット
した後にデータフロー解析を行う場合の複雑な処理を避
ける試みとして、本発明とは異なる一つのアプローチが
提案されている。これは、関数呼び出しに関する情報を
簡略化したテーブルを予め設けておき、別の関数が呼び
出されたときには、このテーブルを参照して必要な情報
を取ってくるという方法である。これについては、「E
fficient Computationof In
terprocedural Definition−
Use Chains」(ACM Transacti
ons on Programming Langua
ges and Systems,Vol.16,N
o.2,March 1994,Pages 175−
204)に記載されている。
【0038】しかしながら、前掲論文に記載されている
方法では、呼び出される関数が同じ場合には、実引数が
異なっても、一つのテーブルで処理することになる。し
たがって、呼び出される関数の実引数が異なる場合に
は、必要に応じて引数の変換等の処理を行うなど、それ
ぞれの引数の内容を意識した処理が必要となり、データ
フロー解析のためのアルゴリズムはやはり複雑になる。
【0039】これに対して、本実施形態の場合は、関数
fから呼び出される関数gのフローグラフが、関数fの
フローグラフの内部に組み込まれた形で生成される。こ
のため、異なる引数の場合について、情報を別々に考え
ることができる。例えば図3において、ノード3からノ
ード7までの分岐の左側では、引数iとjが現れ、ノー
ド8からノード12までの分岐の右側では、引数iだけ
が現れ、引数jは現れない。このように引数によって呼
び出す関数を分けて考えると、処理内容が分かりやすく
なり、データフロー解析を行うときのアルゴリズムも簡
単になって、解析効率が向上する。
【0040】尚、本発明は、上記実施形態に限定される
ものではなく、その要旨の範囲内で種々の変更が可能で
ある。例えば、上記の実施の形態では、ソースプログラ
ムがC言語で記載された場合についての例であったが、
同様の考え方で、FORTRANを始めとする種々の高
級言語について、本発明に基づいて専用のデータフロー
解析装置を用意することができる。
【0041】次に、本発明の記録媒体について説明す
る。本発明の記録媒体には、コンピュータに読み取ら
れ、当該コンピュータを前述のようなデータフロー解析
装置として動作させるためのコンピュータプログラムが
記録されている。このコンピュータプログラムが読み込
まれると、コンピュータは、その内部に備えた主記憶装
置、補助記憶装置、中央処理装置などを、前述の構文解
析機能、フローグラフ生成機能、定義/使用情報生成機
能等として機能させるように動作する。このように本発
明は、コンピュータプログラムとして供給することがで
きる。また、記録媒体としては、フロッピーディスク、
CD−ROM、光磁気ディスク、磁気テープ、半導体記
憶装置などが挙げられる。
【0042】
【発明の効果】以上説明したように、本発明によれば、
ある手続きの中で別の手続きの呼び出しがあった場合に
おいて、データフロー解析を行うためにフローグラフ生
成手段が生成するフローグラフを所定の構造としたこと
により、フローグラフの構造が簡単化され、したがっ
て、フローグラフを生成するのに要する時間が短縮さ
れ、かつ、フローグラフを生成したあとの処理も簡単に
なるので、その処理を実行するためのアルゴリズムも簡
単になり、しかも、正確なデータフロー解析を行うこと
ができる。
【図面の簡単な説明】
【図1】本発明の一実施形態のデータフロー解析装置の
機能ブロック図である。
【図2】図1のデータフロー解析装置の機能を説明する
のに用いるC言語によるソースプログラムの一例を示す
図である。
【図3】フローグラフ生成部により生成されたフローグ
ラフの一例を示す図である。
【図4】定義/使用情報生成部により生成された定義/
使用情報テーブルの一例を示す図である。
【図5】従来の技術を説明するために用いるC言語によ
るソースプログラムの一例を示す図である。
【図6】データのデータフロー解析を行うために定義/
使用情報をまとめたテーブルの一例を示す図である。
【図7】手続き間データフロー解析について説明するた
めのC言語によるソースプログラムの一例を示す図であ
る。
【図8】図7のプログラムに基づいて作成されたフロー
グラフの一例を示す図である。
【符号の説明】
10 構文解析部 11 フローグラフ生成部 12 定義/使用情報生成部 13 定義−使用連鎖生成部 21 入出力解析ツール 22 影響解析ツール

Claims (6)

    【特許請求の範囲】
  1. 【請求項1】 読み込んだソースプログラムに対して構
    文解析を行う構文解析手段と、前記構文解析の結果に基
    づいてフローグラフを生成するフローグラフ生成手段
    と、前記フローグラフに基づいて変数の定義及び使用に
    関する情報を生成する定義/使用情報生成手段と、前記
    変数の定義及び使用に関する情報に基づいてどの定義と
    どの使用が結びつくかという定義と使用の連鎖に関する
    情報を生成する定義−使用連鎖生成手段とを有するデー
    タフロー解析装置において、 前記フローグラフ生成手段は、ある手続きが他の手続き
    を呼び出しているときに、少なくとも、呼び出される手
    続きの中で使用される外部に有効な変数があったときに
    その情報を対応させてセットする第1のノードと、呼び
    出される手続きの中で確実に定義される外部に有効な変
    数があるときにその情報を対応させてセットする第2の
    ノードと、呼び出される手続きの中で定義される可能性
    のある外部に有効な変数があるときにその情報を対応さ
    せてセットする第3のノードに分け、前記第1のノード
    から前記第2及び第3のノードへ、前記第3のノードか
    ら前記第2のノードへ、それぞれエッジを張った呼び出
    される手続きについてのフローグラフを生成し、これを
    呼び出した方の手続きのフローグラフ中に組み込んだフ
    ローグラフを生成し、前記定義/使用情報生成手段は、
    前記フローグラフの各ノードにセットされた情報に基づ
    いて定義と使用に分けた定義/使用情報を生成すること
    を特徴とするデータフロー解析装置。
  2. 【請求項2】 前記フローグラフ生成手段は、ある手続
    き呼び出し文において呼び出した手続きについて、更
    に、呼び出される手続きの実引数中に代入文があったと
    きにその情報を対応させてセットする第4のノードと、
    手続き呼び出し文中の呼び出される関数とは無関係の変
    数の定義又は使用の情報を対応させてセットする第5の
    ノードを用い、前記第4のノードから前記第1のノード
    へ、前記第2のノードから前記第5のノードへ、それぞ
    れエッジを張ったフローグラフを生成するものである請
    求項1記載のデータフロー解析装置。
  3. 【請求項3】 読み込んだソースプログラムに対して構
    文解析を行う構文解析行程と、前記構文解析の結果に基
    づいてフローグラフを生成するフローグラフ生成行程
    と、前記フローグラフに基づいて変数の定義及び使用に
    関する情報を生成する定義/使用情報生成行程と、前記
    変数の定義及び使用に関する情報に基づいてどの定義と
    どの使用が結びつくかという定義と使用の連鎖に関する
    情報を生成する定義−使用連鎖生成行程とを有するデー
    タフロー解析方法において、 前記フローグラフ生成行程は、ある手続きが他の手続き
    を呼び出しているときに、少なくとも、呼び出される手
    続きの中で使用される外部に有効な変数があったときに
    その情報を対応させてセットする第1のノードと、呼び
    出される手続きの中で確実に定義される外部に有効な変
    数があるときにその情報を対応させてセットする第2の
    ノードと、呼び出される手続きの中で定義される可能性
    のある外部に有効な変数があるときにその情報を対応さ
    せてセットする第3のノードに分け、前記第1のノード
    から前記第2及び第3のノードへ、前記第3のノードか
    ら前記第2のノードへ、それぞれエッジを張った呼び出
    される手続きについてのフローグラフを生成し、これを
    呼び出した方の手続きのフローグラフ中に組み込んだフ
    ローグラフを生成し、前記定義/使用情報生成行程は、
    前記フローグラフの各ノードにセットされた情報に基づ
    いて定義と使用に分けた定義/使用情報を生成すること
    を特徴とするデータフロー解析方法。
  4. 【請求項4】 前記フローグラフ生成行程は、ある手続
    き呼び出し文において呼び出した手続きについて、更
    に、呼び出される手続きの実引数中に代入文があったと
    きにその情報を対応させてセットする第4のノードと、
    手続き呼び出し文中の呼び出される関数とは無関係の変
    数の定義又は使用の情報を対応させてセットする第5の
    ノードを用い、前記第4のノードから前記第1のノード
    へ、前記第2のノードから前記第5のノードへ、それぞ
    れエッジを張ったフローグラフを生成するものである請
    求項3記載のデータフロー解析方法。
  5. 【請求項5】 読み込んだソースプログラムに対して構
    文解析を行う構文解析機能と、前記構文解析の結果に基
    づいてフローグラフを生成するフローグラフ生成機能
    と、前記フローグラフに基づいて変数の定義及び使用に
    関する情報を生成する定義/使用情報生成機能と、前記
    変数の定義及び使用に関する情報に基づいてどの定義と
    どの使用が結びつくかという定義と使用の連鎖に関する
    情報を生成する定義−使用連鎖生成機能とを含むデータ
    フロー解析機能をコンピュータに実行させるプログラム
    を記録した機械読み取り可能な記録媒体において、 前記フローグラフ生成機能は、ある手続きが他の手続き
    を呼び出しているときに、少なくとも、呼び出される手
    続きの中で使用される外部に有効な変数があったときに
    その情報を対応させてセットする第1のノードと、呼び
    出される手続きの中で確実に定義される外部に有効な変
    数があるときにその情報を対応させてセットする第2の
    ノードと、呼び出される手続きの中で定義される可能性
    のある外部に有効な変数があるときにその情報を対応さ
    せてセットする第3のノードに分け、前記第1のノード
    から前記第2及び第3のノードへ、前記第3のノードか
    ら前記第2のノードへ、それぞれエッジを張った呼び出
    される手続きについてのフローグラフを生成し、これを
    呼び出した方の手続きのフローグラフ中に組み込んだフ
    ローグラフを生成し、前記定義/使用情報生成機能は、
    前記フローグラフの各ノードにセットされた情報に基づ
    いて定義と使用に分けた定義/使用情報を生成するよう
    にコンピュータを動作させるプログラムを記録した記録
    媒体。
  6. 【請求項6】 前記フローグラフ生成機能は、ある手続
    き呼び出し文において呼び出した手続きについて、更
    に、呼び出される手続きの実引数中に代入文があったと
    きにその情報を対応させてセットする第4のノードと、
    手続き呼び出し文中の呼び出される関数とは無関係の変
    数の定義又は使用の情報を対応させてセットする第5の
    ノードを用い、前記第4のノードから前記第1のノード
    へ、前記第2のノードから前記第5のノードへ、それぞ
    れエッジを張ったフローグラフを生成するものである請
    求項5記載の記録媒体。
JP25884197A 1997-09-24 1997-09-24 データフロー解析装置、データフロー解析方法及びそのためのコンピュータプログラムを記録した記録媒体 Pending JPH1195995A (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP25884197A JPH1195995A (ja) 1997-09-24 1997-09-24 データフロー解析装置、データフロー解析方法及びそのためのコンピュータプログラムを記録した記録媒体

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP25884197A JPH1195995A (ja) 1997-09-24 1997-09-24 データフロー解析装置、データフロー解析方法及びそのためのコンピュータプログラムを記録した記録媒体

Publications (1)

Publication Number Publication Date
JPH1195995A true JPH1195995A (ja) 1999-04-09

Family

ID=17325777

Family Applications (1)

Application Number Title Priority Date Filing Date
JP25884197A Pending JPH1195995A (ja) 1997-09-24 1997-09-24 データフロー解析装置、データフロー解析方法及びそのためのコンピュータプログラムを記録した記録媒体

Country Status (1)

Country Link
JP (1) JPH1195995A (ja)

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR100506952B1 (ko) * 2000-04-27 2005-08-09 엔이씨 일렉트로닉스 가부시키가이샤 클럭 제어회로 및 방법
KR20130094932A (ko) * 2012-02-17 2013-08-27 (주)에프엑스기어 포트-에지 시스템을 이용한 노드 그래프 생성 방법

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR100506952B1 (ko) * 2000-04-27 2005-08-09 엔이씨 일렉트로닉스 가부시키가이샤 클럭 제어회로 및 방법
KR20130094932A (ko) * 2012-02-17 2013-08-27 (주)에프엑스기어 포트-에지 시스템을 이용한 노드 그래프 생성 방법

Similar Documents

Publication Publication Date Title
US5586328A (en) Module dependency based incremental compiler and method
US7120898B2 (en) Intermediate representation for multiple exception handling models
Ernst et al. An empirical analysis of C preprocessor use
USRE38104E1 (en) Method and apparatus for resolving data references in generated code
US5606697A (en) Compiler system for language processing program
Grant et al. Annotation-directed run-time specialization in C
JPH05257709A (ja) 並列化判別方法およびそれを用いた並列化支援方法
US7257806B1 (en) System and method for efficiently passing information between compiler and post-compile-time software
JPH05216681A (ja) プログラムソースコード解析手法
JP2004164554A (ja) プログラム実行監視装置および方法
US6009273A (en) Method for conversion of a variable argument routine to a fixed argument routine
US6330714B1 (en) Method and computer program product for implementing redundant lock avoidance
JP4026940B2 (ja) プログラム変換装置
JP3062266B2 (ja) 支援装置
US20060107258A1 (en) Program, program code optimization method, program code compile method, program code, and information processing system
Asai Binding-time analysis for both static and dynamic expressions
Sperber Self-applicable online partial evaluation
JPH1195995A (ja) データフロー解析装置、データフロー解析方法及びそのためのコンピュータプログラムを記録した記録媒体
Wiedmann A performance comparison between an APL interpreter and compiler
JPH08272623A (ja) プログラム解析装置及びプログラム解析方法
Tonella et al. Variable‐precision reaching definitions analysis
JP3167386B2 (ja) プログラム自動並列化方法
JP3018783B2 (ja) コンパイル方式
JP3424596B2 (ja) シンボル参照情報のキャッシュ方法ならびに装置
Bartoletti et al. Security-aware program transformations

Legal Events

Date Code Title Description
A621 Written request for application examination

Effective date: 20040421

Free format text: JAPANESE INTERMEDIATE CODE: A621

A977 Report on retrieval

Effective date: 20070213

Free format text: JAPANESE INTERMEDIATE CODE: A971007

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20070316

A02 Decision of refusal

Free format text: JAPANESE INTERMEDIATE CODE: A02

Effective date: 20070705