(57)【要約】【課題】被解析プログラムの厳密な文法を必要とすることなく、ソースコードの構文解析を行う。【解決手段】入力されるソースコード１０２を標準仕様に基づいて解析し、その解析結果を記憶装置内のリポジトリ１０６に格納する標準構文解析部１０３と、リポジトリ１０６内のソースコード１０２の解析結果の情報から被解析プログラムの構造情報を再構成する構造情報再構成部１０４と、再構成された構造情報に、ドキュメントとして出力するときのスタイル情報を格納している記憶装置内のスタイル情報格納部１０８からのスタイルを適用した構造情報を解析結果ドキュメント１０７として出力するドキュメント生成部１０５とによりプログラム解析装置を構成する。【選択図】図１
2009080681.tif 000002
【特許請求の範囲】
【請求項１】
プログラムを読み込み、読み込んだプログラムの構造解析を行うプログラム構造解析方法において、
入力されたプログラムのソースコードを標準仕様に従って構文解析する標準構文解析手段と、標準構文解析手段による解析結果からプログラムの構造情報を再構築する構造情報再構成手段と、構造情報再構成手段により再構築されたプログラムの構造情報をドキュメントとして生成するドキュメント生成手段とを備え、
前記標準構文解析手段は、読み込んだソースコードの解析前処理を行うと共に、前処理後のソースコードを処理文の単位まで解析して簡易構文木を構築するステップと、前記簡易構文木を解析して、被解析プログラムのセクションを解析するステップと、前記簡易構文木を解析して、被解析プログラムのCALL文を解析するステップと、前記簡易構文木を解析して、被解析プログラムの外PERFORM 文を解析するステップとを有し、
前記構造情報再構成手段は、前記標準構文解析手段による解析結果のデータからプログラム間の呼び出し階層図を再構成するステップと、前記標準構文解析手段による解析結果のデータからプログラム内のセクション間の関連を再構成するステップとを有することを特徴とするプログラム構造解析方法。
【請求項２】
請求項１記載のプログラム構造解析方法において、前記前記標準構文解析手段によるセクションの解析結果、CALL文の解析結果、外PERFORM 文の解析結果の各構文解析結果は、リポジトリに格納され、前記構造情報再構成手段は、前記リポジトリに格納されている構文解析結果の情報からプログラムの構造情報を再構築することを特徴とするプログラム構造解析方法。
【請求項３】
請求項１または２記載のプログラム構造解析方法において、前記ドキュメント生成手段は、生成するドキュメントのスタイルを、予め用意したスタイル情報に基づいて指定することを特徴とするプログラム構造解析方法。
【請求項４】
プログラムを読み込み、読み込んだプログラムの構造解析を行うプログラム構造解析装置において、
入力されたプログラムのソースコードを標準仕様に従って構文解析する標準構文解析手段と、標準構文解析手段による解析結果からプログラムの構造情報を再構築する構造情報再構成手段と、構造情報再構成手段により再構築されたプログラムの構造情報をドキュメントとして生成するドキュメント生成手段とを備え、
前記標準構文解析手段は、読み込んだソースコードの解析前処理を行う前処理手段と、前処理後のソースコードを処理文の単位まで解析して簡易構文木を構築する簡易構文木構築手段と、前記簡易構文木を解析して、被解析プログラムのセクションを解析するセクション解析手段と、前記簡易構文木を解析して、被解析プログラムのCALL文を解析するCALL文解析手段と、前記簡易構文木を解析して、被解析プログラムの外PERFORM 文を解析する外PERFORM 文解析手段とを有し、
前記構造情報再構成手段は、前記標準構文解析手段による解析結果のデータからプログラム間の呼び出し階層図を再構成するプログラム呼出階層再構成手段と、前記標準構文解析手段による解析結果のデータからプログラム内のセクション間の関連を再構成するセクション関連再構成手段とを有することを特徴とするプログラム構造解析装置。
【請求項５】
請求項１記載のプログラム構造解析装置において、前記前記標準構文解析手段によるセクションの解析結果、CALL文の解析結果、外PERFORM 文の解析結果の各構文解析結果は、リポジトリに格納され、前記構造情報再構成手段は、前記リポジトリに格納されている構文解析結果の情報からプログラムの構造情報を再構築することを特徴とするプログラム構造解析装置。
【請求項６】
請求項１または２記載のプログラム構造解析装置において、前記ドキュメント生成手段は、生成するドキュメントのスタイルを、予め用意したスタイル情報に基づいて指定することを特徴とするプログラム構造解析装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、プログラム構造解析方法及び装置に係り、特に、ソースコードからプログラムの構造を解析し、解析結果をドキュメントとして出力するプログラム構造解析方法及び装置に関する。
【背景技術】
【０００２】
一般に、プログラムの構造とは、プログラムやメソッド間の呼出し関係や、プログラムやメソッドからのファイルの呼出し関係を指し、プログラムの構造を解析するためには、まず、ソースコードの構文解析を行う必要がある。また、ソースコードの構文解析を行うためには、用いられているプログラム言語の厳密な文法を予め知っておく必要がある。
【０００３】
厳密な文法を与えることにより、与えられた文法に従うプログラム言語の構文解析器を生成するプログラムも存在するが、この場合にも厳密な文法が必要であることに変わりはない。
【０００４】
また、プログラムの構造を解析するためには、構文解析後の構文木から構造情報を解析する必要がある。
【０００５】
なお、厳密な構文解析を不要にすることにより汎用性の高い詳細設計書を生成する装置に関する技術が、例えば、特許文献１等に記載されて知られている。
【特許文献１】特開２００５−２７５４６５号公報
【発明の開示】
【発明が解決しようとする課題】
【０００６】
一般に、プログラミング言語には、ＡＮＳＩ等の標準化組織が作成する標準仕様と、ベンダ毎に作成する拡張仕様とが存在する。ところで、システムの母体解析を行う場合、プログラムの構造情報を把握したいという要求がまず発生するが、構造情報に関係してくる文法は、標準仕様の範囲で収まる場合がほとんどである。しかし、従来、ベンダＡが提供する拡張仕様を実装したプログラム言語向けに作成したプログラム構造解析装置により、ベンダＢが提供する拡張仕様を実装したプログラム言語を解析することはできないという問題があった。
【０００７】
また、前述した構文解析器を生成するプログラムを用いる場合でも、拡張仕様の厳密な文法を手に入れなければならいという問題があった。さらに、前記特許文献１に記載されているように、厳密な構文解析を不要にすることにより汎用性の高い詳細設計書を生成する装置も存在するが、この従来技術は、プログラムの構造を解析することができないという問題点を有している。
【０００８】
さらに、従来の技術では、プログラムの構造を解析するためには構文木から構造情報を解析しなければならず、解析ロジックが複雑になり、ドキュメントの種類を容易に増加することができないという問題があった。
【０００９】
本発明の目的は、前述したような従来技術の問題点を解決し、被解析プログラムの厳密な文法を必要とすることなく、ソースコードの構文解析を行うことができるようにしたプログラム構造解析方法及び装置を提供することにある。
【課題を解決するための手段】
【００１０】
本発明によれば前記目的は、プログラムを読み込み、読み込んだプログラムの構造解析を行うプログラム構造解析方法において、入力されたプログラムのソースコードを標準仕様に従って構文解析する標準構文解析手段と、標準構文解析手段による解析結果からプログラムの構造情報を再構築する構造情報再構成手段と、構造情報再構成手段により再構築されたプログラムの構造情報をドキュメントとして生成するドキュメント生成手段とを備え、前記標準構文解析手段は、読み込んだソースコードの解析前処理を行うと共に、前処理後のソースコードを処理文の単位まで解析して簡易構文木を構築するステップと、前記簡易構文木を解析して、被解析プログラムのセクションを解析するステップと、前記簡易構文木を解析して、被解析プログラムのCALL文を解析するステップと、前記簡易構文木を解析して、被解析プログラムの外PERFORM 文を解析するステップとを有し、前記構造情報再構成手段は、前記標準構文解析手段による解析結果のデータからプログラム間の呼び出し階層図を再構成するステップと、前記標準構文解析手段による解析結果のデータからプログラム内のセクション間の関連を再構成するステップとを有することにより達成される。
【００１１】
なお、本発明は、標準仕様の範囲で解析できる情報であれば、プログラムの構造に限らず、解析することが可能であり、解析結果ドキュメントを生成することができる。
【発明の効果】
【００１２】
本発明によれば、被解析プログラムの構造情報を、被解析プログラムの拡張仕様に依存することなく解析することが可能となる。また、本発明によれば、解析結果のドキュメントを、ＳＱＬ文と簡単な制御ルーチンとを用いて生成することができるので、ドキュメント生成のロジックが複雑になることがなく、ドキュメントの種類を容易に増加させることができる。
【発明を実施するための最良の形態】
【００１３】
以下、本発明によるプログラム構造解析方法及び装置の実施形態を図面により詳細に説明する。
【００１４】
図１は本発明の一実施形態によるプログラム構造解析装置の構成を示すブロック図である。
【００１５】
本発明の実施形態によるプログラム構造解析装置１０１は、図示していないが、ＣＰＵ、メインメモリ、ＨＤＤ等の記憶装置、表示装置等の出力装置、キーボード、マウス等の入力装置を備えるＰＣに代表される情報処理装置の中に構築され、標準構文解析部１０３、構造情報再構成部１０４、ドキュメント生成部１０５の各機能部を備えて構成される。前述の各機能部は、プログラムとして構成され、ＨＤＤ等の記憶装置内に格納されていて、メインメモリにロードされてＣＰＵにより実行されることにより、それぞれの機能が実施される。
【００１６】
前述において、標準構文解析部１０３は、入力されるソースコード１０２を標準仕様に基づいて解析し、その解析結果を記憶装置内のリポジトリ１０６に格納する。構造情報再構成部１０４は、リポジトリ１０６内のソースコード１０２の解析結果の情報から被解析プログラムの構造情報を再構成する。また、ドキュメント生成部１０５は、再構成された構造情報に、ドキュメントとして出力するときのスタイル情報を格納している記憶装置内のスタイル情報格納部１０８からのスタイルを適用した構造情報を解析結果ドキュメント１０７として出力する。前述のリポジトリ１０６は、リレーショナルデータベースとして構築するのが適切である。
【００１７】
以後に説明する本発明の実施形態は、被解析プログラム言語をCOBOL の第３次規格（ISO 1985-1989， ANSI X3.23-1985 及びJIS X 3002-1992）（以下、COBOLの第３次規格と記述する）による被解析プログラム言語であるとして説明を行う。但し、本発明の実施形態は、説明を簡潔にするために前述のような制限を行っているだけであり、他の言語についても同様に本発明を適用することができる。
【００１８】
図２は標準構文解析部１０３の構成を示すブロック図である。標準構文解析部１０３は、読み込んだソースコードの解析前処理を行う前処理部２０１と、前処理後のソースコードを処理文の単位まで解析し、簡易構文木を構築する簡易構文木構築部２０２と、簡易構文木を解析し、被解析プログラムのセクションを解析するセクション解析部２０３と、簡易構文木を解析し、被解析プログラムのCALL文を解析するCALL文解析部２０４と、簡易構文木を解析し、被解析プログラムの外PERFORM 文を解析する外PERFORM 文解析部２０５とにより構成されている。ここで前処理とは、例えば、COBOL 言語ではCOPY文の展開処理等を指す。
【００１９】
図３はソースコードの例と簡易構文木のデータ構造とを説明する図である。ソースコード３０１は、図３（ａ）に示すようなCOBOL 言語によるプログラムである。なお、ソースコードとしてのプログラム例の詳細については後述する。このソースコード３０１に対応する簡易構文木は、図３（ｂ）に示すように、複数のノード３０２〜３１０により構成される。ノード３０２は、簡易構文木のルートノードであり、被解析プログラム全体を表す。そのテキスト値は、被解析プログラムのプログラムＩＤを表している。ノード０３、３０４及び３１０は、被解析プログラムに属する処理文を表わすノードである。ここで処理文とは、見出し、無条件動詞で始まる単独の無条件文、条件文の条件式まで、及び、範囲符のこととする。ノード３０５〜３０９は、ノード３０４の処理文に属する単語を表すノードである。ここでは、処理文の説明をCOBOL 言語を例に行ったが、他の言語についても処理文という概念は用いることができる。
【００２０】
図４はセクション解析部２０３での処理動作を説明するフローチャートであり、次に、これについて説明する。
【００２１】
（１）まず、図３（ｂ）に例示したような簡易構文木の処理文ノードを上からたどり、先頭単語が“PROCEDURE” である処理文まで進み、この処理文まで進んだ、PROCEDURE DIVISION見出し以降の処理文で処理をループさせる（ステップ４０１、４０２）。
【００２２】
（２）その後、処理文の先頭から２単語目が“SECTION” であるか否かを判定し、２単語目が“SECTION” であった場合、解析データとしての処理文の先頭単語をリポジトリ１０６内のセクションテーブルに格納する（ステップ４０３、４０４）。
【００２３】
（３）ステップ４０３の判定で、２単語目が“SECTION” でなかった場合、あるいは、ステップ４０４の処理の後、指定したループの処理が全て済んでいなければ、ループの先頭に戻って処理を続け、指定したループの処理が全て済んでいれば、ここでの処理を終了する。
【００２４】
図５はCALL文解析部での処理動作を説明するフローチャートであり、次に、これについて説明する。
【００２５】
（１）まず、図３（ｂ）に例示したような簡易構文木の処理文ノードを上からたどり、先頭単語が“PROCEDURE” である処理文まで進み、この処理文まで進んだ、PROCEDURE DIVISION見出し以降の処理文で処理をループさせる（ステップ５０１、５０２）。
【００２６】
（２）その後、処理文の先頭から２単語目が“SECTION” であるか否かを判定し、２単語目が“SECTION” であった場合、処理文の先頭単語を解析中セクションに設定し、また、セクション内処理文番号を１に設定する（ステップ５０３〜５０５）。
【００２７】
（３）ステップ５０３の判定で、２単語目が“SECTION” でなかった場合、処理文の先頭単語が“CALL”であるか否かを判定し、処理文の先頭単語が“CALL”であった場合、リポジトリの呼出先プログラムテーブルに処理文の２単語目、解析中セクション及びセクション内処理文番号を解析結果として追加する（ステップ５０６、５０７）。
【００２８】
（４）ステップ５０６の判定で、処理文の先頭単語が“CALL”でなかった場合、あるいは、ステップ５０７の処理の後、セクション内処理文番号をインクリメントする（ステップ５０８）。
【００２９】
（５）ステップ５０５の処理の後、あるいは、ステップ５０８の処理の後、指定したループの処理が全て済んでいなければ、ループの先頭に戻って処理を続け、指定したループの処理が全て済んでいれば、ここでの処理を終了する。
【００３０】
図６は外PERFORM 文解析部での処理動作を説明するフローチャートであり、次に、これについて説明する。
【００３１】
（１）まず、図４により説明したセクション解析部により解析された被解析プログラムのセクション一覧を、リポジトリのセクションテーブルから取得し、簡易構文木の処理文ノードを上からたどり、先頭単語が“PROCEDURE” である処理文まで進み、この処理文まで進んだ、PROCEDURE DIVISION見出し以降の処理文で処理をループさせる（ステップ６０１〜６０３）。
【００３２】
（２）その後、処理文の先頭から２単語目が“SECTION” であるか否かを判定し、２単語目が“SECTION” であった場合、処理文の先頭単語を解析中セクションに設定し、また、セクション内処理文番号を１に設定する（ステップ６０４〜６０６）。
【００３３】
（３）ステップ６０４の判定で、２単語目が“SECTION” でなかった場合、処理文の先頭単語が“PERFORM” であるか否かを判定し、処理文の先頭単語が“PERFORM” であった場合、処理文の２単語目が、ステップ６０１の処理で取得したセクション一覧に含まれるか否かを判定する（ステップ６０７、６０８）。
【００３４】
（４）ステップ６０８の判定で、処理文の２単語目が、ステップ６０１の処理で取得したセクション一覧に含まれていた場合、呼出先セクション一覧を示すリポジトリの呼出セクションテーブルに、処理文の２単語目、解析中セクション及びセクション内処理文番号を設定する（ステップ６０９）。
【００３５】
（５）ステップ６０７の判定で、処理文の先頭単語が“PERFORM” でなかった場合、ステップ６０８の判定で、処理文の２単語目が、ステップ６０１の処理で取得したセクション一覧に含まれていなかった場合、あるいは、ステップ６０９の処理の後、セクション内処理文番号をインクリメントする（ステップ６１０）。
【００３６】
（６）ステップ６０６の処理の後、あるいは、ステップ６１０の処理の後、指定したループの処理が全て済んでいなければ、ループの先頭に戻って処理を続け、指定したループの処理が全て済んでいれば、ここでの処理を終了する。
【００３７】
図７はリポジトリ１０６に格納されるセクションテーブルのレイアウト例及びデータ格納例を示す図である。
【００３８】
セクションテーブルは、図７（ａ）にそのレイアウトを示すように、被解析プログラムのプログラムＩＤ７０１を格納するカラムと被解析プログラムに属するセクションのＩＤ７０２を格納するカラムとにより構成される。プログラムＩＤ７０１とセクションのＩＤ７０２とは、複合主キーとなっている。セクションテーブルへのデータ格納例７０３、７０４を図７（ｂ）に示しており、１つのセクション毎に１行のエントリとなっている。図７（ｂ）に示す例では、プログラムPROGRAM-A には２つのセクション（SECTION-A 及びSECTION-B ）が存在することが判る。
【００３９】
図８はリポジトリ１０６に格納される呼出プログラムテーブルのレイアウト例及びデータ格納例を示す図である。
【００４０】
呼出プログラムテーブルは、図８（ａ）にそのレイアウトを示すように、被解析プログラムのプログラムＩＤ８０１を格納するカラムと、被解析プログラム中のCALL文が属するセクションのＩＤ８０２を格納するカラムと、被解析プログラム中のCALL文が属するセクション内での、処理文の位置（処理文番号）８０３を格納するカラムと、被解析プログラム中のCALL文の第１引数（＝呼出先プログラムＩＤ）８０４を格納するカラムとにより構成される。プログラムＩＤ８０１、セクションのＩＤ８０２及び処理文の位置（処理文番号）８０３は複合主キーとなっている。
【００４１】
呼出プログラムテーブルへのデータの格納例８０５、８０６を図８（ｂ）に示しており、１つのCALL文毎に１行のエントリとなっている。図８（ｂ）に示す例では、プログラムPROGRAM-A のSECTION-A の１０行目にPROGRAM-B を呼出すCALL文が、１６行目にPROGRAM-C を呼出すCALL文が記述されていることが判る。
【００４２】
図９はリポジトリ１０６に格納される呼出セクションテーブルのレイアウト例及びデータ格納例を示す図である。
【００４３】
呼出セクションテーブルは、図９（ａ）にそのレイアウトを示すように、被解析プログラムのプログラムＩＤ９０１を格納するカラムと、被解析プログラム中の外PERFORM 文が属するセクションのＩＤ９０２を格納するカラムと、被解析プログラム中の外PERFORM 文が属するセクション内での処理文の位置（処理文番号）９０３を格納するカラムと、被解析プログラム中の外PERFORM 文の第１引数（＝呼出先セクションＩＤ）９０４を格納するカラムとにより構成される。プログラムＩＤ９０１、セクションのＩＤ９０２及び処理文の位置（処理文番号）９０３は複合主キーとなっている。
【００４４】
呼出セクションテーブルへのデータ格納例９０５、９０６を図９（ｂ）に示しており、図９（ｂ）に示す例では、プログラムPROGRAM-A のSECTION-A の５行目にSECTION-B を呼出すCALL文が、１１行目にSECTION-C を呼出す外PERFORM 文が記述されていることが判る。
【００４５】
図１０は構造情報再構成部１０４の構成を示すブロック図である。構造情報再構成部１０４は、リポジトリ１０６のデータからプログラム間の呼び出し階層図を再構成するプログラム呼出階層再構成部１００１と、リポジトリ１０６のデータからプログラム内のセクション間の関連を再構成するセクション関連再構成部１００２とにより構成されている。
【００４６】
図１１はプログラム呼出階層再構成部１００１での処理動作を説明するフローチャートであり、次に、これについて説明する。
【００４７】
（１）まず、リポジトリ１０６の呼出プログラムテーブルから被解析プログラムの呼出先プログラム一覧を重複を除いて取得する。呼出先プログラム一覧を取得するためのＳＱＬ文としては、
“SECTION DISTINCT 呼出先プログラムＩＤ FROM呼出プログラムテーブル
WHERE プログラムＩＤ＝被解析プログラムＩＤ”
を用いる。ここで、「被解析プログラムＩＤ」の部分は、解析するプログラム毎に可変の部分である（ステップ１１０１）。
【００４８】
（２）次に、被解析プログラムＩＤを親スタックにPUSH（格納）し、ステップ１１０１の処理で取得した呼出先プログラム一覧で処理をループさせる。ここで、親スタックとは、呼出元となるプログラムのプログラムＩＤを格納するスタックのことである（ステップ１１０２、１１０３）。
【００４９】
（３）その後、呼出先プログラムＩＤを再構成後呼出先一覧に追加した後、呼出先プログラムＩＤが親スタックに存在しているか否かを判定し、呼出先プログラムＩＤが親スタックに存在していなかった場合、被解析プログラムＩＤ＝呼出先プログラムＩＤとして、ステップ１１０１からステップ１１０７の処理を再帰的に実行する。なお、再構成後データのデータ構造については後述する（ステップ１１０４〜１１０６）。
【００５０】
（４）ステップ１１０５の判定で、呼出先プログラムＩＤが親スタックに存在していた場合、指定したループの処理が全て済んでいなければ、ループの先頭に戻って処理を続け、指定したループの処理が全て済んでいれば、親スタックから被解析プログラムＩＤをPOP （取り出し）て、ここでの処理を終了する（ステップ１１０７）。
【００５１】
図１２はプログラム呼出階層再構成部１００１での処理によるプログラム呼出階層再構成結果のデータ構造の例を示す概念図である。プログラム呼出階層再構成結果のデータ構造の例は、テキスト値として被解析プログラムのＩＤを持つ被解析プログラムを表すルートノード１２０１と、被解析プログラム１２０１から直接呼ばれているプログラム（テキスト値としてプログラムＩＤを持つ）を表すノード１２０２及び１２０４と、プログラム１２０２から直接呼ばれているプログラム（テキスト値としてプログラムＩＤを持つ）を表すノード１２０３とにより構成される。
【００５２】
図１３はセクション関連再構成部１００２での処理動作を説明するフローチャートであり、次に、これについて説明する。
【００５３】
（１）ステップ１３０１では、リポジトリ１０６のセクションテーブルから被解析プログラムのセクション一覧を取得し、取得したセクション一覧で処理をループさせる。被解析プログラムのセクション一覧を取得するためのＳＱＬ文としては、
“SELECT セレクションＩＤ FROMセクションテーブル
WHERE プログラムＩＤ＝被解析プログラムＩＤ”
を用いる。ここで、「被解析プログラムＩＤ」の部分は、解析するプログラム毎に可変の部分である（ステップ１３０１、１３０２）。
【００５４】
（２）その後、当該セクションＩＤを再構成後セクション一覧に追加した後、リポジトリ１０６の呼出セクションテーブルから当該セクションから呼出しているセクション一覧を取得し、取得した呼出先セクション一覧で処理をループさせる。なお、再構成後データのデータ構造については後述する。リポジトリ１０６の呼出セクションテーブルから当該セクションから呼出しているセクション一覧を取得するためのＳＱＬ文としては、
“SELECT DISTINCT 呼出先セクションＩＤ FROM呼出セクションテーブル
WHERE プログラムＩＤ＝被解析プログラムＩＤ
AND セクションＩＤ＝当該セクションＩＤ”
を用いる。ここで、「被解析プログラムＩＤ」、「当該セクションＩＤ」の部分は、解析するプログラム毎に可変の部分である（ステップ１３０３〜１３０５）。
【００５５】
（３）その後、当該呼出先セクションＩＤを再構成後呼出セクション一覧に追加し、指定した２つのループの処理が全て済んでいれば、ここでの処理を終了する（ステップ１３０６）。
【００５６】
図１４はセクション関連再構成部１００２での処理によるセクション関連再構成結果のデータ構造の例を示す概念図である。セクション関連再構成結果のデータ構造の例は、テキスト値として被解析プログラムのＩＤを持つ被解析プログラムを表すルートノード１４０１と、テキスト値としてセクションＩＤを持つ被解析プログラム１４０１に属するセクションを表すノード１４０２、１４０５と、セクション１４０２から呼出されているテキスト値としてセクションＩＤを持つセクションを表すノード１４０３、１４０４とにより構成される。
【００５７】
図１５はドキュメント生成部１０５での処理動作を説明するフローチャートであり、次に、これについて説明する。
【００５８】
（１）まず、構造情報再構成部１０４からドキュメント種別と再構成結果のデータとを取得する。ここで、ドキュメント種別とは、生成するドキュメントの種別を言い、ドキュメントの種別毎にそのスタイルが決まっている（ステップ１５０１）。
【００５９】
（２）次に、ステップ１５０１の処理で取得したドキュメント種別をキーにして、スタイル情報格納部１０８から対応するスタイル情報を取得する。スタイル情報には、ＸＳＬスタイルシートファイル等を用いることが可能である（ステップ１５０２）。
【００６０】
（３）そして、ステップ１５０１の処理で取得した再構成結果のデータにステップ１５０２の処理で取得したスタイルを適用し、スタイルを適用した結果のドキュメントを解析結果ドキュメント１０７のファイルとして出力する。スタイルの適用手段としては、ＸＳＬＴ変換を用いることが可能である（ステップ１５０３、１５０４）。
【００６１】
図１６はスタイル情報格納部１０８のレイアウト例及びデータ格納例を示す図である。
【００６２】
スタイル情報格納部１０８は、図１６（ａ）にそのレイアウトを示すように、ドキュメント種別１６０１を格納するカラムと、スタイル情報１６０２を格納するカラムとにより構成されている。そして、ドキュメント種別１６０１が主キーとなっている。ドキュメント種別１６０１とは、本発明の実施形態においては「プログラム呼出し階層図」や「セクション関連図」等の生成するドキュメントの種類を表す。また、スタイル情報１６０２のカラムには、適用するスタイルシートのファイルパスが格納されている。スタイル情報格納部１０８へのデータ格納例１６０３、１６０４を図１６（ｂ）に示しており、図１６（ｂ）に示す例では、ドキュメント種別が「プログラム呼出し階層図」であり、適用するスタイルシートのファイルパスが“progCallGraph.xsl” であるデータ１６０３、ドキュメント種別が「セクション関連図」であり、適用するスタイルシートのファイルパスが“secRelDialog.xsl”であるデータ１６０４が格納されているとしている。
【００６３】
図１７Ａ〜図１７Ｆは前述までに説明した本発明の実施形態を適用した場合の入力となるCOBOLソースコードと解析結果ドキュメントとの例を示す図である。
【００６４】
詳細な説明は、省略するが、図１７Ａ〜図１７Ｆに示す例では、ソースコード１０２として、図１７Ａ〜図１７Ｄに示すような４つのプログラム、すなわち、プログラムＡ、Ｂ、Ｃ、Ｘが入力され、解析結果ドキュメント１０７として、プログラムＡを起点としたプログラム呼出し階層図が図１７Ｅに示すように出力され、また、プログラムＡのセクション関連図が図１７Ｆに示すように出力される。
【００６５】
前述した本発明の実施形態での各処理は、プログラムにより構成し、本発明が備えるＣＰＵに実行させることができ、また、それらのプログラムは、ＦＤ、ＣＤＲＯＭ、ＤＶＤ等の記録媒体に格納して提供することができ、また、ネットワークを介してディジタル情報により提供することができる。
【００６６】
前述した本発明の実施形態によれば、被解析プログラムの構造情報を、被解析プログラムの拡張仕様に依存することなく解析することが可能である。また、本発明の実施形態によれば、基本的な情報のみをリポジトリに蓄え、ドキュメント生成時に構造情報を再構築してドキュメントを生成する方法をとっているため、解析結果のドキュメントを、ＳＱＬ文と簡単な制御ルーチンとを用いて生成することができるので、ドキュメント生成のロジックが複雑になることがなく、ドキュメントの種類を容易に増加させることができる。
【図面の簡単な説明】
【００６７】
【図１】本発明の一実施形態によるプログラム構造解析装置の構成を示すブロック図である。
【図２】標準構文解析部の構成を示すブロック図である。
【図３】ソースコードの例と簡易構文木のデータ構造とを説明する図である。
【図４】セクション解析部での処理動作を説明するフローチャートである。
【図５】CALL文解析部での処理動作を説明するフローチャートである。
【図６】外PERFORM 文解析部での処理動作を説明するフローチャートである。
【図７】リポジトリに格納されるセクションテーブルのレイアウト例及びデータ格納例を示す図である。
【図８】リポジトリに格納される呼出プログラムテーブルのレイアウト例及びデータ格納例を示す図である。
【図９】リポジトリに格納される呼出セクションテーブルのレイアウト例及びデータ格納例を示す図である。
【図１０】構造情報再構成部の構成を示すブロック図である。
【図１１】プログラム呼出階層再構成部での処理動作を説明するフローチャートである。
【図１２】プログラム呼出階層再構成部での処理によるプログラム呼出階層再構成結果のデータ構造の例を示す概念図である。
【図１３】セクション関連再構成部での処理動作を説明するフローチャートである。
【図１４】セクション関連再構成部での処理によるセクション関連再構成結果のデータ構造の例を示す概念図である。
【図１５】ドキュメント生成部での処理動作を説明するフローチャートである。
【図１６】スタイル情報格納部のレイアウト例及びデータ格納例を示す図である。
【図１７Ａ】入力となるCOBOLソースコードであるプログラムＡの例を示す図である。
【図１７Ｂ】入力となるCOBOLソースコードであるプログラムＢの例を示す図である。
【図１７Ｃ】入力となるCOBOLソースコードであるプログラムＣの例を示す図である。
【図１７Ｄ】入力となるCOBOLソースコードであるプログラムＸの例を示す図である。
【図１７Ｅ】入力となるCOBOLソースコードであるプログラムＡ、Ｂ、Ｃ、Ｘの解析結果ドキュメントであるプログラム呼出し階層図の例を示す図である。
【図１７Ｆ】入力となるCOBOLソースコードであるプログラムＡ、Ｂ、Ｃ、Ｘの解析結果ドキュメントであるセクション関連図の例を示す図である。
【符号の説明】
【００６８】
１０１  プログラム解析装置
１０２  ソースコード
１０３  標準構文解析部
１０４  構造情報再構成部
１０５  ドキュメント生成部
１０６  リポジトリ
１０７  解析結果ドキュメント
１０８  スタイル情報格納部
２０１  前処理部
２０２  簡易構文木構築部
２０３  セクション解析部
２０４  CALL文解析部
２０５  外PERFORM 文解析部
１００１  プログラム呼出階層再構成部
１００２  セクション関連再構成部
【図１】
2009080681.tif 000003
【図２】
2009080681.tif 000004
【図３】
2009080681.tif 000005
【図４】
2009080681.tif 000006
【図５】
2009080681.tif 000007
【図６】
2009080681.tif 000008
【図７】
2009080681.tif 000009
【図８】
2009080681.tif 000010
【図９】
2009080681.tif 000011
【図１０】
2009080681.tif 000012
【図１１】
2009080681.tif 000013
【図１２】
2009080681.tif 000014
【図１３】
2009080681.tif 000015
【図１４】
2009080681.tif 000016
【図１５】
2009080681.tif 000017
【図１６】
2009080681.tif 000018
【図１７Ａ】
2009080681.tif 000019
【図１７Ｂ】
2009080681.tif 000020
【図１７Ｃ】
2009080681.tif 000021
【図１７Ｄ】
2009080681.tif 000022
【図１７Ｅ】
2009080681.tif 000023
【図１７Ｆ】
2009080681.tif 000024