(57)【要約】【課題】効率的なデータ退避が可能になること。【解決手段】プログラムのソースコードから当該プログラムのループ構造を解析して、当該プログラムにおいて繰り返される演算処理のメインループと当該メインループに含まれるサブループとを検出し、検出されたメインループに突入する地点を、演算結果のデータを退避する地点であるチェックポイントとして決定し、検出されたメインループ内に記述される演算処理の内容を解析して、参照のみされる要素および参照された後に定義される要素である参照先行要素を、決定されたチェックポイントにおいて退避するデータとして判別する。【選択図】        図１−１
2008234058.tif 000002
【特許請求の範囲】
【請求項１】
コンピュータが同じ演算処理が繰り返されるプログラムを実行する際に、定期的に退避する要素からなる演算結果のデータを判別する退避データ判別方法であって、
前記プログラムのソースコードから当該プログラムのループ構造を解析して、当該プログラムにおいて繰り返される演算処理のメインループと当該メインループに含まれるサブループとを検出するループ構造検出工程と、
前記ループ構造検出工程によって検出された前記メインループに突入する地点を、前記演算結果のデータを退避する地点であるチェックポイントとして決定するチェックポイント決定工程と、
前記ループ構造検出工程によって検出された前記メインループ内に記述される演算処理の内容を解析して、参照のみされる要素および参照された後に定義される要素である参照先行要素を、前記チェックポイント決定工程によって決定された前記チェックポイントにおいて退避するデータとして判別する参照先行要素判別工程と、
を含んだことを特徴とする退避データ判別方法。
【請求項２】
前記参照先行要素判別工程は、前記ループ構造検出工程によって検出された前記メインループに含まれる複数のサブループごとの演算処理の内容を解析して、要素を定義する演算処理のサブループである定義サブループが一回もしくは複数回出現した後に、要素を参照する演算処理のサブループである参照サブループが一回もしくは複数回出現する場合は、前記定義サブループすべてによって定義される要素の和集合の補集合と、前記参照サブループすべてによって参照される要素の和集合との積集合を前記参照先行要素として判別することを特徴とする請求項１に記載の退避データ判別方法。
【請求項３】
前記参照先行要素判別工程は、前記ループ構造検出工程によって検出された前記メインループに含まれる複数のサブループごとの演算処理の内容を解析して、すべての要素を定義する演算処理のサブループが最初に出現する場合は、前記参照先行要素に該当する要素はないと判別することを特徴とする請求項１に記載の退避データ判別方法。
【請求項４】
前記参照先行要素判別工程は、前記ループ構造検出工程によって検出された前記メインループに含まれる複数のサブループごとの演算処理の内容を解析して、前記定義サブループが一回もしくは複数回出現した後に、前記参照サブループが一回もしくは複数回出現し、さらに要素を定義する演算処理のサブループである後続定義サブループが一回もしくは複数回出現した場合、当該後続定義サブループによって定義されるすべての要素が、当該定義サブループによって定義されるすべての要素に含まれるならば、前記定義サブループすべてによって定義される要素の和集合の補集合と、前記参照サブループすべてによって参照される要素の和集合との積集合を前記参照先行要素として判別することを特徴とする請求項１に記載の退避データ判別方法。
【請求項５】
前記チェックポイント決定工程によって決定された前記チェックポイントと、前記参照先行要素判別工程によって判別された前記参照先行要素とを所定の出力部に表示するように指示をする表示指示工程をさらに含んだことを特徴とする請求項１に記載の退避データ判別方法。
【請求項６】
コンピュータが同じ演算処理が繰り返されるプログラムを実行する際に、定期的に退避する要素からなる演算結果のデータを判別する退避データ判別方法をコンピュータに実行させる退避データ判別プログラムであって、
前記プログラムのソースコードから当該プログラムのループ構造を解析して、当該プログラムにおいて繰り返される演算処理のメインループと当該メインループに含まれるサブループとを検出するループ構造検出手順と、
前記ループ構造検出手順によって検出された前記メインループに突入する地点を、前記演算結果のデータを退避する地点であるチェックポイントとして決定するチェックポイント決定手順と、
前記ループ構造検出手順によって検出された前記メインループ内に記述される演算処理の内容を解析して、参照のみされる要素および参照された後に定義される要素である参照先行要素を、前記チェックポイント決定手順によって決定された前記チェックポイントにおいて退避するデータとして判別する参照先行要素判別手順と、
をコンピュータに実行させることを特徴とする退避データ判別プログラム。
【請求項７】
コンピュータが同じ演算処理が繰り返されるプログラムを実行する際に、定期的に退避する要素からなる演算結果のデータを判別する退避データ判別装置であって、
前記プログラムのソースコードから当該プログラムのループ構造を解析して、当該プログラムにおいて繰り返される演算処理のメインループと当該メインループに含まれるサブループとを検出するループ構造検出手段と、
前記ループ構造検出手段によって検出された前記メインループに突入する地点を、前記演算結果のデータを退避する地点であるチェックポイントとして決定するチェックポイント決定手段と、
前記ループ構造検出手段によって検出された前記メインループ内に記述される演算処理の内容を解析して、参照のみされる要素および参照された後に定義される要素である参照先行要素を、前記チェックポイント決定手段によって決定された前記チェックポイントにおいて退避するデータとして判別する参照先行要素判別手段と、
を備えたことを特徴とする退避データ判別装置。
【発明の詳細な説明】
【技術分野】
【０００１】
この発明は、退避データ判別方法、退避データ判別プログラムおよび退避データ判別装置に関する。
【背景技術】
【０００２】
従来より、科学技術計算など、同じ演算処理が繰り返されるプログラムを実行する際には、当該演算処理を行なうコンピュータの故障に対処するために、定期的に演算結果のデータを退避して保存することが行なわれている。
【０００３】
ここで、演算処理を行なうコンピュータは、ユーザの設定に従って、定期的に演算結果のデータを退避して保存する。例えば、１００００回のループを繰り返すプログラムを実行して演算処理を行なうコンピュータは、ユーザの設定に従って、例えば、１００回ごとの演算結果のデータを退避して保存する。
【０００４】
従って、仮に、５１０回目のループにおける演算処理実行中に、コンピュータの故障が発生した場合でも、故障復旧後のコンピュータは、退避して保存しておいた５００回目の演算結果のデータを利用することで、1回目のループにおける演算処理からではなく、５０１回目のループにおける演算処理から処理を再開することが可能になる。
【０００５】
なお、特許文献１では、主ＣＰＵ側のメモリからＤＭＡ（ｄｉｒｅｃｔ  ｍｅｍｏｒｙ  ａｃｃｅｓｓ）により従ＣＰＵ側のメモリにデータを転送して保存するプログラマブルコントローラが開示されている。
【０００６】
【特許文献１】特公平６−３０００２号公報
【発明の開示】
【発明が解決しようとする課題】
【０００７】
ところで、上記した従来の技術は、ユーザが設定された時点における演算結果のデータをすべて退避して保存するので、データ転送における処理に負荷がかかり、非効率的なデータ退避しかできないという問題点があった。
【０００８】
すなわち、プログラム中に設定されたデータ退避を行なう地点であるチェックポイントにおいて、退避する演算結果のデータが、例えば、二次元以上の配列要素からなる変数値のように膨大な量からなるデータの場合、これらをすべて退避して保存するには、データ転送に時間がかかり、非効率的なデータ退避しかできないという問題点があった。
【０００９】
そこで、この発明は、上述した従来技術の課題を解決するためになされたものであり、効率的なデータ退避が可能になる退避データ判別方法、退避データ判別プログラムおよび退避データ判別装置を提供することを目的とする。
【課題を解決するための手段】
【００１０】
上述した課題を解決し、目的を達成するため、請求項１に係る発明は、コンピュータが同じ演算処理が繰り返されるプログラムを実行する際に、定期的に退避する要素からなる演算結果のデータを判別する退避データ判別方法であって、前記プログラムのソースコードから当該プログラムのループ構造を解析して、当該プログラムにおいて繰り返される演算処理のメインループと当該メインループに含まれるサブループとを検出するループ構造検出工程と、前記ループ構造検出工程によって検出された前記メインループに突入する地点を、前記演算結果のデータを退避する地点であるチェックポイントとして決定するチェックポイント決定工程と、前記ループ構造検出工程によって検出された前記メインループ内に記述される演算処理の内容を解析して、参照のみされる要素および参照された後に定義される要素である参照先行要素を、前記チェックポイント決定工程によって決定された前記チェックポイントにおいて退避するデータとして判別する参照先行要素判別工程と、を含んだことを特徴とする。
【００１１】
また、請求項２に係る発明は、上記の発明において、前記参照先行要素判別工程は、前記ループ構造検出工程によって検出された前記メインループに含まれる複数のサブループごとの演算処理の内容を解析して、要素を定義する演算処理のサブループである定義サブループが一回もしくは複数回出現した後に、要素を参照する演算処理のサブループである参照サブループが一回もしくは複数回出現する場合は、前記定義サブループすべてによって定義される要素の和集合の補集合と、前記参照サブループすべてによって参照される要素の和集合との積集合を前記参照先行要素として判別することを特徴とする。
【００１２】
また、請求項３に係る発明は、上記の発明において、前記参照先行要素判別工程は、前記ループ構造検出工程によって検出された前記メインループに含まれる複数のサブループごとの演算処理の内容を解析して、すべての要素を定義する演算処理のサブループが最初に出現する場合は、前記参照先行要素に該当する要素はないと判別することを特徴とする。
【００１３】
また、請求項４に係る発明は、上記の発明において、前記参照先行要素判別工程は、前記ループ構造検出工程によって検出された前記メインループに含まれる複数のサブループごとの演算処理の内容を解析して、前記定義サブループが一回もしくは複数回出現した後に、前記参照サブループが一回もしくは複数回出現し、さらに要素を定義する演算処理のサブループである後続定義サブループが一回もしくは複数回出現した場合、当該後続定義サブループによって定義されるすべての要素が、当該定義サブループによって定義されるすべての要素に含まれるならば、前記定義サブループすべてによって定義される要素の和集合の補集合と、前記参照サブループすべてによって参照される要素の和集合との積集合を前記参照先行要素として判別することを特徴とする。
【００１４】
また、請求項５に係る発明は、上記の発明において、前記チェックポイント決定工程によって決定された前記チェックポイントと、前記参照先行要素判別工程によって判別された前記参照先行要素とを所定の出力部に表示するように指示をする表示指示工程をさらに含んだことを特徴とする。
【００１５】
また、請求項６に係る発明は、コンピュータが同じ演算処理が繰り返されるプログラムを実行する際に、定期的に退避する要素からなる演算結果のデータを判別する退避データ判別方法をコンピュータに実行させる退避データ判別プログラムであって、前記プログラムのソースコードから当該プログラムのループ構造を解析して、当該プログラムにおいて繰り返される演算処理のメインループと当該メインループに含まれるサブループとを検出するループ構造検出手順と、前記ループ構造検出手順によって検出された前記メインループに突入する地点を、前記演算結果のデータを退避する地点であるチェックポイントとして決定するチェックポイント決定手順と、前記ループ構造検出手順によって検出された前記メインループ内に記述される演算処理の内容を解析して、参照のみされる要素および参照された後に定義される要素である参照先行要素を、前記チェックポイント決定手順によって決定された前記チェックポイントにおいて退避するデータとして判別する参照先行要素判別手順と、をコンピュータに実行させることを特徴とする。
【００１６】
また、請求項７に係る発明は、コンピュータが同じ演算処理が繰り返されるプログラムを実行する際に、定期的に退避する要素からなる演算結果のデータを判別する退避データ判別装置であって、前記プログラムのソースコードから当該プログラムのループ構造を解析して、当該プログラムにおいて繰り返される演算処理のメインループと当該メインループに含まれるサブループとを検出するループ構造検出手段と、前記ループ構造検出手段によって検出された前記メインループに突入する地点を、前記演算結果のデータを退避する地点であるチェックポイントとして決定するチェックポイント決定手段と、前記ループ構造検出手段によって検出された前記メインループ内に記述される演算処理の内容を解析して、参照のみされる要素および参照された後に定義される要素である参照先行要素を、前記チェックポイント決定手段によって決定された前記チェックポイントにおいて退避するデータとして判別する参照先行要素判別手段と、を備えたことを特徴とする。
【発明の効果】
【００１７】
請求項１、６または７の発明によれば、プログラムのソースコードから当該プログラムのループ構造を解析して、当該プログラムにおいて繰り返される演算処理のメインループと当該メインループに含まれるサブループとを検出し、検出されたメインループに突入する地点を、前記演算結果のデータを退避する地点であるチェックポイントとして決定し、検出されたメインループ内に記述される演算処理の内容を解析して、参照のみされる要素および参照された後に定義される要素である参照先行要素を、決定されたチェックポイントにおいて退避するデータとして判別するので、すべての演算結果ではなく、プログラム実行再開に際して必要最低限なデータである参照先行要素のみを退避することにより退避データ量を削減することができ、効率的なデータ退避が可能になる。
【００１８】
また、請求項２の発明によれば、検出されたメインループに含まれる複数のサブループごとの演算処理の内容を解析して、要素を定義する演算処理のサブループである定義サブループが一回もしくは複数回出現した後に、要素を参照する演算処理のサブループである参照サブループが一回もしくは複数回出現する場合は、定義サブループすべてによって定義される要素の和集合の補集合と、参照サブループすべてによって参照される要素の和集合との積集合を参照先行要素として判別するので、プログラマが参照先行要素を判別することなく、プログラムのソースコードを解析して自動的に参照先行要素を判別することができるとともに、例えば、決定されたチェックポイントにおいて、判別された参照先行要素を退避するように当該プログラムのソースコードを書き換えて再コンパイルすることができ、効率的なデータ退避が可能になる。
【００１９】
また、請求項３の発明によれば、検出されたメインループに含まれる複数のサブループごとの演算処理の内容を解析して、すべての要素を定義する演算処理のサブループが最初に出現する場合は、参照先行要素に該当する要素はないと判別するので、退避すべきデータがないプログラムと容易に判別することができ、効率的なデータ退避が可能になる。
【００２０】
また、請求項４の発明によれば、検出されたメインループに含まれる複数のサブループごとの演算処理の内容を解析して、定義サブループが一回もしくは複数回出現した後に、参照サブループが一回もしくは複数回出現し、さらに要素を定義する演算処理のサブループである後続定義サブループが一回もしくは複数回出現した場合、当該後続定義サブループによって定義されるすべての要素が、当該定義サブループによって定義されるすべての要素に含まれるならば、定義サブループすべてによって定義される要素の和集合の補集合と、参照サブループすべてによって参照される要素の和集合との積集合を参照先行要素として判別するので、プログラマが参照先行要素を判別することなく、プログラムのソースコードを解析して自動的に参照先行要素を判別することができるとともに、例えば、決定されたチェックポイントにおいて、判別された参照先行要素を退避するように当該プログラムのソースコードを書き換えて再コンパイルすることができ、効率的なデータ退避が可能になる。
【００２１】
また、請求項５の発明によれば、決定されたチェックポイントと、判別された参照先行要素とを所定の出力部に表示するように指示をするので、例えば、プログラマは、自動的に判別された参照先行要素を確認するとともに、プログラマ自身が「退避すべきと判別する要素」もしくは「退避しなくてもよいと判別する要素」が当該参照先行要素に含まれるか否かを容易に判別することができるので、効率的なデータ退避が可能になる。
【発明を実施するための最良の形態】
【００２２】
以下に添付図面を参照して、この発明に係る退避データ判別方法、退避データ判別プログラムおよび退避データ判別装置の実施例を詳細に説明する。なお、以下では、退避データ判別方法を実施する退避データ判別装置を実施例として説明する。また、以下では、実施例１における退避データ判別装置の概要および特徴、実施例１における退避データ判別装置の構成および処理の手順、実施例１の効果を順に説明し、最後に、他の実施例について説明する。
【実施例１】
【００２３】
［実施例１における商品情報管理装置の概要および特徴］
まず最初に、図１を用いて、実施例１における退避データ判別装置の主たる特徴を具体的に説明する。図１は、実施例１における退避データ判別装置の概要および特徴を説明するための図である。
【００２４】
実施例１における退避データ判別装置は、コンピュータが同じ演算処理が繰り返されるプログラムを実行する際に、定期的に退避する要素からなる演算結果のデータを判別することを概要とする。
【００２５】
例えば、図１−１の（Ａ）に示すように、コンピュータが、Ｎ行Ｎ列からなる配列要素（配列Ａ）を用いて演算を行い、演算結果を再び配列Ａに格納する演算処理が１００００回繰り返されるプログラムを実行する際に、演算結果が格納される配列Ａの要素の中から、定期的（例えば、１００回ごと）に退避するデータを判別することを概要とする。
【００２６】
ここで本発明は、効率的なデータ退避が可能になることに主たる特徴がある。この主たる特徴について簡単に説明すると、実施例１における退避データ判別装置は、プログラムのソースコードから当該プログラムのループ構造を解析して、当該プログラムにおいて繰り返される演算処理のメインループと当該メインループに含まれるサブループとを検出する。
【００２７】
例えば、図１−１の（Ｂ）に示すように、プログラムのループ構造を解析して、当該プログラムにおいて繰り返される演算処理のメインループ（「ＤＯ  Ｔ=１，１００００〜ＥＮＤＤＯ」のループ）と当該メインループに含まれる２つのサブループ（「ＤＯ  Ｊ＝２，Ｎ−１〜ＥＮＤＤＯ」のループおよび「ＤＯ  Ｊ＝１，Ｎ〜ＥＮＤＤＯ」のループ）とを検出する。
【００２８】
そして、実施例１における退避データ判別装置は、検出された前記メインループに突入する地点を、演算結果のデータを退避する地点であるチェックポイントとして決定する。例えば、図１−１の（Ｂ）に示すように、プログラムのメインループの開始行である「ＤＯ  Ｔ=１，１００００」の直後の地点を、配列Ａに格納された演算結果を退避する地点であるチェックポイントとして決定する。
【００２９】
そして、実施例１における退避データ判別装置は、検出されたメインループ内に記述される演算処理の内容を解析して、参照のみされる要素および参照された後に定義される要素である参照先行要素のみを、決定されたチェックポイントにおいて退避するデータとして判別する。
【００３０】
例えば、検出されたメインループ内に記述される演算処理の内容を解析すると、図１−１の（Ｂ）に示すように、最初のサブループにおける演算処理は、Ａ（Ｉ，Ｊ）が左辺にあることから、配列Ａの「２行目からＮ−１行目」および「２列目からＮ−１列目」で指定される範囲（図１−１の（Ｃ）に示す白抜きの範囲）の要素を定義する演算処理であることがわかる。また、２番目のサブループにおける演算処理は、Ａ（Ｉ，Ｊ）が右辺にあることから、配列Ａのすべての要素を参照する演算処理であることがわかる。
【００３１】
このことから、実施例１における退避データ判別装置は、図１−１の（Ｃ）に示す灰色の範囲は、参照のみされる要素であり、これらの範囲にある要素を、決定されたチェックポイントにおいて退避するデータである参照先行要素として判別する。
【００３２】
具体的には、実施例１における退避データ判別装置は、検出されたメインループに含まれる複数のサブループごとの演算処理の内容を解析して、以下の３つのパターンにあてはまる場合それぞれにおいて、参照先行要素の判別を行なう。
【００３３】
すなわち、実施例１における退避データ判別装置は、検出されたメインループに含まれる複数のサブループごとの演算処理の内容を解析して、要素を定義する演算処理のサブループである定義サブループが一回もしくは複数回出現した後に、要素を参照する演算処理のサブループである参照サブループが一回もしくは複数回出現する場合は、定義サブループすべてによって定義される要素の和集合の補集合と、参照サブループすべてによって参照される要素の和集合との積集合を参照先行要素として判別する。
【００３４】
例えば、図１−２の（Ｄ）に示すように、定義サブループである「Ａ（Ｉ０：ｕ０）が左辺にあるサブループ」および「Ａ（Ｉ１：ｕ１）が左辺にあるサブループ）」の２つが出現した後に、参照サブループである「Ａ（Ｉ２：ｕ２）が右辺にあるサブループ」と「Ａ（Ｉ３：ｕ３）が右辺にあるサブループ）」と「Ａ（Ｉ５：ｕ５）が右辺にあるサブループ）」との３つが出現する場合は、『「定義サブループすべてによって定義される要素（定義要素）の和集合の補集合」と、「参照サブループすべてによって参照される要素（参照要素）の和集合」との積集合』を参照先行要素として判別する。
【００３５】
また、実施例１における退避データ判別装置は、検出されたメインループに含まれる複数のサブループごとの演算処理の内容を解析して、すべての要素を定義する演算処理のサブループが最初に出現する場合は、参照先行要素に該当する要素はないと判別する。
【００３６】
例えば、図１−２の（Ｅ）に示すように、すべての配列要素を定義する定義サブループである「Ａ（１：Ｎ）が左辺にあるサブループ」が最初に出現する場合は、そののち、定義サブループや参照サブループがいかなるパターンで出現したとしても、参照先行要素に該当する要素はないと判別する。
【００３７】
また、実施例１における退避データ判別装置は、検出されたメインループに含まれる複数のサブループごとの演算処理の内容を解析して、定義サブループが一回もしくは複数回出現した後に、参照サブループが一回もしくは複数回出現し、さらに要素を定義する演算処理のサブループである後続定義サブループが一回もしくは複数回出現した場合、当該後続定義サブループによって定義されるすべての要素が、当該定義サブループによって定義されるすべての要素に含まれるならば、定義サブループすべてによって定義される要素の和集合の補集合と、参照サブループすべてによって参照される要素の和集合との積集合を前記参照先行要素として判別する。
【００３８】
例えば、図１−２の（Ｆ）に示すように、定義サブループである「Ａ（Ｉ０：ｕ０）が左辺にあるサブループ」が出現した後に、要素を参照する演算処理のサブループである参照サブループである「Ａ（Ｉ１：ｕ１）が右辺にあるサブループ）」が出現し、さらに、後続定義サブループである「Ａ（Ｉ２：ｕ２）が左辺にあるサブループ」および「Ａ（Ｉ３：ｕ３）が左辺にあるサブループ）」の２つが出現する場合、「最初の定義サブループによって定義される要素」が「後続定義サブループによって定義される要素」をすべて含むならば（図１−２の（Ｆ）の（１）参照）、後続定義サブループを判別対象から除外して、『「定義サブループすべてによって定義される要素（定義要素）の和集合の補集合」と、「参照サブループすべてによって参照される要素（参照要素）の和集合」との積集合』を参照先行要素として判別する（図１−２の（Ｆ）の（２）参照）。
【００３９】
なお、図１−２の（Ｄ）〜（Ｆ）に示すように、すべてのプログラムにおいて、「ＤＯ  Ｔ=１，１００００」の直後の地点をチェックポイントとして決定している。
【００４０】
そして、実施例１における退避データ判別装置は、決定されたチェックポイントと、判別された参照先行要素とを、モニタの画面などに表示するように指示をする。例えば、決定されたチェックポイントと、図１−１の（Ｃ）に示す参照先行要素とを、モニタの画面に表示させる。これを参照することにより、プログラマは、例えば、図１−２の（Ｇ）に示すように、プログラムに「ｅｘｃｌｕｄｅ＿ｅｌｅｍｅｎｔｓ（Ａ，２：Ｎ−１，２：Ｎ−１）」を入力して、図１−１の（Ｃ）に示す白抜きの範囲は除外した要素（すなわち、参照先行要素のみ）を退避するよう指示を行なうことができる。
【００４１】
なお、本実施例では、上述した３つのパターンそれぞれについて解析する場合について説明したが、本発明はこれに限定されるものではなく、３つのパターンから任意に選択して解析する場合であってもよい。例えば、入力されたプログラムのメインループ内のサブループの処理内容が、図１−２の（Ｄ）に示すパターンに対応するか否かのみを解析して参照先行要素を判別する場合であってもよい。
【００４２】
このようなことから、実施例１における退避データ判別装置は、すべての演算結果ではなく、プログラム実行再開に際して必要最低限なデータである参照先行要素のみを退避することにより退避データ量を削減することができ、上記した主たる特徴の通り、効率的なデータ退避が可能になる。
【００４３】
［実施例１における退避データ判別装置の構成］
次に、図２〜９を用いて、実施例１における退避データ判別装置を説明する。図２は、実施例１における退避データ判別装置の構成を示すブロック図であり、図３および４は、実施例１におけるループ構造検出部を説明するための図であり、図５は、実施例１におけるチェックポイント決定部を説明するための図であり、図６〜９は、実施例１における参照先行要素判別部を説明するための図である。
【００４４】
図２に示すように、実施例１における退避データ判別装置１０は、入力部１１と、出力部１２と、入出力制御Ｉ／Ｆ部１３と、記憶部２０と、処理部３０とから構成される。
【００４５】
入力部１１は、各種情報を入力する。例えば、キーボードや、タッチパネルなどがこれに該当し、特に本発明に密接に関連するものとしては、処理部３０による各種処理に用いるプログラムのソースコードを入力したり、退避データ判別要求を入力したりする。
【００４６】
出力部１２は、各種情報を出力する。例えば、画面がこれに該当し、特に本発明に密接に関連するものとしては、チェックポイント決定部３２（後述）および参照先行要素判別部３３（後述）の処理結果を、表示指示部３４（後述）の指示によって、モニタの画面に表示したりする。
【００４７】
入出力制御Ｉ／Ｆ部１３は、入力部１１および出力部１２と、記憶部２０および処理部３０との間におけるデータ転送を制御する。
【００４８】
記憶部２０は、処理部３０による各種処理結果を記憶し、特に本発明に密接に関連するものとしては、図２に示すように、ループ構造記憶部２１と、チェックポイント記憶部２２と、参照先行要素記憶部２３とを備える。なお、各部については、後に詳述する。
【００４９】
処理部３０は、入出力制御Ｉ／Ｆ部１３から転送されたプログラムのソースコードに基づき各種処理を実行し、特に本発明に密接に関連するものとしては、図２に示すように、ループ構造検出部３１と、チェックポイント決定部３２と、参照先行要素判別部３３と、表示指示部３４とを備える。ここで、ループ構造検出部３１は、特許請求の範囲に記載の「ループ構造検出工程」に対応し、チェックポイント決定部３２は、同じく「チェックポイント決定工程」に対応し、参照先行要素判別部３３は、同じく「参照先行要素判別工程」に対応し、表示指示部３４は、同じく「表示指示工程」に対応する。なお、各部については、以下に詳述する。
【００５０】
ループ構造検出部３１は、入力されたプログラムのソースコードから当該プログラムのループ構造を解析して、当該プログラムにおいて繰り返される演算処理のメインループと当該メインループに含まれるサブループとを検出し、その結果をループ構造記憶部２１に格納する。具体的には、第一段階として、図３に示す解析方法によって、入力されたプログラムのソースコードから当該プログラムのメインループを検出する。すなわち、図３に示すように、プログラムに記述される命令文を１行ずつ最終行（ＥＯＦ）まで解析する。ループ行が開始されるごとに「ｌｏｏｐＬｅｖｅｌ」を１ずつインクリメントし（初期値は０）、ループ行が終了するごとに「ｌｏｏｐＬｅｖｅｌ」を１ずつデクリメントする。「ｌｏｏｐＬｅｖｅｌ」が「１」となる命令文の行がメインループの開始行と終了行を示す。各ループネストの開始行、終了行を配列 「ｌｏｏｐＮｅｓｔＳｔａｒｔ」と「lｏｏｐＮｅｓｔＥｎｄ」にセットする（図３の（１）参照）。また、メインループの開始行が検出されるごとに「ｌｏｏｐＮｅｓｔＮｏ」をインクリメントする（初期値は０）し、合計数をメインループのループネストの数として「ｎＬｏｏｐＮｅｓｔｓ」にセットする（図３の（２）参照）。これにより、何行目からそれぞれのメインループが開始され、何行目で当該メインループが終了するかを検出する。
【００５１】
そして、ループ構造検出部３１は、第二段階として、図４に示す解析方法によって、入力されたプログラムのソースコードから検出されたメインループ内からサブループを検出する。すなわち、図４に示すように、メインループの開始行（ｓｔａｒｔ）の次の行から記述される命令文を１行ずつメインループの終了行（ｅｎｄ）になる前まで解析する。上記したメインループの検出と同様な方法により、「ｌｏｏｐＬｅｖｅｌ」が「１」となるサブループのループネストを検出し、各ループネストの開始行、終了行を配列 「ｓｕｂｌｏｏｐＮｅｓｔＳｔａｒｔ」と「ｓｕｂlｏｏｐＮｅｓｔＥｎｄ」にセットする（図４の（１）参照）。また、検出したサブループループネストの数を「ｓｕｂＬｏｏｐＮｅｓｔＮｏ」にセットする（図４の（２）参照）。これにより、サブループごとに、何行目から当該サブループが開始され、何行目で当該サブループが終了するかを検出する。
【００５２】
チェックポイント決定部３２は、ループ構造検出部３１によって検出されたメインループに突入する地点を、演算結果のデータを退避する地点であるチェックポイントとして決定し、その結果をチェックポイント記憶部２２に格納する。すなわち、図５に示すように、検出したメインループのループネストにおいて、開始行の直後をチェックポイントとする。なお、図５のプログラム表記部分の記載は図３と同じなので、説明は省略する。
【００５３】
参照先行要素判別部３３は、ループ構造検出部３１によって検出されたメインループ内に記述される演算処理の内容を解析して、参照のみされる要素および参照された後に定義される要素である参照先行要素を、チェックポイント決定部３２によって決定されたチェックポイントにおいて退避するデータとして判別し、その結果を参照先行要素記憶部２３に格納する。
【００５４】
具体的には、参照先行要素判別部３３は、第一段階として、図６に示す解析方法によって、検出したメインループ内のサブループに記述される演算処理の内容を解析する。すなわち、図６に示すように、サブループ内の演算処理を解析して、それぞれの演算処理において使用される配列をすべて収集し、これらが、左辺のみに現れる配列「定義のみ（ｋｉｎｄ（Ｎｏ，  ｎＡｒｒａｙｓ）がＤＥＦ）」と、右辺のみに現れる配列「参照のみ（ｋｉｎｄ（Ｎｏ，  ｎＡｒｒａｙｓ）がＲＥＦ）」と、右辺にも左辺にも現れる配列「定義および参照共にある（ｋｉｎｄ（Ｎｏ，  ｎＡｒｒａｙｓ）がＤＥＦＲＥＦ）」とに分類する（図６の（１）参照）。また、解析したサブループごとに、当該サブループに含まれる配列名の数を配列要素「ｎＡｒｒａｙｓＯｆＳｕｂＬｏｏｐＮｅｓｔ（Ｎｏ）」にセットする（図６の（２）参照）。
【００５５】
すなわち、左辺に現れる配列（定義される配列）を抽出して、これらが右辺にも現れるか否かを判定し、右辺にも現れた場合は、定義および参照共にある「（ｋｉｎｄ（Ｎｏ，  ｎＡｒｒａｙｓ）＝ＤＥＦＲＥＦ）」と分類し、右辺に現れなかった場合は、定義のみ「（ｋｉｎｄ（Ｎｏ，  ｎＡｒｒａｙｓ）＝ＤＥＦ）」と分類する。そして、右辺に現れる配列（参照される配列）を抽出して、これらが左辺にも現れるか否かを判定し、左辺にも現れた場合は、定義および参照共「（ｋｉｎｄ（Ｎｏ，  ｎＡｒｒａｙｓ）＝ＤＥＦＲＥＦ）」と分類し、左辺に現れなかった場合は、参照のみ「（ｋｉｎｄ（Ｎｏ，  ｎＡｒｒａｙｓ）＝ＲＥＦ）」と分類する。図６の例では、メインループネストごとに、そのメインループネストの開始行（ｓｔａｒｔ）の次の行から終了行（ｅｎｄ）の前の行まで解析を行う。
【００５６】
そして、参照先行要素判別部３３は、第二段階として、第一段階でサブループごとに分類された配列の種類（ＤＥＦ，ＲＥＦ，ＤＥＦＲＥＦ）に基づいて、以下の３つのパターンにあてはまる場合それぞれにおいて、参照先行要素の判別を行なう。
【００５７】
すなわち、参照先行要素判別部３３は、第一のパターンとして、検出されたメインループに含まれる複数のサブループごとの演算処理の内容を解析して、要素を定義する演算処理のサブループである定義サブループが一回もしくは複数回出現した後に、要素を参照する演算処理のサブループである参照サブループが一回もしくは複数回出現する場合は、定義サブループすべてによって定義される要素の和集合の補集合と、参照サブループすべてによって参照される要素の和集合との積集合を参照先行要素として判別する。
【００５８】
具体的には、図７の（Ａ）に示す解析処理（ａｎａｌｙｚｅＡｒｒａｙ１）を行い、サブループごとに出現する配列のパターンが、定義ばかりが連続した後に参照ばかりが連続する（ＡｌｌＲｅｆｓ）パターンである「ＡｌｌＲｅｆｓＡｆｔｅｒＡｌｌＤｅｆｓ」の場合には、「ＰＡＲＴＩＡＬ１で参照先行要素を判別」とし、引き続き、図７の（Ｂ）に示す解析処理（ａｎａｌｙｚｅＰａｒｔｉａｌ１）を行って、参照先行要素を求める。すなわち、『「ｅｌｍＤｅｆｓの補集合」と、「ｅｌｍＲｅｆｓ」との積集合』を参照先行要素として求める。
【００５９】
すなわち、定義ばかりが連続した後に参照ばかりが連続する配列のパターンである場合には、図７の（Ａ）に示すように、「ａｒｅＡｌｌＲｅｆｓＡｆｔｅｒＡｌｌＤｅｆｓ＝＝１」を与えて「ＳＡＶＥ_ＰＡＲＴＩＬＡＬ１」とし、「ａｎａｌｙｚｅＰａｒｔｉａｌ１」の解析に移り、図７の（Ｂ）に示すように、配列Ａの要素のうち、当該サブループネストで定義されている要素の集合を求めて「ｅｌｍＤ」とし、配列Ａの要素のうち、当該サブループネストで参照されている要素の集合を求めて「ｅｌｍＲ」とし、『「ｅｌｍＤｅｆｓの補集合」と、「ｅｌｍＲｅｆｓ」との積集合』を参照先行要素として退避すると判定する。また、上記のパターンに該当しない場合は、図７の（Ａ）に示すように、「ａｒｅＡｌｌＲｅｆｓＡｆｔｅｒＡｌｌＤｅｆｓ＝０」を与え、「退避する要素は判定されなかった（ＳＡＶＥ_ＵＮＫＮＯＷＮ）」として処理を終える。
【００６０】
また、参照先行要素判別部３３は、第二のパターンとして、検出されたメインループに含まれる複数のサブループごとの演算処理の内容を解析して、すべての要素を定義する演算処理のサブループが最初に出現する場合は、参照先行要素に該当する要素はないと判別する。
【００６１】
具体的には、図８に示す解析処理（ａｎａｌｙｚｅＡｒｒａｙ２）を行い、例えば、最初のサブループに出現する配列Ａのパターンが、定義でありかつ「配列Ａの全要素数と定義される要素数とが等しい」場合には、「ＳＡＶＥ_ＮＯＮＥ」として「参照先行要素なし」と判別する。また、上記のパターンに該当しない場合は、図８に示すように、「退避する要素は判定されなかった（ＳＡＶＥ_ＵＮＫＮＯＷＮ）」として処理を終える。
【００６２】
また、参照先行要素判別部３３は、第三のパターンとして、検出されたメインループに含まれる複数のサブループごとの演算処理の内容を解析して、定義サブループが一回もしくは複数回出現した後に、参照サブループが一回もしくは複数回出現し、さらに要素を定義する演算処理のサブループである後続定義サブループが一回もしくは複数回出現した場合、当該後続定義サブループによって定義されるすべての要素が、当該定義サブループによって定義されるすべての要素に含まれるならば、定義サブループすべてによって定義される要素の和集合の補集合と、参照サブループすべてによって参照される要素の和集合との積集合を前記参照先行要素として判別する。
【００６３】
具体的には、図９の（Ａ）に示す解析処理（ａｎａｌｙｚｅＡｒｒａｙ３）を行い、サブループごとに出現する配列において、「定義サブループによって定義される範囲（Ｗ１）」を求め、さらに「後続サブループによって定義される範囲（Ｗ２）」を求める。そして、「Ｗ２がＷ１に含まれる」場合には、「Ｗ２」に関しては「何もしない」とし、「Ｗ１」を対象に、「ＳＡＶＥ_ＰＡＲＴＩＬＡＬ３」として「ａｎａｌｙｚｅＰａｒｔｉａｌ３」の解析に移る。すなわち、図９の（Ｂ）に示すように、配列Ａの要素のうち、当該サブループネストで定義されている要素の集合を求めて「ｅｌｍＤ」とし、配列Ａの要素のうち、当該サブループネストで参照されている要素の集合を求めて「ｅｌｍＲ」とし、『「ｅｌｍＤｅｆｓの補集合」と、「ｅｌｍＲｅｆｓ」との積集合』を参照先行要素として退避すると判定する。また、上記のパターンに該当しない場合は、図９の（Ａ）に示すように、「退避する要素は判定されなかった（ＳＡＶＥ_ＵＮＫＮＯＷＮ）」として処理を終える。
【００６４】
表示指示部３４は、チェックポイント記憶部２２が記憶する決定されたチェックポイントと、参照先行要素記憶部２３が判別した参照先行要素とを、モニタの画面に表示するように指示をする。例えば、決定されたチェックポイントと、図１−１の（Ｃ）に示す参照先行要素とを、モニタの画面に表示させる。これを参照することにより、プログラマは、例えば、図１−２の（Ｇ）に示すように、プログラムに「ｅｘｃｌｕｄｅ＿ｅｌｅｍｅｎｔｓ（Ａ，２：Ｎ−１，２：Ｎ−１）」を入力して、図１−１の（Ｃ）に示す白抜きの範囲は除外した要素を退避するよう指示を行なうことができる。
【００６５】
なお、本実施例では、参照先行要素判別部３３が、図７〜９に示す解析処理をすべて行う場合について説明したが、本発明はこれに限定されるものではなく、例えば、参照先行要素判別部３３が、図７の（Ａ）に示す解析処理（ａｎａｌｙｚｅＡｒｒａｙ１）のみを行なって参照先行要素を判別する場合であってもよく、参照先行要素判別部３３は、設定によって任意の解析処理を行うことが可能である。また、参照先行要素判別部３３は、サブループ内の演算処理が、すべて参照のみである場合には、すべての配列要素を参照先行要素と判別する。
【００６６】
［実施例１における退避データ判別装置による処理の手順］
次に、図１０を用いて、実施例１における退避データ判別装置１０による処理を説明する。図１０は、実施例１における退避データ判別装置の処理の手順を説明するための図である。
【００６７】
まず、実施例１における退避データ判別装置１０は、プログラムのソースコードが入力されると（ステップＳ１００１肯定）、ループ構造検出部３１は、入力されたプログラムのソースコードから当該プログラムのループ構造を解析して、当該プログラムにおいて繰り返される演算処理のメインループと当該メインループに含まれるサブループとを検出する（ステップＳ１００２）。
【００６８】
具体的には、第一段階として、図３に示す解析によって、入力されたプログラムのソースコードから当該プログラムのメインループし、第二段階として、図４に示す解析によって、検出されたメインループ内からサブループを検出する。
【００６９】
そして、チェックポイント決定部３２は、ループ構造検出部３１によって検出されたメインループに突入する地点を、演算結果のデータを退避する地点であるチェックポイントとして決定する（ステップＳ１００３）。図５に示すように、検出したメインループのループネストにおいて、開始行の直後をチェックポイントとする。
【００７０】
さらに、参照先行要素判別部３３は、ループ構造検出部３１によって検出されたメインループ内に記述される演算処理の内容を解析して、参照のみされる要素および参照された後に定義される要素である参照先行要素を、チェックポイント決定部３２によって決定されたチェックポイントにおいて退避するデータとして判別する（ステップＳ１００４）。
【００７１】
具体的には、参照先行要素判別部３３は、図７の（Ａ）に示す解析処理（ａｎａｌｙｚｅＡｒｒａｙ１）を行い、これに相当するパターンであるならば、引き続き、図７の（Ｂ）に示す解析処理（ａｎａｌｙｚｅＰａｒｔｉａｌ１）を行って、参照先行要素を求める。すなわち、『「ｅｌｍＤｅｆｓの補集合」と、「ｅｌｍＲｅｆｓ」との積集合』を参照先行要素として求める。
【００７２】
また、参照先行要素判別部３３は、図８に示す解析処理（ａｎａｌｙｚｅＡｒｒａｙ２）を行い、これに相当するパターンであるならば、「参照先行要素なし」と判別する。
【００７３】
また、参照先行要素判別部３３は、図９の（Ａ）に示す解析処理（ａｎａｌｙｚｅＡｒｒａｙ３）を行い、これに相当するパターンであるならば、引き続き、図９の（Ｂ）に示す解析処理（ａｎａｌｙｚｅＰａｒｔｉａｌ３）を行って、参照先行要素を求める。すなわち、『「ｅｌｍＤｅｆｓの補集合」と、「ｅｌｍＲｅｆｓ」との積集合』を参照先行要素として求める。
【００７４】
そして、参照先行要素判別部３３は、表示指示部３４は、チェックポイント記憶部２２が記憶する決定されたチェックポイントと、参照先行要素記憶部２３が判別した参照先行要素とを、モニタの画面に表示するように指示をして(ステップＳ１００５)、処理を終了する。例えば、決定されたチェックポイントと、図１−１の（Ｃ）に示す参照先行要素とを、モニタの画面に表示させる。これを参照することにより、プログラマは、例えば、図１−２の（Ｇ）に示すように、プログラムに「ｅｘｃｌｕｄｅ＿ｅｌｅｍｅｎｔｓ（Ａ，２：Ｎ−１，２：Ｎ−１）」を入力して、図１−１の（Ｃ）に示す白抜きの範囲は除外した要素を退避するよう指示を行なうことができる。
【００７５】
［実施例１の効果］
上記したように、実施例１によれば、プログラムのソースコードから当該プログラムのループ構造を解析して、当該プログラムにおいて繰り返される演算処理のメインループと当該メインループに含まれるサブループとを検出し、検出されたメインループに突入する地点を、演算結果のデータを退避する地点であるチェックポイントとして決定し、検出されたメインループ内に記述される演算処理の内容を解析して、参照のみされる要素および参照された後に定義される要素である参照先行要素を、決定されたチェックポイントにおいて退避するデータとして判別するので、すべての演算結果ではなく、プログラム実行再開に際して必要最低限なデータである参照先行要素のみを退避することにより退避データ量を削減することができ、効率的なデータ退避が可能になる。
【００７６】
また、実施例１によれば、検出されたメインループに含まれる複数のサブループごとの演算処理の内容を解析して、要素を定義する演算処理のサブループである定義サブループが一回もしくは複数回出現した後に、要素を参照する演算処理のサブループである参照サブループが一回もしくは複数回出現する場合は、定義サブループすべてによって定義される要素の和集合の補集合と、参照サブループすべてによって参照される要素の和集合との積集合を参照先行要素として判別するので、プログラマが参照先行要素を判別することなく、プログラムのソースコードを解析して自動的に参照先行要素を判別することができるとともに、例えば、決定されたチェックポイントにおいて、判別された参照先行要素を退避するように当該プログラムのソースコードを書き換えて再コンパイルすることができ、効率的なデータ退避が可能になる。
【００７７】
また、実施例１によれば、検出されたメインループに含まれる複数のサブループごとの演算処理の内容を解析して、すべての要素を定義する演算処理のサブループが最初に出現する場合は、参照先行要素に該当する要素はないと判別するので、退避すべきデータがないプログラムと容易に判別することができ、効率的なデータ退避が可能になる。
【００７８】
また、実施例１によれば、検出されたメインループに含まれる複数のサブループごとの演算処理の内容を解析して、定義サブループが一回もしくは複数回出現した後に、参照サブループが一回もしくは複数回出現し、さらに要素を定義する演算処理のサブループである後続定義サブループが一回もしくは複数回出現した場合、当該後続定義サブループによって定義されるすべての要素が、当該定義サブループによって定義されるすべての要素に含まれるならば、定義サブループすべてによって定義される要素の和集合の補集合と、参照サブループすべてによって参照される要素の和集合との積集合を参照先行要素として判別するので、プログラマが参照先行要素を判別することなく、プログラムのソースコードを解析して自動的に参照先行要素を判別することができるとともに、例えば、決定されたチェックポイントにおいて、判別された参照先行要素を退避するように当該プログラムのソースコードを書き換えて再コンパイルすることができ、効率的なデータ退避が可能になる。
【００７９】
また、実施例１によれば、決定されたチェックポイントと、判別された前記参照先行要素とを所定の出力部に表示するように指示をするので、例えば、プログラマは、自動的に判別された参照先行要素を確認するとともに、プログラマ自身が「退避すべきと判別する要素」もしくは「退避しなくてもよいと判別する要素」が当該参照先行要素に含まれるか否かを容易に判別することができるので、効率的なデータ退避が可能になる。
【実施例２】
【００８０】
さて、これまで実施例１における退避データ判別装置について説明したが、本発明は上述した実施例以外にも、種々の異なる形態にて実施されてよいものである。そこで、以下では、実施例２における退避データ判別装置として、種々の異なる実施例を（１）〜（２）に区分けして説明する。
【００８１】
（１）システム構成等
また、上記の実施例において説明した各処理のうち、自動的におこなわれるものとして説明した処理の全部または一部を手動でおこなうこともでき（例えば、表示指示部３４が決定されたチェックポイントと判別された参照先行要素とを、自動的に表示する指示を行なうのではなく、ユーザからの表示要求に従って、決定されたチェックポイントと判別された参照先行要素と表示するなど）、あるいは、手動的におこなうものとして説明した処理の全部または一部を公知の方法で自動的におこなうこともできる。この他、上記文章中や図面中で示した処理手順、具体的名称、各種のデータやパラメータを含む情報については、例えば、図１０に示すステップＳ１００２とＳ１００３とを同時に行なうなど、特記する場合を除いて任意に変更することができる。
【００８２】
また、図示した各装置の各構成要素は機能概念的なものであり、必ずしも物理的に図示の如く構成されていることを要しない。すなわち、各処理部および各記憶部の分散・統合の具体的形態（例えば、図２の形態など）は図示のものに限られず、例えば、ループ構造検出部３１とチェックポイント決定部３２とを統合するなど、その全部または一部を、各種の負荷や使用状況などに応じて、任意の単位で機能的または物理的に分散・統合して構成することができる。さらに、各装置にて行なわれる各処理機能は、その全部または任意の一部が、ＣＰＵおよび当該ＣＰＵにて解析実行されるプログラムにて実現され、あるいは、ワイヤードロジックによるハードウェアとして実現され得る。
【００８３】
（２）退避データ判別プログラム
ところで上記の実施例１では、ハードウェアロジックによって各種の処理を実現する場合を説明したが、本発明はこれに限定されるものではなく、あらかじめ用意されたプログラムをコンピュータで実行するようにしてもよい。そこで以下では、図１１を用いて、上記の実施例１に示した退避データ判別装置１０と同様の機能を有する退避データ判別プログラムを実行するコンピュータの一例を説明する。図１１は、実施例１における退避データ判別プログラムを実行するコンピュータを示す図である。
【００８４】
図１１に示すように、情報処理装置としてのコンピュータ１１０は、キーボード１１１、ディスプレイ１１２、ＣＰＵ１１３、ＲＯＭ１１４、ＨＤＤ１１５、ＲＡＭ１１６をバス１１７などで接続して構成される。
【００８５】
ＲＯＭ１１４には、上記の実施例１に示した退避データ判別装置１０と同様の機能を発揮する退避データ判別プログラム、つまり、図１１に示すように、ループ構造検出プログラム１１４ａ、チェックポイント決定プログラム１１４ｂ、参照先行要素判定プログラム１１４ｃ、表示指示プログラム１１４ｄが予め記憶されている。なお、これらのプログラム１１４ａ〜１１４ｄについては、図２に示した退避データ判別装置１０の各構成要素と同様、適宜統合または分散してもよい。
【００８６】
そして、ＣＰＵ１１３が、これらのプログラム１１４ａ〜１１４ｄをＲＯＭ１１４から読みだして実行することで、図１１に示すように、各プログラム１１４ａ〜１１４ｄは、ループ構造検出プロセス１１３ａ、チェックポイント決定プロセス１１３ｂ、参照先行要素判定プロセス１１３ｃ、表示指示プロセス１１３ｄとして機能するようになる。なお、各プロセス１１３ａ〜１１３ｄは、図２に示した、ループ構造検出部３１、チェックポイント決定部３２、参照先行要素判別部３３、表示指示部３４にそれぞれ対応する。
【００８７】
そしてＣＰＵ１１３は、ＲＡＭ１１６に格納されたループ構造データ１１６ａと、チェックポイントデータ１１６ｂと、参照先行要素データ１１６ｃとに基づいて退避データ判別処理を実行する。
【００８８】
なお、上記した各プログラム１１４ａ〜１１４ｄについては、必ずしも最初からＲＯＭ１１４に記憶させておく必要はなく、例えばコンピュータ１１０に挿入されるフレキシブルディスク（ＦＤ）、ＣＤ−ＲＯＭ、ＭＯディスク、ＤＶＤディスク、光磁気ディスク、ＩＣカードなどの「可搬用の物理媒体」、または、コンピュータ１１０の内外に備えられるＨＤＤなどの「固定用物理媒体」、さらには、公衆回線、インターネット、ＬＡＮ、ＷＡＮなどを介してコンピュータ１１０に接続される「他のコンピュータ（またはサーバ）」などに各プログラムを記憶させておき、コンピュータ１１０がこれらから各プログラムを読み出して実行するようにしてもよい。
【００８９】
（付記１）コンピュータが同じ演算処理が繰り返されるプログラムを実行する際に、定期的に退避する要素からなる演算結果のデータを判別する退避データ判別方法であって、
前記プログラムのソースコードから当該プログラムのループ構造を解析して、当該プログラムにおいて繰り返される演算処理のメインループと当該メインループに含まれるサブループとを検出するループ構造検出工程と、
前記ループ構造検出工程によって検出された前記メインループに突入する地点を、前記演算結果のデータを退避する地点であるチェックポイントとして決定するチェックポイント決定工程と、
前記ループ構造検出工程によって検出された前記メインループ内に記述される演算処理の内容を解析して、参照のみされる要素および参照された後に定義される要素である参照先行要素を、前記チェックポイント決定工程によって決定された前記チェックポイントにおいて退避するデータとして判別する参照先行要素判別工程と、
を含んだことを特徴とする退避データ判別方法。
【００９０】
（付記２）前記参照先行要素判別工程は、前記ループ構造検出工程によって検出された前記メインループに含まれる複数のサブループごとの演算処理の内容を解析して、要素を定義する演算処理のサブループである定義サブループが一回もしくは複数回出現した後に、要素を参照する演算処理のサブループである参照サブループが一回もしくは複数回出現する場合は、前記定義サブループすべてによって定義される要素の和集合の補集合と、前記参照サブループすべてによって参照される要素の和集合との積集合を前記参照先行要素として判別することを特徴とする付記１に記載の退避データ判別方法。
【００９１】
（付記３）前記参照先行要素判別工程は、前記ループ構造検出工程によって検出された前記メインループに含まれる複数のサブループごとの演算処理の内容を解析して、すべての要素を定義する演算処理のサブループが最初に出現する場合は、前記参照先行要素に該当する要素はないと判別することを特徴とする付記１に記載の退避データ判別方法。
【００９２】
（付記４）前記参照先行要素判別工程は、前記ループ構造検出工程によって検出された前記メインループに含まれる複数のサブループごとの演算処理の内容を解析して、前記定義サブループが一回もしくは複数回出現した後に、前記参照サブループが一回もしくは複数回出現し、さらに要素を定義する演算処理のサブループである後続定義サブループが一回もしくは複数回出現した場合、当該後続定義サブループによって定義されるすべての要素が、当該定義サブループによって定義されるすべての要素に含まれるならば、前記定義サブループすべてによって定義される要素の和集合の補集合と、前記参照サブループすべてによって参照される要素の和集合との積集合を前記参照先行要素として判別することを特徴とする付記１に記載の退避データ判別方法。
【００９３】
（付記５）前記チェックポイント決定工程によって決定された前記チェックポイントと、前記参照先行要素判別工程によって判別された前記参照先行要素とを所定の出力部に表示するように指示をする表示指示工程をさらに含んだことを特徴とする付記１に記載の退避データ判別方法。
【００９４】
（付記６）コンピュータが同じ演算処理が繰り返されるプログラムを実行する際に、定期的に退避する要素からなる演算結果のデータを判別する退避データ判別方法をコンピュータに実行させる退避データ判別プログラムであって、
前記プログラムのソースコードから当該プログラムのループ構造を解析して、当該プログラムにおいて繰り返される演算処理のメインループと当該メインループに含まれるサブループとを検出するループ構造検出手順と、
前記ループ構造検出手順によって検出された前記メインループに突入する地点を、前記演算結果のデータを退避する地点であるチェックポイントとして決定するチェックポイント決定手順と、
前記ループ構造検出手順によって検出された前記メインループ内に記述される演算処理の内容を解析して、参照のみされる要素および参照された後に定義される要素である参照先行要素を、前記チェックポイント決定手順によって決定された前記チェックポイントにおいて退避するデータとして判別する参照先行要素判別手順と、
をコンピュータに実行させることを特徴とする退避データ判別プログラム。
【００９５】
（付記７）コンピュータが同じ演算処理が繰り返されるプログラムを実行する際に、定期的に退避する要素からなる演算結果のデータを判別する退避データ判別装置であって、
前記プログラムのソースコードから当該プログラムのループ構造を解析して、当該プログラムにおいて繰り返される演算処理のメインループと当該メインループに含まれるサブループとを検出するループ構造検出手段と、
前記ループ構造検出手段によって検出された前記メインループに突入する地点を、前記演算結果のデータを退避する地点であるチェックポイントとして決定するチェックポイント決定手段と、
前記ループ構造検出手段によって検出された前記メインループ内に記述される演算処理の内容を解析して、参照のみされる要素および参照された後に定義される要素である参照先行要素を、前記チェックポイント決定手段によって決定された前記チェックポイントにおいて退避するデータとして判別する参照先行要素判別手段と、
を備えたことを特徴とする退避データ判別装置。
【００９６】
（付記８）コンピュータが、配列要素を用いて演算を行い、演算結果を再び同じ配列に格納する演算処理が繰り返されるプログラムを実行する際に、演算結果が格納される配列の要素の中から、定期的に退避するデータを判別する退避データ判別方法であって、
ループ構造検出部が、前記プログラムのソースコードに記述される命令文を解析し、当該プログラムにおいて繰り返される演算処理のメインループの開始行と終了行、及び当該メインループに含まれるサブループの開始行と終了行とを検出するループ構造検出工程と、
チェックポイント決定部が、前記ループ構造検出工程によって検出された前記メインループの開始行の直後を、前記演算結果のデータを退避する地点であるチェックポイントとして決定するチェックポイント決定工程と、
参照先行要素判別部が、前記ループ構造検出工程によって検出された前記メインループに含まれるサブループ全てに対して、各サブループ内に記述される演算処理の内容を解析し、それぞれの演算処理において使用される配列が左辺のみに現れる配列を定義のみ、右辺のみに現れる配列を参照のみ、右辺にも左辺にも現れる配列を定義および参照共にある配列と分類し、前記メインループ内で参照のみされる配列および前記メインループ内で参照された後に定義される要素である参照先行配列を、前記チェックポイント決定工程によって決定された前記チェックポイントにおいて退避するデータとして判別する参照先行要素判別工程と、
を含んだことを特徴とする退避データ判別方法。
【産業上の利用可能性】
【００９７】
以上のように、本発明に係る退避データ判別方法、退避データ判別プログラムおよび退避データ判別装置は、コンピュータが同じ演算処理が繰り返されるプログラムを実行する際に、定期的に退避する要素からなる演算結果のデータを判別する場合に有用であり、特に、効率的なデータ退避が可能になることに適する。
【図面の簡単な説明】
【００９８】
【図１−１】実施例１における退避データ判別装置の概要および特徴を説明するための図である。
【図１−２】実施例１における退避データ判別装置の概要および特徴を説明するための図である。
【図２】実施例１における退避データ判別装置の構成を示すブロック図である。
【図３】実施例１におけるループ構造検出部を説明するための図である。
【図４】実施例１におけるループ構造検出部を説明するための図である。
【図５】実施例１におけるチェックポイント決定部を説明するための図である。
【図６】実施例１における参照先行要素判別部を説明するための図である。
【図７】実施例１における参照先行要素判別部を説明するための図である。
【図８】実施例１における参照先行要素判別部を説明するための図である。
【図９】実施例１における参照先行要素判別部を説明するための図である。
【図１０】実施例１における退避データ判別装置の処理を説明するための図である。
【図１１】実施例１の退避データ判別プログラムを実行するコンピュータを示す図である。
【符号の説明】
【００９９】
１０  退避データ判別装置
１１  入力部
１２  出力部
１３  入出力制御Ｉ／Ｆ部
２０  記憶部
２１  ループ構造記憶部
２２  チェックポイント記憶部
２３  参照先行要素記憶部
３０  処理部
３１  ループ構造検出部
３２  チェックポイント決定部
３３  参照先行要素判別部
３４  表示指示部
【図１−１】
2008234058.tif 000003
【図１−２】
2008234058.tif 000004
【図２】
2008234058.tif 000005
【図３】
2008234058.tif 000006
【図４】
2008234058.tif 000007
【図５】
2008234058.tif 000008
【図６】
2008234058.tif 000009
【図７】
2008234058.tif 000010
【図８】
2008234058.tif 000011
【図９】
2008234058.tif 000012
【図１０】
2008234058.tif 000013
【図１１】
2008234058.tif 000014