(57)【要約】  プログラム解析条件を自由に組み合わせ可能な、所望のプログラム解析を実現し得るプログラム解析支援装置を提供する。そして、解析条件設定部（１０）は、プログラム解析条件を固有の式番号を有する条件式（解析コマンド、解析対象、解析条件）の形式で入力する。ＰＯＵ一覧抽出処理実行部（１４）は、プログラムを読み込む解析コマンドを実行して、プログラムを構成する解析対象のＰＯＵのコレクションを生成し、変数使用一覧抽出処理実行部（１２）は、変数のクロスリファレンスを抽出する解析コマンドを実行して、解析対象のＰＯＵコレクションに対する変数のクロスリファレンスを抽出する。両部（１４，１２）は、更に別のＰＯＵコレクションに対する変数のクロスリファレンスを抽出する。更にＡＮＤ処理部（１７）は、両変数のクロスリファレンスの論理積の処理を行い、その結果を解析結果表示部（２０）に出力する。
2010095289.tif 000002
【特許請求の範囲】
【請求項１】
ｎ（ｎは２以上の整数）個のプログラムモジュールより構成されるプログラムに関して、ユーザにより指定された前記プログラムのプログラム解析条件を入力し保持する解析条件設定部（１０）と、
前記プログラム解析条件に基づいて前記プログラムの解析処理を実行する解析条件実行部（１１）と、
前記解析条件実行部によって処理された解析結果を表示するための表示データを作成し出力する解析結果表示部（２０）とを備え、
前記解析条件実行部は、
前記ｎ個のプログラムモジュールの内でｍ（２≦ｍ≦ｎ）個のプログラムモジュールのコレクションを与える第１信号を出力するＰＯＵ一覧抽出処理実行部（１４）と、
前記ＰＯＵ一覧抽出処理実行部が出力する前記ｍ個のプログラムモジュールのコレクションを解析対象範囲として、前記ｍ個のプログラムモジュールの各々の中に記載される各変数のクロスリファレンスを与える第２信号を抽出する変数使用一覧抽出処理実行部（１２）とを備えることを特徴とする、
プログラム解析支援装置。
【請求項２】
請求項１記載のプログラム解析支援装置であって、
前記ＰＯＵ一覧抽出処理実行部は、前記第２信号が与える前記各変数のクロスリファレンス内に存在するｋ（２≦ｋ＜ｍ）個のプログラムモジュールのコレクションを与える第３信号を出力することを特徴とする、
プログラム解析支援装置。
【請求項３】
請求項２記載のプログラム解析支援装置であって、
前記ｍ個は前記ｎ個に等しいことを特徴とする、
プログラム解析支援装置。
【請求項４】
プログラムモジュールより構成されるプログラムに関して、ユーザにより指定された前記プログラムのプログラム解析条件を入力し保持する解析条件設定部（１０）と、
前記プログラム解析条件に基づいて前記プログラムの解析処理を実行する解析条件実行部（１１）と、
前記解析条件実行部によって処理された解析結果を表示するための表示データを作成し出力する解析結果表示部（２０）とを備え、
前記解析条件実行部は、
前記プログラムモジュール中に記載される各変数の依存関係有向グラフを与える信号を出力する変数依存関係抽出処理実行部（１３）を備えることを特徴とする、
プログラム解析支援装置。
【請求項５】
請求項４記載のプログラム解析支援装置であって、
前記解析条件実行部は、
前記プログラムモジュールのコレクションを与える信号を出力するＰＯＵ一覧抽出処理実行部（１４）を更に備えており、
前記変数依存関係抽出処理実行部は、前記プログラムモジュールのコレクションを解析対象範囲として、前記各変数の依存関係有向グラフを与える前記信号を出力することを特徴とする、
プログラム解析支援装置。
【請求項６】
請求項５記載のプログラム解析支援装置であって、
前記ＰＯＵ一覧抽出処理実行部は、前記各変数の依存関係有向グラフに存在するプログラムモジュールのコレクションを与える信号を抽出することを特徴とする、
プログラム解析支援装置。
【請求項７】
請求項６記載のプログラム解析支援装置であって、
前記ＰＯＵ一覧抽出処理実行部が出力する前記プログラムモジュールのコレクションとは、前記プログラムを構成する全てのプログラムモジュールのコレクションであることを特徴とする、
プログラム解析支援装置。
【請求項８】
請求項４に記載のプログラム解析支援装置であって、
前記解析条件実行部は、
前記各変数の依存関係有向グラフに存在する各変数のクロスリファレンスを与える信号を抽出する変数使用一覧抽出処理実行部（１２）を更に備えることを特徴とする、
プログラム解析支援装置。
【請求項９】
複数個のプログラムモジュールより構成されるプログラムに関して、ユーザにより指定された前記プログラムのプログラム解析条件を入力し保持する解析条件設定部（１０）と、
前記プログラム解析条件に基づいて前記プログラムの解析処理を実行する解析条件実行部（１１）と、
前記解析条件実行部によって処理された解析結果を表示するための表示データを作成し出力する解析結果表示部（２０）とを備え、
前記解析条件実行部は、
前記複数個のプログラムモジュールの呼び出しの関係を依存関係有向グラフとして与える信号を抽出するＰＯＵ依存関係抽出処理実行部（１５）を備えることを特徴とする、
プログラム解析支援装置。
【請求項１０】
請求項９記載のプログラム解析支援装置であって、
前記解析条件実行部は、
前記複数個のプログラムモジュールのコレクションを与える信号を出力するＰＯＵ一覧抽出処理実行部（１４）を更に備えており、
前記ＰＯＵ依存関係抽出処理実行部は、前記複数個のプログラムモジュールのコレクションを解析対象範囲として、前記複数個のプログラムモジュールの呼び出しに関する前記依存関係有向グラフを与える信号を抽出することを特徴とする、
プログラム解析支援装置。
【請求項１１】
請求項１０記載のプログラム解析支援装置であって、
前記ＰＯＵ一覧抽出処理実行部は、前記ＰＯＵ依存関係抽出処理実行部が出力する前記複数個のプログラムモジュールの呼び出しに関する前記依存関係有向グラフに存在するプログラムモジュールのコレクションを与える信号を出力することを特徴とする、
プログラム解析支援装置。
【請求項１２】
請求項９に記載のプログラム解析支援装置であって、
前記解析条件実行部は、
前記ＰＯＵ依存関係抽出処理実行部が出力する前記複数個のプログラムモジュールの呼び出しに関する前記依存関係有向グラフに存在するプログラムモジュールに存在する各変数のクロスリファレンスを与える信号を抽出する変数使用一覧抽出処理実行部（１２）を更に備えることを特徴とする、
プログラム解析支援装置。
【請求項１３】
請求項９に記載のプログラム解析支援装置であって、
前記解析条件実行部は、
前記複数個のプログラムモジュールの呼び出しに関する前記依存関係有向グラフに存在するプログラムモジュールのコレクションを解析対象範囲として、当該プログラムモジュール中に記載される各変数の依存関係有向グラフを与える信号を出力する変数依存関係抽出処理実行部（１３）を更に備えたことを特徴とする、
プログラム解析支援装置。
【請求項１４】
請求項１、請求項４および請求項９の何れかに記載のプログラム解析支援装置であって、
前記解析条件実行部に対して、新しいプログラム解析機能処理実行部を更に備えさせるに際しては、
前記新しいプログラム解析機能処理実行部は、前記新しいプログラム解析機能処理実行部の出力結果及び前記解析条件実行部に既に備わっているプログラム解析機能処理実行部分の出力結果を解析対象範囲として、解析処理を実行するか否かが定義されていることを特徴とする、
プログラム解析支援装置。
【請求項１５】
請求項１、請求項４および請求項９の何れかに記載のプログラム解析支援装置であって、
前記解析条件実行部に対して、新しいプログラム解析機能処理実行部を更に備えさせるに際しては、
前記解析条件実行部に既に備わっているプログラム解析機能処理実行部分が、前記新しいプログラム解析機能処理実行部の出力結果を解析対象として、解析処理を実行するか否かが定義されていることを特徴とする、
プログラム解析支援装置。
【請求項１６】
請求項１、請求項４および請求項９の何れかに記載のプログラム解析支援装置であって、
前記解析条件実行部は、
前記解析条件実行部が備えるプログラム解析機能によって処理された解析結果同士の論理演算を処理する解析結果論理演算処理実行部（１６）を更に備えることを特徴とする、
プログラム解析支援装置。
【請求項１７】
請求項１６記載のプログラム解析支援装置であって、
前記解析結果論理演算処理実行部は、論理演算の対象として指定された、前記解析条件実行部が備えるプログラム解析機能によって処理された解析結果の一方の種別が他方の種別と相違している場合には、前記解析結果の一方を解析対象として前記解析条件実行部が備えるプログラム解析機能によって更に解析処理を行うことにより、前記解析結果の一方の種別を前記解析結果の他方の前記種別と同じにした上で、前記論理演算の処理を行うことを特徴とする、
プログラム解析支援装置。
【請求項１８】
請求項１６に記載のプログラム解析支援装置であって、
前記解析条件実行部に対して、新しいプログラム解析機能処理実行部を更に備えさせるに際しては、
前記新しいプログラム解析機能処理実行部の出力結果は、前記解析結果論理演算処理実行部が処理する前記論理演算の対象として定義されていることを特徴とする、
プログラム解析支援装置。
【請求項１９】
請求項１、請求項４および請求項９の何れかに記載のプログラム解析支援装置であって、
前記解析条件設定部は、前記プログラム解析条件を、固有の式番号を有する条件式の形式で入力することを特徴とする、
プログラム解析支援装置。
【請求項２０】
請求項１、請求項４および請求項９の何れかに記載のプログラム解析支援装置であって、
前記解析条件設定部は、入力された前記プログラム解析条件を、固有の式番号を有する条件式の形式に変換して入力処理を実行することを特徴とする、
プログラム解析支援装置。
【請求項２１】
請求項１９または請求項２０に記載のプログラム解析支援装置であって、
前記解析結果表示部は、前記条件式の解析結果毎に、当該解析結果の種別に応じた種別用表示部により当該解析結果を表示することを特徴とする、
プログラム解析支援装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、プログラム解析支援装置に関する。具体的には、本発明は、プログラマブルコントローラ（以下「ＰＣ」と言う。）、モーションコントローラ（以下「ＭＣ」と言う。）、数値制御装置コントローラ（以下「ＮＣ」と言う。）、検査装置コントローラ、又は表示器（以下「ＧＯＴ」と言う。）等の各種の産業用のコントローラ、或いは、マイクロコンピュータに於いて実行される計測制御プログラムに関して、新しい計測制御プログラムを開発するために過去の計測制御プログラムを解析する作業、又は、計測制御プログラムを開発したり或いはデバッグしたりする際に同プログラムを編集／変更する作業を、効率化するための装置に関する。
【背景技術】
【０００２】
従来より、生産設備の計測制御を行うために、プログラマブルコントローラ（以下「ＰＣ」と言う。）を始めとする産業用のコントローラが用いられている。産業用のコントローラに於いて実行される計測制御プログラムとしては、ラダープログラムを代表例とするＩＥＣ６１１３１−３準拠の言語又はコントローラ専用言語が挙げられる。又、産業用のコントローラの代わりに、マイクロコンピュータを使用する場合の計測制御プログラムとしては、Ｃ言語又はアセンブラが挙げられる。以下に於いては、ＰＣを例として記載する。【０００３】
ＰＣは、計測制御プログラムであるラダープログラムを実行して、計測制御対象の状態を把握したり、又は、動作を計測制御対象に指示したりする。ラダープログラムの作成には、所定の計測制御プログラム作成支援装置（ラダー作成支援装置）が用いられる。計測制御プログラム作成支援装置は、一般的にはパーソナルコンピュータ上で動作するソフトウェアツールとして提供され、ＰＣが計測制御対象を計測したり又は制御する際に用いられるプログラムであるラダーの編集を支援する機能を有している。その他にも、計測制御プログラム作成支援装置は、パーソナルコンピュータとＰＣとを接続して、編集したラダーをＰＣへ転送したり、計測制御対象の状態又はラダーの実行によって変化する変数（以下「デバイス」と言う。）の値の状態を監視したりする機能をも有している。尚、計測制御プログラム作成支援装置が提供するプログラム編集機能及び監視機能は、表示器（以下「ＧＯＴ」と言う。）上にも搭載されており、ＰＣと常時接続状態にあるＧＯＴ上からも計測制御プログラムの編集又はデバイスの値の状態の監視を行うことが出来る。【０００４】
生産設備の規模が非常に小さい場合には計測制御プログラムは１つのラダープログラムで十分であるが、一般的には、生産設備を計測制御するためのプログラムは，複数のプログラムモジュール（以下「ＰＯＵ」と言う。ＰＯＵ：Ｐｒｏｇｒａｍ  Ｏｒａｇａｎｉｚａｔｉｏｎ  Ｕｎｉｔ）から構成される。計測制御プログラムのプログラム言語がラダーであれば、ＰＯＵはサブルーチン又はＦＢ（Ｆｕｎｃｔｉｏｎ  Ｂｌｏｃｋ）に相当し、ＳＴ（Ｓｔｒｕｃｔｕｒｅｄ  Ｔｅｘｔ）又はＣ言語であれば、ＰＯＵはサブルーチン又は関数に相当する。【０００５】
この様な場合には、異なるＰＯＵ間で共通に計測・制御される多数のデバイスが存在することになる。従って、プログラムの変更・改修に伴う影響範囲の解析又は不具合動作の原因の解析等に於いては、あるデバイスがどのＰＯＵのどの位置で使用されているか（どの位置で読み込まれているか／どの位置で書き出されているか）を知る必要性がある。そして、この作業を効率化するためには、プログラム中（ＰＯＵ中）に於けるデバイスの使用場所の特定を迅速に行う必要性がある。そこで、この特定を行うためのプログラム解析支援装置として、クロスリファレンス作成装置が知られている。クロスリファレンス作成装置は、複数のＰＯＵを解析対象として読み込み、あるデバイスがどのＰＯＵのどの位置で使用されているかの一覧表を作成したり、或いは、あるＰＯＵに使用されている全てのデバイスの一覧表を作成したりする装置である。尚、この様なクロスリファレンスの作成が、計測制御プログラム作成支援装置の一機能として実現される場合もある。【０００６】
ここで、非特許文献１の取り扱い説明書には、二つの従来技術が開示されている。以下、これらの従来技術について記載する。【０００７】
先ず、第１の従来技術では、あるデバイスがどのＰＯＵのどの位置で使用されているかの一覧表を作成するクロスリファレンス機能が、計測制御プログラム作成支援装置の一機能として実現されており、計測制御プログラム作成支援装置のメニューからクロスリファレンス機能を選択すると、クロスリファレンス画面としてのダイアログが画面上に表示される。始めに、上記ダイアログのデバイス欄に、操作者はデバイスを入力する。次に、操作者は、上記ダイアログの検索範囲欄に、検索範囲を指定する。その際、操作者は、検索範囲として、全てのＰＯＵを検索範囲として指定しても良いし、或るいは、特定のＰＯＵのみを検索範囲として指定しても良い。その後、操作者が、上記ダイアログに表示された実行ボタンをクリックすると、そのデバイスが使用されているＰＯＵとその位置の一覧が上記ダイアログ上に表示される。上記ダイアログ上のプログラム名の欄にはＰＯＵの名前が表示され、シーケンスステップの欄には当該ＰＯＵの中でそのデバイスが使用されているステップ番号が表示される。更に、上記ダイアログ上の命令の欄には、そのデバイスが使用されているステップの命令の種類が表示される。例えばプログラム（ＰＯＵ）がラダーで記述されている場合には、命令の欄に、接点又はコイル等が表示される。【０００８】
次に、第２の従来技術では、あるＰＯＵに使用されているデバイスの一覧表（デバイス使用リスト）が画面上に作成される。この一覧表作成機能は、第２の従来技術に於いては、計測制御プログラム作成支援装置の一機能として実現されており、操作者が計測制御プログラム作成支援装置のメニューから印刷機能を選択すると、デバイス使用リストを示すためのダイアログが画面上に表示される。始めに、操作者は、プログラムを選択する。即ち、操作者は、当該ダイアログに表示されたプログラム選択欄の中に、選択すべきＰＯＵの名称を入力する。次に、操作者は、当該ダイアログに表示された印刷条件を指定する。その際、プログラム中で使用しているデバイスのみを一覧表として印刷する場合には、操作者は、その欄にチェックの指示を入力する。若しチェックの指示が入力されない場合には、全てのデバイスが一覧表として印刷される。その上で、操作者は、当該ダイアログに表示された印刷ボタンをクリックすると、そのＰＯＵで使用されているデバイスの一覧表が印刷される。プログラム名の欄には選択されたＰＯＵの名前が印刷され、その下には、そのＰＯＵで使用されているデバイスが順に印刷される。使用有無の欄には、そのデバイスが使用されている命令の種類が印刷される。若しプログラムがラダーで記述されている場合には、接点又はコイル等が印刷される。尚、そのデバイスがそのＰＯＵに於いて接点としても且つコイルとしても使用されている場合には、接点及びコイルの両方が印刷される。
【先行技術文献】
【特許文献】
【０００９】
【特許文献１】特開２００６−２９４０１１号公報
【特許文献２】特開２００６−２９４０１３号公報
【非特許文献】
【００１０】
【非特許文献１】ＧＸ  Ｄｅｖｅｌｏｐｅｒ  Ｖｅｒｓｉｏｎ  ８  オペレーティングマニュアル  三菱電機株式会社  ２００８年１２月
【非特許文献２】「プログラムスライシング技術と応用」  下村隆夫著  共立出版  ＩＳＢＮ４−３２０−０２７４３−４
【発明の概要】
【発明が解決しようとする課題】
【００１１】
以上の様に、非特許文献１に記載の第１又は第２の従来技術は、予めプログラム作成支援装置ないしはプログラム解析支援装置に搭載されている既述した機能に基づいてのみ、あるデバイスがどのＰＯＵのどの位置で使用されているかを示すクロスリファレンス又はデバイス使用リストを作成することしか出来ない。【００１２】
そのために、問題点の一例として、上記第１及び第２の従来技術は、ある特定のＰＯＵで使用され且つ別の特定のＰＯＵに於いても使用されている様なデバイスに関して、それらのＰＯＵに於ける参照箇所の一覧を作成することが出来ない。その結果、ある特定のＰＯＵで使用されているデバイスの一覧表（デバイス使用リスト）と、別の特定のＰＯＵでも使用されているデバイスの一覧表（デバイス使用リスト）とを、目視により確認する作業を、操作者自身が一々実施した上で、操作者は、そのマニュアル作業により抽出されたデバイスのクロスリファレンスを作成するしか方法がなく、プログラムの変更又は不具合動作の解析等に於いて、編集対象となる場所を特定するのに時間を要するという問題点がある。【００１３】
又、その他の問題点の一例としては、上記第１及び第２の従来技術は、或るデバイスの、特定のＰＯＵ及び当該ＰＯＵからサブルーチンとしてコールされるＰＯＵに於けるクロスリファレンスを作成することが出来ない。そのため、操作者は、上記特定のＰＯＵからサブルーチンとしてコールされるＰＯＵの一覧を先ず抽出し、抽出された各ＰＯＵに対して、そのデバイスのクロスリファレンスをそれぞれ作成した上で、その結果をマージする作業を、一々実施するしか手立てが無く、その結果、プログラムの変更又は不具合動作の解析等に於いて、編集対象となる場所を特定するのに時間を要するという問題点が生じている。【００１４】
そこで、前者の問題点を解決するための先行技術が、特許文献１及び２並びに非特許文献２の各文献に開示されている。【００１５】
しかしながら、特許文献１及び２に提案されている先行技術は、或る特定のＰＯＵで使用され且つ別の特定のＰＯＵに於いても使用されているデバイスの一覧を作成する機能（この機能を仮に「プログラム間重複使用状況リスト」と言う。）を、予めプログラム作成支援装置ないしはプログラム解析支援装置に搭載することとしたに過ぎない。既存のクロスリファレンス機能の処理が利用されて、プログラム間重複使用状況リスト機能の処理が実現されている場合もあれば、或いは、既存のクロスリファレンス機能の処理とは独立してプログラム間重複使用状況リスト機能の処理が実現されている場合もある。何れにせよ、上記先行技術は、その様にして搭載されている機能の条件指定範囲内でのプログラム間重複使用状況リストの作成しか実行することが出来ない。【００１６】
そのため、上記先行技術は、条件を自由に組み合わせたクロスリファレンスの作成を、更には、条件を自由に組み合わせたプログラム解析結果の抽出を共に実現することが出来ないと言う問題点を内包する。【００１７】
ここで、検索条件を自由に組み合わせることにより所望の一覧表を作成することが可能な従来技術の例として、先行特許文献検索用のプログラムの一つであるＰＡＴＯＬＩＳ（登録商標）がある。このＰＡＴＯＬＩＳ（登録商標）による特許文献の検索に於いては、操作者は、特許分類で検索範囲を絞り込んだり、又は、要約、請求の範囲等の領域に特定のキーワードが含まれるか否かにより検索範囲を絞り込んだりする。この場合の検索対象となる母集団は、先行特許文献の全体である。又、そのヒット結果の一覧とは、先行特許文献の一覧である。従って、操作者がヒット結果に対して更に別の条件で検索範囲を絞り込みたい場合には、操作者は、先ず先行特許文献の全体に対して別の条件で検索を行い、このヒット結果である先行特許文献の一覧と、その前のヒット結果とのＡＮＤ処理をコンピュータに実行させることにより、先行特許文献の範囲をより絞り込むことが可能となる。【００１８】
これに対して、計測制御プログラムの解析結果は、解析条件により異なる。例えば、或る特定のＰＯＵで使用されるデバイスの一覧では、その結果はデバイスの一覧であるが、特定のＰＯＵからサブルーチンとしてコールされるＰＯＵの一覧では、その結果はＰＯＵの一覧である。従って、これらの異なる結果の一覧に対して、結果同士のＡＮＤ処理による絞り込みは、直ちには実現し得ない。【００１９】
又、特許文献１，２及び非特許文献１の各々に提案されている従来技術に於けるプログラム解析では、その解析対象となる母集団はプログラムではあるけれども、計測制御プログラムの解析結果は解析条件によって異なるので、別の解析条件を実施する場合に、その解析対象となる母集団は、プログラムのみならず、解析結果であることも必要となる。即ち、上記従来技術の組み合わせによっては、プログラム解析条件を自由に組み合わせることが可能なプログラム解析支援装置を容易に実現することは出来ないのである。【００２０】
この発明は斯かる技術状況に鑑みて成されたものであり、その主目的は、解析条件を自由に組み合わせることが可能なプログラム解析支援装置を実現することにある。
【課題を解決するための手段】
【００２１】
この発明の主題に係るプログラム解析支援装置は、ｎ（ｎは２以上の整数）個のプログラムモジュールより構成されるプログラムに関して、ユーザにより指定された前記プログラムのプログラム解析条件を入力し保持する解析条件設定部と、前記プログラム解析条件に基づいて前記プログラムの解析処理を実行する解析条件実行部と、前記解析条件実行部によって処理された解析結果を表示するための表示データを作成し出力する解析結果表示部とを備え、前記解析条件実行部は、前記ｎ個のプログラムモジュールの内でｍ（２≦ｍ≦ｎ）個のプログラムモジュールのコレクションを与える第１信号を出力するＰＯＵ一覧抽出処理実行部と、前記ＰＯＵ一覧抽出処理実行部が出力する前記ｍ個のプログラムモジュールのコレクションを解析対象範囲として、前記ｍ個のプログラムモジュールの各々の中に記載される各変数のクロスリファレンスを与える第２信号を抽出する変数使用一覧抽出処理実行部とを備えることを特徴とする。
【発明の効果】
【００２２】
本発明の主題によれば、プログラム解析条件を自由に組み合わせたプログラム解析が可能となり、この解析結果に基づいて編集対象となる場所を迅速に特定することが可能となるので、ユーザは、プログラムの変更又は不具合動作の解析等に於いて編集対象となる場所を特定するための作業を効率化して、作業に要する時間を短縮化することが出来る。【００２３】
以下、この発明の様々な具体化を、添付図面を基に、その効果・利点と共に、詳述する。この発明の目的、特徴、局面、および利点は、以下の詳細な説明と添付図面とによって、より明白となる。
【図面の簡単な説明】
【００２４】
【図１】本発明に係るプログラム解析支援装置のハードウェア構成を示すブロック図である。
【図２】実施の形態１に係るプログラム解析支援装置のソフトウェア構成を示す機能ブロック図である。
【図３】ＭＡＩＮラダー回路を示す図である。
【図４】ＭＡＩＮラダーＩＬを示す図である。
【図５】ＳＵＢラダー回路を示す図である。
【図６】ＳＵＢラダーＩＬを示す図である。
【図７】プログラム解析支援画面を示す図である。
【図８】プログラム解析支援画面を示す図である。
【図９】ＰＯＵ_ＲＥＡＤ処理フローを示すフローチャートである。
【図１０】ＶＡＲ_ＲＥＦ処理フローを示すフローチャートである。
【図１１】ＶＡＲ_ＲＥＦ結果画面を示す図である。
【図１２】ＶＡＲ_ＲＥＦ結果画面を示す図である。
【図１３】ＶＡＲ_ＲＥＦ結果画面を示す図である。
【図１４】ＡＮＤ処理フローを示すフローチャートである。
【図１５】ＡＮＤ処理フローを示すフローチャートである。
【図１６】ＡＮＤ結果ＶＡＲ_ＲＥＦ画面を示す図である。
【図１７】ＯＲ処理フローを示すフローチャートである。
【図１８】ＯＲ処理フローを示すフローチャートである。
【図１９】ＯＲ結果ＶＡＲ_ＲＥＦ画面を示す図である。
【図２０】ＮＯＴ処理フローを示すフローチャートである。
【図２１】ＮＯＴ処理フローを示すフローチャートである。
【図２２】ＮＯＴ結果ＶＡＲ_ＲＥＦ画面を示す図である。
【図２３】実施の形態２に係るプログラム解析支援装置のソフトウェア構成を示す機能ブロック図である。
【図２４】ラダー構造を示す図である。
【図２５】Ｉｎｓｔｒｕｃｔｉｏｎ／Ｏｐｅｒａｔｏｒ／Ｏｐｅｒａｎｄを説明するための図である。
【図２６】デバイス依存関係の一例を示す図である。
【図２７】デバイス依存関係の一例を示す図である。
【図２８】デバイス依存関係の一例を示す図である。
【図２９】プログラム解析支援画面を示す図である。
【図３０】ＶＡＲ_ＦＷＤ処理フローを示すフローチャートである。
【図３１】ＶＡＲ_ＦＷＤ結果有向グラフを示す図である。
【図３２】ＶＡＲ_ＦＷＤ結果有向グラフを示す図である。
【図３３】ＶＡＲ_ＢＷＤ処理フローを示すフローチャートである。
【図３４】ＶＡＲ_ＢＷＤ結果有向グラフを示す図である。
【図３５】ＯＲ処理フローを示すフローチャートである。
【図３６】ＯＲ結果ＶＡＲ有向グラフを示す図である。
【図３７】ＡＮＤ処理フローを示すフローチャートである。
【図３８】ＡＮＤ結果ＶＡＲ有向グラフを示す図である。
【図３９】ＶＡＲ_ＲＥＦ処理フローを示すフローチャートである。
【図４０】ＶＡＲ_ＲＥＦ結果画面を示す図である。
【図４１】ＶＡＲ_ＲＥＦ結果画面を示す図である。
【図４２】実施の形態７に係るプログラム解析支援装置のソフトウェア構成を示す機能ブロック図である。
【図４３】プログラムを構成する全体のＰＯＵを示す図である。
【図４４】プログラム解析支援画面を示す図である。
【図４５】ＰＯＵ_ＦＷＤ処理フローを示すフローチャートである。
【図４６】ＰＯＵ_ＦＷＤ結果有向グラフを示す図である。
【図４７】ＰＯＵ_ＦＷＤ結果有向グラフを示す図である。
【図４８】ＰＯＵ_ＢＷＤ処理フローを示すフローチャートである。
【図４９】ＰＯＵ_ＢＷＤ結果有向グラフを示す図である。
【図５０】ＯＲ処理フローを示すフローチャートである。
【図５１】ＯＲ結果ＰＯＵ有向グラフを示す図である。
【図５２】ＡＮＤ処理フローを示すフローチャートである。
【図５３】ＡＮＤ結果ＰＯＵ有向グラフを示す図である。
【図５４】プログラム解析支援画面を示す図である。
【図５５】ＰＯＵ_ＲＥＡＤ処理フローを示すフローチャートである。
【図５６】ＶＡＲ_ＲＥＦ処理フローを示すフローチャートである。
【図５７】ＶＡＲ_ＦＷＤ処理フローを示すフローチャートである。
【図５８】ＰＯＵ_ＲＥＡＤ処理フローを示すフローチャートである。
【図５９】ＰＯＵ_ＲＥＡＤ処理フローを示すフローチャートである。
【図６０】ＡＮＤ処理フローを示すフローチャートである。
【図６１】ＡＮＤ結果ＶＡＲ_ＲＥＦ画面を示す図である。
【図６２】ラダープログラム静的スライシング画面を示す図である。
【図６３】実施の形態１３に係るプログラム解析支援装置のソフトウェア構成を示す機能ブロック図である。
【図６４】ラダープログラム静的スライシング処理フローを示すフローチャートである。
【図６５】新コマンド定義に際して定義が必要となる処理フローを示す図である。
【図６６】ＶＡＲ_ＲＥＦコマンド定義に対応した処理フローを示す図である。
【図６７】ＶＡＲ_ＦＷＤコマンド定義に対応した処理フローを示す図である。
【図６８】ＰＯＵ_ＲＥＡＤコマンド定義に対応した処理フローを示す図である。
【図６９】ＰＯＵ_ＦＷＤコマンド定義に対応した処理フローを示す図である。
【図７０】ＡＮＤコマンド定義に対応した処理フローを示す図である。
【図７１】解析コマンドとその解析結果データとの関係を示す図である。
【発明を実施するための形態】
【００２５】
（実施の形態１）
図１は、後述する各実施の形態に共通する、本発明に係るプログラム解析支援装置のハードウェア構成を示すブロック図である。図１に於いて、プログラム解析支援装置１は、（１）プログラム解析支援装置１の各機能を実行するマイクロプロセッサ２、（２）データを一時的に格納するための、例えばＤＲＡＭより成るデータ格納メモリ３、（３）液晶ディスプレイ等のディスプレイ装置より成る表示部４、（４）マウス及び／又はキーボード等の入力装置より成る入力部５、及び、（５）解析対象の計測制御プログラム及びプログラム解析支援装置の各機能を実現するためのプログラム解析支援用プログラム等のプログラム又は解析結果等のデータをそれぞれファイルとして記憶・保持する、ハードディスク等の記憶装置より成る保存部６を、備えている。そして、各部２〜６は、システムバスＳＢを通じて相互に接続されている。
【００２６】
計測制御プログラムに対するプログラム解析（クロスリファレンスの作成）を本解析支援装置１に於いて行う場合には、ユーザは、入力部５を操作することにより、プログラム解析条件を入力すると共に、保存部６に保持されている複数の計測制御プログラムの内で指定すべき計測制御プログラムを指定する。この入力操作に伴い、プログラム解析条件及び計測制御プログラムの指定内容は、マイクロプロセッサ２内のレジスタ（図示せず。）に保持される。その上で、マイクロプロセッサ２は、保存部６にアクセスして、ユーザにより指定された計測制御プログラムを保存部６から読み出し、ユーザにより入力されたプログラム解析条件に従って、当該計測制御プログラムの解析処理を実行する。そして、マイクロプロセッサ２は、その解析処理結果を、データ格納メモリ３に一時的に格納すると共に、同結果を表示部４の画面上に表示する、或いは、保存部６内に１ファイルとして記憶する。
【００２７】
尚、プログラム解析支援装置１の各機能ないしは各処理を実行させるための解析支援用プログラム自体は、パーソナルコンピュータ上で動作し得るソフトウェアツールとして提供される。その場合には、プログラム解析支援装置１は、上記パーソナルコンピュータにより構成される。或いは、上記解析支援用プログラムがＧＯＴ上に搭載されている場合もあり、この場合には、上記ＧＯＴがプログラム解析支援装置１を構成する。
【００２８】
図２は、プログラム解析支援装置１、従って、マイクロプロセッサ２により実行される解析処理に於ける各機能部を示す機能ブロック図（ソフトウェアブロック図に該当。）である。図２に示す通り、プログラム解析支援装置１ないしはマイクロプロセッサ２は、大要、解析条件設定部１０と、解析条件実行部１１と、解析結果表示部２０とを、備えている。
【００２９】
これらの内で、解析条件実行部１１は、プログラム解析処理のための各機能部を有する。即ち、本実施の形態では、変数（デバイス）のクロスリファレンスの抽出が行われるので、解析条件実行部１１は、クロスリファレンス抽出の対象となるプログラムを読み込むためのＰＯＵ一覧抽出処理実行部１４と、クロスリファレンス抽出処理を実行する部分である変数使用一覧抽出処理実行部１２とを、備えている。
【００３０】
又、解析結果表示部２０は、クロスリファレンス結果を図１の表示部４の画面上に表示するための形式を備えた表示データを作成する変数使用一覧表示部２１を、備えている。
【００３１】
更に、解析条件実行部１１は、解析結果論理演算処理実行部１６を備えている。そして、解析結果論理演算処理実行部１６は、プログラム解析処理の各機能による解析結果同士の論理演算を行う部分として、ＡＮＤ処理実行部１７、ＯＲ処理実行部１８及びＮＯＴ処理実行部１９を、備えている。
【００３２】
ユーザは、図１の入力部５を介して、解析条件設定部１０に対して、プログラム解析条件を入力する。この入力に応じて、解析条件実行部１１は、ユーザが入力したプログラム解析条件に応じた解析処理を実行する。例えば、解析条件実行部１１は、ユーザが指定した計測制御プログラム（解析対象プログラムファイル８に該当。）、又は、解析対象プログラムに関連するデバイスコメントファイル９を図１の保持部６より読み出す処理を行ったり、クロスリファレンスを作成したり、或いは、解析結果同士の論理演算（ＡＮＤ／ＯＲ／ＮＯＴ）を処理したりする。その後、解析結果表示部２０は、解析結果に応じた表示を図１の表示部４の画面上に表示させるためのデータ作成等の動作を行ったり、又は、解析結果のデータを解析結果ファイル２５として外部に出力したりする。例えば、解析結果表示部２０は、解析条件実行部１１により作成されたクロスリファレンス結果を受信し、受信した当該クロスリファレンス結果を表示部４の画面上に表示させるための表示データを作成し、当該表示データを表示部４に出力することで、受信したクロスリファレンス結果をユーザに対して表示することとしたり、或いは、受信したクロスリファレンス結果を、クロスリファレンス結果ファイルとして、外部に出力したりする。
【００３３】
以下に於いては、ＰＣの計測制御プログラムであるラダープログラムを、プログラム解析の対象とする一例を記載する。ここで、図３は、ＰＣの計測制御プログラムを構成するＰＯＵの一つであり、その名称はＭＡＩＮラダー回路である。図３はラダー回路図表現であるが、それをテキスト形式（例えば、ＩＬ形式。ＩＬ：Ｉｎｓｔｒｕｃｔｉｏｎ  Ｌｉｓｔ）に表現するときには、図３は図４の様に表現される。更に、図５は、ＰＣの計測制御プログラムを構成する別のＰＯＵであり、その名称はＳＵＢラダー回路である。図５はラダー回路図として表現されているが、それをテキスト形式で表現すると、図５は図６に示す様に表現される。
【００３４】
図７及び図８は、ユーザが図１の入力部５を用いてプログラム解析条件を本装置１のマイクロプロセッサ２に入力するために、表示部４上に表示された画面の一例を示す図である。この様なプログラム解析支援画面は、図２の解析条件設定部１０の機能動作によって表示部４の画面上に表示され、同部１０は、上記プログラム解析支援画面を通じてユーザによって入力されたプログラム解析条件を、そのまま保持する。
【００３５】
図７に示すプログラム解析支援画面の場合には、各行は、式番号セル、解析コマンドセル、解析対象セル、解析条件セル及び結果件数セルより構成されている。ユーザは、図７の画面を見て、解析コマンドに応じた解析対象及び解析条件をそれぞれ対応するセルに入力する。即ち、ユーザは、解析対象セルに、解析コマンドが解析処理を行う対象となる母集団を主に指定する。且つ、ユーザは、解析条件セルに、解析コマンドが解析処理を行う条件を主に指定する。
【００３６】
尚、図８に示す一例の様に、ユーザがプログラム解析条件を入力するための画面構成を、図７の様な入力データ種別に応じた各セルで構成する代わりに、ユーザがプログラム解析条件の式全体を入力する構成に設定しても良い。
【００３７】
ユーザは、図７又は図８の画面に示される解析条件セルに解析条件を入力する処理を完了させた後には、画面の式番号の欄の前に●印を付与する入力処理を行って、実行したい式番号を指定し、その上で、画面の左上側に表示された実行ボタンを押す（クリックする。）動作を行う。そのクリック処理（入力処理）が行われると、実行対象となっている若い式番号から順に、図２の解析条件設定部１０が、解析条件実行部１１に対して、解析条件式の処理を行う様に指示し、この指示に応答して、解析条件実行部１１は各式番号の順序で解析処理を実行する。図７の画面構成例では、式番号Ｓ００１から式番号Ｓ０１０迄のそれぞれに、プログラム解析条件（解析コマンド、解析対象及び解析条件）が入力されており、それぞれの式番号が●印の表示を通じて実行対象として指定されているので、ユーザが実行ボタンを押す（クリックする。）と、その後、式番号Ｓ００１から順に式番号Ｓ０１０まで、入力されたプログラム解析条件に基づいて、図２の解析条件実行部１１は解析処理を実行する。
【００３８】
解析処理の結果は、解析条件実行部１１から解析条件設定部１０へ返信される。その結果、解析条件設定部１０は、解析処理の結果件数を、図１の表示部４に表示されたプログラム解析支援画面上の結果件数セルに表示する。そして、ユーザが結果件数セルの右側に表示されたボタンＢＴをクリックすると、それに応じて、解析結果表示部２０は、解析処理の結果を、図１の表示部１の画面上に表示する。
【００３９】
＜解析コマンドの処理内容（Ａ）〜（Ｅ）＞
次に、プログラム解析条件の一つを成す解析コマンドの処理内容について記載する。
【００４０】
（Ａ）先ず、図７に示される解析コマンドＰＯＵ_ＲＥＡＤは、解析対象となるプログラム（ＰＯＵ）を指定するための乃至は読み込むためのコマンドであり、その後の処理に於いて式番号で以って指定される、解析対象とすべきプログラム名（ＰＯＵ名）を、ユーザは解析対象セル内に指定する。図７に於いては、式番号Ｓ００１で表示されるコマンドの実行によって、プログラム名がＭＡＩＮであるＰＯＵの読み込みが指定されている例が示されており、その解析結果として、プログラムＭＡＩＮを要素としたＰＯＵのコレクションが出力される。「コレクション」とは、データ要素の集合を意味するソフトウェア技術用語である。「ＰＯＵのコレクション」とは、プログラム（ＰＯＵ）を要素とした集合のことである。尚、解析対象セルに解析対象とすべきＰＯＵ名が指定されていないときには、プログラムを構成する全てのＰＯＵを要素とするコレクションが、解析結果として出力される。ここで、図２のＰＯＵ一覧抽出処理実行部１４が解析コマンドＰＯＵ_ＲＥＡＤを実行する際の処理の流れを、図９のフローチャートに示す。図９に示される通り、解析コマンドＰＯＵ_ＲＥＡＤの処理に係る技術は、従来のクロスリファレンス作成の際に検索範囲としてプログラムを指定する技術と同じである。
【００４１】
（Ｂ）次に、図７に示される解析コマンドＶＡＲ_ＲＥＦは、変数（デバイス）のクロスリファレンスを抽出するコマンドであり、図２の変数使用一覧抽出処理実行部１２により実行される。そこで、ユーザは、解析コマンドＶＡＲ_ＲＥＦの解析対象となるプログラムを指定する式番号を、解析対象セルに指定すると共に、クロスリファレンス抽出の条件となる変数（デバイス）を、解析条件セルに指定する。図７の式番号Ｓ００２は、式番号Ｓ００１で与えられる解析コマンドＰＯＵ_ＲＥＡＤの実行により保存部６からマイクロプロセッサ２内に読み込んだＰＯＵであるプログラムＭＡＩＮに於ける、全てのデバイスＭに関するクロスリファレンスの抽出を指定する例を示しており、図２の変数使用一覧抽出処理実行部１２は、その解析結果として、プログラムＭＡＩＮに於いて変数（デバイス）Ｍが使用されている箇所を要素としたコレクションを出力する。
【００４２】
ここで、図２の変数使用一覧抽出処理実行部１２により実行される解析コマンドＶＡＲ_ＲＥＦの処理の流れを、図１０のフローチャートに示す。解析コマンドＶＡＲ_ＲＥＦの処理に係る技術の中で、解析コマンドＶＡＲ_ＲＥＦの解析対象セルに指定されたＰＯＵコレクションの要素が１である場合の処理（ステップＳ４０：Ｓ４１〜Ｓ４３）は、解析コマンドＶＡＲ_ＲＥＦの基底となる処理であり、従来のクロスリファレンス作成の技術と同じである。つまり、式番号Ｓ００２で与えられる解析コマンドＶＡＲ_ＲＥＦの実行は、従来のクロスリファレンス作成の技術で以って処理可能である。
【００４３】
又、変数使用一覧抽出処理実行部１２は、式番号Ｓ００２の解析処理の結果コレクションを、ＶＡＲ_ＲＥＦ結果表示画面として、図１の表示部４の画面上に表示する。この結果コレクションに基づいて表示されるＶＡＲ_ＲＥＦ結果表示画面の例を、図１１に示す。図１１に示される様に、ＭＡＩＮラダープログラムに於いては、変数（デバイス）Ｍを使用している箇所が６箇所存在しており（デバイスＭ１，Ｍ３〜Ｍ６）、それらのクロスリファレンス結果が表示されている。デバイスＭ３は、ステップ番号５に於いてＳＥＴ命令のオペランドとして使用されている他に、ステップ番号６に於いて、接点のオペランドとしても使用されており、それぞれがクロスリファレンス結果の要素である。尚、解析コマンドＶＡＲ_ＲＥＦの処理結果を表示する技術も、従来のクロスリファレンス作成の技術と同じである。
【００４４】
又、関連するデバイスコメントファイルに、変数（デバイス）Ｍのコメントが記載されている場合のＶＡＲ_ＲＥＦ結果表示画面例を、併せて、図１２に示す。
【００４５】
同様に、図７の式番号Ｓ００３は、ＰＯＵであるプログラムＳＵＢの読み込みを指定する例を示しており、引き続き実行される式番号Ｓ００４は、式番号Ｓ００３の解析コマンドの実行により読み込まれたプログラムＳＵＢに於ける、全ての変数（デバイス）Ｍに関するクロスリファレンスの抽出を指定する例を示している。ここに、式番号Ｓ００４のＶＡＲ_ＲＥＦ結果表示画面例を、図１３に示す。
【００４６】
（Ｃ）次に、図７に示される解析コマンドＡＮＤは、処理結果として抽出されたデータ集合の論理積を抽出するためのコマンドであり、図２のＡＮＤ処理実行部１７により実行される。そこで、ユーザは、論理積の対象となる２つの式番号を、それぞれ解析対象（第１引数）セル及び解析条件（第２引数）セルに指定する。図７の式番号Ｓ００５は、式番号Ｓ００２に於いて抽出されたクロスリファレンス結果と、式番号Ｓ００４に於いて抽出されたクロスリファレンス結果との論理積の抽出を指定する例を示している。即ち、式番号Ｓ００５は、プログラムＭＡＩＮで使用され且つプログラムＳＵＢに於いても使用される、全ての変数（デバイス）Ｍに関するクロスリファレンスの抽出を指定する例を示している。
【００４７】
ＡＮＤ処理実行部１７が実行する解析コマンドＡＮＤの処理の流れを、図１４及び図１５のフローチャートに示す。図１４に示されるＰＯＵコレクション同士のＡＮＤ処理は単純な論理積の処理であるが、クロスリファレンス（指定デバイスの使用箇所）のコレクション同士のＡＮＤ処理も単純に論理積としてしまえば、どの様な場合に於いても結果は空となる。何故ならば、プログラムＭＡＩＮに於いて変数（デバイス）Ｍ４が使用されている箇所と、プログラムＳＵＢに於いて変数（デバイス）Ｍ４が使用されている箇所とは、変数（デバイス）が同じだけで互いに異なっているので、両使用箇所が同一とは見做されないからである。
【００４８】
本発明の本実施の形態に於ける特徴点は、このクロスリファレンス（指定デバイスの使用箇所）のコレクション同士のＡＮＤ処理（図１５参照。）にある。即ち、変数（デバイス）が同じであることを論理積の演算基準としている点に、その特徴点がある。例えば、プログラムＭＡＩＮに於いて変数（デバイス）Ｍ４が使用されている箇所（図１１参照。）と、プログラムＳＵＢに於いて変数（デバイス）が使用されている箇所（図１３参照。）とは、変数（デバイス）が共に同じであることより、論理積の結果として残される。そして、それぞれの要素を結果として残す点に、更なる特徴点がある。例えば、プログラムＭＡＩＮに於いて変数（デバイス）Ｍ４が使用されている箇所と、プログラムＳＵＢに於いて変数（デバイス）が使用されている箇所とでは、共に変数（デバイス）が同じであるので、それらの両方が結果コレクションの要素として残される。この様にＡＮＤ処理実行部１７が処理することにより、図７の式番号Ｓ００５の結果は、図１６に示される通りとなる。
【００４９】
（Ｄ）次に、図７に示される解析コマンドＯＲは、処理結果として抽出された異なるデータの集合の間の論理和を抽出するためのコマンドであり、図２のＯＲ処理実行部１８により実行される。そこで、ユーザは、論理和の対象となる２つの式番号を、それぞれ解析対象（第１引数）セル及び解析条件（第２引数）セルに指定する。図７の式番号Ｓ００６は、式番号Ｓ００２で抽出されたクロスリファレンス結果と、式番号Ｓ００４で抽出された別のクロスリファレンス結果との論理和の抽出を指定する例を示している。即ち、式番号Ｓ００６は、プログラムＭＡＩＮ又はプログラムＳＵＢで使用される全ての変数（デバイス）Ｍに関するクロスリファレンスの抽出を指定する例を示している。
【００５０】
ＯＲコマンドの処理に関しては、ＰＯＵのコレクション同士のＯＲ処理は単純な論理和の処理であり、クロスリファレンス（指定デバイスの使用箇所）のコレクション同士のＯＲ処理もまた単純な論理和の処理である。図２のＯＲ処理実行部１８が実行する解析コマンドＯＲの処理の流れは、図１７及び図１８に示される通りとなる。この様に処理することにより、図７の式番号Ｓ００６の処理結果は、図１９に示される通りとなる。
【００５１】
（Ｅ）次に、図７に示される解析コマンドＮＯＴは、処理結果として抽出されたあるデータ集合の要素から別のデータ集合の要素を除外したデータ集合を抽出するためのコマンドであり、図２のＮＯＴ処理実行部１９により実行される。そこで、ユーザは、母集団となる式番号を解析対象セルに指定し、その母集団から除外する要素の集合となる式番号を解析条件セルに指定する。図７の式番号Ｓ００７は、式番号Ｓ００２に於いて抽出されたクロスリファレンス結果から、式番号Ｓ００４に於いて抽出されたクロスリファレンス結果を除外した後のクロスリファレンスの抽出を指定する例を示している。即ち、式番号Ｓ００７は、プログラムＭＡＩＮに於いて使用されている全ての変数（デバイス）Ｍの内で、プログラムＳＵＢに於いては使用されてはいない変数（デバイス）Ｍに関するクロスリファレンスの抽出を指定する例を示している。
【００５２】
ＮＯＴ処理実行部１９が実行する解析コマンドＮＯＴの処理の流れを、それぞれ図２０及び図２１に示す。ＰＯＵのコレクション同士のＮＯＴ処理（図２０参照。）は単純な除外処理であるが、クロスリファレンス（指定デバイスの使用箇所）のコレクション同士のＮＯＴ処理も単純に除外処理としてしまえば、どのような場合でも何ら除外されない結果となる。何故ならば、プログラムＭＡＩＮで変数（デバイス）Ｍ４が使用されている箇所と、プログラムＳＵＢで変数（デバイス）Ｍ４が使用されている箇所とは、変数（デバイス）が同じだけにすぎず、互いに異なるので、それらの箇所は同一とは見做されないからである。
【００５３】
本発明の本実施の形態は、このクロスリファレンス（指定デバイスの使用箇所）のコレクション同士のＮＯＴ処理（図２１参照。）に、その特徴点を有する。即ち、本実施の形態の特徴点は、変数（デバイス）が同じであることを、除外処理の演算基準としている点にある。例えば、プログラムＭＡＩＮで変数（デバイス）Ｍ４が使用されている箇所と、プログラムＳＵＢで変数（デバイス）Ｍ４が使用されている箇所とは、変数（デバイス）が同じであることから、除外処理の対象として、コレクションから除外される。この様にＮＯＴ処理実行部１９がＮＯＴ処理を行うことにより、図７の式番号Ｓ００７の結果は、図２２に示される通りになる。
【００５４】
図７の式番号Ｓ００８では、第１引数及び第２引数は共にＰＯＵコレクションであり、そのＯＲ処理の結果は、プログラムＭＡＩＮとプログラムＳＵＢとを要素としたＰＯＵコレクションとなる。
【００５５】
図７の式番号Ｓ００９の解析コマンドＶＡＲ_ＲＥＦは、第１引数のＰＯＵコレクションの要素数が１つではなくて２つある場合の一例であり、以下、図１０に基づいて処理フローを記載する。
【００５６】
この様な場合は、解析コマンドＶＡＲ_ＲＥＦの処理の中で、更に解析コマンドＶＡＲ_ＲＥＦの処理を再帰的に利用することで、解決される。図７の式番号Ｓ００９の場合には、図２の変数使用一覧抽出処理実行部１２は、先ず、要素が２つあるＰＯＵコレクションの１つ目の要素であるプログラムＭＡＩＮが解析対象セルに指定された解析コマンドＶＡＲ_ＲＥＦを処理し（尚、解析コマンドＶＡＲ_ＲＥＦの解析対象セルに指定されたＰＯＵコレクションの要素が１の場合の処理は、解析コマンドＶＡＲ_ＲＥＦの基底となる処理であり、その処理は上記（Ｂ）に於いて既述した通りとなる。）、その結果コレクションと式番号Ｓ００９の本結果コレクション（この時点では同コレクションは要素の無い空コレクションである。）とのＯＲ処理を行い（ＯＲ処理は、上記（Ｄ）で記述した通りである。）、その結果を式番号Ｓ００９の本結果コレクションとして更新する（この時点では、同コレクションの内容は、プログラムＭＡＩＮが解析対象セルに指定された解析コマンドＶＡＲ_ＲＥＦの処理結果コレクションと同じ内容である。）。
【００５７】
次に、変数使用一覧抽出処理実行部１２は、２つ目の要素であるプログラムＳＵＢが解析対象セルに指定された解析コマンドＶＡＲ_ＲＥＦを処理し、その結果コレクションと式番号Ｓ００９の本結果コレクション（この時点では、本結果コレクションの内容は、プログラムＭＡＩＮが解析対象セルに指定された解析コマンドＶＡＲ_ＲＥＦの処理結果コレクションと同じ内容である。）とのＯＲ処理を行い、その結果を式番号Ｓ００９の本結果コレクションとして更新する。
【００５８】
そして、変数使用一覧抽出処理実行部１２は、解析対象セルに指定されたＰＯＵコレクションの全ての要素に対して、再帰的な解析コマンドＶＡＲ_ＲＥＦの処理及びその結果コレクションと式番号Ｓ００９の本結果コレクションとのＯＲ処理を完了すると、変数（デバイス）をキーに式番号Ｓ００９の本結果コレクションをソートし、ソート後の本結果コレクションを、最終的な式番号Ｓ００９の結果コレクションとして出力する。
【００５９】
この様に処理することにより、式番号Ｓ００９の結果は、式番号Ｓ００６の結果と同じ図１９に示される通りとなる。
【００６０】
解析コマンドＶＡＲ_ＲＥＦは、解析対象であるＰＯＵコレクションに対して線形な演算子となる。即ち、解析コマンドＶＡＲ_ＲＥＦが線形なコマンド定義となる様に、処理フローは図１０で与えられることにしている。従って、この様な再帰的な処理が可能となるのである。
【００６１】
解析対象をＶＡＲ_ＲＥＦ関数の引数として表記し、ＯＲ演算を＋で表記することによって、解析コマンドＶＡＲ_ＲＥＦの線形性を記載すると、式番号Ｓ００９は、数１で与えられる式で表される。
【００６２】
【数１】
2010095289.tif 000003
【００６３】
又、解析コマンドＶＡＲ_ＲＥＦは、解析条件である変数（デバイス）に対しても線形な演算子として定義されている。式番号Ｓ０１０は、数２で与えられる式で表され、解析コマンドＶＡＲ_ＲＥＦを再帰的に利用することで、式番号Ｓ０１０の処理が可能となる。
【００６４】
【数２】
2010095289.tif 000004
【００６５】
但し、処理時間の観点から再帰的に処理せずに、図１０の処理フローのステップＳ４２に於いて、変数使用一覧抽出処理実行部１２は、Ｍ［０−９］及びＭ［２０−２９］を同時に処理することとしても良い。結果は、何れも同じである。
【００６６】
＜実施の形態１の効果＞
以上に記載した通り、クロスリファレンス（指定デバイスの使用箇所）のコレクション同士の論理演算（ＡＮＤ処理／ＯＲ処理／ＮＯＴ処理）を実現可能にしたことにより、所望のクロスリファレンスを抽出することが出来る。
【００６７】
又、ＰＯＵのコレクション同士の論理演算（ＡＮＤ処理／ＯＲ処理／ＮＯＴ処理）の結果コレクションが解析対象に指定された際のクロスリファレンスの作成を実現可能にしたことにより、所望のクロスリファレンスを抽出することが出来る。
【００６８】
又、解析コマンドＶＡＲ_ＲＥＦは、解析対象であるＰＯＵコレクションに対して線形な演算子として定義されている。加えて、解析コマンドＶＡＲ_ＲＥＦは、解析条件である変数（デバイス）に対しても線形な演算子として定義されている。従って、クロスリファレンス演算と論理演算の組み合わせとをどのような順序で行っても、同じ結果を保証することが可能なプログラム解析支援機能を提供することが出来る。
【００６９】
（実施の形態２）
本実施の形態に於いては、プログラムに於ける変数（デバイス）の依存関係の有向グラフを抽出する技術の具体例として、ラダープログラムに於けるデバイスの依存関係の有向グラフを抽出する技術について、以下に記載する。
【００７０】
図２３に示す様に、図２の場合と比較して、解析条件実行部１１は、変数（デバイス）依存関係有向グラフ抽出を処理するための機能部である変数依存関係抽出処理部１３を更に備えており、又、解析結果表示部２０は、変数（デバイス）依存関係有向グラフ結果を図１の表示部４に表示するための画像データを作成・出力する変数依存関係表示部２２を更に備えている。
【００７１】
尚、一般的なプログラムに於ける変数の依存関係（の有向グラフ）についての基本的な説明は、非特許文献２に於いて開示されている。
【００７２】
先ず、ラダープログラムに於ける変数の依存関係の有向グラフについて、図２４〜図２７を用いて記載する。
【００７３】
基本的なラダープログラムは、接点，コイル，及び母線により構成される。特に、左母線及び右母線の各々と接続しており、且つ、接点及び／又はコイルが配置されている横線（ラダー回路）を、以下では、Ｒｕｎｇ（ラング）と言う。従って、Ｒｕｎｇは、ラダープログラムの構成要素である。又、接点及びコイル等のＲｕｎｇを構成する要素を、以下では、Ｉｎｓｔｒｕｃｔｉｏｎ（インストラクション）と言う。図２４のラダー構造は、ラダープログラムの構成要素であるＲｕｎｇ、及び、そのＲｕｎｇの構成要素であるＩｎｓｔｒｕｃｔｉｏｎの具体例を示している。
【００７４】
Ｉｎｓｔｒｕｃｔｉｏｎは、Ｏｐｅｒａｔｏｒ（命令）とＯｐｅｒａｎｄ（オペランド）とから構成される。ＯｐｅｒａｎｄはＯｐｅｒａｔｏｒの引数であり，１つのＯｐｅｒａｎｄを必要とするＯｐｅｒａｔｏｒもあれば、或いは、２つ又はそれ以上のＯｐｅｒａｎｄを必要とするＯｐｅｒａｔｏｒもある。図２５は、ＯｐｅｒａｔｏｒとＯｐｅｒａｎｄとの具体例を示している。
【００７５】
ラダープログラムでは、接点の値（状態）が変われば、同じＲｕｎｇに置かれているコイルの値（状態）も変わる。即ち、コイルとなっているデバイスの値は、接点となっているデバイスの値に依存する関係にある。この関係を一般化して記載すると、デバイスを書き出すＯｐｅｒａｔｏｒを有するＩｎｓｔｒｕｃｔｉｏｎは、同じＲｕｎｇの上流に、つまり左側に置かれており、デバイスを読み込むＯｐｅｒａｔｏｒを有するＩｎｓｔｒｕｃｔｉｏｎに依存する関係にある、ということになる。
【００７６】
２つ又はそれ以上のＯｐｅｒａｎｄを必要とするＯｐｅｒａｔｏｒを有するＩｎｓｔｒｕｃｔｉｏｎの中にも、デバイスの依存関係が存在する。例えば、ＭＯＶ命令は、第１オペランドとして読み込みデバイスを指定し、第２オペランドとして書き出しデバイスを指定するので、第２オペランドの値は、第１オペランドに依存する関係にある。
【００７７】
又、あるＲｕｎｇに置かれた書き出しデバイスが、別のＲｕｎｇの読み出しデバイスとして置かれている場合には、そのデバイスを介して、デバイスの依存関係が繋がっていく。
【００７８】
図２６〜図２８の各々は、ラダープログラムに於けるＩｎｓｔｒｕｃｔｉｏｎの依存関係及びデバイスの依存関係の具体例を示している。
【００７９】
次に、ラダープログラムに於けるデバイスの依存関係の有向グラフを抽出する技術について記載する。ここで、図２９は、ユーザがプログラム解析条件を入力するための表示部４の画面例であり、図７の画面例の続きに該当している。
【００８０】
図２９の解析コマンドＶＡＲ_ＦＷＤは、指定した変数（デバイス）が影響を与える変数（デバイス）を抽出し、その変数依存関係を示す有向グラフ（前向き依存関係の有向グラフ）を得るためのコマンドである。ユーザは、解析コマンドＶＡＲ_ＦＷＤに対しては、解析対象となるプログラムを指定する式番号を解析対象セルに指定し、且つ、前向き依存関係有向グラフの起点となる変数（デバイス）を解析条件セルに指定する。式番号Ｓ０１１は、変数使用一覧抽出処理実行部１２より、式番号Ｓ００８の処理結果として出力されたＰＯＵコレクションに含まれる要素であるプログラムＭＡＩＮ及びプログラムＳＵＢに於ける、変数（デバイス）Ｘ２２２からの前向き依存関係の有向グラフの抽出を指定する例を示しており、変数依存関係抽出処理実行部１３は、式番号Ｓ０１１の解析結果として、有向グラフの描画に必要なデータを、変数依存関係表示部２２へ出力する。
【００８１】
変数依存関係抽出処理実行部１３が、ユーザにより指定された変数（デバイス）からの前向き依存関係の有向グラフを、ユーザにより指定されたラダープログラムから抽出する処理技術は、既述した非特許文献３には開示されていない。そこで、変数依存関係抽出処理実行部１３が実行する解析コマンドＶＡＲ_ＦＷＤの処理フローを、図３０のフローチャートに示す。
【００８２】
以下に於いては、変数依存関係抽出処理実行部１３が図２９の式番号Ｓ０１１で指定される処理を図３０のフローに沿って処理することにより、図３１の結果が得られることを記載する。
【００８３】
図３０に於けるステップＳ８６に於いて、変数依存関係抽出処理実行部１３は、式番号Ｓ０１１の第２引数である変数（デバイス）Ｘ２２２を要素としたデバイスコレクション[１]を生成する。
【００８４】
ステップＳ８７に於いて、同部１３は、デバイスコレクション[２]及び有向線分コレクション[２]を生成する。
【００８５】
ステップＳ９０では、同部１３は、プログラムＭＡＩＮに於いて、デバイスコレクション[１]の要素である変数（デバイス）Ｘ２２２が影響を与える他の変数（デバイス）Ｍ３を抽出する。
【００８６】
ステップＳ９１に於いて、同部１３は、変数（デバイス）Ｘ２２２から変数（デバイス）Ｍ３への有向線分を、有向線分コレクション[２]に追加する。この際の有向線分のデータ構造としては、依存元デバイスと依存先デバイスとを保持しておけば十分である。但し、後述する実施の形態に鑑みて、有向線分のデータ構造にＰＯＵ名とステップ番号と命令とを合わせて保持しておくことも可能である。
【００８７】
次のステップＳ９２に於いて、同部１３は、抽出した変数（デバイス）Ｍ３がデバイスコレクション[１]又は[２]に存在するか否かを判断する。本例では、変数（デバイス）Ｍ３はデバイスコレクション[１]及び[２]に存在しないので、ステップＳ９３に於いて、抽出した変数（デバイス）Ｍ３をデバイスコレクション[２]に追加する。
【００８８】
次のステップＳ９４に於いて、同部１３は、次のＰＯＵコレクション要素であるプログラムＳＵＢに対して同等の処理を実行しようとするが、本例に於いては、変数（デバイス）Ｘ２２２はプログラムＳＵＢには存在しない。
【００８９】
そこで、同部１３は、ステップＳ９５に於いて、次の要素デバイスに対して処理を実行しようとするが、本例では、デバイスコレクション[１]には変数（デバイス）Ｘ２２２以外の要素は存在しない。そのため、ステップＳ９６に於いて、同部１３は「ＮＯ」と判断して、次のステップＳ９７に移行する。
【００９０】
次に、ステップＳ９７に於いて、同部１３は、デバイスコレクションの変数ｄをインクリメントする。その結果、同部１３は、ｄ＝２に設定した上で、ステップＳ８７に於いて、デバイスコレクション[３]と、有向線分コレクション[３]とを生成する。
【００９１】
次のステップＳ９０では、同部１３は、プログラムＭＡＩＮに於いて、デバイスコレクション[２]の要素である変数（デバイス）Ｍ３が影響を与える他の変数（デバイス）Ｍ４を抽出する。
【００９２】
その上で、ステップＳ９１に於いて、同部１３は、変数（デバイス）Ｍ３から変数（デバイス）Ｍ４への有向線分を、有向線分コレクション[３]に追加する。
【００９３】
ステップＳ９２に於いて、同部１３は、抽出した変数（デバイス）Ｍ４がデバイスコレクション[１]〜[３]に存在するか否かを判断するが、本例では、変数（デバイス）Ｍ４はデバイスコレクション[１]〜[３]に存在しないので、ステップＳ９３に於いて、変数（デバイス）Ｍ４をデバイスコレクション[３]内に追加する。
【００９４】
ステップＳ９４に於いて、同部１３は、次の要素ＰＯＵであるプログラムＳＵＢに対する処理の実行を開始しようとするが、プログラムＳＵＢには変数（デバイス）Ｍ３は存在しないので、同部１３は、ステップＳ９５に於いて、次の要素デバイスに対して処理を実行しようとするが、デバイスコレクション[２]内には変数（デバイス）Ｍ３以外の要素は存在しないので、当該処理を実行出来ない。ステップＳ９６では、同部１３は「ＹＥＳ」と判断して、次のステップＳ９７に移行する。
【００９５】
ステップＳ９７に於いて、同部１３は、デバイスコレクションの変数ｄを更にインクリメントする。その結果、同部１３は、ｄ＝３に設定した上で、ステップＳ８７に於いて、デバイスコレクション[４]と、有向線分コレクション[４]とを生成する。
【００９６】
プログラムＭＡＩＮに於いては、デバイスコレクション[３]の要素である変数（デバイス）Ｍ４が影響を与える他の変数（デバイス）は存在しない。
【００９７】
そこで、同部１３は、次のＰＯＵコレクションの要素であるプログラムＳＵＢに於いて、デバイスコレクション[３]の要素である変数（デバイス）Ｍ４が影響を与える他の変数（デバイス）Ｍ７及びＭ８を抽出する（ステップＳ９０）。
【００９８】
その上で、ステップＳ９１に於いて、同部１３は、変数（デバイス）Ｍ４から変数（デバイス）Ｍ７への有向線分と、変数（デバイス）Ｍ４から変数（デバイス）Ｍ８への有向線分とを、有向線分コレクション[４]に追加する。
【００９９】
ステップＳ９２に於いて、同部１３は、抽出した変数（デバイス）Ｍ７及びＭ８がデバイスコレクション[１]〜[４]に存在するか否かを判断するが、本例では、変数（デバイス）Ｍ７及びＭ８はデバイスコレクション[１]〜[４]には存在しないので、ステップＳ９３に於いて、同部１３は、変数（デバイス）Ｍ７及びＭ８をデバイスコレクション[４]内に追加する。
【０１００】
ステップＳ９４に於いて、次の要素ＰＯＵは存在しない。
【０１０１】
そこで、同部１３は、ステップＳ９５に於いて、次の要素デバイスに対して処理を実行しようとするが、デバイスコレクション[３]内には変数（デバイス）Ｍ４以外の要素は存在しないので、当該処理を実行出来ない。ステップＳ９６では、同部１３は「ＹＥＳ」と判断して、次のステップＳ９７に移行する。
【０１０２】
ステップＳ９７に於いて、同部１３は、デバイスコレクションの変数ｄを更にインクリメントする。その結果、同部１３は、ｄ＝４に設定した上で、ステップＳ８７に於いて、デバイスコレクション[５]と、有向線分コレクション[５]とを生成する。
【０１０３】
プログラムＭＡＩＮに於いては、デバイスコレクション[４]の一つ目の要素である変数（デバイス）Ｍ７が影響を与える他の変数（デバイス）は存在しない。
【０１０４】
そこで、同部１３は、次のＰＯＵコレクションの要素であるプログラムＳＵＢに於いて、デバイスコレクション[４]の要素である変数（デバイス）Ｍ７が影響を与える他の変数（デバイス）ＹＯＣ１０を抽出する（ステップＳ９０）。
【０１０５】
その上で、ステップＳ９１に於いて、同部１３は、変数（デバイス）Ｍ７から変数（デバイス）ＹＯＣ１０への有向線分を、有向線分コレクション[５]に追加する。
【０１０６】
次のステップＳ９２に於いて、同部１３は、抽出した変数（デバイス）ＹＯＣ１０がデバイスコレクション[１]〜[５]に存在するか否かを判断するが、本例では、変数（デバイス）ＹＯＣ１０はデバイスコレクション[１]〜[５]には存在しないので、ステップＳ９３に於いて、同部１３は、変数（デバイス）ＹＯＣ１０をデバイスコレクション[５]内に追加する。
【０１０７】
ステップＳ９４に於いて、次の要素ＰＯＵは存在しない。
【０１０８】
そこで、同部１３は、ステップＳ９５に於いて、次の要素デバイスに対して処理を実行しようとするが、次の変数（デバイス）Ｍ８が影響を与える他の変数（デバイス）はプログラムＭＡＩＮ及びプログラムＳＵＢには存在しないので、ステップＳ９６では、同部１３は「ＹＥＳ」と判断して、次のステップＳ９７に移行する。
【０１０９】
ステップＳ９７に於いて、同部１３は、デバイスコレクションの変数ｄを更にインクリメントする。その結果、同部１３は、ｄ＝５に設定した上で、ステップＳ８７に於いて、デバイスコレクション[６]と、有向線分コレクション[６]とを生成する。
【０１１０】
プログラムＭＡＩＮに於いては、デバイスコレクション[５]の要素である変数（デバイス）ＹＯＣ１０が影響を与える他の変数（デバイス）は存在しない。しかも、次のＰＯＵコレクションの要素であるプログラムＳＵＢに於いても、変数（デバイス）ＹＯＣ１０が影響を与える他の変数（デバイス）は存在しない。
【０１１１】
そこで、同部１３は、ステップＳ９６に於いて、デバイスコレクション[６]に要素が存在するか否かを判断するが、デバイスコレクション[６]には要素が存在しないので、同部１３は、ステップＳ９８に移行する。
【０１１２】
ステップＳ９８に於いて、同部１３は、要素が存在するデバイスコレクション[１]〜[５]と、有向線分コレクション[２]〜[５]とを、前向き依存関係の有向グラフ解析結果として、変数依存関係表示部２２へ出力する。
【０１１３】
その後、変数依存関係表示部２２は、デバイスコレクション[１]〜[５]と、有向線分コレクション[２]〜[５]とに基づき与えられる前向き依存関係の有向グラフ解析結果を示す描画データを図１の表示部４に出力し、その結果、表示部４は、その画面上に、デバイスコレクション[１]〜[５]と、有向線分コレクション[２]〜[５]とに基づき与えられる前向き依存関係の有向グラフ解析結果を描画する。その描画結果は、図３１に示される通りとなる。
【０１１４】
又、関連するデバイスコメントファイルに、変数（デバイス）のコメントが記載されている場合の画面例を、図３１に併せて示す。
【０１１５】
尚、有向グラフの描画に関しては従来技術を用いれば良く、有向グラフの構造を示すデバイスコレクション[１]〜[５]と有向線分コレクション[２]〜[５]とに基づいて、具体的に有向グラフを描画する手順の記載は、本発明の主旨から外れるので、ここでは省略される。
【０１１６】
又、図２９の式番号Ｓ０１２で指定される処理についても、変数依存関係抽出処理実行部１３は、同様に、図３０に示されるフローに従って処理すれば良く、その結果、図３２に示される結果が得られる。
【０１１７】
＜実施の形態２の効果＞
ラダープログラムを解析対象としたデバイスの前向き依存関係の有向グラフの抽出を可能にし、又、ラダープログラムに於けるＰＯＵのコレクション及びＰＯＵのコレクション同士の論理演算（ＡＮＤ処理／ＯＲ処理／ＮＯＴ処理）の結果を解析対象としたデバイスの前向き依存関係の有向グラフの抽出を可能にしたことにより、プログラム解析に係る作業を省力化することが出来る。
【０１１８】
（実施の形態３）
本実施の形態は、ラダープログラムに於ける変数（デバイス）の後向き依存関係の有向グラフを抽出する技術について記載する。
【０１１９】
この場合に用いられる解析コマンドＶＡＲ_ＢＷＤは、ユーザにより指定された変数（デバイス）に影響を与える変数（デバイス）を抽出し、その依存関係を示す有向グラフ（後向き依存関係の有向グラフ）を得るためのコマンドである。プログラム解析条件の入力に関しては、解析コマンドＶＡＲ_ＢＷＤに対して、ユーザは、図１の入力部５を用いて、解析対象となるプログラムを指定する式番号を解析対象セルに指定すると共に、後向き依存関係有向グラフの起点となる変数（デバイス）を解析条件セルに指定する。図２９に於ける式番号Ｓ０１５は、式番号Ｓ００８の論理処理結果として出力されたＰＯＵコレクションに含まれる要素（要素ＰＯＵ）であるプログラムＭＡＩＮ及びプログラムＳＵＢに於ける、変数（デバイス）ＹＣ１０からの後向き依存関係の有向グラフの抽出処理を指定する例を示しており、図２３の変数依存関係抽出処理実行部１３は、その解析結果として、後向き依存関係の有向グラフの描画に必要なデータを、変数依存関係表示部２２に出力する。
【０１２０】
ここで、図３３は、変数依存関係抽出処理実行部１３が実行する解析コマンドＶＡＲ_ＢＷＤの処理フローを示すフローチャートである。当該処理フローは、実施の形態２に於いて既述した、図３０に於ける解析コマンドＶＡＲ_ＦＷＤの処理フローと殆ど同一ではあるが、以下の３点に於いて相違する。
【０１２１】
即ち、図３３のステップＳ１０９に於いては、図３０のステップＳ９０とは異なり、変数依存関係抽出処理実行部１３は、指定された変数（デバイス）に影響を与える他の変数（デバイス）を抽出する。
【０１２２】
更に、図３３のステップＳ１１０に於いては、図３０のステップＳ９１とは異なり、変数依存関係抽出処理実行部１３は、ステップＳ１０９で抽出した変数（デバイス）からの依存関係を示す有向線分を追加処理する。
【０１２３】
更に、図３３のステップＳ１１７に於いては、変数依存関係抽出処理実行部１３は、図３０のステップＳ９８の処理に加えて、デバイスコレクション及び有向線分コレクションの深さの番号を逆転させる処理を行った後に、逆転処理後の結果を、デバイス依存関係有向グラフ解析結果として出力する。
【０１２４】
例えば、デバイスコレクション[１]〜[ｎ]が得られたとすると、変数依存関係抽出処理実行部１３は、デバイスコレクション[１]をデバイスコレクション[ｎ]として出力し、デバイスコレクション[２]をデバイスコレクション[ｎ−１]として出力し、…、一般にデバイスコレクション[ｋ]をデバイスコレクション[ｎ−ｋ＋１]として出力し、…、デバイスコレクション[ｎ]をデバイスコレクション[１]として出力する。
【０１２５】
又、有向線分コレクション[２]〜[ｎ]が得られたとすると、変数依存関係抽出処理実行部１３は、有向線分コレクション[２]を有向線分コレクション[ｎ]として出力し、有向線分コレクション[３]を有向線分コレクション[ｎ−１]として出力し、…、一般に有向線分コレクション[ｋ]を有向線分コレクション[ｎ−ｋ＋２]として出力し、…、有向線分コレクション[ｎ]を有向線分コレクション[２]として出力する。
【０１２６】
但し、有向線分は、その依存元デバイスの深さを基準とした有向線分コレクションの深さに属することを原則としており、有向線分コレクションの番号を逆転させた際には、変数依存関係抽出処理実行部１３は、全ての有向線分の要素を、その属するべき深さへと移動させる。
【０１２７】
以上の様にして得られたデバイスコレクションと有向線分コレクションとに基づいて有向グラフを描画すると、描画結果は図３４に示される通りとなる。
【０１２８】
特に注意すべき点は、有向線分コレクションの番号を逆転させた際には、全ての有向線分の要素を、その属するべき深さへと移動させる点にある。
【０１２９】
図３４の場合、有向線分コレクションの番号を逆転させる前に於いて、有向線分コレクション[ｄ＝３]には、「Ｘ２２３→Ｍ６」，「Ｄ２→Ｍ６」，「Ｄ３→Ｍ６」，「Ｍ４→Ｍ７」及び「Ｍ５→Ｍ７」の５つの要素有向線分が存在し、有向線分コレクション[ｄ＝４]には、「Ｍ３→Ｍ４」，「Ｘ２２３→Ｍ５」，「Ｄ２→Ｍ５」及び「Ｄ３→Ｍ５」の４つの要素有向線分が存在する。
【０１３０】
その上で、先ず、変数依存関係抽出処理実行部１３が、有向線分コレクションの深さ番号だけを逆転させる処理を行うと、有向線分コレクション[ｄ＝４]には、「Ｘ２２３→Ｍ６」，「Ｄ２→Ｍ６」，「Ｄ３→Ｍ６」，「Ｍ４→Ｍ７」及び「Ｍ５→Ｍ７」の５つの要素有向線分が存在し、他方、有向線分コレクション[ｄ＝３]には、「Ｍ３→Ｍ４」，「Ｘ２２３→Ｍ５」，「Ｄ２→Ｍ５」及び「Ｄ３→Ｍ５」の４つの要素有向線分が存在することとなる。
【０１３１】
そこで、変数依存関係抽出処理実行部１３は、各有向線分を、その依存元デバイスの深さを基準とした有向線分コレクションの深さに属する様に、移動させる処理を行う。その結果、有向線分コレクション[ｄ＝３]の要素有向線分の内の３つの要素有向線分「Ｘ２２３→Ｍ５」，「Ｄ２→Ｍ５」及び「Ｄ３→Ｍ５」は、深さ番号逆転後の依存元デバイスの深さがｄ＝３であるので、属するべき深さはｄ＝４であることとなり、有向線分コレクション[ｄ＝４]に移動させられる。
【０１３２】
これにより、結果として、有向線分コレクション[ｄ＝４]には、「Ｘ２２３→Ｍ６」，「Ｄ２→Ｍ６」，「Ｄ３→Ｍ６」，「Ｍ４→Ｍ７」，「Ｍ５→Ｍ７」，「Ｘ２２３→Ｍ５」，「Ｄ２→Ｍ５」及び「Ｄ３→Ｍ５」の８つの要素有向線分が存在し、有向線分コレクション[ｄ＝３]には、「Ｍ３→Ｍ４」より成る１つの要素有向線分が存在する。
【０１３３】
＜実施の形態３の効果＞
ラダープログラムを解析対象とした変数（デバイス）の後向き依存関係の有向グラフの抽出を可能にし、又、ラダープログラムに於けるＰＯＵのコレクション及びＰＯＵのコレクション同士の論理演算（ＡＮＤ処理／ＯＲ処理／ＮＯＴ処理）の結果を解析対象とした変数（デバイス）の後向き依存関係の有向グラフの抽出を可能にしたので、プログラム解析に係る作業を省力化することが出来る。
【０１３４】
（実施の形態４）
本実施の形態では、ラダープログラムに於けるデバイスの依存関係の有向グラフ同士の論理演算（論理和ＯＲ処理）を可能にする技術について記載する。
【０１３５】
解析コマンドＯＲは、処理結果として抽出された異なるデータの集合の間の論理和を抽出するためのコマンドである。そこで、ユーザは、入力部５を用いて、論理和の対象となる２つの式番号の各々を、解析対象（第１引数）セル及び解析条件（第２引数）セルに指定する。図２９の式番号Ｓ０１３は、式番号Ｓ０１１の処理により抽出されたデバイス依存関係有向グラフ抽出結果と、式番号Ｓ０１２の処理により抽出された別のデバイス依存関係有向グラフ抽出結果との論理和の抽出を指定する例を示している。
【０１３６】
従って、本発明に於いては、クロスリファレンス同士の論理和を実施するための解析コマンドと、デバイス依存関係有向グラフ同士の論理和を実施するための解析コマンドとを、共に同じ解析コマンドＯＲにより指定する例が、提案されている。
【０１３７】
ここで、図３５は、図２３のＯＲ処理実行部１８が実行する解析コマンドＯＲの処理フローを示すフローチャートである。
【０１３８】
先ず、同部１８は、図３５のステップＳ１２０及びＳ１２１に於いて、論理和の対象となるデータ種別がデバイス依存関係有向グラフであるか否かを確認する。若し、データ種別がデバイス依存関係有向グラフでなければ、同部１８は、既述した図１８の処理フローを実行する。
【０１３９】
他方、解析コマンドＯＲがデバイス依存関係有向グラフ同士の論理和の演算である場合には、同部１８は、第１引数と第２引数とのコレクションを結合するための前準備として、両引数の互いの深さレベルを合わせる処理を行い（ステップＳ１２２）、第１引数の全ての要素を上記結合のベースとする（ステップＳ１２５）。
【０１４０】
次に、同部１８は、第１引数の要素と重複している第２引数の要素を確認しながらコレクションの結合を行っていく。コレクションの結合に際しては、同部１８は、先ず、デバイスコレクションの結合（論理和）を処理した上で（ステップＳ１２８）、有向線分コレクションの結合（論理和）を処理する（ステップＳ１３２）。
【０１４１】
ＯＲ処理実行部１８が図２９の式番号Ｓ０１３を図３５に示す各フローに従って処理していくと、図３１及び図３２の論理和の処理結果として、図３６に示される結果が得られる。その点を、以下に、詳述する。
【０１４２】
図３５のステップＳ１２３に於いて、同部１８は、重複している要素数が最も多い深さとして、変数（デバイス）Ｍ７及びＭ８が重複している深さである第１引数のｄ＝４と第２引数のｄ＝３との組合せを、抽出する。
【０１４３】
次のステップＳ１２４に於いて、同部１８は、第１引数の深さをそのままに維持した上で、第２引数のｄ＝３を第１引数のｄ＝４に合わせる様に、コレクションの深さを再設定する。両引数の内で何れの深さをそのままとするかの判断基準として、ステップＳ１２３に於いて抽出された組合せの内で、値の大きい方の引数の深さがそのままに維持される。但し、抽出された組合せの深さの値が共に同じ場合には、何れの引数についても深さの再設定の必要性は無い。式番号Ｓ０１３の処理の場合には、第２引数のコレクションの深さの値に＋１だけ加算された後の深さの値のコレクション（デバイスコレクション[２]〜[４]，有向線分コレクション[３]〜[５]）が、以降のステップに於いて、取り扱われる。
【０１４４】
次のステップＳ１２６に於いて、同部１８は、深さ再設定後の第１引数と第２引数の深さの大きい方の値の分だけの深さのコレクションを生成する。式番号Ｓ０１３の処理の場合には、同部１８は、デバイスＯＲ結果コレクション[１]〜[５]及び有向線分ＯＲ結果コレクション[２]〜[５]のそれぞれを、空で生成する。
【０１４５】
その上で、ステップＳ１２７に於いて、同部１８は、第１引数のコレクション要素の全てを、ＯＲ結果コレクションへコピーする。コピーに際しては、同部１８は、ステップＳ１２４に於いて第１引数の深さをそのままに維持したことに留意して、コピー元（第１引数）の深さとコピー先（ＯＲ結果コレクション）の深さとをそのままとした上でコピー処理を実行する。仮に、ステップＳ１２４に於いて、第１引数の深さが再設定されたのであれば、コピー元（第１引数）の深さとコピー先（ＯＲ結果コレクション）の深さとは、その再設定を考慮して設定される。
【０１４６】
次のステップＳ１２８の詳細は、以下の記載の通りである。
【０１４７】
ステップＳ１２９に於いて、同部１８は、先ず、第２引数のデバイスコレクション[再設定後の深さ＝２のデバイスコレクション]の要素である変数（デバイス）Ｘ２２３は、デバイスＯＲ結果コレクションの全ての深さに存在しないと判定する結果（ＹＥＳ）、次のステップＳ１３０に於いて、変数（デバイス）Ｘ２２３を、デバイスＯＲ結果コレクション[２]にコピーする。そして、同部１８は、ステップＳ１３１に移行する。
【０１４８】
次に、第２引数のデバイスコレクション[再設定後の深さ＝３のデバイスコレクション]の要素である変数（デバイス）Ｍ５は、デバイスＯＲ結果コレクションの全ての深さに存在しないので（ステップＳ１２９に於いてＹＥＳの判定）、同部１８は、変数（デバイス）Ｍ５を、デバイスＯＲ結果コレクション[３]にコピーする（ステップＳ１３０）。
【０１４９】
次に、第２引数のデバイスコレクション[再設定後の深さ＝３のデバイスコレクション]の要素である変数（デバイス）Ｍ６は、デバイスＯＲ結果コレクションの全ての深さに存在しないので（ステップＳ１２９に於いてＹＥＳの判定）、同部１８は、変数（デバイス）Ｍ６を、デバイスＯＲ結果コレクション[３]にコピーする（ステップＳ１３０）。
【０１５０】
次に、第２引数のデバイスコレクション[再設定後の深さ＝４のデバイスコレクション]の要素である変数（デバイス）Ｍ７は、デバイスＯＲ結果コレクション[４]の深さに存在するので（ステップＳ１２９に於いてＮＯの判定）、同部１８は、変数（デバイス）Ｍ７のコピー処理を行わない。
【０１５１】
次に、第２引数のデバイスコレクション[再設定後の深さ＝４のデバイスコレクション]の要素である変数（デバイス）Ｍ８は、デバイスＯＲ結果コレクション[４]の深さに存在するので（ステップＳ１２９に於いてＮＯの判定）、同部１８は、変数（デバイス）Ｍ８のコピー処理を行わない。
【０１５２】
次に、第２引数のデバイスコレクション[再設定後の深さ＝４のデバイスコレクション]の要素である変数（デバイス）Ｄ５は、デバイスＯＲ結果コレクションの全ての深さに存在しないので（ステップＳ１２９に於いてＹＥＳの判定）、同部１８は、変数（デバイス）Ｄ５を、デバイスＯＲ結果コレクション[４]にコピーする（ステップＳ１３０）。
【０１５３】
次に、第２引数のデバイスコレクション[再設定後の深さ＝４のデバイスコレクション]の要素である変数（デバイス）ＹＣ１０は、デバイスＯＲ結果コレクション[５]の深さに存在するので（ステップＳ１２９に於いてＮＯの判定）、同部１８は、変数（デバイス）ＹＣ１０のコピー処理を行わない。
【０１５４】
次のステップＳ１３２の詳細は、以下の記載の通りである。
【０１５５】
ステップＳ１３３に於いて、同部１８は、先ず、第２引数の有向線分コレクション[再設定後の深さ＝３の有向線分コレクション]の要素である有向線分「Ｘ２２３→Ｍ５」は、有向線分ＯＲ結果コレクションの全ての深さに存在しないと判定し（ＹＥＳ）、次のステップＳ１３４に於いて、同部１８は、有向線分ＯＲ結果コレクション[３]にコピーする。コピーに際しては、同部１８は、コピーしようとしている有向線分の依存元デバイスが存在するデバイスＯＲ結果コレクションの深さに基づいて、有向線分ＯＲ結果コレクションの深さ（即ち、デバイスＯＲ結果コレクションの深さ＋１）へコピーすることに留意する。この場合、コピーしようとしている有向線分「Ｘ２２３→Ｍ５」の依存元デバイスＸ２２３はデバイスＯＲ結果コレクション[２]に存在するので、同部１８は、有向線分「Ｘ２２３→Ｍ５」を、有向線分ＯＲ結果コレクション[３]へコピーする。そして、同部１８は、次のステップＳ１３５へ移行する。
【０１５６】
その結果、次に、第２引数の有向線分コレクション[再設定後の深さ＝４の有向線分コレクション]の要素である有向線分「Ｍ５→Ｍ７」は、有向線分ＯＲ結果コレクションの全ての深さに存在しないので（ステップＳ１３３に於いてＹＥＳの場合）、同部１８は、有向線分「Ｍ５→Ｍ７」を、有向線分ＯＲ結果コレクション[４]にコピーする（ステップＳ１３４）。
【０１５７】
次に、第２引数の有向線分コレクション[再設定後の深さ＝４の有向線分コレクション]の要素である有向線分「Ｍ５→Ｍ８」は、有向線分ＯＲ結果コレクションの全ての深さに存在しないので（ステップＳ１３３に於いてＹＥＳの場合）、同部１８は、有向線分「Ｍ５→Ｍ８」を、有向線分ＯＲ結果コレクション[４]にコピーする（ステップＳ１３４）。
【０１５８】
次に、第２引数の有向線分コレクション[再設定後の深さ＝４の有向線分コレクション]の要素である有向線分「Ｍ６→Ｄ５」は、有向線分ＯＲ結果コレクションの全ての深さに存在しないので（ステップＳ１３３に於いてＹＥＳの場合）、同部１８は、有向線分「Ｍ６→Ｄ５」を、有向線分ＯＲ結果コレクション[４]にコピーする（ステップＳ１３４）。
【０１５９】
次に、第２引数の有向線分コレクション[再設定後の深さ＝４の有向線分コレクション]の要素である有向線分「Ｍ６→ＹＣ１０」は、有向線分ＯＲ結果コレクションの全ての深さに存在しないので（ステップＳ１３３に於いてＹＥＳの場合）、同部１８は、有向線分「Ｍ６→ＹＣ１０」を、有向線分ＯＲ結果コレクション[４]にコピーする（ステップＳ１３４）。ここで、コピーしようとしている有向線分「Ｍ６→ＹＣ１０」の依存先デバイスＹＣ１０はデバイスＯＲ結果コレクション[５]に存在するが、依存元デバイスＭ６はデバイスＯＲ結果コレクション[３]に存在するので、同部１８は、有向線分「Ｍ６→ＹＣ１０」を、有向線分ＯＲ結果コレクション[４]へコピーする。
【０１６０】
次に、第２引数の有向線分コレクション[再設定後の深さ＝５の有向線分コレクション]の要素である有向線分「Ｍ７→ＹＣ１０」は、有向線分ＯＲ結果コレクション[５]の要素として存在するので、同部１８は、有向線分「Ｍ７→ＹＣ１０」をコピーしない。
【０１６１】
以上の処理により得られるデバイスコレクション[１]〜[５]と有向線分コレクション[２]〜[５]とに基づいて描画される有向グラフは、図３６に示す通りとなる。
【０１６２】
有向線分は、あるデバイスから別のデバイスへの依存関係を示すものであり、変数（デバイス）と有向線分とは互いに密接に関連しているが、図２３のＯＲ処理実行部１８が以上の様に処理する、即ち、先ずデバイスコレクションの結合（論理和）を処理した上で、その結果に基づいて有向線分コレクションの結合（論理和）を処理することによって、有向グラフ同士を矛盾なく論理和（ＯＲ）演算することが可能となる。
【０１６３】
尚、以上の有向グラフ同士の論理和（ＯＲ）演算は、その有向グラフの何れか一方又はその両方が前向き依存関係であるか、後向き依存関係であるかを問わない処理である。
【０１６４】
図２９の式番号Ｓ０１３は、図２３のＯＲ処理実行部１８がデバイス依存関係有向グラフ同士の論理和の処理を実施するためのコマンドを、図２のＯＲ処理実行部１８がクロスリファレンス同士の論理和の処理を実施するためのコマンド（図７の式番号Ｓ００６の指定）と同じである、解析コマンドＯＲで以って指定する例を示している。これに代えて、仮に、それぞれを別のコマンドで定義して（例えば、前者をＶＡＲ_ＦＷＤ_ＢＷＤ_ＯＲ、後者をＶＡＲ_ＲＥＦ_ＯＲと定義する。）、使い分ける実施の形態に於いても、そこで用いる技術は本実施の形態で既述した技術と同じである。
【０１６５】
又、本実施の形態を用いれば、解析コマンドＶＡＲ_ＦＷＤは、解析条件（デバイス依存関係有向グラフの起点）である変数（デバイス）に対して線形な演算子となる。換言すれば、解析コマンドＶＡＲ_ＦＷＤが線形なコマンド定義となる様に、デバイス依存関係有向グラフの論理和の処理フローは、図３５に示す様に設定されている。
【０１６６】
ここで、解析条件をＶＡＲ_ＦＷＤ関数の引数として表記し、解析コマンドＯＲを＋で表記することにより、解析コマンドＶＡＲ_ＦＷＤの線形性を記載するならば、図２９の式番号Ｓ０１４で指定される解析コマンドは、次の数３で与えられる式となる。
【０１６７】
【数３】
2010095289.tif 000005
【０１６８】
従って、式番号Ｓ０１４で示す様に、解析コマンドＶＡＲ_ＦＷＤの解析条件（デバイス依存関係有向グラフの起点）である変数（デバイス）がユーザにより列挙して指定された場合には、それぞれの変数（デバイス）を解析条件とした解析コマンドＶＡＲ_ＦＷＤの結果を論理和（ＯＲ）処理した後の結果を式番号Ｓ０１４の結果とする様な、再帰的な処理が可能となる。この点は、解析コマンドＶＡＲ_ＢＷＤについても同様である。
【０１６９】
この事は、ユーザが、一々、式番号Ｓ０１１，Ｓ０１２，Ｓ０１３の様に、３つの条件式を入力しなくとも、一つの式番号Ｓ０１４の入力とその実行とにより、式番号Ｓ１３の処理結果と同じ処理結果が得られることを、意味している。
【０１７０】
又、ユーザが解析条件セルに複数の変数（デバイス）を列挙して指定する方法も、図７の式番号Ｓ０１０で示された解析コマンドＶＡＲ_ＲＥＦと、図２９の式番号Ｓ０１４で示された解析コマンドＶＡＲ_ＦＷＤとでは、同じであり、異なる解析コマンド間での解析条件指定方法の整合性も取れていて、何等矛盾しない。この点は、解析コマンドＶＡＲ_ＢＷＤについても同様である。
【０１７１】
＜実施の形態４の効果＞
１）ラダープログラムに於ける変数（デバイス）の依存関係の有向グラフ同士の論理演算（論理和ＯＲ処理）を可能としたことにより、所望のデバイス依存関係有向グラフを抽出することが出来、プログラム解析に係る作業を省力化することが出来る。
【０１７２】
２）クロスリファレンス同士の論理和を実施するためのコマンドと、デバイス依存関係有向グラフ同士の論理和を実施するためのコマンドとを、同じ解析コマンドＯＲでユーザは指定することが可能である。仮に、それぞれを別のコマンド（例えば、前者を解析コメンドＶＡＲ_ＲＥＦ_ＯＲと、後者を解析コマンドＶＡＲ_ＦＷＤ_ＢＷＤ_ＯＲと定義する。）で定義して使い分ける実施の形態も考えられるが、解析コマンドＯＲの対象となるデータ種別によってコマンドを使い分ける必要性が生じる。データ種別に拘らず、論理和を実施する解析コマンドはＯＲと定義しておく方が、使い勝手が良い。解析コマンドを使い分ける場合には、ユーザは、それぞれのデータ種別に対応した論理和コマンドをヘルプ又は取扱説明書等で調べる必要性が生じるが、全ての解析コマンドを解析コマンドＯＲで実施出来るのであれば、その様なユーザがヘルプ等を参照する必要性は全く無く、プログラム解析に係る作業を省力化することが出来る。
【０１７３】
（実施の形態５）
本実施の形態では、ラダープログラムに於けるデバイスの依存関係の有向グラフ同士の論理積演算（論理積ＡＮＤ処理）を可能にする技術が、記載される。
【０１７４】
解析コマンドＡＮＤは、処理結果として抽出された異なるデータの集合の間の論理積を抽出するためのコマンドであり、ユーザは、論理積の対象となる２つの式番号のそれぞれを、解析対象（第１引数）セル及び解析条件（第２引数）セルに指定する。図２９の式番号Ｓ０１６は、式番号Ｓ０１４で抽出されたデバイス依存関係有向グラフ抽出結果と、式番号Ｓ０１５で抽出された別のデバイス依存関係有向グラフ抽出結果との論理積の抽出を指定する例を示している。
【０１７５】
つまり、本発明に於いては、既述したクロスリファレンス同士の論理積を実施するための解析コマンドと、デバイス依存関係有向グラフ同士の論理積を実施するための解析コマンドとは、同じないしは共通の解析コマンドＡＮＤで以って指定される例を示している。
【０１７６】
ここで、図３７は、図２３のＡＮＤ処理実行部１７が実行する解析コマンドＡＮＤの処理フローを示すフローチャートである。以下、図３７に示す処理フローに基づき、本実施の形態に係るデバイス依存関係有向グラフのＡＮＤ処理を記載する。
【０１７７】
先ず、ステップＳ１３７及びＳ１３８に於いて、ＡＮＤ処理実行部１７は、論理積の対象となるデータ種別がデバイス依存関係有向グラフであるか否かを確認する。この確認処理に於いて、データ種別がデバイス依存関係有向グラフでないことが確認された場合には、同部１７は、単に、既述した図１５の処理フローを行う。
【０１７８】
他方、当該式番号が指定する解析コマンドがデバイス依存関係有向グラフ同士の論理積を実行することを指定する場合には、第１引数及び第２引数のコレクションの共通要素のみを抽出するための前準備として、両引数のコレクションの互いの深さレベルを合わせる処理を行い（ステップＳ１３９）、更に、変数（デバイス）及び有向線分の各々につき、空のＡＮＤ結果コレクションを生成して、このＡＮＤ結果コレクションを以って共通要素のみを抽出するためのベースとする（ステップＳ１４２）。
【０１７９】
次に、同部１７は、第２引数と重複している第１引数の要素を確認しながら、共通要素のみを抽出していく処理を行う。その共通要素の抽出に際しては、同部１７は、先ず、デバイスコレクションの共通要素のみを抽出（論理積）した上で（ステップＳ１４３）、その後に、有向線分コレクションの共通要素のみを抽出（論理積）する（ステップＳ１４７）。
【０１８０】
ＡＮＤ処理実行部１７が図２９の式番号Ｓ０１６を図３７に示す以下の処理フローに基づいてＡＮＤ処理を行うと、図３６の結果と図３４の結果の論理積として、図３８に示される結果が得られる。その点を詳述する。
【０１８１】
ステップＳ１４０に於いて、同部１７は、第１引数である式番号Ｓ０１４のデバイスコレクションと第２引数である式番号Ｓ０１５のデバイスコレクションとに於いて、重複している要素の数が最も多い深さを抽出する。その結果、同部１７は、重複の最も多い深さとして、変数（デバイス）Ｍ４と変数（デバイス）Ｍ５とが重複している深さである、第１引数のｄ＝３及び第２引数のｄ＝３の組合せを、抽出する。
【０１８２】
次のステップＳ１４１に於いて、同部１７は、第１引数の深さと第２引数の深さとの何れをそのまま維持するかの判断基準の適用として、ステップＳ１４０で抽出した組合せの値の内で大きい値の方の深さをそのまま維持することとし、他方の深さを再設定する。これによって、再設定された深さが、以降のステップでは取り扱われる。図２９の式番号Ｓ０１６の処理の場合には、ステップＳ１４０で抽出された組合せの深さの値が共に同じであり（ｄ＝３）、何れの引数についても、その深さの再設定の必要性は無い。
【０１８３】
次のステップＳ１４１に於いて、同部１７は、深さ再設定後の第１引数の深さと第２引数の深さの内でその値が大きい方の当該値の分だけの深さのＡＮＤ結果コレクションを生成する。図２９の式番号Ｓ０１６の処理の場合には、第１引数及び第２引数の何れのコレクションについてもその深さは同じであり（ｄ＝５）、デバイスＡＮＤ結果コレクション[１]〜[５]と、有向線分ＡＮＤ結果コレクション[２]〜[５]とを、共に空の内容のＡＮＤ結果コレクションとして生成する。
【０１８４】
次のステップＳ１４４に於いて、同部１７は、先ず、第１引数のデバイスコレクション[１]の要素である変数（デバイス）Ｘ２２２は、第２引数のデバイスコレクション[１]に存在すると判定するので、その次のステップＳ１４５に於いて、同部１７は、デバイスＡＮＤ結果コレクション[１]に、変数（デバイス）Ｘ２２２をコピーする。
【０１８５】
次に、第１引数のデバイスコレクション[２]の要素である変数（デバイス）Ｍ３は、第２引数のデバイスコレクション[２]に存在するので、ステップＳ１４５に於いて、同部１７は、変数（デバイス）Ｍ３を、デバイスＡＮＤ結果コレクション[２]にコピーする。
【０１８６】
次に、第１引数のデバイスコレクション[２]の要素である変数（デバイス）Ｘ２２３は、第２引数のデバイスコレクション[３]に存在するので、ステップＳ１４５に於いて、同部１７は、変数（デバイス）Ｘ２２３を、デバイスＡＮＤ結果コレクション[２]にコピーする。
【０１８７】
次に、第１引数のデバイスコレクション[３]の要素である変数（デバイス）Ｍ４は、第２引数のデバイスコレクション[３]に存在するので、ステップＳ１４５に於いて、同部１７は、変数（デバイス）Ｍ４を、デバイスＡＮＤ結果コレクション[３]にコピーする。
【０１８８】
次に、第１引数のデバイスコレクション[３]の要素である変数（デバイス）Ｍ５は、第２引数のデバイスコレクション[３]に存在するので、ステップＳ１４５に於いて、同部１７は、変数（デバイス）Ｍ５を、デバイスＡＮＤ結果コレクション[３]にコピーする。
【０１８９】
次に、第１引数のデバイスコレクション[３]の要素である変数（デバイス）Ｍ６は、第２引数のデバイスコレクション[４]に存在するので、ステップＳ１４５に於いて、同部１７は、変数（デバイス）Ｍ６を、デバイスＡＮＤ結果コレクション[３]にコピーする。
【０１９０】
次に、第１引数のデバイスコレクション[４]の要素である変数（デバイス）Ｍ７は、第２引数のデバイスコレクション[４]に存在するので、ステップＳ１４５に於いて、同部１７は、変数（デバイス）Ｍ７を、デバイスＡＮＤ結果コレクション[４]にコピーする。
【０１９１】
次に、第１引数のデバイスコレクション[４]の要素である変数（デバイス）Ｍ８は、第２引数のデバイスコレクションの全ての深さに存在しないので、同部１７はコピー処理を行わない。
【０１９２】
次に、第１引数のデバイスコレクション[４]の要素である変数（デバイス）Ｄ５は、第２引数のデバイスコレクションの全ての深さに存在しないので、同部１７はコピー処理を行わない。
【０１９３】
次に、第１引数のデバイスコレクション[５]の要素である変数（デバイス）ＹＣ１０は、第２引数のデバイスコレクション[５]に存在するので、ステップＳ１４５に於いて、同部１７は、変数（デバイス）ＹＣ１０を、デバイスＡＮＤ結果コレクション[５]にコピーする。
【０１９４】
次のステップＳ１４８では、先ず、第１引数の有向線分コレクション[２]の要素である有向線分「Ｘ２２２→Ｍ３」は、第２引数の有向線分コレクション[２]に存在するので、同部１７は、ステップＳ１４９に於いて、有向線分「Ｘ２２２→Ｍ３」を、有向線分ＡＮＤ結果コレクション[２]にコピーする。コピーに際しては、同部１７は、コピーしようとしている有向線分の依存元デバイスが存在するデバイスＡＮＤ結果コレクションの深さに基づいて、有向線分ＡＮＤ結果コレクションの深さ、即ち、（デバイスＡＮＤ結果コレクションの深さ＋１）の深さへコピーする。この場合、コピーしようとしている有向線分「Ｘ２２２→Ｍ３」の依存元デバイスＸ２２２はデバイスＡＮＤ結果コレクション[１]に存在するので、同部１７は、有向線分「Ｘ２２２→Ｍ３」を有向線分ＡＮＤ結果コレクション[２]へコピーする。
【０１９５】
次に、第１引数の有向線分コレクション[３]の要素である有向線分「Ｍ３→Ｍ４」は、第２引数の有向線分コレクション[３]に存在するので、同部１７は、ステップＳ１４９に於いて、有向線分「Ｍ３→Ｍ４」を、有向線分ＡＮＤ結果コレクション[３]にコピーする。
【０１９６】
次に、第１引数の有向線分コレクション[３]の要素である有向線分「Ｘ２２３→Ｍ５」は、第２引数の有向線分コレクション[４]に存在するので、同部１７は、ステップＳ１４９に於いて、有向線分「Ｘ２２３→Ｍ５」を、有向線分ＡＮＤ結果コレクション[３]にコピーする。
【０１９７】
次に、第１引数の有向線分コレクション[３]の要素である有向線分「Ｘ２２３→Ｍ６」は、第２引数の有向線分コレクション[４]に存在するので、同部１７は、ステップＳ１４９に於いて、有向線分「Ｘ２２３→Ｍ６」を、有向線分ＡＮＤ結果コレクション[３]にコピーする。
【０１９８】
次に、第１引数の有向線分コレクション[４]の要素である有向線分「Ｍ４→Ｍ７」は、第２引数の有向線分コレクション[４]に存在するので、同部１７は、ステップＳ１４９に於いて、有向線分「Ｍ４→Ｍ７」を、有向線分ＡＮＤ結果コレクション[４]にコピーする。
【０１９９】
次に、第１引数の有向線分コレクション[４]の要素である有向線分「Ｍ４→Ｍ８」は、第２引数の有向線分コレクションの全ての深さに存在しないので、同部１７は、コピー処理を行わない。
【０２００】
次に、第１引数の有向線分コレクション[４]の要素である有向線分「Ｍ５→Ｍ７」は、第２引数の有向線分コレクション[４]に存在するので、同部１７は、ステップＳ１４９に於いて、有向線分「Ｍ５→Ｍ７」を、有向線分ＡＮＤ結果コレクション[４]にコピーする。
【０２０１】
次に、第１引数の有向線分コレクション[４]の要素である有向線分「Ｍ５→Ｍ８」は、第２引数の有向線分コレクションの全ての深さに存在しないので、同部１７は、コピー処理を行わない。
【０２０２】
次に、第１引数の有向線分コレクション[４]の要素である有向線分「Ｍ６→Ｄ５」は、第２引数の有向線分コレクションの全ての深さに存在しないので、同部１７は、コピー処理を行わない。
【０２０３】
次に、第１引数の有向線分コレクション[４]の要素である有向線分「Ｍ６→ＹＣ１０」は、第２引数の有向線分コレクション[５]に存在するので、同部１７は、ステップＳ１４９に於いて、有向線分「Ｍ６→ＹＣ１０」を、有向線分ＡＮＤ結果コレクション[４]にコピーする。
【０２０４】
次に、第１引数の有向線分コレクション[５]の要素である有向線分「Ｍ７→ＹＣ１０」は、第２引数の有向線分コレクション[５]に存在するので、同部１７は、ステップＳ１４９に於いて、有向線分「Ｍ７→ＹＣ１０」を、有向線分ＡＮＤ結果コレクション[５]にコピーする。
【０２０５】
以上の処理により得られたデバイスコレクション[１]〜[５]及び有向線分コレクション[２]〜[５]に基づいて有向グラフを描画すると、図３８に示される結果となる。
【０２０６】
有向線分は、あるデバイスから別のデバイスへの依存関係を示すものであり、デバイスと有向線分とは互いに密接に関連しているが、この様に、ＡＮＤ処理実行部１７が、先ずデバイスコレクションの共通要素の抽出（論理積）を処理してから、その結果に基づいて有向線分コレクションの共通要素の抽出（論理積）を処理することによって、有向グラフ同士を矛盾無く論理積ＡＮＤ演算することが可能となる。
【０２０７】
尚、有向グラフ同士の論理積ＡＮＤ演算は、その有向グラフの何れか又はその両方が前向き依存関係であるか、それとも後向き依存関係であるかを、問わない。
【０２０８】
図２９の式番号Ｓ０１６は、図２３のＡＮＤ処理実行部１７がデバイス依存関係有向グラフ同士の論理積の処理を実施するためのコマンドを、図２のＡＮＤ処理実行部１７がクロスリファレンス同士の論理積の処理を実施するためのコマンドと同じである、解析コマンドＡＮＤで以って指定する例を示している。これに代えて、仮に、それぞれを別のコマンドで定義して（例えば、前者をＶＡＲ_ＦＷＤ_ＢＷＤ_ＡＮＤ、後者をＶＡＲ_ＲＥＦ_ＡＮＤと定義する。）、使い分ける実施の形態に於いても、そこで用いられる技術は本実施の形態で既述した技術と同じである。
【０２０９】
又、本実施の形態の処理方法を用いて図２９の式番号Ｓ０１７を処理する場合には、その結果は図３８の下部に示される様になる。第１引数で指定された有向グラフの深さが結果に反映されるので、式番号Ｓ０１６の結果と式番号Ｓ０１７の結果とを比べると、要素デバイス及び要素有向線分が属しているコレクションの深さが異なってはいるが、デバイス依存関係有向グラフの構造は共に同じであることがわかる。
【０２１０】
尚、デバイス依存関係有向グラフの構造のみならず、要素デバイス及び要素有向線分が属しているコレクションの深さまでも同じにするための処理を、本実施の形態の出力結果に対して更に追加的に実施することが可能であるが、それは本発明の主旨から外れるので、その記載を省略する。
【０２１１】
＜実施の形態５の効果＞
１）ラダープログラムに於けるデバイスの依存関係の有向グラフ同士の論理演算（論理積ＡＮＤ処理）を可能としたことにより、所望のデバイス依存関係有向グラフを抽出することが出来、プログラム解析に係る作業を省力化することが出来る。
【０２１２】
２）クロスリファレンス同士の論理積を実施するためのコマンドと、デバイス依存関係有向グラフ同士の論理積を実施するためのコマンドとを、同じ解析コマンドＡＮＤで以って指定することが可能である。仮に、それぞれを別のコマンド（例えば、前者をＶＡＲ_ＲＥＦ_ＡＮＤ、後者をＶＡＲ_ＦＷＤ_ＢＷＤ_ＡＮＤ）で定義して使い分ける実施の形態も考えられるが、解析コマンドＡＮＤの対象となるデータ種別によってコマンドを使い分ける必要性が生じる。データ種別に関わらず、論理積を実施するコマンドは解析コマンドＡＮＤと定義しておく方が、使い勝手が良い。コマンドを使い分ける場合には、ユーザは、それぞれのデータ種別に対応した論理積コマンドをヘルプ又は取扱説明書等で調べる必要性が生じるが、全てを解析コマンドＡＮＤで以って実施出来るのであれば、その必要性が無く、プログラム解析に係る作業を省力化することが出来る。
【０２１３】
（実施の形態６）
本実施の形態では、ラダープログラムから抽出したデバイス依存関係の有向グラフに存在するデバイスに関するクロスリファレンスの抽出を可能にする技術について記載する。
【０２１４】
解析コマンドＶＡＲ_ＲＥＦは、既述した通り、変数（デバイス）のクロスリファレンスを抽出するためのコマンドであるが、図２９の式番号Ｓ０１８では、解析対象となるデバイス依存関係有向グラフを指定する式番号が解析対象セルに指定され、クロスリファレンス抽出の条件となる変数（デバイス）が解析条件セルに指定されている例を示している。式番号Ｓ０１８では、解析条件セルに変数（デバイス）が指定されていないが、これは全てのデバイスを指定する例を示している。
【０２１５】
ここで、図３９は、図２３の変数使用一覧抽出処理実行部１２が実行する解析コマンドＶＡＲ_ＲＥＦの処理フローを示すフローチャートである。
【０２１６】
先ず、変数使用一覧抽出処理実行部１２は、ステップＳ１５２に於いて、解析対象となるデータ種別がデバイス依存関係有向グラフであるか否かを確認する。若し、データ種別がデバイス依存関係有向グラフでなければ、同部１２は、既述した図１０の処理フローを行う。
【０２１７】
他方、解析対処セルで指定された式番号が、デバイス依存関係有向グラフからのクロスリファレンスの抽出を指定する場合には、同部１２は、前準備として、空の本結果コレクションを生成する（ステップＳ１５３）。
【０２１８】
次に、変数使用一覧抽出処理実行部１２は、デバイス依存関係有向グラフの有向線分コレクションの各要素から、クロスリファレンス情報を抽出する処理を行う（ステップＳ１５４）。尚、この処理を行うためには、図２３の変数依存関係抽出処理実行部１３が解析コマンドＶＡＲ_ＦＷＤ又はＶＡＲ_ＢＷＤに基づきデバイス依存関係有向グラフを抽出する処理を実行する際に、有向線分のデータ構造として、図３１により示されるデータを保持する様にしておく必要性がある。
【０２１９】
変数使用一覧抽出処理実行部１２が図２９の式番号Ｓ０１８を図３９に示す処理フローに基づいて処理を行うことにより、図３１で示された式番号Ｓ０１１のデバイス依存関係有向グラフのデータから、図４０の結果が得られる。この点の処理を以下に記載する。
【０２２０】
式番号Ｓ０１８では解析条件が空欄であり、全デバイスを抽出対象としていることから、変数使用一覧抽出処理実行部１２は、ステップＳ１５５に於いては当然に「ＹＥＳ」と判断し、次のステップＳ１５６に於いても、有向線分コレクション[２]の要素有向線分の依存元デバイスＸ２２２は、本結果コレクション（この時点では空。）に存在しないと判断するので、ステップＳ１５７に於いて、「ＰＯＵ名＝ＭＡＩＮ，ステップ番号＝４，命令＝ＬＤ」の情報と共に、依存元デバイスＸ２２２を本結果コレクションに追加する。
【０２２１】
次のステップＳ１５８では当然に「ＹＥＳ」と判断され、ステップＳ１５９に於いて、有向線分コレクション[２]の要素有向線分の依存先デバイスＭ３は、本結果コレクションに存在しないので、ステップＳ１６０に於いて、同部１２は、「ＰＯＵ名＝ＭＡＩＮ，ステップ番号＝５，命令＝ＳＥＴ」の情報と共に、依存先デバイスＭ３を本結果コレクションに追加する。
【０２２２】
ステップＳ１５６に於いて、次の有向線分コレクション[３]の要素有向線分の依存元デバイスＭ３は、本結果コレクションに存在しない（同じ変数（デバイス）Ｍ３は既に存在しているが、ＰＯＵ名，ステップ番号，及び命令まで全て同じの変数（デバイス）Ｍ３は存在しない。）ので、ステップＳ１５７に於いて、同部１２は、「ＰＯＵ＝ＭＡＩＮ，ステップ番号＝６，命令＝ＬＤ」の情報と共に、依存元デバイスＭ３を本結果コレクション追加する。
【０２２３】
ステップＳ１５９に於いて、有向線分コレクション[３]の要素有向線分の依存先デバイスＭ４は、本結果コレクションに存在しないので、ステップＳ１６０に於いて、同部１２は、「ＰＯＵ名＝ＭＡＩＮ，ステップ番号＝７，命令＝ＲＳＴ」の情報と共に、依存先デバイスＭ４を本結果コレクションに追加する。
【０２２４】
ステップＳ１５６に於いて、次の有向線分コレクション[４]の１つ目の要素有向線分の依存元デバイスＭ４は、本結果コレクションに存在しない（同じ変数（デバイス）Ｍ４は既に存在しているが、ＰＯＵ名，ステップ番号，及び命令まで全て同じの変数（デバイス）Ｍ４は存在しない。）ので、ステップＳ１５７に於いて、同部１２は、「ＰＯＵ＝ＳＵＢ，ステップ番号＝０，命令＝ＬＤＩ』の情報と共に、依存元デバイスＭ４を本結果コレクションに追加する。
【０２２５】
ステップＳ１５９に於いて、有向線分コレクション[４]の１つ目の要素有向線分の依存先デバイスＭ７は、本結果コレクションに存在しないので、ステップＳ１６０に於いて、同部１２は、「ＰＯＵ＝ＳＵＢ，ステップ番号＝２，命令＝ＯＵＴ」の情報と共に、依存先デバイスＭ７を本結果コレクションに追加する。
【０２２６】
ステップＳ１５６に於いて、有向線分コレクション[４]の２つ目の要素有向線分の依存元デバイスＭ４は、本結果コレクションに存在する（ＰＯＵ名，ステップ番号，及び命令まで全て同じ変数（デバイス）Ｍ４が存在する。）ので、同部１２は、本結果コレクションへの追加処理を行わない。
【０２２７】
ステップＳ１５９に於いて、有向線分コレクション[４]の２つ目の要素有向線分の依存先デバイスＭ８は、本結果コレクションに存在しないので、ステップＳ１６０に於いて、同部１２は、「ＰＯＵ名＝ＳＵＢ，ステップ番号＝３，命令＝ＯＵＴ」の情報と共に、存先デバイスＭ８を本結果コレクションに追加する。
【０２２８】
ステップＳ１５６に於いて、次に有向線分コレクション[５]の要素有向線分の依存元デバイスＭ７は、本結果コレクションに存在しない（確かに同じ変数（デバイス）Ｍ７は存在するが、ＰＯＵ名，ステップ番号，及び命令の全てが同じ変数（デバイス）Ｍ７は存在しない。）ので、ステップＳ１５７に於いて、同部１２は、「ＰＯＵ名＝ＳＵＢ，ステップ番号＝８，命令＝ＡＮＤ」の情報と共に、依存元デバイスＭ７を本結果コレクションに追加する。
【０２２９】
ステップＳ１５９に於いて、有向線分コレクション[５]の要素有向線分の依存先デバイスＹＣ１０は、本結果コレクションに存在しないので、ステップＳ１６０に於いて、同部１２は、「ＰＯＵ名＝ＳＵＢ，ステップ番号＝９，命令＝ＯＵＴ」の情報と共に、依存先デバイスＹＣ１０を本結果コレクションに追加する。
【０２３０】
最後に、ステップＳ１６２に於いて、同部１２は、変数（デバイス）をキーに本結果コレクションをソートして、ソートにより得られた結果を解析結果として出力する。その解析結果を与える信号を受信して、図２３の変数使用一覧表示部２１は図１の表示部４の画面に解析結果を表示するための表示信号を出力する。
【０２３１】
又、図２９の次の式番号Ｓ０１９も同部１２は同様に処理し（但し、図３９のステップＳ１５５及びステップＳ１５８に於いて、変数（デバイス）Ｍのみが対象として抽出される。）、その結果、図４１に示される結果を得る。
【０２３２】
＜実施の形態６の効果＞
１）指定した変数（デバイス）に関して依存関係のある変数（デバイス）のクロスリファレンスを抽出することが可能となり、所望のクロスリファレンスを抽出することが出来る。
【０２３３】
２）これと同じことは、デバイス依存関係の有向グラフを抽出する際に指定したラダープログラムと、そのラダープログラムから抽出したデバイス依存関係の有向グラフに存在するデバイスとを、別のクロスリファレンスのコマンド式に対して、一々、ユーザが手動で入力して、解析コマンドＶＡＲ_ＲＥＦ(Ｓ００８,Ｘ２２２,Ｍ３,Ｍ４,Ｍ７,Ｍ８,ＹＣ１０)の様に指定しても同じ結果が得られるが、本実施の形態によれば、その入力の手間を省くことが可能となる。
【０２３４】
（実施の形態７）
本実施の形態は、ラダープログラムに於けるサブルーチンコール（あるＰＯＵから別のＰＯＵをコールする。）の依存関係（以下「ＰＯＵコール依存関係」と言う。）の有向グラフを抽出する技術に関する。
【０２３５】
ここで、図４２は、図１のプログラム解析支援装置に於けるマイクロプロセッサ２に於ける、本実施の形態に係る機能部分を示すソフトウェア構成図である。図４２と図２３とを比較すると、図４２の機能部構成に於いては、解析条件実行部１１は、ＰＯＵコール依存関係の有向グラフの抽出処理を実行するためのＰＯＵ依存関係抽出処理実行部１５を更に備えており、解析結果表示部２０は、更に、ＰＯＵ一覧表示部２３と、ＰＯＵコール依存関係有向グラフ結果を表示するためのＰＯＵ依存関係表示部２４とを備えている。
【０２３６】
先ず、ラダープログラムに於けるＰＯＵコール依存関係を、図４３を用いて、以下に記載する。
【０２３７】
ＰＯＵコールは、ＣＡＬＬ命令を使用し、コールする先のＰＯＵのプログラムの先頭に記述されたプログラムポインタはＣＡＬＬ命令の引数に指定される。例えば、プログラムＭＡＩＮ中には、プログラムポインタＰ１０をコールする記述が成されており、プログラムポインタＰ１０がプログラムの先頭に記述された、ＰＯＵ名がＰ１０であるＰＯＵがコールされる。この様に、図４３は、プログラムＭＡＩＮとプログラムＳＵＢ１，ＳＵＢ２とを除いて、その他のプログラムにはプログラムポインタと同じＰＯＵ名が付与された例を示すと共に、プログラムＭＡＩＮはスキャン実行を設定し、プログラムＳＵＢ１及びＳＵＢ２はスキャン実行又は周期実行又は初期実行を設定し、プログラムポインタと同じＰＯＵ名を付与されたその他のプログラムは待機実行を設定した例を、示している。尚、図４３は、各ＰＯＵのプログラム記述に於いて、コールに関連する部分だけを抜き出して図示しており、コールに関連しない部分のラダーは省略されている。
【０２３８】
次に、ラダープログラムに於けるＰＯＵコール依存関係の有向グラフを抽出する技術について記載する。
【０２３９】
ここで、図４４は、ユーザが図１の入力部５を用いてプログラム解析条件を入力するために表示部４の画面上に表示された例を示す図であり、既述した図７及び図２９に引き続く図である。
【０２４０】
解析コマンドＰＯＵ_ＦＷＤは、指定されたＰＯＵがコールするＰＯＵを（更には、そのＰＯＵがコールするＰＯＵ…を再帰的に）抽出し、その依存関係を示す有向グラフ（ＰＯＵコール前向き依存関係の有向グラフ）を得るためのコマンドである。ユーザは、解析コマンドＰＯＵ_ＦＷＤに対しては、解析対象となるプログラム範囲を指定する式番号を解析対象セルに指定し、ＰＯＵコール前向き依存関係有向グラフの起点となるＰＯＵを解析条件セルに指定する。
【０２４１】
図４４の式番号Ｓ０２０に於いては、解析コマンドＰＯＵ_ＲＥＡＤの解析対象セルにプログラム（ＰＯＵ）は指定されていないが、これは、プログラムを構成する全ＰＯＵの読み込みを指定する例を示している。ここでは、図４３に示された全てのプログラムが読み込まれ、その結果として、図４４には、読み込んだ数２１が、結果件数のセルに表示されている例が、示されている。
【０２４２】
図４４の式番号Ｓ０２１は、式番号Ｓ０２０の実行結果として各部１４，２３により出力されたコレクションに含まれる要素ＰＯＵ、即ち、プログラムを構成するＰＯＵ全体に於ける、プログラムＭＡＩＮからのＰＯＵコール前向き依存関係の有向グラフの抽出を指定する例を示しており、図４２のＰＯＵ依存関係抽出処理実行部１５は、当該式番号Ｓ０２１の解析結果として、ＰＯＵコール前向き依存関係の有向グラフのデータをＰＯＵ依存関係表示部２４へ出力し、同部２４は、当該有向グラフの描画に必要な表示データを、図１の表示部４へ出力する。
【０２４３】
次に、指定されたＰＯＵからのＰＯＵコール前向き依存関係の有向グラフを、指定されたラダープログラムから抽出する技術について、図４２のＰＯＵ依存関係抽出処理実行部１５が実行する解析コマンドＰＯＵ_ＦＷＤの処理フローを、図４５に示す。図４５に於ける処理の流れ及び図４６に於けるデータ構造は、デバイス依存関係有向グラフを抽出する解析コマンドＶＡＲ_ＦＷＤの場合に類似している。
【０２４４】
ＰＯＵ依存関係抽出処理実行部１５が図４４の式番号Ｓ０２１を図４５に示される処理フローに従って処理すると、図４６に示される結果が得られる。以下、この点を詳述する。
【０２４５】
ステップＳ１７０に於いて、ＰＯＵ依存関係抽出処理実行部１５は、ＰＯＵコレクション[１]の要素ＰＯＵであるプログラムＭＡＩＮの中でコールされているプログラムポインタＰ１０と同じ名のＰＯＵが、第１引数のＰＯＵコレクションに存在するので、同ＰＯＵコレクションより、ＭＡＩＮがコールする他のＰＯＵであるＰ１０を抽出する。
【０２４６】
ステップＳ１７２に於いて、同部１５は、プログラムＭＡＩＮから他のＰＯＵであるＰ１０への有向線分を、有向線分コレクション[２]に追加する。この際の有向線分のデータ構造としては、依存元ＰＯＵと依存先ＰＯＵとが保持されておれば十分である。但し、後述する他の実施の形態の場合を鑑みるときには、有向線分のデータ構造にステップ番号を合わせて保持しておくことも可能である。
【０２４７】
ステップＳ１７３に於いては、Ｐ１０はＰＯＵコレクション[１]〜[２]には存在しないので、同部１５は「ＮＯ」と判断し、ステップＳ１７４に於いて、同部１５は、Ｐ１０をＰＯＵコレクション[２]に追加する。
【０２４８】
本例では、プログラムＭＡＩＮからコールされて抽出されるＰＯＵは、プログラムＰ１０だけであるので、ステップＳ１７５は実行されない。
【０２４９】
ステップＳ１７６に於いて、同部１５は、ＰＯＵコレクション[１]の次の要素ＰＯＵデバイスに対して処理しようとするが、本例では、ＰＯＵコレクション[１]にはプログラムＭＡＩＮ以外の要素は存在しないので、同部１５はステップＳ１７７に移行し、「ＹＥＳ」と判定する結果、次のステップＳ１７８に於いて、同部１５は、変数ｄを１だけインクリメントする。
【０２５０】
インクリメント処理後のステップＳ１７０に於いて、ＰＯＵコレクション[２]の要素ＰＯＵであるプログラムＰ１０の中でコールされているプログラムＰ１１及びＰ１２が、第１引数のＰＯＵコレクション内に存在するので、同部１５は、プログラムＰ１１及びＰ１２を第1引数のＰＯＵコレクションより抽出する。
【０２５１】
ステップＳ１７２に於いて、同部１５は、プログラムＰ１０からＰ１１への有向線分を、有向線分コレクション[２]に追加する。
【０２５２】
ステップＳ１７３に於いて、プログラムＰ１１はＰＯＵコレクション[１]〜[３]に存在しないので、ステップＳ１７４に於いて、同部１５は、Ｐ１１をＰＯＵコレクション[３]内に追加する。
【０２５３】
同部１５は、抽出した次のＰＯＵであるＰ１２を処理する（ステップＳ１７６）。
【０２５４】
ステップＳ１７２に於いて、同部１５は、Ｐ１０からＰ１２への有向線分を、有向線分コレクション[２]に追加する。
【０２５５】
ステップＳ１７３に於いて、プログラムＰ１２はＰＯＵコレクション[１]〜[３]に存在しないので、ステップＳ１７４に於いて、同部１５は、Ｐ１２をＰＯＵコレクション[３]内に追加する。
【０２５６】
同部１５は、ステップＳ１７６に於いて、ＰＯＵコレクション[２]の次の要素ＰＯＵに対して処理しようとするが、ＰＯＵコレクション[２]にはＰ１０以外の要素ＰＯＵが存在しないので、同部１５はステップＳ１７７に移行し、「ＹＥＳ」と判定する結果、次のステップＳ１７８に於いて、同部１５は、変数ｄを１だけインクリメントする。
【０２５７】
インクリメント処理に引き続くステップＳ１７０に於いて、ＰＯＵコレクション[３]の要素ＰＯＵであるＰ１１のプログラムの中でコールされているプログラムＰ３５及びＰ３６が、第１引数のＰＯＵコレクション内に存在するので、同部１５は、Ｐ３５及びＰ３６を、第１引数のＰＯＵコレクションより抽出する。
【０２５８】
ステップＳ１７２に於いて、同部１５は、Ｐ１１からＰ３５への有向線分を、有向線分コレクション[４]に追加する。
【０２５９】
ステップＳ１７３に於いて、Ｐ３５はＰＯＵコレクション[１]〜[４]に存在しないので、ステップＳ１７４に於いて、同部１５は、Ｐ３５をＰＯＵコレクション[４]に追加する。
【０２６０】
同部１５は、抽出した次のＰＯＵであるＰ３６を処理する（ステップＳ１７５）。
【０２６１】
ステップＳ１７２に於いて、同部１５は、Ｐ１１からＰ３６への有向線分を、有向線分コレクション[４]に追加する。
【０２６２】
ステップＳ１７３に於いて、Ｐ３６はＰＯＵコレクション[１]〜[４]に存在しないので、ステップＳ１７４に於いて、同部１５は、Ｐ３６をＰＯＵコレクション[４]に追加する。
【０２６３】
ステップＳ１７６に於いて、同部１５は、ＰＯＵコレクション[３]の次の要素ＰＯＵデバイスであるＰ１２を処理する。
【０２６４】
先ず、ステップＳ１７０に於いて、同部１５は、Ｐ１２のプログラムの中でコールされているＰ３７及びＰ３８が、第１引数のＰＯＵコレクションに存在するので、Ｐ３７及びＰ３８を抽出する。
【０２６５】
ステップＳ１７２に於いて、同部１５は、Ｐ１２からＰ３７への有向線分を、有向線分コレクション[４]に追加する。
【０２６６】
ステップＳ１７３に於いて、Ｐ３７はＰＯＵコレクション[１]〜[４]に存在しないので、ステップＳ１７４に於いて、同部１５は、Ｐ３７をＰＯＵコレクション[４]に追加する。
【０２６７】
同部１５は、抽出した次のＰＯＵであるＰ３８を処理する（ステップＳ１７５）。
【０２６８】
ステップＳ１７２に於いて、同部１５は、Ｐ１２からＰ３８への有向線分を、有向線分コレクション[４]に追加する。
【０２６９】
ステップＳ１７３に於いて、Ｐ３８はＰＯＵコレクション[１]〜[４]に存在しないので、ステップＳ１７４に於いて、同部１５は、Ｐ３８をＰＯＵコレクション[４]に追加する。
【０２７０】
次のステップＳ１７５〜Ｓ１７８を経て、ステップＳ１７０に於いて、同部１５は、ＰＯＵコレクション[４]の要素ＰＯＵであるＰ３５のプログラムの中でコールされているＰ３９が、第１引数のＰＯＵコレクションに存在するので、Ｐ３９を抽出する。
【０２７１】
ステップＳ１７２に於いて、同部１５は、Ｐ３５からＰ３９への有向線分を、有向線分コレクション[５]に追加する。
【０２７２】
ステップＳ１７３に於いて、Ｐ３９はＰＯＵコレクション[１]〜[５]に存在しないので、ステップＳ１７４に於いて、同部１５は、Ｐ３９をＰＯＵコレクション[５]に追加する。
【０２７３】
ステップＳ１７５に於いて、抽出されたＰＯＵはＰ３９だけである。同部１５は、ステップＳ１７６へ移行する。
【０２７４】
ステップＳ１７０に於いて、同部１５は、ＰＯＵコレクション[４]の次の要素ＰＯＵであるＰ３６を処理しようとするが、Ｐ３６のプログラムの中で、他のＰＯＵはコールされてはいない。
【０２７５】
ステップＳ１７０に於いて、同部１５は、ＰＯＵコレクション[４]の次の要素ＰＯＵであるＰ３７を処理しようとするが、Ｐ３７のプログラムの中で、他のＰＯＵはコールされてはいない。
【０２７６】
ステップＳ１７０に於いて、同部１５は、ＰＯＵコレクション[４]の次の要素ＰＯＵであるＰ３８を処理しようとするが、Ｐ３８のプログラムの中で、他のＰＯＵはコールされてはいない。
【０２７７】
ステップＳ１７７及びステップＳ１７８を経て、同部１５は、ステップＳ１７０に於いて、ＰＯＵコレクション[５]の要素ＰＯＵであるＰ３９を処理しようとするが、Ｐ３９のプログラムの中で他のＰＯＵはコールされていないので、同部１５は、ステップＳ１７７に於いて「ＮＯ」と判断して、ステップＳ１７９へ移行し、ＰＯＵコール依存関係有向グラフ解析結果を出力する。
【０２７８】
同様に、ＰＯＵ依存関係抽出処理実行部１５が図４４の式番号Ｓ０２２を処理すると、プログラムＳＵＢ１を起点としたＰＯＵコール前向き依存関係有向グラフとして、図４７に示す結果が得られる。
【０２７９】
＜実施の形態７の効果＞
ラダープログラムを解析対象としたＰＯＵコールの前向き依存関係の有向グラフの抽出を可能としたことにより、プログラム解析に係る作業を省力化することが出来る。
【０２８０】
（実施の形態８）
解析コマンドＰＯＵ_ＢＷＤは、ユーザが指定したＰＯＵをコールするＰＯＵを（更には、そのＰＯＵをコールするＰＯＵを、…を再帰的に）抽出し、その依存関係を示す有向グラフ（ＰＯＵコール後向き依存関係の有向グラフ）を得るためのコマンドである。解析コマンドＰＯＵ_ＢＷＤに対しては、ユーザは、解析対象となるプログラム範囲を指定する式番号を解析対象セルに指定し、ＰＯＵコール後向き依存関係有向グラフの起点となるＰＯＵを解析条件セルに指定する。
【０２８１】
図４４の式番号Ｓ０２５は、式番号Ｓ０２０の結果として出力されたＰＯＵコレクションに含まれる要素ＰＯＵ、即ち、プログラムを構成するＰＯＵ全体に於ける、Ｐ３９からのＰＯＵコール後向き依存関係の有向グラフの抽出を指定する例を示しており、その解析結果として、有向グラフの描画に必要なデータが出力される。
【０２８２】
ここで、図４８は、解析コマンドＰＯＵ_ＢＷＤの処理フローを示すフローチャートである。図４８に於ける処理の流れ及びデータ構造は、デバイス依存関係有向グラフを抽出する解析コマンドＶＡＲ_ＢＷＤの場合に類似している。
【０２８３】
図４２のＰＯＵ依存関係抽出処理実行部１５が図４４の式番号Ｓ０２５を図４８に示すフローに従って処理すると、図４９に示す結果が得られる。この点を以下に詳述する。
【０２８４】
ステップＳ１８９に於いて、ＰＯＵ依存関係抽出処理実行部１５は、ＰＯＵコレクション[１]の要素ＰＯＵであるＰ３９をコールしているか否かを、第１引数のＰＯＵコレクションの各プログラムより確認し、その結果、要素ＰＯＵのＰ１１，Ｐ２３，及びＰ２８を第１引数のＰＯＵコレクションより抽出する。
【０２８５】
ステップＳ１９１に於いて、同部１５は、Ｐ１１からＰ３９への有向線分を、有向線分コレクション[２]に追加する。この際の有向線分のデータ構造としては、依存元ＰＯＵと依存先ＰＯＵとが保持されておれば十分である。但し、後述の実施の形態を鑑みて、有向線分のデータ構造にステップ番号を合わせて保持しておくことも可能である。
【０２８６】
ステップＳ１９２に於いて、Ｐ１１はＰＯＵコレクション[１]〜[２]に存在しないので、ステップＳ１９３に於いて、同部１５は、Ｐ１１をＰＯＵコレクション[２]に追加する。
【０２８７】
次のステップＳ１９４に於いて、同部１５は、抽出した次のＰＯＵであるＰ２３を処理する。
【０２８８】
ステップＳ１９１に於いて、同部１５は、Ｐ２３からＰ３９への有向線分を、有向線分コレクション[２]に追加する。
【０２８９】
ステップＳ１９２に於いて、Ｐ２３はＰＯＵコレクション[１]〜[２]に存在しないので、ステップＳ１９３に於いて、同部１５は、Ｐ２３をＰＯＵコレクション[２]に追加する。
【０２９０】
次のステップＳ１９４に於いて、同部１５は、抽出した次のＰＯＵであるＰ２８を処理する。
【０２９１】
ステップＳ１９１に於いて、同部１５は、Ｐ２８からＰ３９への有向線分を、有向線分コレクション[２]に追加する。
【０２９２】
ステップＳ１９２に於いて、Ｐ２８はＰＯＵコレクション[１]〜[２]に存在しないので、ステップＳ１９３に於いて、同部１５は、Ｐ２８をＰＯＵコレクション[２]に追加する。
【０２９３】
ステップＳ１９５に於いて、同部１５は、ＰＯＵコレクション[１]の次の要素ＰＯＵに対して処理しようとするが、ＰＯＵコレクション[１]にはＰ３９以外の要素ＰＯＵは存在しないので、ステップＳ１９６及びＳ１９７を経る。
【０２９４】
ステップＳ１８９に於いて、ＰＯＵ依存関係抽出処理実行部１５は、ＰＯＵコレクション[２]の要素ＰＯＵであるＰ１１をコールしているか否かを、第１引数のＰＯＵコレクションの各プログラムより確認し、その結果、要素ＰＯＵのＰ１０を第１引数のＰＯＵコレクションより抽出する。
【０２９５】
ステップＳ１９１に於いて、同部１５は、Ｐ１０からＰ１１への有向線分を、有向線分コレクション[３]に追加する。
【０２９６】
ステップＳ１９２に於いて、Ｐ１０はＰＯＵコレクション[１]〜[３]に存在しないので、ステップＳ１９３に於いて、同部１５は、Ｐ１０をＰＯＵコレクション[３]に追加する。
【０２９７】
次のステップＳ１９４に於いて、抽出されたＰＯＵはＰ１０だけであり、同部１５は、ＰＯＵコレクション[２]の次の要素ＰＯＵであるＰ２３を処理するべく、ステップＳ１８９に移行する。
【０２９８】
ステップＳ１８９に於いて、ＰＯＵ依存関係抽出処理実行部１５は、ＰＯＵコレクション[２]の要素ＰＯＵであるＰ２３をコールしているか否かを、第１引数のＰＯＵコレクションの各プログラムより確認し、その結果、要素ＰＯＵのＰ２０を第１引数のＰＯＵコレクションより抽出する。
【０２９９】
ステップＳ１９１に於いて、同部１５は、Ｐ２０からＰ２３への有向線分を、有向線分コレクション[３]に追加する。
【０３００】
ステップＳ１９２に於いて、Ｐ２０はＰＯＵコレクション[１]〜[３]に存在しないので、ステップＳ１９３に於いて、同部１５は、Ｐ２０をＰＯＵコレクション[３]に追加する。
【０３０１】
次のステップＳ１９４に於いて、抽出されたＰＯＵはＰ２０だけであり、同部１５は、ＰＯＵコレクション[２]の残りの要素ＰＯＵであるＰ２８を処理するべく、ステップＳ１８９に移行する。
【０３０２】
ステップＳ１８９に於いて、ＰＯＵ依存関係抽出処理実行部１５は、ＰＯＵコレクション[２]の要素ＰＯＵであるＰ２８をコールしているか否かを、第１引数のＰＯＵコレクションの各プログラムより確認し、その結果、要素ＰＯＵのＰ２５を第１引数のＰＯＵコレクションより抽出する。
【０３０３】
ステップＳ１９１に於いて、同部１５は、Ｐ２５からＰ２８への有向線分を、有向線分コレクション[３]に追加する。
【０３０４】
ステップＳ１９２に於いて、Ｐ２５はＰＯＵコレクション[１]〜[３]に存在しないので、ステップＳ１９３に於いて、同部１５は、Ｐ２５をＰＯＵコレクション[３]に追加する。
【０３０５】
次のステップＳ１９４に於いて、抽出されたＰＯＵはＰ２５だけであり、同部１５は、ＰＯＵコレクション[２]内の全ての要素ＰＯＵに対する処理を完了したので、ステップＳ１９５に於いて「ＹＥＳ」と判定した後、ステップＳ１９７及びＳ１８７を経て、ステップＳ１８９へ移行する。
【０３０６】
ステップＳ１８９に於いて、ＰＯＵ依存関係抽出処理実行部１５は、ＰＯＵコレクション[３]の要素ＰＯＵであるＰ１０をコールしているか否かを、第１引数のＰＯＵコレクションの各プログラムより確認し、その結果、要素ＰＯＵのＭＡＩＮを第１引数のＰＯＵコレクションより抽出する。
【０３０７】
ステップＳ１９１に於いて、同部１５は、ＭＡＩＮからＰ１０への有向線分を、有向線分コレクション[４]に追加する。
【０３０８】
ステップＳ１９２に於いて、ＭＡＩＮはＰＯＵコレクション[１]〜[４]に存在しないので、ステップＳ１９３に於いて、同部１５は、ＭＡＩＮをＰＯＵコレクション[４]に追加する。
【０３０９】
次のステップＳ１９４に於いて、抽出されたＰＯＵはＭＡＩＮだけであり、同部１５は、ＰＯＵコレクション[３]の次の要素ＰＯＵであるＰ２０を処理するべく（ステップＳ１９５）、ステップＳ１８９に移行する。
【０３１０】
ステップＳ１８９に於いて、ＰＯＵ依存関係抽出処理実行部１５は、ＰＯＵコレクション[３]の要素ＰＯＵであるＰ２０をコールしているか否かを、第１引数のＰＯＵコレクションの各プログラムより確認し、その結果、要素ＰＯＵのＳＵＢ１を第１引数のＰＯＵコレクションより抽出する。
【０３１１】
ステップＳ１９１に於いて、同部１５は、ＳＵＢ１からＰ２０への有向線分を、有向線分コレクション[４]に追加する。
【０３１２】
ステップＳ１９２に於いて、ＳＵＢ１はＰＯＵコレクション[１]〜[４]に存在しないので、ステップＳ１９３に於いて、同部１５は、ＳＵＢ１をＰＯＵコレクション[４]に追加する。
【０３１３】
次のステップＳ１９４に於いて、抽出されたＰＯＵはＳＵＢ１だけであり、同部１５は、ＰＯＵコレクション[３]の最後の要素ＰＯＵであるＰ２５を処理するべく（ステップＳ１９５）、ステップＳ１８９に移行する。
【０３１４】
ステップＳ１８９に於いて、ＰＯＵ依存関係抽出処理実行部１５は、ＰＯＵコレクション[３]の要素ＰＯＵであるＰ２５をコールしているか否かを、第１引数のＰＯＵコレクションの各プログラムより確認し、その結果、要素ＰＯＵのＳＵＢ２を第１引数のＰＯＵコレクションより抽出する。
【０３１５】
ステップＳ１９１に於いて、同部１５は、ＳＵＢ２からＰ２５への有向線分を、有向線分コレクション[４]に追加する。
【０３１６】
ステップＳ１９２に於いて、ＳＵＢ２はＰＯＵコレクション[１]〜[４]に存在しないので、ステップＳ１９３に於いて、同部１５は、ＳＵＢ２をＰＯＵコレクション[４]に追加する。
【０３１７】
次のステップＳ１９４に於いて、抽出されたＰＯＵはＳＵＢ２だけであり、同部１５は、ＰＯＵコレクション[３]内の全ての要素ＰＯＵに対する処理を完了したので、ステップＳ１９５に於いて「ＹＥＳ」と判定した後、ステップＳ１９７及びＳ１８７を経て、ステップＳ１８９へ再び移行する。
【０３１８】
ステップＳ１８９に於いて、ＰＯＵ依存関係抽出処理実行部１５は、ＰＯＵコレクション[４]の要素ＰＯＵであるＭＡＩＮ，ＳＵＢ１，又はＳＵ２をコールしているか否かを、第１引数のＰＯＵコレクションの各プログラムより確認するが、他の何れのプログラムもＭＡＩＮ，ＳＵＢ１，又はＳＵ２をコールしていないので、ステップＳ１９６へ移行し、ステップＳ１９６に於いて「ＮＯ」と判定する結果、ステップＳ１９８へ移行する。
【０３１９】
ステップＳ１９８に於いて、同部１５は、要素ＰＯＵが存在するＰＯＵコレクション及び有向線分コレクションの深さを逆転させる処理を行う。その際、特に注意すべき点は、有向線分コレクションの番号を逆転させた際には、全ての有向線分の要素に対して、属するべき深さへと移動させること（但し、本例では該当するものがない。）である。
【０３２０】
＜実施の形態８の効果＞
ラダープログラムを解析対象としたＰＯＵコールの後向き依存関係の有向グラフの抽出を可能にしたことにより、プログラム解析に係る作業を省力化することが出来る。
【０３２１】
（実施の形態９）
本実施の形態は、ラダープログラムに於けるＰＯＵコール依存関係の有向グラフ同士の論理演算（論理和ＯＲ処理又は論理積ＡＮＤ処理）を可能にする技術に関する。
【０３２２】
図４４の式番号Ｓ０２３は、式番号Ｓ０２１で抽出されたＰＯＵコール依存関係有向グラフ抽出結果と、式番号Ｓ０２２で抽出された別のＰＯＵコール依存関係有向グラフ抽出結果との論理和の抽出を指定する例を示している。
【０３２３】
つまり、本発明は、１）クロスリファレンス同士の論理和を実施するための解析コマンドと、２）デバイス依存関係有向グラフ同士の論理和を実施するための解析コマンドと、３）ＰＯＵコール依存関係有向グラフ同士の論理和を実施するための解析コマンドとを、全て同じ解析コマンドＯＲで以って共通して指定する。
【０３２４】
ここで、図５０は、図４２のＯＲ処理実行部１８が実行する解析コマンドＯＲの処理フローを示すフローチャートであり、図５０の処理内容は、図３５に示されるデバイス依存関係有向グラフ同士の論理和を実行する処理と同じである。
【０３２５】
ＯＲ処理実行部１８が図４４の式番号Ｓ０２３を図５０に示される処理フローに従って処理を行うと、図４６の結果と図４７の結果との論理和の結果として、図５１に示す結果が得られる。
【０３２６】
式番号Ｓ０２３は、クロスリファレンス同士の論理和を実施するための解析コマンドと、デバイス依存関係有向グラフ同士の論理和を実施するためのコマンドと、ＰＯＵコール依存関係有向グラフ同士の論理和を実施するためのコマンドとを、同じ解析コマンドＯＲにより指定する例を示していたが、仮に、それぞれ別のコマンド（例えば、前者をＶＡＲ_ＲＥＦ_ＯＲ，及び、ＶＡＲ_ＦＷＤ_ＢＷＤ_ＯＲと定義し、後者をＰＯＵ_ＦＷＤ_ＢＷＤ_ＯＲと定義する。）で定義して使い分ける実施の形態に於いても、用いる技術は同じである。
【０３２７】
又、本実施の形態を用いれば、解析コマンドＰＯＵ_ＦＷＤは、解析対象（ＰＯＵコール依存関係有向グラフの起点）であるＰＯＵに対して線形な演算子となる。換言すれば、解析コマンドＰＯＵ_ＦＷＤが線形な解析コマンドとして定義される様に，ＰＯＵコール依存関係有向グラフの論理和ＯＲの処理フローは、図５０に示す様に設定されている。
【０３２８】
ここで、解析対象をＰＯＵ_ＦＷＤ関数の引数として表記し，ＯＲ演算を＋で表記することによって、解析コマンドＰＯＵ_ＦＷＤの線形性を記載すると、式番号Ｓ０２４は、次の数４に示される式により表現される。
【０３２９】
【数４】
2010095289.tif 000006
【０３３０】
従って、図４４の式番号Ｓ０２４で示される様に、解析コマンドＰＯＵ_ＦＷＤの解析対象（ＰＯＵコール依存関係有向グラフの起点）であるＰＯＵが列挙して指定されている場合に、それぞれのＰＯＵを解析対象とする解析コマンドＰＯＵ_ＦＷＤの結果をＯＲ処理して得られる結果を、式番号Ｓ０２４の結果とする様な、再帰的な処理が可能となる。解析コマンドＰＯＵ_ＢＷＤについても、同様に、再帰的な処理が可能である。
【０３３１】
これによって、一々、ユーザが式番号Ｓ０２１，Ｓ０２２，Ｓ０２３の様に３つの条件式を入力しなくとも、式番号Ｓ０２３と同じ結果が、式番号Ｓ０２４の１つで得られることとなる。
【０３３２】
又、解析対象デバイスの列挙指定の方法も、式番号Ｓ０１０で示された解析コマンドＶＡＲ_ＲＥＦと、式番号Ｓ０１４で示された解析コマンドＶＡＲ_ＦＷＤと、式番号Ｓ０２４で示された解析コマンドＰＯＵ_ＦＷＤとで、同じであり、異なる解析コマンド間での解析条件指定方法の整合性も取れていて、何等、矛盾しない。この点は、解析コマンドＰＯＵ_ＢＷＤに関しても、同様である。
【０３３３】
同様に、図４２のＡＮＤ処理実行部１７が実行する解析コマンドＡＮＤの処理フローを、図５２に示す。処理内容は、図３７に示されるデバイス依存関係有向グラフ同士の論理積のときの処理と同じである。
【０３３４】
ＡＮＤ処理実行部１７が図４４の式番号Ｓ０２６を図５９に示される処理フローに従って処理すると、図４９の結果と図５１の結果との論理積の結果として、図５３の結果が得られる。次の式番号Ｓ０２７の処理に関しても、同様の結果が得られる。
【０３３５】
＜実施の形態９の効果＞
ラダープログラムに於けるＰＯＵコールの依存関係の有向グラフ同士の論理演算（論理和ＯＲ処理）を可能としたことにより、所望のＰＯＵコール依存関係有向グラフを抽出することが出来、プログラム解析に係る作業を省力化することが出来る。
【０３３６】
又、クロスリファレンス同士の論理和を実施するためのコマンドと、デバイス依存関係有向グラフ同士の論理和を実施するためのコマンドと、ＰＯＵコール依存関係有向グラフ同士の論理和を実施するためのコマンドとを、同じ解析コマンドＯＲで以って指定することが可能である。仮に、それぞれ別のコマンド（例えば、前者をＶＡＲ_ＲＥＦ_ＯＲ及びＶＡＲ_ＦＷＤ_ＢＷＤ_ＯＲ、後者をＰＯＵ_ＦＷＤ_ＢＷＤ_ＯＲ）を定義して使い分ける実施の形態も考えられるが、解析コマンドＯＲの対象となるデータ種別によってコマンドを使い分ける必要性が生じる。データ種別に拘らず、論理和を実施する解析コマンドは解析コマンドＯＲに定義しておく方が、使い勝手が良い。解析コマンドを使い分ける場合には、ユーザは、それぞれのデータ種別に対応した論理和コマンドをヘルプ又は取扱説明書等で調べる必要性が生じるが、全てを解析コマンドＯＲで実施出来るのであれば、ユーザは、その必要性を有することが無くなり、プログラム解析に係る作業を省力化することが出来る。
【０３３７】
勿論、論理積ＡＮＤ処理についても、同様の効果がある。
【０３３８】
（実施の形態１０）
本実施の形態は、ＰＯＵコール依存関係有向グラフに存在するＰＯＵを対象として、デバイスクロスリファレンス又はデバイス依存関係有向グラフを抽出することを可能にする技術に関する。
【０３３９】
図５４の式番号Ｓ０２８は、図４４の式番号Ｓ０２１で抽出されたＰＯＵコール依存関係有向グラフに存在するＰＯＵのコレクションの抽出を指定する例を示している。
【０３４０】
つまり、本発明は、１）任意のＰＯＵの読み込みを指定して当該ＰＯＵのコレクションを出力するためのコマンドと、２）プログラムを構成する全てのＰＯＵの読み込みを指定して当該ＰＯＵのコレクションを出力するためのコマンドと、３）ＰＯＵコール依存関係有向グラフに存在するＰＯＵのコレクションを抽出するためのコマンドとを、同じ解析コマンドＰＯＵ_ＲＥＡＤによって指定する例を示している。
【０３４１】
次に、解析コマンドＰＯＵ_ＲＥＡＤによってＰＯＵコール依存関係有向グラフに存在するＰＯＵのコレクションを抽出する技術について記載する。
【０３４２】
ここで、図５４は、ユーザが図１の入力部５を用いてマイクロプロセッサ２にプログラム解析条件を入力するための表示部４の画面の例を示しており、既述した図７，図２９及び図４４の続きに該当している。
【０３４３】
又、図５５は、図４２のＰＯＵ一覧抽出処理実行部１４が実行する解析コマンドＰＯＵ_ＲＥＡＤの処理フローを示すフローチャートである。
【０３４４】
図５５の処理内容は、デバイス依存関係有向グラフからデバイスクロスリファレンスを抽出するときの解析コマンドＶＡＲ_ＲＥＦの処理（図３９参照。）に類似する。但し、デバイスの場合には、有向線分の情報を付与したデバイス要素を扱うのであるが、ＰＯＵの場合には、有向線分の情報をＰＯＵ要素に付与しない、という違いが両者間にある。
【０３４５】
図４２のＰＯＵ一覧抽出処理実行部１４が式番号Ｓ０２８を図５５に示される処理フローに従って処理すると、図４６のＰＯＵコール依存関係有向グラフから、ＭＡＩＮ，Ｐ１０，Ｐ１１，Ｐ１２，Ｐ３５，Ｐ３６，Ｐ３７，Ｐ３８及びＰ３９をＰＯＵ要素とするＰＯＵコレクションが得られる。
【０３４６】
図５４の式番号Ｓ０２９は、式番号Ｓ０２８で抽出されたＰＯＵ要素に対して、デバイスクロスリファレンスの抽出を指定する例を示している。式番号Ｓ０２９の処理に関する技術は、既に、実施の形態１に於いて記載されている通りである。
【０３４７】
これにより、ＰＯＵコール依存関係有向グラフに存在するＰＯＵを対象としたデバイスクロスリファレンスの抽出が可能となるだけでなく、解析コマンドＶＡＲ_ＲＥＦの第１引数に対して、ＰＯＵコール依存関係有向グラフから抽出されたＰＯＵ要素であるＭＡＩＮ，Ｐ１０，Ｐ１１，Ｐ１２，Ｐ３５，Ｐ３６，Ｐ３７，Ｐ３８及びＰ３９を、ユーザが一々入力する手間が省かれる。
【０３４８】
図５４の次の式番号Ｓ０３０は、式番号Ｓ０２８で抽出されたＰＯＵ要素に対して、デバイス依存関係有向グラフの抽出を指定する例を示している。式番号Ｓ０３０の処理に関する技術は、実施の形態２及び３に既に記載した通りである。
【０３４９】
これにより、ＰＯＵコール依存関係有向グラフに存在するＰＯＵ要素を対象としたデバイス依存関係有向グラフの抽出が可能となるだけでなく、解析コマンドＶＡＲ_ＦＷＤの第１引数に対して、ＰＯＵコール依存関係有向グラフから抽出されたＰＯＵ要素であるＭＡＩＮ，Ｐ１０，Ｐ１１，Ｐ１２，Ｐ３５，Ｐ３６，Ｐ３７，Ｐ３８及びＰ３９を、ユーザが一々入力する手間が省かれる。この点は、解析コマンドＶＡＲ_ＢＷＤについても同様に成り立つ。
【０３５０】
図５４の式番号Ｓ０３１の解析コマンドＶＡＲ_ＲＥＦは、式番号Ｓ０２１で抽出されたＰＯＵコール依存関係有向グラフに対して、デバイスクロスリファレンスの抽出を指定する例を示している。即ち、式番号Ｓ０３１の解析コマンドＶＡＲ_ＲＥＦは、ＰＯＵコール依存関係有向グラフに存在するＰＯＵに於けるデバイスクロスリファレンスの抽出を行うものである。
【０３５１】
図４２の変数使用一覧抽出処理実行部１２が実行する解析コマンドＶＡＲ_ＲＥＦの処理フローを、図５６に示す。図５６の処理内容は、本発明に於いて既述した図１０に示される技術と図５５に示される技術との組み合わせによって実現される。
【０３５２】
これによって、式番号Ｓ０２１に対して、式番号Ｓ０２８及びＳ０２９の様に２つの条件式をユーザが一々入力しなくとも、同じ結果が、式番号Ｓ０３１という１つの条件式の入力により得られることとなる。
【０３５３】
図５４の式番号Ｓ０３２の解析コマンドＶＡＲ_ＦＷＤは、式番号Ｓ０２１で抽出されたＰＯＵコール依存関係有向グラフに対して、デバイス依存関係有向グラフの抽出を指定する例を示している。即ち、式番号Ｓ０３２の解析コマンドＶＡＲ_ＦＷＤは、ＰＯＵコール依存関係有向グラフに存在するＰＯＵに於けるデバイス依存関係有向グラフの抽出を行うものである。
【０３５４】
図４２の変数依存関係抽出処理実行部１３が実行する解析コマンドＶＡＲ_ＦＷＤの処理フローを、図５７に示す。図５７の処理内容は、本発明に於いて既述した図３０に示される技術と図５５に示される技術との組み合わせによって実現される。
【０３５５】
これによって、式番号Ｓ０２１に対して、式番号Ｓ０２８及びＳ０３０の様に２つの条件式をユーザが一々入力しなくとも、同じ結果が、式番号Ｓ０３２という１つの条件式の入力により得られることとなる。
【０３５６】
これらの点は、解析コマンドＶＡＲ_ＢＷＤについても成り立つ。
【０３５７】
＜実施の形態１０の効果＞
ラダープログラムに於けるＰＯＵコール依存関係有向グラフに対して、デバイスクロスリファレンス又はデバイス依存関係有向グラフを抽出することが可能となる。又、ＰＯＵコール依存関係有向グラフから抽出されたＰＯＵ要素をユーザが一々入力する手間を省くことが出来る。更には、ユーザが一々２つの条件式を入力しなくとも、１つの条件式の入力により所望のデバイスクロスリファレンス又はデバイス依存関係有向グラフを得ることが出来る。
【０３５８】
これらの利点に伴い、プログラム解析に係る作業を省力化することが出来る。
【０３５９】
（実施の形態１１）
本実施の形態は、デバイスクロスリファレンス又はデバイス依存関係有向グラフに存在するＰＯＵを抽出することを可能にする技術に関する。即ち、図７１に示す様に、例えば、ユーザは、解析コマンドＰＯＵ_ＲＥＡＤとそれに引き続く解析コマンドＶＡＲ_ＲＥＦとの実行により得られたデバイスクロスリファレンスを第２引数として指定し、第１引数に解析コマンドＰＯＵ_ＲＥＡＤを指定して当該式番号を実行させることにより、再度、ＰＯＵのコレクションを得ることが出来る。この再度に得られたＰＯＵのコレクションを構成するＰＯＵ要素の数は、当初の解析コマンドＰＯＵ_ＲＥＡＤの実行により得られたＰＯＵコレクションのＰＯＵ要素よりも、より限定され得る。同様に、ユーザは、デバイス依存関係有向グラフを第２引数として指定し、第１引数に解析コマンドＰＯＵ_ＲＥＡＤを指定して当該式番号を実行させることにより、再度、ＰＯＵのコレクションを得ることが出来、この場合にも再度に得られたＰＯＵのコレクションを構成するＰＯＵ要素の数をより限定化させることが出来る。
【０３６０】
その上で、更なる新技術の展開が下記の通りに得られる。
【０３６１】
Ａ）デバイスクロスリファレンスからのＰＯＵの抽出に於いては、ユーザは、第１引数に解析対象となるＰＯＵを指定し、第２引数に解析条件となる変数（デバイス）を指定するが、第１引数に於いて指定された全てのＰＯＵに、第２引数で指定された変数（デバイス）が含まれるとは限らない。そこで、ユーザが、第１引数に於いてプログラムを構成する全ＰＯＵを指定し、第２引数で指定された変数（デバイス）のクロスリファレンスが得られたときに、それらの変数（デバイス）を使用しているＰＯＵの一覧を抽出したい場合に、本実施の形態で以下に記載される技術が用いられる。
【０３６２】
Ｂ）デバイス依存関係有向グラフからのＰＯＵの抽出に於いては、ユーザが第１引数に解析対象となるＰＯＵを指定し、第２引数に依存解析の起点となる変数（デバイス）を指定するが、第１引数で指定された全てのＰＯＵが、抽出結果のデバイス依存関係有向グラフに関係しているとは限らない。そこで、ユーザが、第１引数でプログラムを構成する全ＰＯＵを指定し、第２引数で指定された変数（デバイス）を起点としたデバイス依存関係有向グラフが得られたときに、そのデバイス依存関係有向グラフに関係しているＰＯＵの一覧を抽出したい場合に、本実施の形態で以下に記載される技術が適用される。
【０３６３】
図５４の式番号Ｓ０３４は、図４４の式番号Ｓ０２０に於いて読み出したＰＯＵのコレクション、従って、プログラムを構成する全ＰＯＵに於ける、変数（デバイス）Ｍ[０−９]及びＭ[２０−２９]のデバイスクロスリファレンスの抽出を指定する例を示す。又、図５４の式番号Ｓ０３５は、式番号Ｓ０３４の結果に存在するＰＯＵの一覧を抽出する例を示している。
【０３６４】
つまり、本発明は、１）任意のＰＯＵの読み込みを指定して当該ＰＯＵのコレクションを出力するためのコマンドと、２）プログラムを構成する全てのＰＯＵの読み込みを指定して当該ＰＯＵのコレクションを出力するためのコマンドと、３）ＰＯＵコール依存関係有向グラフに存在するＰＯＵのコレクションを抽出するためのコマンドと、４）デバイスクロスリファレンスに存在するＰＯＵのコレクションを抽出するためのコマンドとを、同じ解析コマンドＰＯＵ_ＲＥＡＤで指定する例を示している。
【０３６５】
図４２のＰＯＵ一覧抽出処理実行部１４が実行する解析コマンドＰＯＵ_ＲＥＡＤの処理フローを、図５８に示す。先ず、同部１４は、対象となるデータ種別がデバイスクロスリファレンスであるか否かを確認する。若しデバイスクロスリファレンスでなければ、同部１４は、図５５の処理フローを行う。他方、対象となるデータ種別がデバイスクロスリファレンスであれば、同部１４は、そのデバイスクロスリファレンスに存在するＰＯＵのコレクションを抽出して出力する処理を行う。
【０３６６】
簡単化のために、図５４の式番号Ｓ０３３の場合について記載すると、第１引数の式番号Ｓ００６のデバイスクロスリファレンス結果を示す図１９の画面に存在する各クロスリファレンスのプログラム名を参照すると、当該デバイスクロスリファレンスに存在するＰＯＵは、ＭＡＩＮ及びＳＵＢのみである。そこで、同部１４が図５８の処理フローに基づいて式番号Ｓ０３３を処理すると、ＭＡＩＮとＳＵＢとを要素としたＰＯＵのコレクションが得られる。
【０３６７】
図５４の式番号Ｓ０３６は、式番号Ｓ０２０で読み出したＰＯＵのコレクション、従って、プログラムを構成する全てのＰＯＵに於ける、変数（デバイス）Ｍ４０９５を起点としたデバイス依存関係有向グラフの抽出を指定する例を示しており、次の式番号Ｓ０３７は、式番号Ｓ０３６の抽出結果に存在するデバイスに関するクロスリファレンスの抽出を指定する例を示しており、次の式番号Ｓ０３８は、式番号Ｓ０３７の抽出結果に存在するＰＯＵの一覧を抽出する例を示している。これらの各式番号の処理は、既に記載した通りである。
【０３６８】
図５４の式番号Ｓ０３９は、式番号Ｓ０３６の抽出結果に関係するＰＯＵの一覧を抽出する例を示している。つまり、本発明は、１）任意のＰＯＵの読み込みを指定して当該ＰＯＵのコレクションを出力するためのコマンドと、２）プログラムを構成する全てのＰＯＵの読み込みを指定して当該ＰＯＵのコレクションを出力するためのコマンドと、３）ＰＯＵコール依存関係有向グラフに存在するＰＯＵのコレクションを抽出するためのコマンドと、４）デバイスクロスリファレンスに存在するＰＯＵのコレクションを抽出するためのコマンドと、５）デバイス依存関係有向グラフに関係するＰＯＵのコレクションを抽出するためのコマンドとを、同じ解析コマンドＰＯＵ_ＲＥＡＤで指定する例を示している。
【０３６９】
図４２のＰＯＵ一覧抽出処理実行部１４が実行する解析コマンドＰＯＵ_ＲＥＡＤの処理フローを、図５９に示す。先ず、同部１４は、対象となるデータ種別がデバイス依存関係有向グラフであるか否かを確認する。若し、データ種別がデバイス依存関係有向グラフでなければ、同部１４は、図５８の処理フローを行う。他方、対象となるデータ種別がデバイス依存関係有向グラフであれば、同部１４は、そのデバイス依存関係有向グラフに対して、図５６に示した解析コマンドＶＡＲ_ＲＥＦを適用してデバイスクロスリファレンスを抽出し、抽出されたデバイスクロスリファレンスに対して、図５８に示す解析コマンドＰＯＵ_ＲＥＡＤの処理フローを適用して、ＰＯＵのコレクションを抽出して出力する処理を行う。
【０３７０】
これによって、ユーザは、式番号Ｓ０３６に対して、式番号Ｓ０３７及びＳ０３８の様に２つの条件式を一々入力しなくとも、同じ結果を、式番号Ｓ０３９の１つの条件式の入力によって得ることが出来ることとなる。
【０３７１】
＜実施の形態１１の効果＞
抽出したデバイスクロスリファレンス又はデバイス依存関係有向グラフに存在するＰＯＵを抽出することが可能となる。
【０３７２】
又、デバイス依存関係有向グラフに存在するＰＯＵを抽出する際には、ユーザは、一々、２つの条件式を入力しなくとも、１つの条件式の入力によって結果を得ることが出来る様になる。
【０３７３】
これらの利点により、プログラム解析に係る作業を省力化することが出来る。
【０３７４】
（実施の形態１２）
本実施の形態は、異なるデータの論理演算の指定を可能にする技術に関する。例えば、デバイスクロスリファレンスとデバイス依存関係有向グラフとの論理積ＡＮＤが指定された場合には、先ず、デバイス依存関係有向グラフをデバイスクロスリファレンスに変換した上で、次に、論理積演算の処理を実行する様に、図１のマイクロプロセッサ２は、その内部処理により、指定された式番号を自動的に解釈して処理すれば良い。
【０３７５】
図５４の式番号Ｓ０４１の論理積ＡＮＤでは、第１引数Ｓ００５の出力がデバイスクロスリファレンスであり、第２引数Ｓ０１１の出力がデバイス依存関係有向グラフである。この様に、異なるデータ同士の論理演算が指定された場合には、マイクロプロセッサ２は、先ず、第１引数と同じデータ形式の内容を第２引数の出力内容から抽出した上で、その後に指定された解析コマンドの論理演算を実施する様に、プログラム解析支援装置の仕様は決められる。
【０３７６】
これによって、ユーザは、式番号Ｓ０１１に対して解析コマンドＶＡＲ_ＲＥＦを抽出する式番号Ｓ０１８を先ず入力してから、その後に、式番号Ｓ００５と式番号Ｓ０１８との論理積ＡＮＤの条件式を図５４の式番号Ｓ０４０の様に入力しなくとも、同じ結果が、式番号Ｓ０４１の１つの条件式の入力で以って得られることになる。
【０３７７】
図５４の式番号Ｓ０４２は、その第１引数及び第２引数が式番号Ｓ０４１の場合とは逆関係となる様に、指定されたものである。この場合にも、解析コマンドＡＮＤは、デバイスクロスリファレンスとデバイス依存関係有向グラフとの論理積ＡＮＤであるから、先ず、デバイス依存関係有向グラフをデバイスクロスリファレンスに変換してから、論理積演算を実行する様に、内部処理で以って自動的に解釈して処理すれば良い。即ち、式番号Ｓ０４１と式番号Ｓ０４２とでは、結果は同じである。
【０３７８】
ここで、図６０は、図４２のＡＮＤ処理実行部１７が実行する解析コマンドＡＮＤの処理フローを示すフローチャートである。ＡＮＤ処理実行部１７が図６０の処理フローに基づいて式番号Ｓ０４１を処理すれば、図６１に示す様に、変数（デバイス）Ｍ４がプログラムＭＡＩＮ及びＳＵＢの各々で使用されている解析結果を示すクロスリファレンスが得られる。
【０３７９】
＜実施の形態１２の効果＞
異なるデータ同士の論理演算の指定が可能となる。これによって、ユーザは論理演算の条件式を指定する前に、同じデータ形式に変換するための条件式を一々入力しなくとも、１つの条件式の入力で事足りることになるので、プログラム解析に係る作業を省力化することが出来る。
【０３８０】
（実施の形態１３）
これまでに、ユーザが入力部を用いてプログラム解析条件を入力するための表示部の画面の一例として、図７を示し、プログラム解析条件を自由に組み合わせたクロスリファレンスの作成を可能にする技術について記載してきた。この場合、プログラム解析条件の組み合わせに特に制約はないため、ユーザはプログラム解析条件を自由に組み合わせることが可能であるが、逆に、ユーザが所望のプログラム解析結果を得ようとすると、ユーザが自分でプログラム解析条件の組み合わせを考える必要性がある。
【０３８１】
従来のプログラム解析支援装置は、用意されている条件指定機能範囲内でのクロスリファレンスの作成しか出来なかったが、逆に、用意されているクロスリファレンスを作成する際には、ユーザは、自分でプログラム解析条件の組み合わせを考える必要性が無い。
【０３８２】
しかしながら、従来のプログラム解析支援装置と同様の方針で、ユーザが所望のプログラム解析結果を得ることを可能にしようとすると、多種多様なクロスリファレンス作成機能を用意する必要性がある。即ち、従来と同様の方針で、背景技術の欄で既述した様な構成により実現しようとすると、プログラム解析支援装置の開発者は多大な労力を要することになる。具体的には、解析条件実行部の内部構造が複雑になるという問題点がある。
【０３８３】
そこで、本実施の形態では、従来のプログラム解析支援装置と同様の方針で、多種多様なクロスリファレンス作成機能等のプログラム解析機能を用意するに際して、これまでに記載してきた本発明の構成を利用することにより、プログラム解析支援装置の開発者の労力の大幅な軽減を可能にする技術について記載する。
【０３８４】
具体例として、従来のプログラム解析支援装置と同様の方針で、ラダープログラム静的スライシング機能が、本実施の形態に係るプログラム解析支援装置に、専用プログラム解析機能として用意ないしはプログラムとして搭載されている場合が、記載される。
【０３８５】
ここで、図６２は、ラダープログラム静的スライシングのための表示部の画面の一例（ダイアログ・ボックス）を示す図である。
【０３８６】
このラダープログラム静的スライシング機能は、ユーザにより指定された解析対象範囲ＰＯＵに於けるデバイス依存関係有向グラフの抽出、及び、その有向グラフに存在する変数（デバイス）の一覧（クロスリファレンス）の抽出を、専用的ないしは専門的に提供する機能である。
【０３８７】
図６２のスライシング範囲には、ユーザが抽出したいと望むデバイス依存関係有向グラフの解析対象範囲となるＰＯＵ名称を、ユーザは入力する。ユーザが１つ以上のＰＯＵを解析対象範囲として指定したい場合には、スライシング範囲に各ＰＯＵをカンマ（,）区切りで列挙することとし、ユーザがプログラムを構成する全てのＰＯＵの読み込みを指定したい場合には、ユーザはスライシング範囲に何も入力しない、という仕様である。
【０３８８】
図６２の画面に於いて、ユーザが、前向きスライシング起点デバイスと後向きスライシング起点デバイスとの両方に、それぞれ異なる変数（デバイス）を指定すると、前向きデバイス依存関係有向グラフと後向きデバイス依存関係有向グラフとの論理積ＡＮＤを処理したデバイス依存関係有向グラフが抽出される、という仕様である。
【０３８９】
画面の前向きスライシング起点デバイスの欄には、ユーザは、抽出したいデバイス依存関係有向グラフの起点となる変数（デバイス）を入力する。若し、１つ以上の前向きデバイス依存関係有向グラフの論理和ＯＲを処理したデバイス依存関係有向グラフを抽出したい場合には、ユーザは、変数（デバイス）を、カンマ（,）区切りで列挙する、という仕様である。
【０３９０】
画面の後向きスライシング起点デバイスの欄には、ユーザは、抽出したいデバイス依存関係有向グラフの起点となる変数（デバイス）を入力する。若し、１つ以上の後向きデバイス依存関係有向グラフの論理和ＯＲを処理したデバイス依存関係有向グラフを抽出したい場合には、ユーザは、変数（デバイス）を、カンマ（,）区切りで列挙する、という仕様である。
【０３９１】
即ち、ユーザが、前向きスライシング起点デバイスと後向きスライシング起点デバイスとの両方に、それぞれ、異なる変数（デバイス）をそれぞれ複数指定すると、１つ以上の前向きデバイス依存関係有向グラフのＯＲの処理により得られるデバイス依存関係有向グラフと、１つ以上の後向きデバイス依存関係有向グラフのＯＲの処理により得られるデバイス依存関係有向グラフとを、ＡＮＤ処理することで得られるデバイス依存関係有向グラフが抽出される、という仕様である。
【０３９２】
又、ユーザが、図６２の画面の前向きスライシング起点デバイスの欄に変数（デバイス）を指定せずに、後向きスライシング起点デバイスの欄にのみ変数（デバイス）を指定するときには、後向きデバイス依存関係有向グラフが結果として抽出される。逆に、ユーザが、後向きスライシング起点デバイスの欄に変数（デバイス）を指定せずに、前向きスライシング起点デバイスの欄にのみ変数（デバイス）を指定するときには、前向きデバイス依存関係有向グラフが結果として抽出される、という仕様である。
【０３９３】
ここで、図６３は、図１のマイクロプロセッサ２に於ける、ラダープログラム静的スライシングを実現するための機能部の構成を示す機能ブロック図（ソフトウェアブロック構成図）である。
【０３９４】
ラダープログラム静的スライシングに係る処理は、ユーザの画面入力及び画面上の実行釦開始の操作に応じて、ラダー静的スライシング条件設定部２９４が内部的に生成したコマンドを、解析条件実行部１１が処理し、その処理結果を、解析結果表示部２０が、図１の表示部４の画面に表示させると言う構成により、実現される。
【０３９５】
ラダー静的スライシング条件設定部２９４が実行する処理フローを、図６４に示す。同部２９４が図６２に示される入力内容を、図６４の処理フローに従って処理する点を、以下に記載する。
【０３９６】
ステップＳ２９５に於いて、ユーザが、図６２のラダープログラム静的スライシング画面上の実行ボタンをクリックすると、ラダー静的スライシング条件設定部２９４は以下の処理を開始する。
【０３９７】
ステップＳ２９７に於いて、同部２９４は、図６２のダイアログ・ボックスに於けるスライシング範囲に、ＰＯＵ名称が入力されているかを確認する。図６２の本例では、同部２９４は、「ＹＥＳ」と判定する。
【０３９８】
ステップＳ２９８に於いて、同部２９４は、図６２のダイアログ・ボックスに於けるスライシング範囲に入力されているＰＯＵ名称が複数であるか否かを確認する。図６２の本例では、同部２９４は、「ＹＥＳ」と判定する。
【０３９９】
ステップＳ３０１に於いて、同部２９４は、本例に関しては、以下のコマンドを内部的に生成して実行する。
【０４００】
１）Ｓ９０１＝ＰＯＵ_ＲＥＡＤ（ＭＡＩＮ）
２）Ｓ９０２＝ＰＯＵ_ＲＥＡＤ（ＳＵＢ４）
３）Ｓ９０３＝ＯＲ（Ｓ９０１，Ｓ９０２）
本例のステップＳ３０１の適用に於いて、同部２９４は、更に次のコマンドを内部的に生成して実行する。
【０４０１】
４）Ｓ９０４＝ＰＯＵ_ＲＥＡＤ（ＳＵＢ９）
５）Ｓ９０５＝ＯＲ（Ｓ９０３，Ｓ９０４）
以上の様に同部２９４が各種コマンドの生成・実行を内部的に逐一行うことにより、ステップＳ３０１に於いて、同部２９４は、複数のＰＯＵ名称が入力された場合のＰＯＵコレクションの生成に対処する。
【０４０２】
同部２９４は、ステップＳ２９６の処理に於いて内部的に生成した最後の解析コマンドの式番号を、以降のステップＳ３０２及びステップＳ３０７に於いて処理するデバイス依存関係有向グラフの抽出処理の第１引数として、使用する。本例では、同部２９４は、第５番目に生成されたコマンドである式番号Ｓ９０５を、解析コマンドＶＡＲ_ＦＷＤ及び解析コマンドＶＡＲ_ＢＷＤの第１引数として、指定する。
【０４０３】
ステップＳ３０３に於いて、本例に関して、同部２９４は、図６２の前向きスライシング起点デバイスに変数（デバイス）が入力されていることを確認する。
【０４０４】
ステップＳ３０４に於いて、本例に関して、同部２９４は、図６２の前向きスライシング起点デバイスに入力されている変数（デバイス）が複数個であることを確認する。
【０４０５】
ステップＳ３０６に於いて、本例に関して、同部２９４は、以下のコマンドを内部的に生成して実行する。
【０４０６】
６）Ｓ９０６＝ＶＡＲ_ＦＷＤ（Ｓ９０５，Ｘ６７）
７）Ｓ９０７＝ＶＡＲ_ＦＷＤ（Ｓ９０５，Ｘ８９）
８）Ｓ９０８＝ＯＲ（Ｓ９０６，Ｓ９０７）
同部２９４は、ステップＳ３０２に於いて内部的に生成した最後のコマンドの式番号を、ステップＳ３１２に於いて処理するデバイス依存関係有向グラフ同士のＡＮＤ処理の第１引数として使用する。この例では、同部２９４は、式番号Ｓ９０８を、ＡＮＤ処理の第１引数として指定する。
【０４０７】
ステップＳ３０８に於いて、本例に関して、同部２９４は、図６２の後向きスライシング起点デバイスに変数（デバイス）が入力されていることを確認する。
【０４０８】
次のステップＳ３０９に於いて、本例に関して、同部２９４は、図６２の後向きスライシング起点デバイスに入力されているデバイスが複数でないことを確認し（「ＮＯ」の判定。）、ステップＳ３１０へ移行する。
【０４０９】
ステップＳ３１０に於いて、本例に関して、同部２９４は、以下のコマンドを内部的に生成して実行する。
【０４１０】
９）Ｓ９０９＝ＶＡＲ_ＢＷＤ（Ｓ９０５，Ｙ２３４）
同部２９４は、ステップＳ３０７に於いて内部的に生成した最後のコマンドの式番号を、ステップＳ３１２に於いて処理するデバイス依存関係有向グラフ同士のＡＮＤ処理の第２引数として使用する。この例では、同部２９４は、式番号Ｓ９０９を、ＡＮＤの第２引数として指定する。
【０４１１】
ステップＳ３１２では、同部２９４は、ステップＳ３０２に於いて内部的に生成した最後のコマンドの式番号を第１引数とし、ステップＳ３０７に於いて内部的に生成した最後のコマンドの式番号を第２引数とした、解析コマンドＡＮＤを内部的に生成して実行する。
【０４１２】
１０）Ｓ９１０＝ＡＮＤ（Ｓ９０８，Ｓ９０９）
但し、同部２９４は、ステップＳ３０２に於いて内部的に生成したコマンドが無い場合には、ステップＳ３０７に於いて内部的に生成した最後のコマンドの処理結果を、そのまま、ステップＳ３１２の処理結果とする。
【０４１３】
又、同部２９４は、ステップＳ３０７に於いて内部的に生成したコマンドが無い場合には、ステップＳ３０２に於いて内部的に生成した最後のコマンドの処理結果を、そのまま、ステップＳ３１２の処理結果とする。
【０４１４】
若し、ステップＳ３０２とステップＳ３０７の何れに於いても内部的に生成されたコマンドが存在しなれけば、同部２９４は、ステップＳ３１２の処理結果を空とする。
【０４１５】
ラダー静的スライシング条件設定部２９４は、以上の処理により得られたデバイス依存関係有向グラフの結果を、解析結果表示部２０へ送信し、同部２０は上記バイス依存関係有向グラフの結果を描画するための表示信号を図１の表示部４へ出力し、その結果、上記バイス依存関係有向グラフの結果は表示部４の画面上に表示される。
【０４１６】
更に、ユーザが図６２のダイアログ・ボックスのクロスリファレンスボタンを入力部５によりクリックすると、ラダー静的スライシング条件設定部２９４は、既に得られているデバイス依存関係有向グラフに存在する変数（デバイス）のクロスリファレンスを抽出して、解析結果表示部２０は、その結果を表示する。その処理フローを示すフローチャートの図示化は割愛されが、その処理手順を次の様に記載する。
【０４１７】
ユーザが、ラダープログラム静的スライシング画面上のクロスリファレンスボタンを押す（クリックする。）と、同部２９４は、処理を開始する。
【０４１８】
同部２９４は、同部２９４が実行した最後のコマンドの式番号Ｓ９１０を、第１引数とした解析コマンドＶＡＲ_ＲＥＦを内部的に生成して実行する。その際、同部２９４は、第２引数には何も指定せず、デバイス依存関係有向グラフに存在する全ての変数（デバイス）のクロスリファレンスを抽出する。
【０４１９】
１１）Ｓ９１１＝ＶＡＲ_ＲＥＦ（Ｓ９１０）
但し、未だデバイス依存関係有向グラフが得られていなければ（処理されていなければ）、同部２９４は、処理結果を空とする。
【０４２０】
ラダー静的スライシング条件設定部２９４は、図６３の変数使用一覧表示部２１を介在して、得られた変数（デバイス）のクロスリファレンスを表示する。
【０４２１】
＜実施の形態１３の効果＞
ユーザが自分でプログラム解析条件の組み合わせを考える必要性が無く、所望のプログラム解析結果を得ることを可能にする。従って、多種多様なクロスリファレンス作成機能等のプログラム解析機能を用意するための労力を大幅に軽減することが出来る。
【０４２２】
これにより、プログラム解析支援装置の開発者は、ユーザが、プログラムの変更又は不具合動作の解析等に於いて編集対象となる場所を特定するための作業を効率化して作業に要する時間を短縮することを可能にするための、プログラム解析支援装置の開発の工数（費用及び期間）を低減（短縮）することが出来る。プログラム解析支援装置に対して多種多様なクロスリファレンス作成機能等のプログラム解析機能を用意することが、容易となる。
【０４２３】
これにより、プログラム解析支援装置に対して多種多様なクロスリファレンス作成機能等のプログラム解析機能が用意されることで、ユーザは、プログラムの変更又は不具合動作の解析等に於いて編集対象となる場所を特定するための作業を効率化して、作業に要する時間を短縮することが出来る。
【０４２４】
（実施の形態１４）
これまでに、所定のプログラムＰＯＵのコレクションを対象としたデバイスクロスリファレンスの抽出、デバイス依存関係有向グラフの抽出、及びＰＯＵコール依存関係有向グラフの抽出の各プログラム解析機能について記載した。そして、それらの解析結果に対して論理演算（ＡＮＤ／ＯＲ／ＮＯＴ）を行う機能についても記載した。更に、それらのプログラム解析機能の結果に対して、更にプログラム解析処理を行う機能についても、記載した。
【０４２５】
この様な本発明のプログラム解析支援装置に対して、新しい解析機能（解析コマンド）を追加する場合には、その新しい解析機能（解析コマンド）が抽出するデータ形式が、本発明のプログラム解析支援装置には未だ無い新しいデータ形式であれば、その解析結果に対してＡＮＤ／ＯＲ／ＮＯＴの論理演算を定義する必要性がある等、本発明のプログラム解析支援装置の特徴点を継承して損なわない様にする必要性がある。
【０４２６】
本実施の形態は、この様な本発明のプログラム解析支援装置に対して、新しい解析機能（解析コマンド）を追加するための技術に関する。
【０４２７】
これまでに、所定のプログラムＰＯＵのコレクションを対象としたデバイスクロスリファレンスの抽出、デバイス依存関係有向グラフの抽出、及びＰＯＵコール依存関係有向グラフの抽出の各プログラム解析機能、並びに、それらの解析結果に対してＡＮＤ／ＯＲ／ＮＯＴの論理演算又は別のプログラム解析を行う機能について、記載してきた。これらの機能をまとめると、図６６〜図７１の各図に示す様になる。
【０４２８】
ア）先ず、デバイスクロスリファレンス抽出コマンドＶＡＲ_ＲＥＦについて図示した図６６の内容を記載する。
【０４２９】
解析コマンドＶＡＲ_ＲＥＦの第２引数に指定されるのは、変数（デバイス）である。他方の第１引数には、本発明のプログラム解析支援装置が処理するプログラム解析機能の解析結果を指定することが出来る。
【０４３０】
この内で、第１引数にＰＯＵのコレクションを出力する式番号を指定する場合が、解析コマンドＶＡＲ_ＲＥＦの最も基本的な処理形態（図６６中に◎で示されている。）である。
【０４３１】
又、第１引数にデバイス依存関係有向グラフを出力する式番号を指定する場合も、解析コマンドＶＡＲ_ＲＥＦの基本的な処理形態（図６６中に○で示されている。）である。
【０４３２】
一方で、第１引数に、ＰＯＵの名前が直接に指定される場合も、考えられる。この場合の処理フローは、明細書中には実施の形態として記載されてはいないが、この場合の処理形態については、図６６に示す通り、マイクロプロセッサ２が内部的に解析コマンドＰＯＵ_ＲＥＡＤを処理してから、解析コマンドＶＡＲ_ＲＥＦの最も基本的な処理形態で以って処理すれば良い。つまり、マイクロプロセッサ２は、この場合の処理を、その他の基本的な処理形態の組み合わせにより実現することが出来る（図６６中に△で示されている。）。
【０４３３】
又、第１引数に、ＰＯＵコール依存関係有向グラフを出力する式番号が指定される場合についても、同様に、マイクロプロセッサ２は、他の基本的な処理形態の組み合わせにより実現することが出来る（図６６中に同様に△で示されている。）。
【０４３４】
尚、第１引数にデバイスクロスリファレンスを出力する式番号が指定される場合は、定義されていない（図６６中に×で示されている。）。これは、それを定義する意義ないしは必要性が見出せないからである。
【０４３５】
イ）次に、デバイス依存関係有向グラフ抽出コマンドＶＡＲ_ＦＷＤについて図示した図６７の内容を、記載する。尚、図６７では、デバイス依存関係有向グラフについては前向き解析コマンドＶＡＲ_ＦＷＤの場合のみを示している、その点は便宜上のことにすぎず、後向き解析コマンドＶＡＲ_ＢＷＤについても、同様の内容が妥当する。）。解析コマンドＶＡＲ_ＦＷＤの第２引数に指定されるのは、変数（デバイス）である。同コマンドの第１引数には、ユーザは、本発明のプログラム解析支援装置が処理するプログラム解析機能の解析結果を指定することが出来る。
【０４３６】
この内、第１引数に、ＰＯＵのコレクションを出力する式番号が指定される場合が、解析コマンドＶＡＲ_ＦＷＤの最も基本的な処理形態（図６７中には◎で示されている。）である。
【０４３７】
一方で、第１引数に、ＰＯＵの名前が直接に指定される場合も、考えられる。この場合の処理フローは、明細書中には実施の形態として記載されてはいないが、この場合の処理形態については、図６７に示す通り、マイクロプロセッサ２が内部的に解析コマンドＰＯＵ_ＲＥＡＤを処理してから、解析コマンドＶＡＲ_ＦＷＤの最も基本的な処理形態で以って処理すれば良い。つまり、マイクロプロセッサ２は、この場合の処理を、その他の基本的な処理形態の組み合わせにより実現することが出来る（図６７中に△で示されている。）。
【０４３８】
又、第１引数に、ＰＯＵコール依存関係有向グラフを出力する式番号が指定される場合についても、同様に、マイクロプロセッサ２は、他の基本的な処理形態の組み合わせにより実現することが出来る（図６７中に同様に△で示されている。）。
【０４３９】
尚、第１引数にデバイス依存関係有向グラフを出力する式番号が指定される場合は、定義されていない（図６７中に×で示されている。）。これは、それを定義する意義ないしは必要性が見出せないからである。
【０４４０】
同じく、第１引数にデバイスクロスリファレンスを出力する式番号が指定される場合も、定義されていない（図６７中に×で示されている。）。これも、それを定義する意義ないしは必要性が見出せないからである。
【０４４１】
ウ）次に、ＰＯＵのコレクションを抽出する解析コマンドＰＯＵ_ＲＥＡＤについて図示した図６８の内容を、記載する。この場合、解析コマンドＰＯＵ_ＲＥＡＤの第２引数には、何も指定されない。他方、ユーザは、第１引数に、本発明のプログラム解析支援装置が処理するプログラム解析機能の解析結果を指定することが出来る。
【０４４２】
この内、第１引数にＰＯＵの名前が直接に指定される場合が、解析コマンドＰＯＵ_ＲＥＡＤの最も基本的な処理形態（図６８に於いては、◎で示されている。）である。
【０４４３】
又、第１引数にデバイスクロスリファレンスを出力する式番号が指定される場合も、解析コマンドＰＯＵ_ＲＥＡＤの基本的な処理形態（図６８に於いては、○で示している）である。
【０４４４】
更に、第１引数にＰＯＵコール依存関係有向グラフを出力する式番号が指定される場合もまた、解析コマンドＰＯＵ_ＲＥＡＤの基本的な処理形態（図６８に於いては、○で示されている。）である。
【０４４５】
一方で、第１引数に、デバイス依存関係有向グラフを出力する式番号を指定する場合については、図６８に示す通り、マイクロプロセッサ２が、内部的に解析コマンドＶＡＲ_ＲＥＦを処理してから、解析コマンドＰＯＵ_ＲＥＡＤの基本的な処理形態で以って処理すれば良い。つまり、マイクロプロセッサ２は、この場合の処理を、その他の基本的な処理形態の組み合わせにより実現することが出来る（図６８中に、△で示されている。）。
【０４４６】
尚、第１引数に、ＰＯＵのコレクションを出力する式番号が指定される場合は、定義されていない（図６８中に、×印が表示されている。）。これは、それを定義する意義ないしは必要性が見出せないからである。
【０４４７】
エ）次に、ＰＯＵコール依存関係有向グラフを抽出する解析コマンドＰＯＵ_ＦＷＤについて図示した図６９の内容を、記載する。尚、図６９には、ＰＯＵコール依存関係有向グラフについては、前向きの解析コマンドＰＯＵ_ＦＷＤの場合のみが示されているが、後向きの解析コマンドＰＯＵ_ＢＷＤについても同様の内容が成立する。解析コマンドＰＯＵ_ＦＷＤの第２引数に指定されるのは、ＰＯＵ名称である。第１引数には、ユーザは、本発明のプログラム解析支援装置が処理するプログラム解析機能の解析結果を指定することが出来る。
【０４４８】
この内で、第１引数にＰＯＵのコレクションを出力する式番号が指定される場合が、解析コマンドＰＯＵ_ＦＷＤの最も基本的な処理形態（図６９に於いては、◎で示されている。）である。
【０４４９】
一方で、第１引数に、ＰＯＵの名前が直接に指定される場合も、考えられる。この場合の処理フローは、明細書中には実施の形態として記載されてはいないが、この場合の処理形態については、図６９に示す通り、マイクロプロセッサ２が内部的に解析コマンドＰＯＵ_ＲＥＡＤを処理してから、解析コマンドＰＯＵ_ＦＷＤの基本的な処理形態で以って処理すれば良い。つまり、マイクロプロセッサ２は、この場合の処理を、その他の基本的な処理形態の組み合わせにより実現することが出来る（図６９中には、△印で示されている。）。
【０４５０】
尚、第１引数に、ＰＯＵコール依存関係有向グラフを出力する式番号が指定される場合は、定義されていない（図６９中に、×印が表示されている。）。これは、それを定義する意義ないしは必要性が見出せないからである。
【０４５１】
同じく、第１引数に、デバイスクロスリファレンスを出力する式番号が指定される場合も、定義されていない（図６９中に、×印が表示されている。）。これも、それを定義する意義ないしは必要性が見出せないからである。
【０４５２】
同じく、第１引数に、デバイス依存関係有向グラフを出力する式番号が指定される場合も、定義されていない（図６９中に、×印が表示されている。）。これも、それを定義する意義ないしは必要性が見出せないからである。
【０４５３】
オ）最後に、これらの解析結果に対して論理演算ＡＮＤを行う機能について図示した図７０の内容を、以下に記載する。尚、図７０に於いては、論理演算の処理に関して、解析コマンドＡＮＤのみの処理が示されているが、その他の論理演算である解析コマンドＯＲ及びＮＯＴについても同様の内容が成立する。
【０４５４】
この内、第１引数と第２引数とのデータ形式が共に同じである場合が、解析コマンドＡＮＤの基本的な処理形態（図７０に於いて、◎印で示されている。）である。本発明に係るプログラム解析支援装置の各プログラム解析機能部が出力するデータ形式は、デバイスクロスリファレンス，デバイス依存関係有向グラフ，ＰＯＵのコレクション，及びＰＯＵコール依存関係有向グラフの４つの何れかであり、それぞれの場合の処理フローについては、既述した対応する実施の形態に於いて開示されている。
【０４５５】
一方で、第１引数のデータ形式と第２引数のデータ形式とが異なる場合については、これを定義しないという方策も考えられる。しかしながら、例えば、第１引数にデバイスクロスリファレンスを出力する式番号が指定され、第２引数にデバイス依存関係有向グラフを出力する式番号が指定された場合に於いて解析コマンドＡＮＤが指定されることは、第１引数のデバイスクロスリファレンスと、第２引数のデバイス依存関係有向グラフに関するデバイスクロスリファレンスとの、ＡＮＤ処理をその結果として抽出したいという意図がある、と解釈することも出来る。これは、実施の形態１２に於いて既述した通りである。この様な場合については、第１引数のデータ形式と第２引数のデータ形式とが異なっていても、最も近い解釈の処理が定義されても良い。この場合の処理形態は、図７０に示す通り、図１のマイクロプロセッサ２は、内部的に解析コマンドＶＡＲ_ＲＥＦを処理してから、解析コマンドＡＮＤの基本的な処理形態を実行することで処理すれば良い。つまり、マイクロプロセッサ２は、この場合の処理を、その他の基本的な処理形態の組み合わせにより実現することが出来る（図７０に於いては、△印で示されている。）。
【０４５６】
第１引数のデータ形式と第２引数のデータ形式とが異なるその他の場合についても、同様に、これを定義しないという方策も考えられるが、最も近い解釈の処理が定義された上で、図１のマイクロプロセッサ２が、その他の基本的な処理形態の組み合わせにより実現することとしても良い（図７０に於いて、△印で示されている。）。
【０４５７】
尚、第１引数のデータ形式と第２引数のデータ形式とが異なるその他の場合の内で、これを定義する意義ないしは必要性が見出せない場合には、本発明ではその定義は行われていない（図７０に於いて、×印で示されている。）。
【０４５８】
図７０に於ける、これらの処理は、何れも、第１引数と第２引数とが逆に指定される場合に於いても、同じ解釈として対称的に定義されるが、非対称として定義する必要性がある場合には、第１引数と第２引数とが逆に指定された場合には異なる定義が行われることとしても良い。
【０４５９】
以上の通り、本発明の重要なポイントは、図１のマイクロプロセッサ２内のプログラム解析機能部の基本的な処理（図７０に於いて、◎印又は○印で示された処理。）と、上記の基本的な処理の組合せにより実現可能な処理（図７０に於いて、△印で示された処理。）とを、明確に区分して定義した点にある。図７０の△印の処理は、◎印又は○印の処理の組み合わせで以って実現されているが、決して循環しない。この関係を図にまとめると、図７１に示される関係となる。
【０４６０】
さて、新しい解析機能（解析コマンド）を担う部分を図１のマイクロプロセッサ２に追加する場合には、図６５に示される（１）〜（７）の部分がソフトウェア上に於いて定義される。先ず、（１）解析コマンド名が定義され、（２）第２引数の指定の形態が定義される。次に、（３）〜（７）の定義に際しては、基本的な処理形態となるもの（◎印又は○印に相当する。）はどれかであるか、その他の基本的な処理の組み合わせによって実現可能なもの（△印に相当する。）はどれかであるか、定義する意義ないしは必要性が見出せないもの（×印に相当する。）はどれかであるか、という点が留意される。
【０４６１】
更に、その新しい解析機能が抽出するデータ形式が、本発明に係るプログラム解析支援装置には未だ無い新しいデータ形式であれば、その解析結果に対してＡＮＤ／ＯＲ／ＮＯＴの論理演算又は別のプログラム解析を行う機能が定義される必要性がある。
【０４６２】
そこで、先ず、図６５に示す（８）の部分がソフトウェア上に於いて定義される。
【０４６３】
次に、本発明に係るプログラム解析支援装置の各プログラム解析機能の定義に対して、新しいデータ形式に対する定義がソフトウェア上に於いて追加される。即ち、図６６〜図６９の（９）〜（１２）の部分が定義される。
【０４６４】
そして、図７０の（１３）の部分（新しいデータ形式同士の論理演算。）が、ソフトウェア上に於いて定義される。
【０４６５】
最後に、図７０の（１４）及び（１５）の部分（新しいデータ形式とその他のデータ形式との論理演算。）が、ソフトウェア上に於いて定義される。
【０４６６】
＜実施の形態１４の効果＞
１）本発明のプログラム解析支援装置に対して、新しい解析機能（解析コマンド）を行う機能部を追加する場合に、本発明のプログラム解析支援装置の特徴点を継承して損なわない様に、その新しい解析機能の処理がソフトウェア上に於いて定義されることで、プログラム解析条件を自由に組み合わせたプログラム解析が可能となり、この解析結果に基づいて、ユーザは、編集対象となる場所を迅速に特定することが可能となり、プログラムの変更又はその不具合動作の解析等に於いて編集対象となる場所を特定するための作業を効率化し、作業に要する時間を短縮化することが出来る。
【０４６７】
２）又、その新しい解析機能を実行する機能部分が抽出するデータ形式が、本発明のプログラム解析支援装置には未だ無い新しいデータ形式であれば、その解析結果に対してＡＮＤ／ＯＲ／ＮＯＴの論理演算が可能となる様に、本発明のプログラム解析支援装置の特徴点を継承して損なわない様に、その新しい解析機能及び本発明のプログラム解析支援装置の各解析機能の処理が定義されるので、プログラム解析条件を自由に組み合わせたプログラム解析が可能となり、ユーザは、この解析結果に基づいて編集対象となる場所を迅速に特定することが可能となり、プログラムの変更又はその不具合動作の解析等に於いて編集対象となる場所を特定するための作業を効率化し、作業に要する時間を短縮化することが出来る。
【０４６８】
（付記）
以上の通り、本発明は、プログラム解析条件を自由に組み合わせることが可能なプログラム解析支援装置を実現するものであるが、本発明の特徴点と、既述したＰＡＴＯＬＩＳ（登録商標）の様な特許文献の検索と比較すると、その相違点は、次の通りである。
【０４６９】
即ち、特許文献の検索は、「特許文献の集合全体という母集合に対して検索式をかける」ことと、「その結果を論理演算する」ことの繰り返しであり、検索の対象となる母集団は常に特許文献の集合全体である。他方、本発明は、プログラム解析に於いても、「解析対象プログラム全体という母集合に対して検索式をかける」ことと、「その結果を論理演算する」ことの繰り返しを実現するものである。
【０４７０】
更に、本発明は、検索の対象となる母集団が常に解析対象プログラム全体という他にも、「ある結果に対して別の検索式をかける」ことを実現するものである。
【０４７１】
特許文献の検索は、「特許文献の集合全体という母集合に対して検索式をかけた」結果もまた特許文献の集合であるが、プログラム解析に於いては、「解析対象プログラム全体という母集合に対して検索式をかけた」結果は、様々なデータ種別の集合である。
【０４７２】
従って、特許文献の検索の様に、「母集団に対して検索式をかける」及び「その結果を論理演算する」の繰り返しだけでは得られないプログラム解析が存在する。
【０４７３】
本発明は、「母集団に対して検索式（解析条件式）をかける」、「その結果に対して別の検索式をかける」及び「それらの結果を論理演算する」の繰り返しを可能にすることで、所望のプログラム解析を実現するものである。
【０４７４】
以上、本発明の実施の形態を詳細に開示し記述したが、以上の記述は本発明の適用可能な局面を例示したものであって、本発明はこれに限定されるものではない。即ち、記述した局面に対する様々な修正や変形例を、この発明の範囲から逸脱することの無い範囲内で考えることが可能である。
【産業上の利用可能性】
【０４７５】
例えば、本発明に係るプログラム解析支援装置は、プログラマブルコントローラ、モーションコントローラ、数値制御装置コントローラ、検査装置コントローラ、又は表示器等の各種の産業用のコントローラ、或いは、マイクロコンピュータに於いて実行される計測制御プログラムに関して、新しい計測制御プログラムを開発するために過去の計測制御プログラムを解析する作業を、又は、計測制御プログラムを開発したり或いはデバッグしたりする際に同プログラムを編集／変更する作業を、効率化するために適用して好適である。
【符号の説明】
【０４７６】
１  プログラム解析支援装置、２  マイクロプロセッサ、３  データ格納メモリ、４  表示部、５  入力部、６  保存部、１０  解析条件設定部、１１  解析条件実行部、１２  変数使用一覧抽出処理実行部、１３  変数依存関係抽出処理実行部、１４  ＰＯＵ一覧抽出処理実行部、１５  ＰＯＵ依存関係抽出処理実行部、１６  解析結果論理演算処理実行部、１７  ＡＮＤ処理実行部、１８  ＯＲ処理実行部、１９  ＮＯＴ処理実行部、２０  解析結果表示部、２１  変数使用一覧表示部、２２  変数依存関係表示部、２３  ＰＯＵ一覧表示部、２４  ＰＯＵ依存関係表示部、２９４  ラダー静的スライシング条件設定部。
【図１】
2010095289.tif 000007
【図２】
2010095289.tif 000008
【図３】
2010095289.tif 000009
【図４】
2010095289.tif 000010
【図５】
2010095289.tif 000011
【図６】
2010095289.tif 000012
【図７】
2010095289.tif 000013
【図８】
2010095289.tif 000014
【図９】
2010095289.tif 000015
【図１０】
2010095289.tif 000016
【図１１】
2010095289.tif 000017
【図１２】
2010095289.tif 000018
【図１３】
2010095289.tif 000019
【図１４】
2010095289.tif 000020
【図１５】
2010095289.tif 000021
【図１６】
2010095289.tif 000022
【図１７】
2010095289.tif 000023
【図１８】
2010095289.tif 000024
【図１９】
2010095289.tif 000025
【図２０】
2010095289.tif 000026
【図２１】
2010095289.tif 000027
【図２２】
2010095289.tif 000028
【図２３】
2010095289.tif 000029
【図２４】
2010095289.tif 000030
【図２５】
2010095289.tif 000031
【図２６】
2010095289.tif 000032
【図２７】
2010095289.tif 000033
【図２８】
2010095289.tif 000034
【図２９】
2010095289.tif 000035
【図３０】
2010095289.tif 000036
【図３１】
2010095289.tif 000037
【図３２】
2010095289.tif 000038
【図３３】
2010095289.tif 000039
【図３４】
2010095289.tif 000040
【図３５】
2010095289.tif 000041
【図３６】
2010095289.tif 000042
【図３７】
2010095289.tif 000043
【図３８】
2010095289.tif 000044
【図３９】
2010095289.tif 000045
【図４０】
2010095289.tif 000046
【図４１】
2010095289.tif 000047
【図４２】
2010095289.tif 000048
【図４３】
2010095289.tif 000049
【図４４】
2010095289.tif 000050
【図４５】
2010095289.tif 000051
【図４６】
2010095289.tif 000052
【図４７】
2010095289.tif 000053
【図４８】
2010095289.tif 000054
【図４９】
2010095289.tif 000055
【図５０】
2010095289.tif 000056
【図５１】
2010095289.tif 000057
【図５２】
2010095289.tif 000058
【図５３】
2010095289.tif 000059
【図５４】
2010095289.tif 000060
【図５５】
2010095289.tif 000061
【図５６】
2010095289.tif 000062
【図５７】
2010095289.tif 000063
【図５８】
2010095289.tif 000064
【図５９】
2010095289.tif 000065
【図６０】
2010095289.tif 000066
【図６１】
2010095289.tif 000067
【図６２】
2010095289.tif 000068
【図６３】
2010095289.tif 000069
【図６４】
2010095289.tif 000070
【図６５】
2010095289.tif 000071
【図６６】
2010095289.tif 000072
【図６７】
2010095289.tif 000073
【図６８】
2010095289.tif 000074
【図６９】
2010095289.tif 000075
【図７０】
2010095289.tif 000076
【図７１】
2010095289.tif 000077
【手続補正書】
【提出日】平成23年2月16日(2011.2.16)
【手続補正１】
【補正対象書類名】明細書
【補正対象項目名】００２１
【補正方法】変更
【補正の内容】
【００２１】
この発明の主題に係るプログラム解析支援装置は、プログラムモジュールより構成されるプログラムに関して、ユーザにより指定された前記プログラムのプログラム解析条件を入力し保持する解析条件設定部と、前記プログラム解析条件に基づいて前記プログラムの解析処理を実行する解析条件実行部と、前記解析条件実行部によって処理された解析結果を表示するための表示データを作成し出力する解析結果表示部とを備え、前記解析条件実行部は、前記プログラムモジュール中に記載される各変数の依存関係有向グラフを与える信号を出力する変数依存関係抽出処理実行部を備え、前記プログラムモジュールのコレクションを与える信号を出力するＰＯＵ一覧抽出処理実行部を更に備えており、前記変数依存関係抽出処理実行部は、前記プログラムモジュールのコレクションを解析対象範囲として、前記各変数の依存関係有向グラフを与える前記信号を出力することを特徴とし、前記ＰＯＵ一覧抽出処理実行部は、前記各変数の依存関係有向グラフに存在するプログラムモジュールのコレクションを与える信号を抽出することを特徴とする。
【手続補正２】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
プログラムモジュールより構成されるプログラムに関して、
ユーザにより指定された前記プログラムのプログラム解析条件を入力し保持する解析条件設定部と、前記プログラム解析条件に基づいて前記プログラムの解析処理を実行する解析条件実行部と、前記解析条件実行部によって処理された解析結果を表示するための表示データを作成し出力する解析結果表示部とを備え、
前記解析条件実行部は、
前記プログラムモジュール中に記載される各変数の依存関係有向グラフを与える信号を出力する変数依存関係抽出処理実行部を備え、
前記プログラムモジュールのコレクションを与える信号を出力するＰＯＵ一覧抽出処理実行部を更に備えており、
前記変数依存関係抽出処理実行部は、
前記プログラムモジュールのコレクションを解析対象範囲として、前記各変数の依存関係有向グラフを与える前記信号を出力することを特徴とし、
前記ＰＯＵ一覧抽出処理実行部は、
前記各変数の依存関係有向グラフに存在するプログラムモジュールのコレクションを与える信号を抽出する、
ことを特徴とするプログラム解析支援装置。
【請求項２】
請求項１記載のプログラム解析支援装置であって、
前記ＰＯＵ一覧抽出処理実行部が出力する前記プログラムモジュールのコレクションとは、
前記プログラムを構成する全てのプログラムモジュールのコレクションである、
ことを特徴とするプログラム解析支援装置。
【請求項３】
請求項１に記載のプログラム解析支援装置であって、
前記解析条件実行部は、
前記各変数の依存関係有向グラフに存在する各変数のクロスリファレンスを与える信号を抽出する変数使用一覧抽出処理実行部を更に備え、
前記ＰＯＵ一覧抽出処理実行部は、
前記各変数の依存関係有向グラフに存在するプログラムモジュールのコレクションを与える信号を抽出する際には、先ず上記変数使用一覧抽出処理実行部が、各変数の依存関係有向グラフに存在する各変数のクロスリファレンスを抽出し、
次に前記ＰＯＵ一覧抽出処理実行部が、
その各変数のクロスリファレンス内に存在するプログラムモジュールのコレクションを抽出する、
ことを特徴とするプログラム解析支援装置。
【請求項４】
複数個のプログラムモジュールより構成されるプログラムに関して、
ユーザにより指定された前記プログラムのプログラム解析条件を入力し保持する解析条件設定部と、前記プログラム解析条件に基づいて前記プログラムの解析処理を実行する解析条件実行部と、前記解析条件実行部によって処理された解析結果を表示するための表示データを作成し出力する解析結果表示部とを備え、
前記解析条件実行部は、
前記複数個のプログラムモジュールの呼び出しの関係を依存関係有向グラフとして与える信号を抽出するＰＯＵ依存関係抽出処理実行部を備え、
前記複数個のプログラムモジュールのコレクションを与える信号を出力するＰＯＵ一覧抽出処理実行部を更に備えており、
前記ＰＯＵ依存関係抽出処理実行部は、
前記複数個のプログラムモジュールのコレクションを解析対象範囲として、前記複数個のプログラムモジュールの呼び出しに関する前記依存関係有向グラフを与える信号を抽出することを特徴とし、
前記ＰＯＵ一覧抽出処理実行部は、
前記ＰＯＵ依存関係抽出処理実行部が出力する前記複数個のプログラムモジュールの呼び出しに関する前記依存関係有向グラフに存在するプログラムモジュールのコレクションを与える信号を出力する、
ことを特徴とするプログラム解析支援装置。
【請求項５】
請求項４に記載のプログラム解析支援装置であって、
前記解析条件実行部は、
前記ＰＯＵ依存関係抽出処理実行部が出力する前記複数個のプログラムモジュールの呼び出しに関する前記依存関係有向グラフに存在するプログラムモジュールに存在する各変数のクロスリファレンスを与える信号を抽出する変数使用一覧抽出処理実行部を更に備え、
その抽出の際には、先ず前記ＰＯＵ一覧抽出処理実行部が、
複数個のプログラムモジュールの呼び出しに関する依存関係有向グラフに存在するプログラムモジュールのコレクションを抽出し、
次に上記変数使用一覧抽出処理実行部が、
そのプログラムモジュールのコレクションを解析対象範囲として、各々の中に記載される各変数のクロスリファレンスを抽出する、
ことを特徴とするプログラム解析支援装置。
【請求項６】
請求項４に記載のプログラム解析支援装置であって、
前記解析条件実行部は、
前記複数個のプログラムモジュールの呼び出しに関する前記依存関係有向グラフに存在するプログラムモジュールのコレクションを解析対象範囲として、当該プログラムモジュール中に記載される各変数の依存関係有向グラフを与える信号を出力する変数依存関係抽出処理実行部を更に備え、
その抽出の際には、先ず前記ＰＯＵ一覧抽出処理実行部が、
複数個のプログラムモジュールの呼び出しに関する依存関係有向グラフに存在するプログラムモジュールのコレクションを抽出し、
次に上記変数依存関係抽出処理実行部が、
そのプログラムモジュールのコレクションを解析対象範囲として、各変数の依存関係有向グラフを抽出する、
ことを特徴とするプログラム解析支援装置。
【請求項７】
複数個のプログラムモジュールより構成されるプログラムに関して、
ユーザにより指定された前記プログラムのプログラム解析条件を入力し保持する解析条件設定部と、前記プログラム解析条件に基づいて前記プログラムの解析処理を実行する解析条件実行部と、前記解析条件実行部によって処理された解析結果を表示するための表示データを作成し出力する解析結果表示部とを備え、
前記解析条件実行部は、
前記プログラムモジュールの各々の中に記載される各変数のクロスリファレンスを与える信号を抽出する変数使用一覧抽出処理実行部と、
前記プログラムモジュール中に記載される各変数の依存関係有向グラフを与える信号を出力する変数依存関係抽出処理実行部と、
前記複数個のプログラムモジュールのコレクションを与える信号を出力するＰＯＵ一覧抽出処理実行部と、
前記複数個のプログラムモジュールの呼び出しの関係を依存関係有向グラフとして与える信号を抽出するＰＯＵ依存関係抽出処理実行部の少なくとも１つを備え、
前記解析条件実行部は、
前記解析条件実行部が備えるプログラム解析機能によって処理された解析結果同士の論理演算、
すなわちプログラムモジュールのコレクション同士の論理演算、
変数のクロスリファレンス同士の論理演算、
変数の依存関係有向グラフ同士の論理演算、
プログラムモジュールの呼び出し関係の有向グラフ同士の論理演算の少なくとも１つ、を処理する解析結果論理演算処理実行部を更に備える、
ことを特徴とするプログラム解析支援装置。
【請求項８】
請求項７記載のプログラム解析支援装置であって、
前記解析結果論理演算処理実行部は、論理演算の対象として指定された、前記解析条件実行部が備えるプログラム解析機能によって処理された解析結果の一方がプログラムモジュールのコレクションであって、解析結果のもう一方がプログラムモジュールのコレクションと相違している場合には、
上記相違している側の解析結果が変数のクロスリファレンスの場合には、前記ＰＯＵ一覧抽出処理実行部は、上記変数のクロスリファレンス内に存在するプログラムモジュールのコレクションを与える信号を出力することを特徴とし、
上記相違している側の解析結果が変数の依存関係有向グラフの場合には、前記ＰＯＵ一覧抽出処理実行部は、上記変数の依存関係有向グラフに存在するプログラムモジュールのコレクションを与える信号を抽出することを特徴とし、
上記相違している側の解析結果がプログラムモジュールの呼び出し関係の有向グラフの場合には、前記ＰＯＵ一覧抽出処理実行部は、上記プログラムモジュールの呼び出し関係の有向グラフに存在するプログラムモジュールのコレクションを与える信号を出力することを特徴とし、
これらによって解析結果の両方をプログラムモジュールのコレクションとし、
解析結果の一方が変数のクロスリファレンスであって、解析結果のもう一方が変数のクロスリファレンスと相違している場合には、
上記相違している側の解析結果が変数の依存関係有向グラフの場合には、変数使用一覧抽出処理実行部は、上記変数の依存関係有向グラフに存在する変数のクロスリファレンスを与える信号を抽出することを特徴とし、
上記相違している側の解析結果がプログラムモジュールの呼び出し関係の有向グラフの場合には、変数使用一覧抽出処理実行部は、上記プログラムモジュールの呼び出し関係の有向グラフに存在するプログラムモジュールに存在する変数のクロスリファレンスを与える信号を抽出することを特徴とし、
これらによって解析結果の両方を変数のクロスリファレンスとし，
その上で、前記論理演算の処理を行う、
ことを特徴とするプログラム解析支援装置。
【請求項９】
請求項７、請求項８の何れかに記載のプログラム解析支援装置であって、
前記解析条件設定部は、前記プログラム解析条件を、固有の式番号を有する条件式の形式で入力することを特徴とし、
上記条件式は、
前記各変数のクロスリファレンスを与える信号を抽出する条件式、
前記各変数の依存関係有向グラフを与える信号を出力する条件式、
前記複数個のプログラムモジュールの呼び出しの関係を依存関係有向グラフとして与える信号を抽出する条件式、
の少なくとも１つと、その解析結果同士の論理演算を処理する条件式である、
ことを特徴とするプログラム解析支援装置。
【請求項１０】
請求項７、請求項８の何れかに記載のプログラム解析支援装置であって、
前記解析条件設定部は、入力された前記プログラム解析条件を、固有の式番号を有する条件式の形式に変換して入力処理を実行することを特徴とし、
上記条件式は、
前記各変数のクロスリファレンスを与える信号を抽出する条件式、
前記各変数の依存関係有向グラフを与える信号を出力する条件式、
前記複数個のプログラムモジュールのコレクションを与える信号を出力する条件式、
前記複数個のプログラムモジュールの呼び出しの関係を依存関係有向グラフとして与える信号を抽出する条件式、
の少なくとも１つと、その解析結果同士の論理演算を処理する条件式である、
ことを特徴とするプログラム解析支援装置。
【請求項１１】
請求項９に記載のプログラム解析支援装置であって、
前記解析結果表示部は、
前記条件式の処理結果すなわち解析結果または論理演算結果が、
前記各変数のクロスリファレンスの場合には、各変数のクロスリファレンスを表示する変数使用一覧表示部、
前記各変数の依存関係有向グラフの場合には、各変数の依存関係有向グラフを表示する変数依存関係表示部、
前記複数個のプログラムモジュールのコレクションの場合には、プログラムモジュールのコレクションを表示するＰＯＵ一覧表示部、
前記複数個のプログラムモジュールの呼び出し関係の有向グラフの場合には、プログラムモジュールの呼び出し関係の有向グラフを表示するＰＯＵ依存関係表示部、
の少なくとも１つを備え、
前記条件式の解析結果毎に、当該解析結果を表示する、
ことを特徴とするプログラム解析支援装置。
【請求項１２】
請求項１０に記載のプログラム解析支援装置であって、
前記解析結果表示部は、
前記変換した条件式の処理結果すなわち解析結果または論理演算結果が、
前記各変数のクロスリファレンスの場合には、各変数のクロスリファレンスを表示する変数使用一覧表示部、
前記各変数の依存関係有向グラフの場合には、各変数の依存関係有向グラフを表示する変数依存関係表示部、
前記複数個のプログラムモジュールのコレクションの場合には、プログラムモジュールのコレクションを表示するＰＯＵ一覧表示部、
前記複数個のプログラムモジュールの呼び出し関係の有向グラフの場合には、プログラムモジュールの呼び出し関係の有向グラフを表示するＰＯＵ依存関係表示部、
の少なくとも１つを備え、
前記変換した条件式の解析結果毎に、当該解析結果を表示する、
ことを特徴とするプログラム解析支援装置。
【国際調査報告】
2010095289.tif 000078
2010095289.tif 000079
2010095289.tif 000080
2010095289.tif 000081
2010095289.tif 000082
2010095289.tif 000083
2010095289.tif 000084
2010095289.tif 000085
2010095289.tif 000086
2010095289.tif 000087
2010095289.tif 000088