"手続き型言語によって記述され、繰り返し実行されるタスクを含むプログラムの到達定義に基づくデータフローグラフを生成するデータフローグラフ生成装置であって、前記プログラムからコントロールフローグラフを生成するコントロールフローグラフ生成手段と、前記コントロールフローグラフ生成手段で生成されたコントロールフローグラフにおいて終了ノードから開始ノードまでのエッジを仮定するエッジ仮定手段と、前記エッジ仮定手段でエッジが仮定されたコントロールフローグラフの到達定義を算出するとともに、該到達定義を算出する際に前記エッジ仮定手段で仮定されたエッジに従って到達定義を伝播させ、該伝播させた到達定義を前回値の到達定義として区別する到達定義算出手段と、前記到達定義算出手段で算出された到達定義に基づいてデータフローグラフを生成するデータフローグラフ生成手段と、を備えることを特徴とするデータフローグラフ生成装置。手続き型言語によって記述され、繰り返し実行されるタスクを含むプログラムの到達定義に基づくデータフローグラフを生成するデータフローグラフ生成方法であって、前記プログラムからコントロールフローグラフを生成するコントロールフローグラフ生成ステップと、前記コントロールフローグラフ生成ステップで生成されたコントロールフローグラフにおいて終了ノードから開始ノードまでのエッジを仮定するエッジ仮定ステップと、前記エッジ仮定ステップでエッジが仮定されたコントロールフローグラフの到達定義を算出するとともに、該到達定義を算出する際に前記エッジ仮定ステップで仮定されたエッジに従って到達定義を伝播させ、該伝播させた到達定義を前回値の到達定義として区別する到達定義算出ステップと、前記到達定義算出ステップで算出された到達定義に基づいてデータフローグラフを生成するデータフローグラフ生成ステップと、を含むことを特徴とするデータフローグラフ生成方法。手続き型言語によって記述され、繰り返し実行されるタスクを含むプログラムの到達定義に基づくデータフローグラフを生成するためのデータフローグラフ生成プログラムであって、コンピュータに、前記プログラムからコントロールフローグラフを生成するコントロールフローグラフ生成機能と、前記コントロールフローグラフ生成機能で生成されたコントロールフローグラフにおいて終了ノードから開始ノードまでのエッジを仮定するエッジ仮定機能と、前記エッジ仮定機能でエッジが仮定されたコントロールフローグラフの到達定義を算出するとともに、該到達定義を算出する際に前記エッジ仮定機能で仮定されたエッジに従って到達定義を伝播させ、該伝播させた到達定義を前回値の到達定義として区別する到達定義算出機能と、前記到達定義算出機能で算出された到達定義に基づいてデータフローグラフを生成するデータフローグラフ生成機能と、を実現させることを特徴とするデータフローグラフ生成プログラム。時間やイベントに同期してタスク関数を繰り返し実行するプログラムの場合、変数としてグローバル変数を参照する演算では、グローバル変数に前回実行時に演算された前回値がストアされているときには前回値に依存して演算を行う。しかし、従来の生成方法によるデータフローグラフには、グローバル変数にストアされた前回値に依存する演算が正確に反映されていない。そこで、本発明は、繰り返し実行されるタスクを含むプログラムでも高精度なデータフローグラフを生成できるデータフローグラフ生成装置、データフローグラフ生成方法及びデータフローグラフ生成プログラムを提供することを課題とする。本発明に係るデータフローグラフ生成装置は、手続き型言語によって記述され、繰り返し実行されるタスクを含むプログラムの到達定義に基づくデータフローグラフを生成するデータフローグラフ生成装置であって、プログラムからコントロールフローグラフを生成するコントロールフローグラフ生成手段と、コントロールフローグラフ生成手段で生成されたコントロールフローグラフにおいて終了ノードから開始ノードまでのエッジを仮定するエッジ仮定手段と、エッジ仮定手段でエッジが仮定されたコントロールフローグラフの到達定義を算出するとともに、該到達定義を算出する際にエッジ仮定手段で仮定されたエッジに従って到達定義を伝播させ、該伝播させた到達定義を前回値の到達定義として区別する到達定義算出手段と、到達定義算出手段で算出された到達定義に基づいてデータフローグラフを生成するデータフローグラフ生成手段とを備えることを特徴とする。このデータフローグラフ生成装置では、コントロールフローグラフ生成手段によって、繰り返し実行されるタスクを含むプログラムのコントロールフローグラフを生成する。データフローグラフ生成装置では、エッジ仮定手段によって、コントロールフローグラフにおいて終了ノードから開始ノードまでのエッジを仮定する。そして、データフローグラフ生成装置では、到達定義計算手段によって、そのエッジが仮定されたコントロールフローグラフの到達定義を算出する。特に、到達定義を算出する際に、仮定されたエッジに従って終了ノードの到達定義を開始ノードに伝播させるとともにその伝播させた到達定義を前回値の到達定義として区別し、前回値の到達定義も反映させる。そして、データフローグラフ生成装置では、データフローグラフ生成手段によって、算出された到達定義に基づいてデータフローグラフを生成する。このように、データフローグラフ生成装置では、繰り返し実行されるタスクを含むプログラムでも、到達定義計算時に終了ノードの到達定義を開始ノードに前回値として伝播させることにより、前回値に依存する演算も正確に反映することができ、高精度なデータフローグラフを生成できる。本発明に係るデータフローグラフ生成方法は、手続き型言語によって記述され、繰り返し実行されるタスクを含むプログラムの到達定義に基づくデータフローグラフを生成するデータフローグラフ生成方法であって、プログラムからコントロールフローグラフを生成するコントロールフローグラフ生成ステップと、コントロールフローグラフ生成ステップで生成されたコントロールフローグラフにおいて終了ノードから開始ノードまでのエッジを仮定するエッジ仮定ステップと、エッジ仮定ステップでエッジが仮定されたコントロールフローグラフの到達定義を算出するとともに、該到達定義を算出する際にエッジ仮定ステップで仮定されたエッジに従って到達定義を伝播させ、該伝播させた到達定義を前回値の到達定義として区別する到達定義算出ステップと、到達定義算出ステップで算出された到達定義に基づいてデータフローグラフを生成するデータフローグラフ生成ステップとを含むことを特徴とする。このデータフローグラフ生成方法によれば、各ステップの処理を行うことにより、上記データフローグラフ生成装置の作用及び効果を奏する。本発明に係るデータフローグラフ生成プログラムは、手続き型言語によって記述され、繰り返し実行されるタスクを含むプログラムの到達定義に基づくデータフローグラフを生成するためのデータフローグラフ生成プログラムであって、コンピュータに、プログラムからコントロールフローグラフを生成するコントロールフローグラフ生成機能と、コントロールフローグラフ生成機能で生成されたコントロールフローグラフにおいて終了ノードから開始ノードまでのエッジを仮定するエッジ仮定機能と、エッジ仮定機能でエッジが仮定されたコントロールフローグラフの到達定義を算出するとともに、該到達定義を算出する際にエッジ仮定機能で仮定されたエッジに従って到達定義を伝播させ、該伝播させた到達定義を前回値の到達定義として区別する到達定義算出機能と、到達定義算出機能で算出された到達定義に基づいてデータフローグラフを生成するデータフローグラフ生成機能とを実現させることを特徴とする。このデータフローグラフ生成プログラムによれば、このプログラムをコンピュータに実行させることによって、上記データフローグラフ生成装置の作用及び効果を奏する。本発明によれば、繰り返し実行されるタスクを含むプログラムでも、到達定義計算時に終了ノードの到達定義を開始ノードに前回値として伝播させることにより、前回値に依存する演算も正確に反映することができ、高精度なデータフローグラフを生成できる。以下、図面を参照して、本発明に係るデータフローグラフ生成装置、データフローグラフ生成方法及びデータフローグラフ生成プログラムの実施の形態を説明する。なお、各図において同一又は相当する要素については同一の符号を付し、重複する説明を省略する。本実施の形態では、本発明を、データフローグラフ生成装置に適用する。本実施の形態に係るデータフローグラフ生成装置は、解析対象のプログラムソースコードとデータフローグラフの出力変数が決定されて入力されると、プログラムからコントロールフローグラフを生成し、コントロールフローグラフに対する到達定義解析で得られる情報からデータフローグラフを生成し、出力変数を出力とするデータフローグラフを生成する。本実施の形態に係るデータフローグラフ生成装置は、データフローグラフの生成だけを行う専用装置でもよいし、あるいは、汎用コンピュータでデータフローグラフ生成用のアプリケーションを実行することによって構成されてもよい。なお、プログラムは、手続き型言語で記述されたプログラムである。特に、本実施の形態に係るデータフローグラフ生成装置は、時間やイベントに同期して繰り返し実行するタスク関数を含むプログラムが入力された場合でも、精度の高いデータフローグラフを生成できる。プログラムとしては、プログラムの中の一部のタスクだけが繰り返し実行されるものでもよいし、プログラムタスク全体が繰り返し実行されるものでもよい。繰り返し実行されるタスクは変数として少なくともグローバル変数を用いており、タスクが繰り返し実行される毎に演算された変数がグローバル変数にストアされる。そして、このグローバル変数にストアされた前回値が、次にタスクが実行されるときに各演算で用いられる。図3には、手続き型言語で記述されたプログラムの一例を示しており、taskが繰り返し実行され、x,y,zがグローバル変数である。図3に示すtaskでは、ステップ4の演算x=x1とステップ6の演算y=xでグローバル変数xにストアされた前回値が用いられる場合がある。なお、図3に示すプログラムではグローバル変数に関連する演算のみを具体的に示しており、ステップ1,3,9,12におけるは任意の演算である。本実施の形態に係るデータフローグラフ生成装置を具体的に説明する前に、図3のプログラムを例として、図4を参照して、従来のデータフローグラフの生成方法を説明しておく。ここでは、出力変数をgoutとしたデータフローグラフを生成する。図4は、従来のデータフローグラフの生成過程の一例であり、aがコントロールフローグラフ生成過程であり、bが到達定義算出過程であり、cが到達定義追跡過程であり、dがデータフローグラフ生成過程である。まず、プログラムの構文を解析する。図3に示すプログラムの構文を解析すると、ステップ1で任意の演算を実行し、ステップ2でifの条件式Pの判定を行い、条件式PがTrueの場合にはステップ3で任意の演算を実行し、条件式PがFalseの場合にはステップ4でx=x1を実行し、ステップ6でy=xを実行し、ステップ7でifの条件式Qの判定を行い、条件式QがTrueの場合にはステップ8でx=ginを実行し、条件式QがFalseの場合にはステップ9で任意の演算を実行し、ステップ11でz=yを実行し、ステップ12で任意の演算を実行し、ステップ13でgout=zを実行し、この処理過程が繰り返し実行される。次に、プログラムの構文解析結果に基づいて、プログラムのコントロールフローグラフを生成する。コントロールフローグラフは、プログラムを実行したときに通る可能性のある全経路がグラフで表され、ノード及びノードとノードとを繋ぐエッジで構成される。図4aに示すように、図3に示すプログラムから生成されたコントロールフローグラフCFGは、ノードN1がステップ1の任意の演算であり、ノードN1からノードN2へエッジE12で繋がれ、ノードN2がステップ2のifの条件式Pによる分岐であり、ノードN2からノードN3とノードN4へエッジE23,E24でそれぞれ繋がれ、ノードN3がステップ3の任意の演算であり、ノードN3からノードN5へエッジE35で繋がれ、ノードN4がステップ4のx=x1の演算であり、ノードN4からノードN5へエッジE45で繋がれ、ノードN5からノードN6へエッジE56で繋がれ、ノードN6がステップ6のy=xの演算であり、ノードN6からノードN7へエッジE67で繋がれ、ノードN7がステップ7のifの条件式Qによる分岐であり、ノードN7からノードN8とノードN9へエッジE78,E79でそれぞれ繋がれ、ノードN8がステップ8のx=ginの演算であり、ノードN8からノードN10へエッジE810で繋がれ、ノードN9がステップ9の任意の演算であり、ノードN9からノードN10へエッジE910で繋がれ、ノードN10からノードN11へエッジE1011で繋がれ、ノードN11がステップ11のz=yの演算であり、ノードN11からノードN12へエッジE1112で繋がれ、ノードN12がステップ12の任意の演算であり、ノードN12からノードN13へエッジE1213で繋がれ、ノードN13がステップ13のgout=zの演算である。次に、コントロールフローグラフを用いて、グローバル変数についての到達定義を算出する。本実施の形態では、到達定義については、ノードiにおいてグローバル変数vが定義されていることをviで表し、任意のノードに到達している定義の集合を{vi,vj,}と表す。図4bに示すように、ノードN4で演算されたグローバル変数xがx4と定義され、ノードN6で演算されたグローバル変数yがy6と定義され、ノードN8で演算されたグローバル変数xがx8と定義され、ノードN11で演算されたグローバル変数zがz11と定義される。これらのグローバル変数の定義をパスに従って伝播させると、最終的には、ノードN4からノードN5を経由してノードN6に到達定義集合{x4}が到達し、ノードN6からノードN7を経由してノードN8とノードN9に到達定義集合{x4,y6}が到達し、ノードN8からノードN10に到達定義集合{x8,y6}が到達するとともにノードN9からノードN10に到達定義集合{x4,y6}が到達し、ノードN10からノードN11に到達定義集合{x4,x8,y6}が到達し、ノードN11からノードN12を経由してノードN13に到達定義集合{x4,x8,y6,z11}が到達する。なお、タスク内にループが存在する場合、一回の伝播では決定できないので、伝播を何度か繰り返し、到達定義集合に変化が無くなったときに終了する。次に、各ノードの到達定義集合を用いて、出力変数から到達定義を逆順に追跡する。図4cに示すように、出力変数goutが演算されるノードN13を起点とし、goutはノードN13でグローバル変数zを参照して演算されるので、ノードN13に到達している到達定義集合{x4,x8,y6,z11}内の到達定義z11を追跡する。到達定義z11はノードN11でグローバル変数yを参照して演算されるので、ノードN11を経由して、ノードN11に到達している到達定義集合{x4,x8,y6}内の到達定義y6を追跡する。到達定義y6はノードN6でグローバル変数xを参照して演算されるので、ノードN6を経由して、ノードN6に到達している到達定義集合{x4}内の到達定義x4を追跡する。到達定義x4はノードN4でグローバル変数xを参照して演算されるので、ノードN4に到達する。次に、出力変数から到達定義を逆順に追跡した結果に基づいて、出力変数のデータフローグラフを生成する。データフローグラフは、入出力変数を楕円で表し、演算を四角形で表し、データセレクタをひし形で表し、エッジには変数が付加される。図4dに示すように、生成されたgoutを出力変数とするデータフローグラフDFG0では、演算ノードA4で変数xと1を参照してxが演算され、その演算されたxがエッジEx4で演算ノードA6に伝播され、演算ノードA6でそのxを参照してyが演算され、その演算されたyがエッジEy6で演算ノードA11に伝播され、演算ノードA11でそのyを参照してzが演算され、その演算されたzがエッジEz11で演算ノードA13に伝播され、演算ノードA13でそのzを参照してgoutが演算され、goutが出力される。なお、データフローグラフにはプログラム中の分岐条件の表現等もグラフ化した様々なバリエーションがあるが、本実施の形態では、表現を簡単化するために、それら分岐条件等例えば、図3のプログラムにおけるPの分岐条件を省略するものとする。データフローグラフの構成については、それら分岐条件等を含むものに拡張できる。上記したように図3に示すtaskではステップ4の演算x=x1とステップ6の演算y=xにおいてグローバル変数xにストアされた前回値を参照して演算を行う場合がある。しかし、図4dに示すデータフローグラフDFG0では、演算ノードA4及び演算ノードA6で参照しているxについては、前回の実行で演算された前回値のxを参照するような関係になっていない。そのため、従来の方法で生成されたデータフローグラフDFG0は、図3に示すプログラムを正確に表すものではない。それでは、図1及び図2を参照して、本実施の形態に係るデータフローグラフ生成装置1について説明する。図1は、本実施の形態に係るデータフローグラフ生成装置の構成図である。図2は、本実施の形態に係るデータフローグラフ生成装置での処理の流れを示すフローチャートである。データフローグラフ生成装置1は、解析対象のプログラムソースコードPと出力変数Voutが入力されると、プログラムP内に繰り返し実行されるタスクが含まれているか否かを判断する。プログラムP内に繰り返し実行されるタスクが含まれていない場合、データフローグラフ生成装置1は、上記した従来の生成方法によって出力変数Voutを出力とするデータフローグラフDFGを生成する。プログラムP内に繰り返し実行されるタスクが含まれている場合、データフローグラフ生成装置1は、上記した従来の生成方法に加えて、繰り返し実行されるタスクのコントロールフローグラフにおいてexitノード終了ノードからentryノード開始ノードまでのエッジexit-entryエッジを仮定し、exit-entryエッジに従ってexitノードの到達定義集合を前回値前回値として区別するためにラベリングとしてentryノードに伝播させて到達定義計算を行い、出力変数Voutを出力とするデータフローグラフDFGを生成する。なお、以下の説明では、データフローグラフ生成装置1におけるプログラムP内に繰り返し実行されるタスクが含まれている場合の処理についてのみ説明する。データフローグラフ生成装置1では、まず、繰り返し実行されるタスクを含むプログラムPの構文解析を行うS1。そして、データフローグラフ生成装置1では、その構文解析結果に基づいて、プログラムPのコントロールフローグラフを生成するS2。このS1、S2の各処理については、上記で説明した従来の方法と同様の処理である。なお、本実施の形態では、このS2の処理が特許請求の範囲に記載するコントロールフローグラフ生成手段、コントロールフローグラフ生成ステップ、コントロールフローグラフ生成機能に相当する。次に、データフローグラフ生成装置1では、コントロールフローグラフにおいてexitノードからentryノードまでを繋ぐexit-entryエッジを付加仮定するS3。このexit-entryエッジが、到達定義の前回値の伝播路となる。なお、本実施の形態では、このS3の処理が特許請求の範囲に記載するエッジ仮定手段、エッジ仮定ステップ、エッジ仮定機能に相当する。次に、データフローグラフ生成装置1では、コントロールフローグラフを用いて、グローバル変数についての到達定義を算出するS4。この到達定義算出は、前回値の到達定義を反映しておらず、上記で説明した従来の方法と同様の計算である。そして、データフローグラフ生成装置1では、exitノードに伝播されている到達定義集合をexit-entryエッジに従ってentryノードまで伝播し、その伝播させた到達定義集合を前回値として区別するためにラベル付けを行うS4。さらに、データフローグラフ生成装置1では、そのexit-entryエッジで伝播させた前回値の到達定義も含めて、到達定義が収束するまで実行中の今回値の到達定義と前回値の到達定義とを区別して伝播を繰り返し行い、最終的な到達定義を計算するS4。この最終的に計算された到達定義は、前回値の依存関係も反映されたものとなる。なお、本実施の形態では、このS4の処理が特許請求の範囲に記載する到達定義算出手段、到達定義算出ステップ、到達定義算出機能に相当する。そして、データフローグラフ生成装置1では、各ノードの到達定義集合を用いて、入力された出力変数Voutから到達定義を逆順に追跡し、その到達定義の逆順追跡結果に基づいて出力変数Voutのデータフローグラフを生成するS5。なお、本実施の形態では、このS5の処理が特許請求の範囲に記載するデータフローグラフ生成手段、データフローグラフ生成ステップ、データフローグラフ生成機能に相当する。図3のプログラムを例として、図5及び図6を参照して、データフローグラフ生成装置1におけるデータフローグラフの具体的な生成過程を説明する。ここでは、プログラムPとして図3に示すプログラムが入力され、出力変数Voutとしてgoutが入力され、goutを対象とした計算過程やデータの依存関係を表すデータフローグラフが生成される。図5は、本実施の形態に係るデータフローグラフ生成装置でのデータフローグラフの生成過程の一例であり、aがエッジ付加過程であり、bが付加エッジ伝播前の到達定義算出過程であり、cが付加エッジ伝播過程である。図6は、本実施の形態に係るデータフローグラフ生成装置でのデータフローグラフの生成過程の一例であり、aが付加エッジ伝播後の到達定義算出過程であり、bが到達定義追跡過程であり、cがデータフローグラフ生成過程である。なお、出力変数Voutについては、z等の他の変数でもよい。まず、データフローグラフ生成装置1では、上記で説明した従来の方法と同様にプログラムの構文解析を行う。そして、データフローグラフ生成装置1では、その構文解析結果に基づいて、上記で説明した従来の方法と同様にコントロールフローグラフを生成する。したがって、上記と同様に、図4aに示すコントロールフローグラフCFGが得られる。次に、データフローグラフ生成装置1では、図5aに示すように、コントロールフローグラフCFGにおいてexitノードN13からentryノードN1までのexit-entryエッジE131を付加にする。次に、データフローグラフ生成装置1では、コントロールフローグラフCFGを用いて、上記で説明した従来の方法と同様に、グローバル変数x,y,zについての到達定義を算出する。したがって、図5bに示すように、到達定義集合としては、図4bに示す到達定義集合と同じものが得られる。この図5bに示す到達定義集合は、前回値の到達定義が未だ反映されていない。次に、データフローグラフ生成装置1では、図5cに示すように、exit-entryエッジE131に従って、exitノードN13に伝播されている到達定義集合{x4,x8,y6,z11}をentryノードN1に伝播し、伝播した到達定義集合{x4,x8,y6,z11}を前回値として区別するために到達定義集合{x4’,x8’,y6’,z11’}に変更する。本実施の形態では、前回値のラベル付けとして、前回値の到達定義にはアポストロフィ’を付加している。なお、前回値を区別するためのラベル付けについては、どのようなものでもよい。次に、データフローグラフ生成装置1では、entryノードN1に伝播された前回値の到達定義集合{x4’,x8’,y6’,z11’}も用いて、到達定義が収束するまで到達定義の伝播を繰り返す。これによって、図6aに示す到達定義集合が最終的に得られ、ノードN1からノードN2を経由してノードN3とノードN4に到達定義集合{x4’,x8’,y6’,z11’}が到達し、ノードN3からノードN5に到達定義集合{x4’,x8’,y6’,z11’}が到達し、ノードN4からノードN5に到達定義集合{x4,y6’,z11’}が到達し、ノードN5からノードN6に到達定義集合{x4,x4’,x8’,y6’,z11’}が到達し、ノードN6からノードN7を経由してノードN8とノードN9に到達定義集合{x4,x4’,x8’,y6,z11’}が到達し、ノードN8からノードN10に到達定義集合{x8,y6,z11’}が到達し、ノードN9からノードN10に到達定義集合{x4,x4’,x8’,y6,z11’}が到達し、ノードN10からノードN11に到達定義集合{x4,x4’,x8,x8’,y6,z11’}が到達し、ノードN11からノードN12を経由してノードN13に到達定義集合{x4,x4’,x8,x8’,y6,z11}が到達する。次に、データフローグラフ生成装置1では、各ノードの到達定義集合を用いて、出力変数のgoutから到達定義を逆順に追跡する。図6bに示すように、出力変数goutが演算されるノードN13を起点とし、goutはノードN13でグローバル変数zを参照して演算されるので、ノードN13に到達している到達定義集合{x4,x4’,x8,x8’,y6,z11}内の到達定義z11を追跡する。到達定義z11はノードN11でグローバル変数yを参照して演算されるので、ノードN11を経由して、ノードN11に到達している到達定義集合{x4,x4’,x8,x8’,y6,z11’}内の到達定義y6を追跡する。到達定義y6はノードN6でグローバル変数xを参照して演算されるので、ノードN6を経由して、ノードN6に到達している到達定義集合{x4,x4’,x8’,y6’,z11’}内の到達定義x4,x4’,x8’を追跡する。つまり、ノードN6の演算ではこの3つの到達定義x4,x4’,x8’のいずれか1つを参照して演算を行うので、ノードN6の演算で参照する可能性のある3つの到達定義x4,x4’,x8’を追跡する必要がある。したがって、データフローグラフを生成する際に、ノードN6の演算の前にこの3つの値から1つの値を選択するためのセレクタが必要となる。到達定義x4はノードN4でグローバル変数xを参照して演算されるので、ノードN4を経由して、ノードN4に到達している到達定義集合{x4’,x8’,y6’,z11’}内の到達定義x4’,x8’を追跡する。つまり、ノードN4の演算ではこの2つの到達定義x4’,x8’のいずれか1つを参照して演算を行うので、ノードN4の演算で参照する可能性のある2つの到達定義x4’,x8’を追跡する必要がある。したがって、データフローグラフを生成する際に、ノードN4の演算の前にこの2つの値から1つの値を選択するためのセレクタが必要となる。到達定義x4’の追跡は、到達定義x4の追跡と同様であり、到達定義x4’,x8’を追跡する。到達定義x8’はノードN8でginを参照して演算されるので、ノードN8に到達する。次に、データフローグラフ生成装置1では、出力変数goutから到達定義を逆順に追跡した結果に基づいて、出力変数goutのデータフローグラフDFG1を生成する。本実施の形態では、データフローグラフにおいて点線のエッジで前回値の参照を示している。図6cに示すように、生成されたgoutを出力変数とするデータフローグラフDFG1では、ノードとしては、演算ノードA4,A6,A8,A11,A13以外に、演算ノードA4で参照するxの値を選択するためのセレクタノードS1が付加されるとともに、演算ノードA6で参照するxの値を選択するためのセレクタノードS2が付加される。前回実行時に演算ノードA8で入力変数ginを参照してx前回値が演算され、その前回演算されたx前回値がエッジEx8’S1でセレクタノードS1に伝播されるとともにエッジEx8’S2でセレクタノードS2に伝播される。セレクタノードS1には演算ノードA8で前回演算されたx前回値と演算ノードA4で前回演算されたx前回値が伝播され、セレクタノードS1でその2つのxから1つのxが選択され実際には、プログラムのtaskの前回実行時のステップ8のx=ginで演算されたx値又は前回実行時のステップ4のx=x1で演算されたx値がストアされたグローバル変数xの値である、その選択されたxがエッジExS1で演算ノードA4に伝播される。今回実行時に演算ノードA4でそのセレクタノードS1からのxと1を参照してx今回値が演算され、その演算されたx今回値がエッジEx4S2でセレクタノードS2に伝播される。また、前回実行時に演算ノードA4でそのセレクタノードS1からのxと1を参照してx前回値が演算され、その前回演算されたx前回値がエッジEx4’S2でセレクタノードS2に伝播されるとともにエッジEx4’S1でセレクタノードS1に伝播される。セレクタノードS2には演算ノードA8で前回演算されたx前回値と演算ノードA4で前回演算されたx前回値と演算ノードA4で今回演算されたx今回値が伝播され、セレクタノードS2でその3つのxから1つのxが選択され実際には、プログラムのtaskの前回実行時のステップ8のx=ginで演算されたx値又は前回実行時のステップ4のx=x1で演算されたx値又は今回実行時のステップ4のx=x1で演算されたx値がストアされたグローバル変数xの値である、その選択されたxがエッジExS2で演算ノードA6に伝播される。そして、演算ノードA6でそのxを参照してyが演算され、その演算されたyがエッジEy6で演算ノードA11に伝播され、演算ノードA11でそのyを参照してzが演算され、その演算されたzがエッジEz11で演算ノードA13に伝播され、演算ノードA13でそのzを参照してgoutが演算され、goutが出力される。このデータフローグラフDFG1には、演算ノードA4におけるグローバル変数xの参照として、演算ノードA4で前回演算されたx前回値、演算ノードA8で前回演算されたx前回値のうちの何れかのxが参照される関係がグラフ化されている。また、データフローグラフDFG1には、演算ノードA6におけるグローバル変数xの参照として、演算ノードA4で今回演算されたx今回値、演算ノードA4で前回演算されたx前回値、演算ノードA8で前回演算されたx前回値のうちの何れかのxが参照される関係がグラフ化されている。このように、データフローグラフDFG1は、図4dに示す従来の生成方法によるデータフローグラフDFG0では表されないグローバル変数xの前回値に依存する演算も反映されており、図3に示すプログラムを正確に表している。このデータフローグラフ生成装置1によれば、繰り返し実行されるタスクを含むプログラムでも、到達定義計算時にexitノードの到達定義をentryノードに前回値として伝播させることにより、グローバル変数にストアされる前回値に依存する演算も正確に反映することができ、高精度なデータフローグラフを生成できる。また、データフローグラフ生成装置1によれば、exitノードからentryノードに伝播させた到達定義に対して前回値としてのラベル付けを行うことにより、今回値の到達定義と前回値の到達定義とを区別しながら、到達定義が収束するまで容易かつ正確に伝播させることができる。以上、本発明に係る実施の形態について説明したが、本発明は上記実施の形態に限定されることなく様々な形態で実施される。例えば、本実施の形態ではデータフローグラフを生成するデータフローグラフ生成装置に適用したが、CD-ROM等の記憶媒体に格納されたプログラムやインタネット等のネットワークを介して利用可能なプログラム等に適用し、このようなプログラムをコンピュータ上で実行することによってデータフローグラフを生成する構成としてもよい。"