(57)【要約】【課題】従来、ソースプログラムを理解しやすいドキュメントを自動生成できなかった。【解決手段】ソースプログラムから関数識別子を取得する関数識別子取得部と、関数識別子で識別される関数に対して与えられる１以上の入力データ識別子を取得する入力データ識別子取得部と、関数識別子で識別される関数が出力する出力データを識別する１以上の出力データ識別子を取得する出力データ識別子取得部と、１以上の入力データ識別子に対応する１以上の入力データ情報と関数識別子に対応する関数情報とが図的に連結され、かつ関数識別子に対応する関数情報と１以上の出力データ識別子に対応する１以上の出力データ情報とが図的に連結された図であるＩＯ関連図を構成する構成部と、ＩＯ関連図を出力する出力部とを具備するドキュメント生成装置により、ソースプログラムを理解しやすいドキュメントを自動生成できる。【選択図】図１
2018194883.tif 000002
【特許請求の範囲】
【請求項１】
ソースプログラムが格納されるプログラム格納部と、
前記ソースプログラムから関数を識別する関数識別子を取得する関数識別子取得部と、
前記関数識別子で識別される関数に対して与えられる入力データを識別する１以上の入力データ識別子を取得する入力データ識別子取得部と、
前記関数識別子で識別される関数が出力する出力データを識別する１以上の出力データ識別子を取得する出力データ識別子取得部と、
前記１以上の入力データ識別子に対応する１以上の入力データ情報と前記関数識別子に対応する関数情報とが図的に連結され、かつ前記関数識別子に対応する関数情報と前記１以上の出力データ識別子に対応する１以上の出力データ情報とが図的に連結された図であるＩＯ関連図を構成する構成部と、
前記ＩＯ関連図を出力する出力部とを具備するドキュメント生成装置。
【請求項２】
前記関数識別子で識別される関数を説明する文字列である関数説明情報を取得する関数説明情報取得部をさらに具備し、
前記関数情報は、前記関数説明情報を含む請求項１記載のドキュメント生成装置。
【請求項３】
前記入力データ識別子取得部が取得した１以上の各入力データ識別子で識別される入力データを説明する文字列である入力データ説明情報を取得する入力データ説明情報取得部と、
前記出力データ識別子取得部が取得した１以上の各出力データ識別子で識別される出力データを説明する文字列である出力データ説明情報を取得する出力データ説明情報取得部とをさらに具備し、
前記入力データ情報は、入力データ説明情報を含み、
前記出力データ情報は、出力データ説明情報を含む請求項１または請求項２記載のドキュメント生成装置。
【請求項４】
ソースプログラムが格納されるプログラム格納部と、
前記ソースプログラムから関数を識別する１以上の関数識別子を取得する関数識別子取得部と、
関数間の呼び出し関係に関する情報である１以上の関数間情報を取得する関数間情報取得部と、
前記関数識別子取得部が取得した１以上の各関数識別子で識別される関数を説明する文字列である関数説明情報を取得する関数説明情報取得部と、
前記１以上の関数間情報を用いて、２以上の関数間の呼び出し関係を、ノードとリンクとを用いた図であり、前記関数説明情報取得部が取得した１以上の各関数説明情報がノードに含まれる図である説明付加プログラム構造図を構成する構成部と、
前記説明付加プログラム構造図を出力する出力部とを具備するドキュメント生成装置。
【請求項５】
ソースプログラムが格納されるプログラム格納部と、
前記ソースプログラムを構成する１以上の各命令を構成する要素のうち、予め決められた種類の要素に対して、当該要素を説明する要素説明情報を取得する要素説明情報取得部と、
前記要素説明情報取得部が取得した要素説明情報を、対応する要素に置き換える、または対応する要素に付加して、要素説明情報が付加された１以上の説明付加命令を取得する説明付加命令取得部と、
前記１以上の説明付加命令を有するドキュメントである説明付加ソースドキュメントを構成する構成部と、
前記説明付加ソースドキュメントを出力する出力部とを具備するドキュメント生成装置。
【請求項６】
前記予め決められた種類の要素は、予約語を含まない請求項５記載のドキュメント生成装置。
【請求項７】
前記ソースプログラムに関連するドキュメントであり、前記ソースプログラムに含まれる要素の要素識別子と、当該要素を説明する要素説明情報とを、対応付けて有するドキュメントが格納されるドキュメント格納部と、
前記ドキュメントから、要素識別子と、当該要素識別子と対になる要素説明情報とを取得し、当該要素識別子と当該要素説明情報とを有する要素情報を蓄積する要素情報蓄積部とをさらに具備する請求項１から請求項６いずれか一項に記載のドキュメント生成装置。
【請求項８】
前記ソースプログラムは、マイグレーションの対象のソースプログラムである請求項１から請求項７いずれか一項に記載のドキュメント生成装置。
【請求項９】
関数識別子取得部、入力データ識別子取得部、出力データ識別子取得部、構成部、および出力部により実現されるドキュメントの生産方法であって、
前記関数識別子取得部が、ソースプログラムから関数を識別する関数識別子を取得する関数識別子取得ステップと、
前記入力データ識別子取得部が、前記関数識別子で識別される関数に対して与えられる入力データを識別する１以上の入力データ識別子を取得する入力データ識別子取得ステップと、
前記出力データ識別子取得部が、前記関数識別子で識別される関数が出力する出力データを識別する１以上の出力データ識別子を取得する出力データ識別子取得ステップと、
前記構成部が、前記１以上の入力データ識別子に対応する１以上の入力データ情報と前記関数識別子に対応する関数情報とが図的に連結され、かつ前記関数識別子に対応する関数情報と前記１以上の出力データ識別子に対応する１以上の出力データ情報とが図的に連結された図であるＩＯ関連図を構成する構成ステップと、
前記出力部が、前記ＩＯ関連図を出力する出力ステップとを具備するドキュメントの生産方法。
【請求項１０】
関数識別子取得部、関数間情報取得部、関数説明情報取得部、構成部、および出力部により実現されるドキュメントの生産方法であって、
前記関数識別子取得部が、ソースプログラムから関数を識別する１以上の関数識別子を取得する関数識別子取得ステップと、
前記関数間情報取得部が、関数間の呼び出し関係に関する情報である１以上の関数間情報を取得する関数間情報取得ステップ部と、
前記関数説明情報取得部が、前記関数識別子取得ステップで取得された１以上の各関数識別子で識別される関数を説明する文字列である関数説明情報を取得する関数説明情報取得ステップと、
前記構成部が、前記１以上の関数間情報を用いて、２以上の関数間の呼び出し関係を、ノードとリンクとを用いた図であり、前記関数説明情報取得ステップで取得された１以上の各関数説明情報がノードに含まれる図である説明付加プログラム構造図を構成する構成ステップと、
前記出力部が、前記説明付加プログラム構造図を出力する出力ステップとを具備するドキュメントの生産方法。
【請求項１１】
要素説明情報取得部、説明付加命令取得部、構成部、および出力部により実現されるドキュメントの生産方法であって、
前記要素説明情報取得部が、ソースプログラムを構成する１以上の各命令を構成する要素のうち、予め決められた種類の要素に対して、当該要素を説明する要素説明情報を取得する要素説明情報取得ステップと、
前記説明付加命令取得部が、前記要素説明情報取得ステップで取得された要素説明情報を、対応する要素に置き換える、または対応する要素に付加して、要素説明情報が付加された１以上の説明付加命令を取得する説明付加命令取得ステップと、
前記構成部が、前記１以上の説明付加命令を有するドキュメントである説明付加ソースドキュメントを構成する構成ステップと、
前記出力部が、前記説明付加ソースドキュメントを出力する出力ステップとを具備するドキュメントの生産方法。
【請求項１２】
コンピュータを、
ソースプログラムから関数を識別する関数識別子を取得する関数識別子取得部と、
前記関数識別子で識別される関数に対して与えられる入力データを識別する１以上の入力データ識別子を取得する入力データ識別子取得部と、
前記関数識別子で識別される関数が出力する出力データを識別する１以上の出力データ識別子を取得する出力データ識別子取得部と、
前記１以上の入力データ識別子に対応する１以上の入力データ情報と前記関数識別子に対応する関数情報とが図的に連結され、かつ前記関数識別子に対応する関数情報と前記１以上の出力データ識別子に対応する１以上の出力データ情報とが図的に連結された図であるＩＯ関連図を構成する構成部と、
前記ＩＯ関連図を出力する出力部として機能させるためのプログラム。
【請求項１３】
コンピュータを、
ソースプログラムから関数を識別する１以上の関数識別子を取得する関数識別子取得部と、
関数間の呼び出し関係に関する情報である１以上の関数間情報を取得する関数間情報取得部と、
前記関数識別子取得部が取得した１以上の各関数識別子で識別される関数を説明する文字列である関数説明情報を取得する関数説明情報取得部と、
前記１以上の関数間情報を用いて、２以上の関数間の呼び出し関係を、ノードとリンクとを用いた図であり、前記関数説明情報取得部が取得した１以上の各関数説明情報がノードに含まれる図である説明付加プログラム構造図を構成する構成部と、
前記説明付加プログラム構造図を出力する出力部として機能させるためのプログラム。
【請求項１４】
コンピュータを、
ソースプログラムを構成する１以上の各命令を構成する要素のうち、予め決められた種類の要素に対して、当該要素を説明する要素説明情報を取得する要素説明情報取得部と、
前記要素説明情報取得部が取得した要素説明情報を、対応する要素に置き換える、または対応する要素に付加して、要素説明情報が付加された１以上の説明付加命令を取得する説明付加命令取得部と、
前記１以上の説明付加命令を有するドキュメントである説明付加ソースドキュメントを構成するドキュメント構成部と、
前記説明付加ソースドキュメントを出力する出力部として機能させるためのプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ソースプログラムからドキュメントを生成するドキュメント生成装置等に関するものである。
【背景技術】
【０００２】
従来、複数のモジュールを含むソースファイルから各々のモジュールに分けてドキュメントを自動生成するドキュメント自動生成システムが存在した。本ドキュメント自動生成システムは、プログラミング言語で記述されているソースファイルから、処理フロー仕様書、テーブル定義仕様書、モジュール定義仕様書の各ドキュメントファイルを自動生成する。このドキュメント自動生成システムには、ドキュメント生成処理部が備えられ、ソースファイルが複数モジュールから構成されている場合に、モジュール毎に処理フロー仕様書ファイルを分割して、各ドキュメントファイルを作成する。（例えば、特許文献１参照）。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特開平５−８１００４号公報
【発明の概要】
【発明が解決しようとする課題】
【０００４】
しかしながら、従来技術においては、ソースプログラムを理解しやすいドキュメントを自動生成できなかった。
【課題を解決するための手段】
【０００５】
本第一の発明のドキュメント生成装置は、ソースプログラムが格納されるプログラム格納部と、ソースプログラムから関数を識別する関数識別子を取得する関数識別子取得部と、関数識別子で識別される関数に対して与えられる入力データを識別する１以上の入力データ識別子を取得する入力データ識別子取得部と、関数識別子で識別される関数が出力する出力データを識別する１以上の出力データ識別子を取得する出力データ識別子取得部と、１以上の入力データ識別子に対応する１以上の入力データ情報と関数識別子に対応する関数情報とが図的に連結され、かつ関数識別子に対応する関数情報と１以上の出力データ識別子に対応する１以上の出力データ情報とが図的に連結された図であるＩＯ関連図を構成する構成部と、ＩＯ関連図を出力する出力部とを具備するドキュメント生成装置である。
【０００６】
かかる構成により、ソースプログラムを理解しやすいＩＯ関連図を自動生成できる
【０００７】
また、本第二の発明のドキュメント生成装置は、第一の発明に対して、関数識別子で識別される関数を説明する文字列である関数説明情報を取得する関数説明情報取得部をさらに具備し、関数情報は、関数説明情報を含むドキュメント生成装置である。
【０００８】
かかる構成により、ソースプログラムを理解しやすいＩＯ関連図を自動生成できる。
【０００９】
また、本第三の発明のドキュメント生成装置は、第一または第二の発明に対して、入力データ識別子取得部が取得した１以上の各入力データ識別子で識別される入力データを説明する文字列である入力データ説明情報を取得する入力データ説明情報取得部と、出力データ識別子取得部が取得した１以上の各出力データ識別子で識別される出力データを説明する文字列である出力データ説明情報を取得する出力データ説明情報取得部とをさらに具備し、入力データ情報は、入力データ説明情報を含み、出力データ情報は、出力データ説明情報を含むドキュメント生成装置である。
【００１０】
かかる構成により、ソースプログラムをより理解しやすいＩＯ関連図を自動生成できる。
【００１１】
また、本第四の発明のドキュメント生成装置は、ソースプログラムが格納されるプログラム格納部と、ソースプログラムから関数を識別する１以上の関数識別子を取得する関数識別子取得部と、関数間の呼び出し関係に関する情報である１以上の関数間情報を取得する関数間情報取得部と、関数識別子取得部が取得した１以上の各関数識別子で識別される関数を説明する文字列である関数説明情報を取得する関数説明情報取得部と、１以上の関数間情報を用いて、２以上の関数間の呼び出し関係を、ノードとリンクとを用いた図であり、関数説明情報取得部が取得した１以上の各関数説明情報がノードに含まれる図である説明付加プログラム構造図を構成する構成部と、説明付加プログラム構造図を出力する出力部とを具備するドキュメント生成装置である。
【００１２】
かかる構成により、ソースプログラムを理解しやすい説明付加プログラム構造図を自動生成できる。
【００１３】
また、本第五の発明のドキュメント生成装置は、ソースプログラムが格納されるプログラム格納部と、ソースプログラムを構成する１以上の各命令を構成する要素のうち、予め決められた種類の要素に対して、要素を説明する要素説明情報を取得する要素説明情報取得部と、要素説明情報取得部が取得した要素説明情報を、対応する要素に置き換える、または対応する要素に付加して、要素説明情報が付加された１以上の説明付加命令を取得する説明付加命令取得部と、１以上の説明付加命令を有するドキュメントである説明付加ソースドキュメントを構成するドキュメント構成部と、説明付加ソースドキュメントを出力する出力部とを具備するドキュメント生成装置である。
【００１４】
かかる構成により、ソースプログラムを理解しやすい説明付加ソースドキュメントを自動生成できる。
【００１５】
また、本第六の発明のドキュメント生成装置は、第五の発明に対して、予め決められた種類の要素は、予約語を含まないドキュメント生成装置である。
【００１６】
かかる構成により、ソースプログラムをより理解しやすい説明付加ソースドキュメントを自動生成できる。
【００１７】
また、本第七の発明のドキュメント生成装置は、第一から第六いずれか１つの発明に対して、ソースプログラムに関連するドキュメントであり、ソースプログラムに含まれる要素の要素識別子と、要素を説明する要素説明情報とを、対応付けて有するドキュメントが格納されるドキュメント格納部と、ドキュメントから、要素識別子と、要素識別子と対になる要素説明情報とを取得し、要素識別子と要素説明情報とを有する要素情報を蓄積する要素情報蓄積部とをさらに具備するドキュメント生成装置である。
【００１８】
かかる構成により、ソースプログラムを理解しやすいドキュメントを簡単に自動生成できる。
【００１９】
また、本第八の発明のドキュメント生成装置は、第一から第七いずれか１つの発明に対して、ソースプログラムは、マイグレーションの対象のソースプログラムであるドキュメント生成装置である。
【００２０】
かかる構成により、マイグレーション対象のソースプログラムを理解しやすいドキュメントを自動生成できる。
【発明の効果】
【００２１】
本発明によるドキュメント生成装置によれば、ソースプログラムを理解しやすいドキュメントを自動生成できる。
【図面の簡単な説明】
【００２２】
【図１】実施の形態１におけるドキュメント生成装置Ａのブロック図
【図２】同ドキュメント生成装置Ａの動作の一例について説明するフローチャート
【図３】同関数内処理の詳細について説明するフローチャート
【図４】同ＩＯ構成図構成処理について説明するフローチャート
【図５】同要素情報蓄積処理について説明するフローチャート
【図６】同ソースプログラムを示す図
【図７】同関数情報管理表を示す図
【図８】同格納手段情報管理表を示す図
【図９】同出力例を示す図
【図１０】同ソースプログラムを示す図
【図１１】同変数情報管理表を示す図
【図１２】同出力例を示す図
【図１３】実施の形態２におけるドキュメント生成装置Ｂのブロック図
【図１４】同ドキュメント生成装置Ｂの動作について説明するフローチャート
【図１５】同関数内処理の詳細について説明するフローチャート
【図１６】同説明付加プログラム構造図構成処理について説明するフローチャート
【図１７】同被呼出関数処理について説明するフローチャート
【図１８】同関数間情報管理表を示す図
【図１９】同説明付加プログラム構造図の例を示す図
【図２０】実施の形態３におけるドキュメント生成装置Ｃのブロック図
【図２１】同ドキュメント生成装置Ｃの動作について説明するフローチャート
【図２２】同説明付加ソースドキュメントの出力例を示す図
【図２３】上記実施の形態におけるコンピュータシステムの概観図
【図２４】同コンピュータシステムのブロック図
【発明を実施するための形態】
【００２３】
以下、ドキュメント生成装置等の実施形態について図面を参照して説明する。なお、実施の形態において同じ符号を付した構成要素は同様の動作を行うので、再度の説明を省略する場合がある。
【００２４】
（実施の形態１）
本実施の形態において、ソースプログラムからＩ／Ｏ関連図を自動生成するドキュメント生成装置について説明する。なお、Ｉ／Ｏ関連図とは、入力データ、その入力データを与える関数、当該関数の出力データの関係を図的に表現するドキュメントである。また、入力データは、例えば、ソースプログラムの中の変数名、変数を説明する文字列のうちの１以上である。また、関数は、例えば、ソースプログラムの中の関数名、関数を説明する文字列のうちの１以上である。さらに、出力データは、例えば、ソースプログラムの中の変数名、変数を説明する文字列のうちの１以上である。
【００２５】
図１は、本実施の形態におけるドキュメント生成装置Ａのブロック図である。ドキュメント生成装置Ａは、格納部１、処理部２、出力部３、および受付部４を備える。
【００２６】
格納部１は、プログラム格納部１１、ドキュメント格納部１２、および要素情報格納部１３を備える。
【００２７】
処理部２は、関数識別子取得部２１、入力データ識別子取得部２２、出力データ識別子取得部２３、関数説明情報取得部２４、入力データ説明情報取得部２５、出力データ説明情報取得部２６、構成部２７、および要素情報蓄積部２８を備える。
【００２８】
格納部１は、各種の情報を格納し得る。各種の情報とは、例えば、プログラム、キュメント、後述する要素情報、１以上の要素識別子取得条件などである。要素情報要素識別子取得条件とは、プログラム格納部１１のソースプログラムから要素識別子を取得するための条件に関する情報であり、ドキュメント生成装置Ａの機能を実現するプログラム中に埋め込まれていても良いし、プログラム自体でも良い。
【００２９】
プログラム格納部１１は、１または２以上のソースプログラムが格納される。ソースプログラムは、マイグレーションの対象のソースプログラムであることは好適である。つまり、ソースプログラムは、マイグレーションを行う前のソースプログラムであることは好適である。また、ソースプログラムの言語は問わない。言語は、例えば、ＣＯＢＯＬ、Ｃ言語、ＪＡＶＡ（登録商標）、Ｃ＋＋等である。ソースプログラムは、マイグレーションの対象のソースプログラムであることは好適である。プログラム格納部１１のソースプログラムは、通常、ファイルであるが、その形式は問わない。
【００３０】
なお、ソースプログラムは、コメントを有することは好適である。ソースプログラム内のコメントは、通常、説明対象の要素（例えば、関数、入力データ、出力データ）の要素識別子（例えば、関数識別子、入力データ識別子、出力データ識別子）に対応付いている。コメントは、例えば、関数を説明する関数説明情報、入力データを説明する入力データ説明情報、出力データを説明する出力データ説明情報である。なお、関数は、モジュール、メソッド、プログラム等と言っても良い。関数は、処理命令の集合を有する。関数説明情報は、関数を説明する自然言語文の情報である。また、入力データは、通常、関数に与えるデータであり、引数、パラメータと言っても良い。入力データ識別子は、プログラムの命令等の中に使用されている文字列である。入力データ説明情報は、入力データを説明する自然言語文の情報である。また、出力データは、通常、関数からのアウトプットのデータであり、リターン値、出力値と言っても良い。出力データ識別子は、プログラムの命令等の中に使用されている文字列である。出力データ説明情報は、出力データを説明する自然言語文の情報である。また、出力データは、格納手段を含んでも良い。格納手段は、情報を格納する領域と言っても良い。格納手段は、例えば、ソフトウェアで実現される情報の格納領域である。格納手段は、例えば、ファイル、データベース、テーブル、リポジトリ等である。ただし、格納手段は、例えば、ディスクやサーバ装置等のハードウェアでも良い。つまり、出力データは、データの出力先を含んでも良い。
【００３１】
また、ソースプログラムにおいて、コメントが、要素識別子に対して、予め決められた位置に配置されていることは好適である。コメントは、例えば、要素識別子の横に配置されている。また、例えば、関数説明情報は、関数の定義の直上の行に配置されている。また、プログラム格納部１１のソースプログラムは、処理部２による整構造化処理が行われたソースプログラムであることは好適である。なお、整構造化処理については、後述する。
【００３２】
ドキュメント格納部１２は、１または２以上のドキュメントが格納される。ドキュメントとは、ソースプログラムに関連するドキュメントである。ドキュメントは、ソースプログラムの開発時に作成されたドキュメントであることは好適である。
【００３３】
ドキュメントは、ソースプログラムに関する説明が記載された情報である。ドキュメントは、ソースプログラムに含まれる要素の要素識別子と、要素を説明する要素説明情報とを、対応付けて有する情報である。つまり、ドキュメントは、ソースプログラムに含まれる格納手段の格納手段識別子と、格納手段を説明する格納手段説明情報とを、対応付けて有する情報であることは好適である。また、ドキュメントは、ソースプログラムに含まれる関数の関数識別子と、関数を説明する関数説明情報とを、対応付けて有する情報であることは好適である。
【００３４】
要素情報格納部１３は、１または２以上の要素情報が格納される。要素情報は、要素に関する情報であり、要素識別子と要素説明情報との対の情報である。つまり、要素情報は、例えば、関数識別子と関数説明情報の組、入力データ識別子と入力データ説明情報の組、出力データ識別子と出力データ説明情報の組である。出力データ識別子と出力データ説明情報の組は、格納手段識別子と格納手段説明情報との組でも良い。また、出力データ識別子と出力データ説明情報の組は、リターン値識別子とリターン値説明情報との組でも良い。リターン値識別子とは、関数のリターン値を識別する情報であり、関数のリターン値を構成する変数の識別子である。リターン値説明情報とは、関数のリターン値を説明する情報であり、関数のリターン値を構成する変数を説明する情報である。
【００３５】
処理部２は、各種の処理を行う。各種の処理とは、例えば、関数識別子取得部２１、入力データ識別子取得部２２、出力データ識別子取得部２３、関数説明情報取得部２４、入力データ説明情報取得部２５、出力データ説明情報取得部２６、構成部２７、要素情報蓄積部２８等が行う処理、整構造化処理である。
【００３６】
整構造化処理とは、ソースプログラムの手続き部分を構造化された形に変換する処理である。整構造化処理では、例えば、ＣＯＢＯＬのソースプログラムの各文の実行順序を解析、整理してプログラムの手続き部分を順次（連接）、選択、反復の３種類の制御構造の組み合わせからなる形に変換する。さらに、変換後のプログラムの手続きの構成を分かりやすくするために、手続き部分全体がいくつかの手続き単位で構成されるようにセクショニング化を行う。各手続き単位間の制御の移行は、ＰＥＲＦＯＲＭ文を用いて表現する。以上のような整構造化処理によってプログラム内の制御の流れが単純化し、見易いプログラムになる。具体的には、手続きの呼び出し関係が階層化され、手続き部分の構成が分かりやすくなる。また、反復して実行される処理の範囲および反復の終了条件が明確になる。また、条件による選択処理では、各条件とその真偽に対する処理の関係が明確に表現される。また、ソースプログラムにおいて実行されない命令があれば除去される。また、一部の例外を除いて、ＧＯＴＯ文はなくなる。また、ＰＥＲＦＯＲＭ  ＴＨＲＵ文やＡＬＴＥＲ文もなくなる。なお、整構造化処理は公知技術であるので詳細な説明を省略する。
【００３７】
また、処理部２等の処理のトリガーは問わない。処理部２等は、例えば、後述する受付部４が指示等を受け付けた場合に、当該指示等に従って、処理を実行する。
【００３８】
関数識別子取得部２１は、プログラム格納部１１のソースプログラムから、１または２以上の関数識別子を取得する。関数識別子は、関数を識別する情報であり、例えば、関数名である。関数識別子取得部２１は、例えば、手がかりとなる１以上の文字（例えば、「｛」、「PROCEDURE」）を用いて、関数識別子を取得する。
【００３９】
関数識別子取得部２１は、例えば、１以上のいずれかの要素識別子取得条件に合致する行から、関数識別子を取得する。かかる場合、要素識別子取得条件は、例えば、上記の手がかりとなる１以上の文字（例えば、「｛」、「PROCEDURE」）である。
【００４０】
なお、ソースプログラムから関数識別子を取得する処理は公知技術であるので、詳細な説明を省略する。
【００４１】
入力データ識別子取得部２２は、ソースプログラムから１または２以上の入力データ識別子を取得する。入力データ識別子取得部２２は、例えば、関数識別子取得部２１が取得した関数識別子と同じ行から、手がかりとなる１以上の文字（例えば、「（」）を用いて、入力データ識別子を取得する。入力データ識別子取得部２２は、例えば、文字列パターン（例えば、「関数識別子（入力データ識別子，入力データ識別子，入力データ識別子）」）の情報を保持しており、かかる文字列パターンをソースプログラムに適用し、１以上の入力データ識別子を取得する。入力データ識別子取得部２２は、通常、関数識別子取得部２１が取得した関数識別子と同じ行から、１以上の入力データ識別子を取得する。
【００４２】
入力データ識別子取得部２２は、例えば、１以上のいずれかの要素識別子取得条件に合致する行から、１以上の入力データ識別子を取得する。かかる場合、要素識別子取得条件は、例えば、上記の手がかりとなる１以上の文字を有する文字列（例えば、「（」）、文字列パターン（例えば、「関数識別子（入力データ識別子，入力データ識別子，入力データ識別子）」）である。
【００４３】
なお、ソースプログラムから入力データ識別子を取得する処理は公知技術であるので、詳細な説明を省略する。
【００４４】
出力データ識別子取得部２３は、ソースプログラムから１または２以上の出力データ識別子を取得する。出力データ識別子取得部２３は、ソースプログラムから、出力データを識別する１以上の出力データ識別子を取得する。出力データとは、関数識別子で識別される関数が出力するデータである。出力データは、関数がリターンするデータ（変数）、関数内で情報が書き込まれる格納手段等である。出力データ識別子取得部２３は、例えば、文字列パターン（例えば、「return（出力データ識別子）」、「write（出力データ識別子,データ）」、「UPDATE  データ  TO  出力データ識別子」）の情報を保持しており、かかる文字列パターンをソースプログラムに適用し、１以上の出力データ識別子を取得する。
【００４５】
出力データ識別子取得部２３は、例えば、１以上のいずれかの要素識別子取得条件に合致する行から、１以上の入力データ識別子を取得する。かかる場合、要素識別子取得条件は、例えば、上記の文字列パターン（例えば、「return（出力データ識別子）」、「write（出力データ識別子,データ）」、「UPDATE  データ  TO  出力データ識別子」）である。
【００４６】
なお、ソースプログラムから出力データ識別子を取得する処理は公知技術であるので、詳細な説明を省略する。
【００４７】
関数説明情報取得部２４は、関数識別子で識別される関数を説明する文字列である関数説明情報を取得する。関数説明情報の取得元は問わない。関数説明情報取得部２４は、ソースプログラムのコメントから関数説明情報を取得しても良い。関数説明情報取得部２４は、例えば、取得された関数識別子と予め決められた位置関係（例えば、直ぐ上の行）にあるコメントである関数説明情報を取得する。関数説明情報取得部２４は、ドキュメントから関数説明情報を取得しても良い。関数説明情報取得部２４は、例えば、ドキュメントの構造の情報（例えば、「関数識別子：関数説明情報」を保持しており、かかる構造の情報を用いて、関数識別子を手掛かりにして、関数説明情報をドキュメントから取得する。関数説明情報取得部２４は、関数識別子と関数説明情報との対応表から関数説明情報を取得しても良い。なお、かかる対応表は、要素情報格納部１３に格納されている。対応表は、１以上の要素情報である。なお、関数説明情報取得部２４が関数説明情報を取得する方法は種々あり得、問わない。関数説明情報取得部２４の処理は公知技術であるので、詳細な説明を省略する。
【００４８】
入力データ説明情報取得部２５は、入力データ識別子取得部２２が取得した１以上の各入力データ識別子で識別される入力データの入力データ説明情報を取得する。入力データ説明情報の取得元は問わない。入力データ説明情報取得部２５は、ソースプログラムのコメントから入力データ説明情報を取得しても良い。入力データ説明情報取得部２５は、例えば、入力データ識別子と予め決められた位置関係（例えば、同じ行の直ぐ横）にあるコメントである入力データ説明情報を取得する。入力データ説明情報取得部２５は、ドキュメントから入力データ説明情報を取得しても良い。入力データ説明情報取得部２５は、例えば、ドキュメントの構造の情報（例えば、「入力データ識別子｜入力データ説明情報」を保持しており、かかる構造の情報を用いて、入力データ識別子を手掛かりにして、入力データ説明情報をドキュメントから取得する。入力データ説明情報取得部２５は、入力データ識別子と入力データ説明情報との対応表から入力データ説明情報を取得しても良い。なお、かかる対応表は、要素情報格納部１３に格納されている。対応表は、１以上の要素情報である。なお、入力データ説明情報取得部２５が入力データ説明情報を取得する方法は種々あり得、問わない。入力データ説明情報取得部２５の処理は公知技術であるので、詳細な説明を省略する。
【００４９】
出力データ説明情報取得部２６は、出力データ識別子取得部２３が取得した１以上の各出力データ識別子で識別される出力データの出力データ説明情報を取得する。出力データ説明情報の取得元は問わない。出力データ説明情報取得部２６は、ソースプログラムのコメントから出力データ説明情報を取得しても良い。出力データ説明情報取得部２６は、例えば、ソースプログラムから変数の定義の行であり、出力データ識別子の変数を検知し、当該変数と予め決められた位置関係（例えば、同じ行の直ぐ横）にあるコメントである出力データ説明情報を取得する。出力データ説明情報取得部２６は、ドキュメントから出力データ説明情報を取得しても良い。出力データ説明情報取得部２６は、例えば、ドキュメントの構造の情報（例えば、「出力データ識別子  ・・・  出力データ説明情報」を保持しており、かかる構造の情報を用いて、出力データ識別子を手掛かりにして、出力データ説明情報をドキュメントから取得する。出力データ説明情報取得部２６は、出力データ識別子と出力データ説明情報との対応表から出力データ説明情報を取得しても良い。なお、かかる対応表は、要素情報格納部１３に格納されている。対応表は、１以上の要素情報である。なお、出力データ説明情報取得部２６が出力データ説明情報を取得する方法は種々あり得、問わない。出力データ説明情報取得部２６の処理は公知技術であるので、詳細な説明を省略する。
【００５０】
構成部２７は、ＩＯ関連図を構成する。ＩＯ関連図とは、関数と１以上の入力データと１以上の出力データとの関係を示した図であり、関数、入力データ、出力データの要素のうちの１、または２以上の種類の要素を説明する説明情報を有する図である。ＩＯ関連図は、１以上の入力データ識別子に対応する１以上の入力データ情報と関数識別子に対応する関数情報とが図的に連結され、かつ関数識別子に対応する関数情報と１以上の出力データ識別子に対応する１以上の出力データ情報とが図的に連結された図である。つまり、構成部２７は、一の関数に対して、関数情報、１以上の入力データ情報、および１以上の出力データ情報を用いて、ＩＯ関連図を構成する。関数情報は、関数識別子、または関数説明情報、または関数識別子と関数説明情報である。入力データ情報は、入力データ識別子、または入力データ説明情報、または入力データ識別子と入力データ説明情報である。出力データ情報は、出力データ識別子、または出力データ説明情報、または出力データ識別子と出力データ説明情報である。ＩＯ関連図は、通常、１以上の入力データ情報と１以上の出力データ情報との間に関数情報が配置され、１以上の入力データ情報と関数情報とが連結され、関数情報と１以上の出力データ情報とが連結された図である。ＩＯ関連図は、例えば、１以上の入力データ情報が左側に配置され、１以上の出力データ情報が右側に配置され、関数情報が１以上の入力データ情報と１以上の出力データ情報との間に配置され、１以上の入力データ情報と関数情報とが連結され、関数情報と１以上の出力データ情報とが連結された図である。また、ＩＯ関連図は、例えば、１以上の入力データ情報が上側に配置され、１以上の出力データ情報が下側に配置され、関数情報が１以上の入力データ情報と１以上の出力データ情報との間に配置され、１以上の入力データ情報と関数情報とが連結され、関数情報と１以上の出力データ情報とが連結された図である。連結されていることは、線で結合されていることだけではなく、対応が視覚的に認識できれば良い。という程度の趣旨である。
【００５１】
なお、構成部２７は、ＩＯ関連図を構成する際に使用する情報は、関数識別子取得部２１、入力データ識別子取得部２２、出力データ識別子取得部２３、関数説明情報取得部２４、入力データ説明情報取得部２５、出力データ説明情報取得部２６のうちのいずれかが取得した情報である。
【００５２】
また、入力データ情報は、入力データ説明情報を含むことは好適である。関数情報は、関数説明情報を含むことは好適である。さらに、出力データ情報は、出力データ説明情報を含むことは好適である。
【００５３】
要素情報蓄積部２８は、ドキュメントから、要素識別子と、要素識別子と対になる要素説明情報とを取得し、要素識別子と要素説明情報とを有する要素情報を蓄積する。
【００５４】
要素情報蓄積部２８は、ドキュメントから、関数識別子と、関数識別子と対になる関数説明情報とを取得し、関数識別子と関数説明情報とを有する関数情報を要素情報格納部１３に蓄積する。かかる場合、要素情報蓄積部２８は、ドキュメントにおける関数識別子と関数説明情報との位置を特定する情報を保持しており、かかる情報を用いて、要素情報蓄積部２８は、ドキュメントから、関数識別子と、関数識別子と対になる関数説明情報とを取得する。
【００５５】
要素情報蓄積部２８は、ソースプログラムから、関数識別子と、関数識別子と対になる関数説明情報とを取得し、関数識別子と関数説明情報とを有する関数情報を要素情報格納部１３に蓄積しても良い。かかる場合、要素情報蓄積部２８は、ソースプログラムにおける関数識別子と関数説明情報との位置を特定する情報を保持しており、かかる情報を用いて、要素情報蓄積部２８は、ドキュメントから、関数識別子と、関数識別子と対になる関数説明情報とを取得する。
【００５６】
要素情報蓄積部２８は、ドキュメントから、入力データ識別子と、入力データ識別子と対になる入力データ説明情報とを取得し、入力データ識別子と入力データ説明情報とを有する入力データ情報を要素情報格納部１３に蓄積する。かかる場合、要素情報蓄積部２８は、ドキュメントにおける入力データ識別子と入力データ説明情報との位置を特定する情報を保持しており、かかる情報を用いて、要素情報蓄積部２８は、ドキュメントから、入力データ識別子と、入力データ識別子と対になる入力データ説明情報とを取得する。
【００５７】
要素情報蓄積部２８は、ソースプログラムから、入力データ識別子と、入力データ識別子と対になる入力データ説明情報とを取得し、入力データ識別子と入力データ説明情報とを有する入力データ情報を要素情報格納部１３に蓄積しても良い。かかる場合、要素情報蓄積部２８は、ソースプログラムにおける入力データ識別子と入力データ説明情報との位置を特定する情報を保持しており、かかる情報を用いて、要素情報蓄積部２８は、ソースプログラムから、入力データ識別子と、入力データ識別子と対になる入力データ説明情報とを取得する。
【００５８】
要素情報蓄積部２８は、ドキュメントから、出力データ識別子と、出力データ識別子と対になる出力データ説明情報とを取得し、出力データ識別子と出力データ説明情報とを有する出力データ情報を要素情報格納部１３に蓄積する。かかる場合、要素情報蓄積部２８は、ドキュメントにおける出力データ識別子と出力データ説明情報との位置を特定する情報を保持しており、かかる情報を用いて、要素情報蓄積部２８は、ドキュメントから、出力データ識別子と、出力データ識別子と対になる出力データ説明情報とを取得する。
【００５９】
要素情報蓄積部２８は、ソースプログラムから、出力データ識別子と、出力データ識別子と対になる出力データ説明情報とを取得し、出力データ識別子と出力データ説明情報とを有する出力データ情報を要素情報格納部１３に蓄積しても良い。かかる場合、要素情報蓄積部２８は、ソースプログラムにおける出力データ識別子と出力データ説明情報との位置を特定する情報を保持しており、かかる情報を用いて、要素情報蓄積部２８は、ソースプログラムから、出力データ識別子と、出力データ識別子と対になる出力データ説明情報とを取得する。
【００６０】
要素情報蓄積部２８は、ドキュメントから、格納手段識別子と、格納手段識別子と対になる格納手段説明情報とを取得し、格納手段識別子と格納手段説明情報とを有する格納手段情報を要素情報格納部１３に蓄積する。かかる場合、要素情報蓄積部２８は、ドキュメントにおける格納手段識別子と格納手段説明情報との位置を特定する情報を保持しており、かかる情報を用いて、要素情報蓄積部２８は、ドキュメントから、格納手段識別子と、格納手段識別子と対になる格納手段説明情報とを取得する。
【００６１】
要素情報蓄積部２８は、ソースプログラムから、格納手段識別子と、格納手段識別子と対になる格納手段説明情報とを取得し、格納手段識別子と格納手段説明情報とを有する格納手段情報を要素情報格納部１３に蓄積しても良い。かかる場合、要素情報蓄積部２８は、ソースプログラムにおける格納手段識別子と格納手段説明情報との位置を特定する情報を保持しており、かかる情報を用いて、要素情報蓄積部２８は、ソースプログラムから、格納手段識別子と、格納手段識別子と対になる格納手段説明情報とを取得する。なお、格納手段は、出力データの一例である、と考えても良い。
【００６２】
出力部３は、構成部２７が構成したＩＯ関連図を出力する。ＩＯ関連図の出力態様は問わないことは言うまでもない。ここで、出力とは、ディスプレイへの表示、プロジェクターを用いた投影、プリンタでの印字、音出力、外部の装置への送信、記録媒体への蓄積、他の処理装置や他のプログラムなどへの処理結果の引渡しなどを含む概念である。
【００６３】
受付部４は、各種の指示等を受け付ける。指示等は、例えば、出力指示、情報を格納部１に蓄積する指示である情報蓄積指示等である。出力指示は、例えば、ＩＯ関連図等のドキュメントを出力する指示である。ここで、受け付けとは、キーボードやマウス、タッチパネルなどの入力デバイスから入力された情報の受け付け、有線もしくは無線の通信回線を介して送信された情報の受信、光ディスクや磁気ディスク、半導体メモリなどの記録媒体から読み出された情報の受け付けなどを含む概念である。
【００６４】
各種の指示等の入力手段は、キーボードやマウスやタッチパネルやメニュー画面によるもの等、何でも良い。受付部４は、キーボード等の入力手段のデバイスドライバーや、メニュー画面の制御ソフトウェア等で実現され得る。
【００６５】
格納部１、プログラム格納部１１、ドキュメント格納部１２、および要素情報格納部１３は、不揮発性の記録媒体が好適であるが、揮発性の記録媒体でも実現可能である。
【００６６】
格納部１等に情報が記憶される過程は問わない。例えば、記録媒体を介して情報が格納部１等で記憶されるようになってもよく、通信回線等を介して送信された情報が格納部１等で記憶されるようになってもよく、あるいは、入力デバイスを介して入力された情報が格納部１等で記憶されるようになってもよい。
【００６７】
処理部２、関数識別子取得部２１、入力データ識別子取得部２２、出力データ識別子取得部２３、関数説明情報取得部２４、入力データ説明情報取得部２５、出力データ説明情報取得部２６、構成部２７、および要素情報蓄積部２８は、通常、ＭＰＵやメモリ等から実現され得る。処理部２の処理手順は、通常、ソフトウェアで実現され、当該ソフトウェアはＲＯＭ等の記録媒体に記録されている。但し、ハードウェア（専用回路）で実現しても良い。
【００６８】
出力部３は、ディスプレイやスピーカー等の出力デバイスを含むと考えても含まないと考えても良い。出力部３は、出力デバイスのドライバーソフトまたは、出力デバイスのドライバーソフトと出力デバイス等で実現され得る。
【００６９】
次に、ドキュメント生成装置Ａの動作の一例について、図２のフローチャートを用いて説明する。
【００７０】
（ステップＳ２０１）受付部４は、出力指示を受け付けたか否かを判断する。出力指示を受け付けた場合はステップＳ２０２に行き、出力指示を受け付けない場合はステップＳ２１１に行く。
【００７１】
（ステップＳ２０２）処理部２は、プログラム格納部１１から、ソースプログラムを読み出す。
【００７２】
（ステップＳ２０３）処理部２は、カウンタｉに１を代入する。
【００７３】
（ステップＳ２０４）関数識別子取得部２１は、ステップＳ２０２で読み出したソースプログラムの中に、ｉ番目の行が存在するか否かを判断する。ｉ番目の行が存在する場合はステップＳ２０５に行き、ｉ番目の行が存在しない場合はステップＳ２０９に行く。
【００７４】
（ステップＳ２０５）関数識別子取得部２１は、ｉ番目の行に、関数の定義を示す関数の開始行の関数識別子が存在するか否かを判断する。かかる関数識別子が存在する場合はステップＳ２０６に行き、存在しない場合はステップＳ２０８に行く。なお、かかる関数識別子は、関数の呼び出しを示す関数識別子ではない。
【００７５】
（ステップＳ２０６）関数識別子取得部２１は、ｉ番目の行から、関数識別子を取得する。
【００７６】
（ステップＳ２０７）関数説明情報取得部２４は、ステップＳ２０６で取得された関数識別子に対応する関数説明情報を取得し、関数識別子に対応付けて、図示しないバッファに一時蓄積する。
【００７７】
（ステップＳ２０８）処理部２は、関数内処理を行う。ステップＳ２０４に戻る。なお、関数内処理とは、関数内における処理である。関数内処理の詳細について、図３のフローチャートを用いて説明する。なお、処理部２は、関数内処理に対して、カウンタｉと、関数識別子とを渡す。
【００７８】
（ステップＳ２０９）処理部２は、カウンタｉを１、インクリメントする。ステップＳ２０４に戻る。
【００７９】
（ステップＳ２１０）構成部２７は、ＩＯ構成図を構成する。かかるＩＯ構成図構成処理について、図４のフローチャートを用いて説明する。ステップＳ２０１に戻る。
【００８０】
（ステップＳ２１１）受付部４は、情報蓄積指示を受け付けたか否かを判断する。情報蓄積指示を受け付けた場合はステップＳ２１２に行き、情報蓄積指示を受け付けない場合はステップＳ２０１に戻る。
【００８１】
（ステップＳ２１２）要素情報蓄積部２８は、要素情報蓄積処理を行う。ステップＳ２０１に戻る。要素情報蓄積処理について、図５のフローチャートを用いて説明する。
【００８２】
なお、図２のフローチャートにおいて、電源オフや処理終了の割り込みにより処理は終了する。
【００８３】
次に、ステップＳ２０８の関数内処理の詳細について、図３のフローチャートを用いて説明する。
【００８４】
（ステップＳ３０１）処理部２は、ｉ番目の行を読み出す。
【００８５】
（ステップＳ３０２）処理部２は、ｉ行目が関数の終了の行であるか否かを判断する。ｉ行目が関数の終了の行である場合はｉをリターンし、ｉ行目が関数の終了の行でない場合はステップＳ３０３に行く。
【００８６】
（ステップＳ３０３）処理部２は、カウンタｊに１を代入する。
【００８７】
（ステップＳ３０４）処理部２は、ｊ番目の要素識別子取得条件が存在するか否かを判断する。ｊ番目の要素識別子取得条件が存在する場合はステップＳ３０５に行き、ｊ番目の要素識別子取得条件が存在しない場合はステップＳ３０９に行く。
【００８８】
（ステップＳ３０５）処理部２は、ｊ番目の要素識別子取得条件を格納部１から取得し、ステップＳ３０１で読み出したｉ番目の行が、当該ｊ番目の要素識別子取得条件に合致するか否かを判断する。合致する場合はステップＳ３０６行き、合致しない場合はステップＳ３０８に行く。
【００８９】
（ステップＳ３０６）入力データ識別子取得部２２、出力データ識別子取得部２３は、１以上の入力データ識別子、１以上の出力データ識別子のいずれか１種類以上の識別子を取得する。
【００９０】
（ステップＳ３０７）ステップＳ３０６で入力データ識別子取得部２２が１以上の入力データ識別子を取得できた場合、入力データ説明情報取得部２５は、取得された１以上の各入力データ識別子に対応する入力データ説明情報を取得し、入力データ識別子に対応付けて、図示しないバッファに一時蓄積する。また、ステップＳ３０６で出力データ識別子取得部２３が１以上の出力データ識別子を取得できた場合、出力データ説明情報取得部２６は、取得された１以上の各出力データ識別子に対応する出力データ説明情報を取得し、出力データ識別子に対応付けて、図示しないバッファに一時蓄積する。
【００９１】
（ステップＳ３０８）処理部２は、カウンタｊを１、インクリメントする。ステップＳ３０４に戻る。
【００９２】
（ステップＳ３０９）処理部２は、カウンタｉを１、インクリメントする。テップＳ３０２に戻る。
【００９３】
次に、ステップＳ２１０のＩＯ構成図構成処理について、図４のフローチャートを用いて説明する。ステップＳ２０１に戻る。
【００９４】
（ステップＳ４０１）構成部２７は、図示しないバッファに蓄積されている１以上の入力データ情報を取得する。ここで、入力データ情報は、入力データ識別子、入力データ説明情報のうちの１以上の情報である。
【００９５】
（ステップＳ４０２）構成部２７は、ステップＳ４０１で取得した１以上の入力データ情報を、予め決められた位置に配置する。なお、予め決められた位置は、例えば、最終的なＩＯ構成図の領域の中の左側である。配置すべき２以上の入力データ情報が存在する場合、構成部２７は、２以上の各入力データ情報が重ならない位置に配置することは好適である。
【００９６】
（ステップＳ４０３）構成部２７は、図示しないバッファに蓄積されている関数情報を取得する。ここで、関数情報は、関数識別子、関数説明情報のうちの１以上の情報である。
【００９７】
（ステップＳ４０４）構成部２７は、ステップＳ４０３で取得した関数情報を、１以上の入力データ情報の隣の位置であり、予め決められた位置（通常、入力データ情報の右側）に配置する。構成部２７は、１以上の入力データ情報と重ならない位置に、関数情報を配置することは好適である。
【００９８】
（ステップＳ４０５）構成部２７は、図示しないバッファに蓄積されている１以上の出力データ情報を取得する。ここで、出力データ情報は、出力データ識別子、出力データ説明情報のうちの１以上の情報である。
【００９９】
（ステップＳ４０６）構成部２７は、ステップＳ４０５で取得した１以上の出力データ情報を、予め決められた位置に配置する。なお、予め決められた位置は、例えば、最終的なＩＯ構成図の領域の中の右側である。予め決められた位置は、通常、関数情報の隣の位置であり、予め決められた位置（通常、関数情報の右側）に配置する。配置すべき２以上の出力データ情報が存在する場合、構成部２７は、２以上の各出力データ情報が重ならない位置に配置することは好適である。また、構成部２７は、関数情報と重ならない位置に、１以上の出力データ情報を配置することは好適である。
【０１００】
（ステップＳ４０７）構成部２７は、１以上の入力データ情報と関数情報、関数情報と１以上の出力データ情報を連結し、ＩＯ構成図を構成する。上位処理にリターンする。なお、連結することは、通常、線で接続されることであるが、必ずしも線で接するようにする必要はなく、１以上の入力データ情報、関数情報、１以上の出力データ情報が順に並んでおり、対応付いているように視覚的に認識できれば良い。
【０１０１】
次に、ステップＳ２１２の要素情報蓄積処理の動作の一例について、図５のフローチャートを用いて説明する。
【０１０２】
（ステップＳ５０１）要素情報蓄積部２８は、カウンタｉに１を代入する。
【０１０３】
（ステップＳ５０２）要素情報蓄積部２８は、ｉ番目のドキュメントがドキュメント格納部１２に存在するか否かを判断する。ｉ番目のドキュメントが存在する場合はステップＳ５０３に行き、ｉ番目のドキュメントが存在しない場合は上位処理にリターンする。
【０１０４】
（ステップＳ５０３）要素情報蓄積部２８は、カウンタｊに１を代入する。
【０１０５】
（ステップＳ５０４）要素情報蓄積部２８は、ｉ番目のドキュメントの中に、ｊ番目の処理単位が存在するか否かを判断する。存在する場合はステップＳ５０５に行き、存在しない場合はステップＳ５１５に行く。なお、処理単位とは、解析の単位であり、例えば、行である。また、処理単位は、例えば、予め決められた区切り文字の次のデータから、次の区切り文字の前のデータまでのデータである。
【０１０６】
（ステップＳ５０５）要素情報蓄積部２８は、ｊ番目の処理単位の中に関数識別子が存在するか否かを判断する。関数識別子が存在する場合はステップＳ５０６に行き、関数識別子が存在しない場合はステップＳ５０８に行く。
【０１０７】
（ステップＳ５０６）要素情報蓄積部２８は、ステップＳ５０５で検知した関数識別子に対応する関数説明情報をｉ番目のドキュメントから取得する。
【０１０８】
（ステップＳ５０７）要素情報蓄積部２８は、ステップＳ５０５で検知した関数識別子とステップＳ５０６で取得した関数説明情報とを有する関数情報を構成し、要素情報格納部１３に蓄積する。
【０１０９】
（ステップＳ５０８）要素情報蓄積部２８は、ｊ番目の処理単位の中に入力データ識別子が存在するか否かを判断する。入力データ識別子が存在する場合はステップＳ５０９に行き、入力データ識別子が存在しない場合はステップＳ５１１に行く。
【０１１０】
（ステップＳ５０９）要素情報蓄積部２８は、ステップＳ５０８で検知した入力データ識別子に対応する入力データ説明情報をｉ番目のドキュメントから取得する。
【０１１１】
（ステップＳ５１０）要素情報蓄積部２８は、ステップＳ５０８で検知した入力データ識別子とステップＳ５０９で取得した入力データ説明情報とを有する入力データ情報を構成し、要素情報格納部１３に蓄積する。
【０１１２】
（ステップＳ５１１）要素情報蓄積部２８は、ｊ番目の処理単位の中に出力データ識別子が存在するか否かを判断する。出力データ識別子が存在する場合はステップＳ５１２に行き、入力データ識別子が存在しない場合はステップＳ５１４に行く。
【０１１３】
（ステップＳ５１２）要素情報蓄積部２８は、ステップＳ５１１で検知した出力データ識別子に対応する出力データ説明情報をｉ番目のドキュメントから取得する。
【０１１４】
（ステップＳ５１３）要素情報蓄積部２８は、ステップＳ５１１で検知した出力データ識別子とステップＳ５１２で取得した出データ説明情報とを有する出力データ情報を構成し、要素情報格納部１３に蓄積する。
【０１１５】
（ステップＳ５１４）要素情報蓄積部２８は、カウンタｊを１、インクリメントする。ステップＳ５０４に戻る。
【０１１６】
（ステップＳ５１５）要素情報蓄積部２８は、カウンタｉを１、インクリメントする。ステップＳ５０２に戻る。
【０１１７】
なお、図５のフローチャートにおいて、要素情報蓄積部２８は、ドキュメントの構造や手掛かり文字列や文字列パターンを保持しており、かかる情報を用いて、各種の要素識別子や各種の要素情報を取得する。なお、各種の要素識別子を取得するための情報は、上述した要素識別子取得条件でも良いことは言うまでもない。
【０１１８】
以下、本実施の形態におけるドキュメント生成装置Ａの具体的な動作について説明する。以下、２つの具体例について説明する。具体例１は、対象とするプログラムがＣＯＢＯＬのプログラムである。具体例２は、対象とするプログラムがＣ言語のプログラムである。
【０１１９】
（具体例１）
今、ドキュメント生成装置Ａのプログラム格納部１１には、図６に示すソースプログラムが格納されている。
【０１２０】
また、要素情報格納部１３には、図７に示す関数情報管理表が格納されている。関数情報管理表には「ＩＤ」「関数識別子」「関数説明情報」を有する１以上のレコードが格納されている。「ＩＤ」は、レコードを識別する情報である。また、関数情報管理表は、要素情報蓄積部２８が、ドキュメントまたはソースファイルから１以上の関数情報を取得し、要素情報格納部１３に蓄積した情報から構成される。なお、関数情報を取得できる程度にコメントが記載されたソースファイルは、ドキュメントと言っても良い。
【０１２１】
さらに、要素情報格納部１３には、図８に示す格納手段情報管理表が格納されている。格納手段情報管理表には「ＩＤ」「格納手段識別子」「格納手段説明情報」を有する１以上のレコードが格納されている。「ＩＤ」は、レコードを識別する情報である。また、格納手段情報管理表は、要素情報蓄積部２８が、ドキュメントまたはソースファイルから１以上の格納手段情報を取得し、要素情報格納部１３に蓄積した情報から構成される。なお、格納手段情報を取得できる程度にコメントが記載されたソースファイルは、ドキュメントと言っても良い。ここで、格納手段は、テーブルまたはファイルである。そして、格納手段識別子は、テーブルＩＤまたはファイルＩＤである。また、格納手段説明情報は、テーブル名またはファイル名である。
【０１２２】
かかる状況において、ユーザは、ドキュメント生成装置Ａに出力指示を入力した、とする。すると、ドキュメント生成装置Ａの受付部４は、出力指示を受け付ける。すると、処理部２は、プログラム格納部１１から、図６のソースプログラムを読み出す。
【０１２３】
そして、関数識別子取得部２１は、手掛かり句「ＰＲＯＧＲＡＭ−ＩＤ」を検知し、当該手掛かり句の行に存在する文字列である関数識別子「ＣＡＲ７０Ｂ」を取得する。
【０１２４】
次に、関数説明情報取得部２４は、関数識別子「ＣＡＲ７０Ｂ」と対になる関数説明情報「仕掛量データ作成」を図７の関数情報管理表から取得する。
【０１２５】
また、入力データ識別子取得部２２は、上述した処理により、図６のソースプログラムから、入力データ識別子「ＡＢＣ」「ＸＹＺ」を取得した、とする。なお、入力データ説明情報取得部２５は、入力データ識別子「ＡＢＣ」「ＸＹＺ」に対応する入力データ説明情報を取得できなかった、とする。
【０１２６】
また、出力データ識別子取得部２３は、上述した処理により、図６のソースプログラムから、出力データ識別子「ＸＸＸ」「ＣＢＲＩ」「ＣＮＴＬ」を取得した、とする。なお、出力データ識別子取得部２３は、ここでは、手掛かり句「ＲＥＴＵＲＮ」と同一行に存在する変数「ＸＸＸ」を出力データ識別子として取得する。また、出力データ識別子取得部２３は、ここでは、手掛かり句「ＵＰＤＡＴＥ」と同一行に存在する変数「ＣＢＲＩ」「ＣＮＴＬ」を格納手段識別子（出力データ識別子の一例）として取得する。
【０１２７】
次に、出力データ説明情報取得部２６は、「ＣＢＲＩ」「ＣＮＴＬ」と対になる入力データ説明情報を、図８の格納手段情報管理表から取得する。なお、出力データ説明情報取得部２６は、出力データ識別子「ＸＸＸ」に対応する出力データ説明情報は取得できなかった、とする。
【０１２８】
次に、構成部２７は、上述した処理に基づいて、取得した情報を用いて、ＩＯ構成図を構成する。
【０１２９】
次に、出力部３は、ＩＯ構成図を出力する。かかる出力例は、図９である。図９において、自然言語による説明は、関数と格納手段のみであるが、入力データ、出力データのうちの変数に対しても、自然言語による説明（入力データ説明情報、出力データ説明情報）を有することは好適である。
【０１３０】
（具体例２）
今、ドキュメント生成装置Ａのプログラム格納部１１には、図１０に示すソースプログラムが格納されている。
【０１３１】
また、要素情報格納部１３には、図１１に示す変数情報管理表が格納されている。変数情報管理表には「ＩＤ」「変数識別子」「変数説明情報」を有する１以上のレコードが格納されている。「ＩＤ」は、レコードを識別する情報である。また、変数情報管理表は、要素情報蓄積部２８が、ドキュメントまたはソースファイルから１以上の変数情報を取得し、要素情報格納部１３に蓄積した情報から構成される。なお、変数情報を取得できる程度にコメントが記載されたソースファイルは、ドキュメントと言っても良い。なお、変数は、入力データ、または出力データを含む。
【０１３２】
かかる状況において、ユーザは、ドキュメント生成装置Ａに出力指示を入力した、とする。すると、ドキュメント生成装置Ａの受付部４は、出力指示を受け付ける。すると、処理部２は、プログラム格納部１１から、図１０のソースプログラムを読み出す。
【０１３３】
そして、関数識別子取得部２１は、予め格納している文字列パターン「関数識別子（１以上の入力データ）」を用いて、関数識別子「ＡＢＣＤ０２０００」を取得する。
【０１３４】
次に、関数説明情報取得部２４は、関数識別子「ＡＢＣＤ０２０００」に対応する関数説明情報「出荷受付処理」を取得し、関数情報（ＡＢＣＤ０２０００，出荷受付処理）を構成し、図示しないバッファに一時蓄積する。なお、関数説明情報取得部２４は、ここでは、関数識別子の１行前のコメントを関数説明情報として取得する。
【０１３５】
また、入力データ識別子取得部２２は、上述した処理により、文字列パターン「関数識別子（１以上の入力データ）」を用いて、図１０のソースプログラムから、入力データ識別子「ＫＥＭＳＴ」「ＵＫＥＴＲＮ」「ＨＲＩＭＩＳＡＩ」を取得する。
【０１３６】
次に、入力データ説明情報取得部２５は、各入力データ識別子「ＫＥＭＳＴ」「ＵＫＥＴＲＮ」「ＨＲＩＭＩＳＡＩ」に対応する入力データ説明情報（変数説明情報）を、図１１の変数情報管理表から取得でする。
【０１３７】
また、出力データ識別子取得部２３は、上述した処理により、図１０のソースプログラムから、出力データ識別子「ＨＲＩＭＩＳＡＩ」「ｒｒｌ」を取得する。出力データ識別子取得部２３は、ここでは、手掛かり句「ｒｅｔｕｒｎ」の引数となっている文字列である出力データ識別子「ＨＲＩＭＩＳＡＩ」を取得する。また、出力データ識別子取得部２３は、ここでは、文字列パターン「ｆｗｒｉｔｅ（．＊，．＊，．＊，出力データ識別子）」を用いて、出力データ識別子「ｒｒｌ」を取得する。なお、「．＊」は１文字以上の文字列である。
【０１３８】
次に、構成部２７は、上述した処理に基づいて、取得した情報を用いて、ＩＯ構成図を構成する。
【０１３９】
次に、出力部３は、ＩＯ構成図を出力する。かかる出力例は、図１２である。図１２において、すべての要素に説明情報と識別子とが存在するが、少なくとも一つの要素のみに、説明情報が存在すれば良い。なお、ＩＯ構成図は、出力データの種類が視覚的に識別可能な図であることは好適である。図１２において、出力データがリターン値の場合（例えば、ＨＲＩＭＥＩＳＡＩ）と、出力データが格納手段の場合（例えば、ｒｒｌ）とで、出力データ識別子を囲む図形が異なる。
【０１４０】
以上、本実施の形態によれば、ソースプログラムを理解しやすいＩＯ関連図を自動生成できる。
【０１４１】
なお、本実施の形態における処理は、ソフトウェアで実現しても良い。そして、このソフトウェアをソフトウェアダウンロード等により配布しても良い。また、このソフトウェアをＣＤ−ＲＯＭなどの記録媒体に記録して流布しても良い。なお、このことは、本明細書における他の実施の形態においても該当する。なお、本実施の形態における情報処理装置を実現するソフトウェアは、以下のようなプログラムである。つまり、このプログラムは、コンピュータを、ソースプログラムから関数を識別する関数識別子を取得する関数識別子取得部と、前記関数識別子で識別される関数に対して与えられる入力データを識別する１以上の入力データ識別子を取得する入力データ識別子取得部と、前記関数識別子で識別される関数が出力する出力データを識別する１以上の出力データ識別子を取得する出力データ識別子取得部と、前記１以上の入力データ識別子に対応する１以上の入力データ情報と前記関数識別子に対応する関数情報とが図的に連結され、かつ前記関数識別子に対応する関数情報と前記１以上の出力データ識別子に対応する１以上の出力データ情報とが図的に連結された図であるＩＯ関連図を構成する構成部と、前記ＩＯ関連図を出力する出力部として機能させるためのプログラムである。
【０１４２】
（実施の形態２）
本実施の形態において、関数間の呼び出し関係を、日本語を含む情報を用いて図的に表現した説明付加プログラム構造図を生成するドキュメント生成装置について説明する。
【０１４３】
図１３は、本実施の形態におけるドキュメント生成装置Ｂのブロック図である。
【０１４４】
ドキュメント生成装置Ｂは、格納部１、受付部４、処理部５、および出力部６を備える。
【０１４５】
処理部５は、関数識別子取得部２１、関数間情報取得部５１、関数説明情報取得部２４、構成部５２、および要素情報蓄積部２８を備える。
【０１４６】
処理部５は、各種の処理を行う。各種の処理とは、例えば、関数識別子取得部２１、関数間情報取得部５１、関数説明情報取得部２４、構成部５２、および要素情報蓄積部２８等が行う処理、整構造化処理である。
【０１４７】
関数間情報取得部５１は、関数間の呼び出し関係に関する情報である１以上の関数間情報を取得する。関数間情報とは、呼び出す関数と呼び出される関数の対応を把握するための情報である。関数間情報は、呼び出す関数の関数識別子と呼び出される関数の関数識別子の組の情報でも良いし、呼び出す一の関数の関数識別子と呼び出される１または２以上の各関数の関数識別子の集合の情報でも良い。関数間情報のデータ構造は問わない。なお、関数間情報取得部５１の処理は公知技術であるので、詳細な説明を省略する。
【０１４８】
構成部５２は、関数間情報取得部５１が取得した関数間情報を用いて、説明付加プログラム構造図を構成する。構成部５２は、関数説明情報取得部２４が取得した１または２以上の関数説明情報をも用いて、説明付加プログラム構造図を構成する。
【０１４９】
構成部５２は、１以上の関数間情報を用いて、２以上の関数間の呼び出し関係を、ノードとリンクとを用いた図であり、関数説明情報取得部２４が取得した１以上の各関数説明情報がノードに含まれる図である説明付加プログラム構造図を構成する。
【０１５０】
なお、説明付加プログラム構造図とは、関数の呼び出し関係を示す図であり、ノードとリンクにより示される図であり、ノードに関数説明情報を含む図である。なお、リンクとは、エッジと言っても良い。
【０１５１】
出力部６は、構成部５２が構成した説明付加プログラム構造図を出力する。説明付加プログラム構造図の出力態様は問わないことは言うまでもない。ここで、出力とは、ディスプレイへの表示、プロジェクターを用いた投影、プリンタでの印字、音出力、外部の装置への送信、記録媒体への蓄積、他の処理装置や他のプログラムなどへの処理結果の引渡しなどを含む概念である。
【０１５２】
処理部５、関数間情報取得部５１、および構成部５２は、通常、ＭＰＵやメモリ等から実現され得る。処理部５等の処理手順は、通常、ソフトウェアで実現され、当該ソフトウェアはＲＯＭ等の記録媒体に記録されている。但し、ハードウェア（専用回路）で実現しても良い。
【０１５３】
出力部６は、ディスプレイやスピーカー等の出力デバイスを含むと考えても含まないと考えても良い。出力部６は、出力デバイスのドライバーソフトまたは、出力デバイスのドライバーソフトと出力デバイス等で実現され得る。
【０１５４】
次に、ドキュメント生成装置Ｂの動作について、図１４のフローチャートを用いて説明する。図１４のフローチャートにおいて、図２のフローチャートと同一のステップについて説明を省略する。
【０１５５】
（ステップＳ１４０１）受付部４は、出力指示を受け付けたか否かを判断する。出力指示を受け付けた場合はステップＳ１４０２に行き、出力指示を受け付けない場合はステップＳ１４１１に行く。
【０１５６】
（ステップＳ１４０２）処理部５は、プログラム格納部１１から、ソースプログラムを読み出す。
【０１５７】
（ステップＳ１４０３）処理部５は、カウンタｉに１を代入する。
【０１５８】
（ステップＳ１４０４）関数識別子取得部２１は、ステップＳ１４０２で読み出したソースプログラムの中に、ｉ番目の行が存在するか否かを判断する。ｉ番目の行が存在する場合はステップＳ１４０５に行き、ｉ番目の行が存在しない場合はステップＳ１４０９に行く。
【０１５９】
（ステップＳ１４０５）関数識別子取得部２１は、ｉ番目の行に、関数の定義を示す関数の開始行の関数識別子が存在するか否かを判断する。かかる関数識別子が存在する場合はステップＳ１４０６に行き、存在しない場合はステップＳ１４０８に行く。なお、かかる関数識別子は、関数の呼び出しを示す関数識別子ではない。
【０１６０】
（ステップＳ１４０６）関数識別子取得部２１は、ｉ番目の行から、関数識別子を取得する。
【０１６１】
（ステップＳ１４０７）関数説明情報取得部２４は、ステップＳ１４０６で取得された関数識別子に対応する関数説明情報を取得し、関数識別子に対応付けて、図示しないバッファに一時蓄積する。
【０１６２】
（ステップＳ１４０８）処理部５は、関数内処理を行う。ステップＳ１４０４に戻る。なお、関数内処理とは、関数内における処理である。関数内処理の詳細について、図１５のフローチャートを用いて説明する。なお、処理部５は、関数内処理に対して、カウンタｉと、関数識別子とを渡す。
【０１６３】
（ステップＳ１４０９）処理部５は、カウンタｉを１、インクリメントする。ステップＳ１４０４に戻る。
【０１６４】
（ステップＳ１４１０）構成部５２は、説明付加プログラム構造図を構成する。かかる説明付加プログラム構造図構成処理について、図１６のフローチャートを用いて説明する。ステップＳ１４０１に戻る。
【０１６５】
なお、図１４のフローチャートにおいて、電源オフや処理終了の割り込みにより処理は終了する。
【０１６６】
次に、ステップＳ１４０８の関数内処理の詳細について、図１５のフローチャートを用いて説明する。
【０１６７】
（ステップＳ１５０１）処理部２は、カウンタｉを１、インクリメントする。
【０１６８】
（ステップＳ１５０２）処理部２は、ｉ番目の行を読み出す。
【０１６９】
（ステップＳ１５０３）処理部２は、ｉ行目が関数の終了の行であるか否かを判断する。ｉ行目が関数の終了の行である場合はｉをリターンし、ｉ行目が関数の終了の行でない場合はステップＳ１５０４に行く。
【０１７０】
（ステップＳ１５０４）処理部２は、ｉ番目の行が関数の呼び出しの行であるか否かを判断する。関数の呼び出しの行である場合はステップＳ１５０５に行き、関数の呼び出しの行でない場合はステップＳ１５０８に行く。
【０１７１】
（ステップＳ１５０５）関数識別子取得部２１は、ｉ番目の行から関数識別子を取得する。
【０１７２】
（ステップＳ１５０６）関数説明情報取得部２４は、ステップＳ１５０８で取得された関数識別子に対応する関数説明情報を取得し、関数識別子に対応付けて、図示しないバッファに一時蓄積する。
【０１７３】
（ステップＳ１５０７）関数間情報取得部５１は、呼び出す側の関数の関数識別子と、ステップＳ１５０５で取得された関数識別子とを用いて、関数間情報を構成し、図示しないバッファに一時蓄積する。
【０１７４】
（ステップＳ１５０８）処理部２は、カウンタｉを１、インクリメントする。ステップＳ１５０２に戻る。
【０１７５】
次に、ステップＳ１４１０の説明付加プログラム構造図構成処理について、図１６のフローチャートを用いて説明する。
【０１７６】
（ステップＳ１６０１）構成部５２は、呼び出す関数の関数識別子と、関数説明情報とを取得する。
【０１７７】
（ステップＳ１６０２）構成部５２は、ステップＳ１６０１で取得した関数識別子と関数説明情報とを配置する。
【０１７８】
（ステップＳ１６０３）構成部５２は、被呼出関数処理を行う。上位処理にリターンする。なお、被呼出関数処理とは、呼び出される関数の情報を取得し、配置する処理である。被呼出関数処理について、図１７のフローチャートを用いて説明する。
【０１７９】
次に、ステップＳ１６０３の被呼出関数処理の一例について、図１７のフローチャートを用いて説明する。
【０１８０】
（ステップＳ１７０１）構成部５２は、カウンタｉに１を代入する。
【０１８１】
（ステップＳ１７０２）構成部５２は、呼び出す関数の関数識別子と対になるｉ番目の呼び出される関数の関数識別子が、バッファ内の関数間情報に存在するか否かを判断する。存在する場合はステップＳ１７０３に行き、存在しない場合は上位処理にリターンする。
【０１８２】
（ステップＳ１７０３）構成部５２は、バッファ内の関数間情報から、呼び出す関数の関数識別子と対になるｉ番目の呼び出される関数の関数識別子を取得する。
【０１８３】
（ステップＳ１７０４）構成部５２は、ステップＳ１７０３で取得した関数識別子と対になる関数説明情報を要素情報格納部１３から取得する。
【０１８４】
（ステップＳ１７０５）構成部５２は、呼び出す関数の情報との対応が視覚的に認識可能なように、ステップＳ１７０３で取得した関数識別子と、ステップＳ１７０４で取得した関数説明情報とを配置する。
【０１８５】
（ステップＳ１７０６）構成部５２は、ｉ番目の呼び出される関数が呼び出し関数に関する被呼出関数処理を行う。かかる再帰的な処理により、３階層以上の関数の階層構造を示す説明付加プログラム構造図が構成され得る。
【０１８６】
（ステップＳ１７０７）構成部５２は、カウンタｉを１、インクリメントする。ステップＳ１７０２に戻る。
【０１８７】
以下、本実施の形態におけるドキュメント生成装置Ｂの具体的な動作について説明する。
【０１８８】
今、ドキュメント生成装置Ｂのプログラム格納部１１には、処理対象のソースプログラムが格納されている。また、要素情報格納部１３には、図７に示す関数情報管理表が格納されている。
【０１８９】
かかる状況において、ユーザは、ドキュメント生成装置Ｂに出力指示を入力した、とする。すると、ドキュメント生成装置Ｂの受付部４は、出力指示を受け付ける。すると、処理部５は、プログラム格納部１１からソースプログラムを読み出し、上述したような処理を行い、関数間情報取得部５１は、図１８に示す関数間情報管理表を取得した、とする。関数間情報管理表は、「呼出関数」「被呼出関数」を有するレコードの集合である。「呼出関数」は、関数を呼び出す関数の関数識別子である。「被呼出関数」は、関数に呼び出される関数の関数識別子である。
【０１９０】
次に、構成部５２は、図１８示す関数間情報管理表を用いて、説明付加プログラム構造図を構成する。なお、構成部５２は、図１８示す関数間情報管理表に出現する関数識別子の関数説明情報を、図７に示す関数情報管理表から取得し、関数識別子と関数説明情報の対の情報を一時的に取得する。そして、構成部５２は、関数の呼出関係を視覚的に認識可能なように説明付加プログラム構造図を構成する。
【０１９１】
次に、出力部６は、構成部５２が構成した説明付加プログラム構造図を出力する。かかる説明付加プログラム構造図の例は、図１９である。
【０１９２】
以上、本実施の形態によれば、ソースプログラムを理解しやすい説明付加プログラム構造図を自動生成できる。
【０１９３】
なお、本実施の形態におけるドキュメント生成装置Ｂを実現するソフトウェアは、以下のようなプログラムである。つまり、このプログラムは、コンピュータを、ソースプログラムから関数を識別する１以上の関数識別子を取得する関数識別子取得部と、関数間の呼び出し関係に関する情報である１以上の関数間情報を取得する関数間情報取得部と、前記関数識別子取得部が取得した１以上の各関数識別子で識別される関数を説明する文字列である関数説明情報を取得する関数説明情報取得部と、前記１以上の関数間情報を用いて、２以上の関数間の呼び出し関係を、ノードとリンクとを用いた図であり、前記関数説明情報取得部が取得した１以上の各関数説明情報がノードに含まれる図である説明付加プログラム構造図を構成する構成部と、前記説明付加プログラム構造図を出力する出力部として機能させるためのプログラムである。
【０１９４】
（実施の形態３）
本実施の形態において、ソースプログラムの各ステップの予め決められた種類の要素（例えば、変数、関数）を日本語で表現し、出力するドキュメント生成装置について説明する。
【０１９５】
図２０は、本実施の形態におけるドキュメント生成装置Ｃのブロック図である。
【０１９６】
ドキュメント生成装置Ｃは、格納部１、受付部４，処理部７、および出力部８を備える。
【０１９７】
処理部７は、要素説明情報取得部７１、説明付加命令取得部７２、構成部７３、および要素情報蓄積部２８を備える。
【０１９８】
処理部７は、各種の処理を行う。各種の処理とは、例えば、要素説明情報取得部７１、説明付加命令取得部７２、構成部７３、要素情報蓄積部２８等が行う処理、整構造化処理である。
【０１９９】
要素説明情報取得部７１は、ソースプログラムを構成する１以上の各命令を構成する要素のうち、予め決められた種類の要素に対して、要素を説明する要素説明情報を取得する。予め決められた種類の要素とは、例えば、関数、入力データ、出力データ、変数等である。予め決められた種類の要素とは、予約語を含まない。
【０２００】
なお、要素説明情報取得部７１が要素説明情報を取得する取得元は問わない。要素説明情報取得部７１は、ソースプログラムのコメントから取得しても良い。要素説明情報取得部７１は、ドキュメントから取得しても良い。要素説明情報取得部７１は、要素情報格納部１３から取得しても良い。要素説明情報取得部７１の処理は、上述した関数説明情報取得部２４、入力データ説明情報取得部２５、出力データ説明情報取得部２６の処理うちのいずれか１以上の処理を含むことは好適である。
【０２０１】
説明付加命令取得部７２は、要素説明情報取得部７１が取得した要素説明情報を、対応する要素に置き換える、または対応する要素に付加して、要素説明情報が付加された１以上の説明付加命令を取得する。説明付加命令は、例えば、プログラムが有する命令の一部である要素を関数説明情報、または入力データ説明情報、または出力データ説明情報のうちの１以上の説明情報に置き換えた命令である。また、説明付加命令は、例えば、プログラムが有する命令が有する関数識別子、入力データ識別子、出力データ識別子のいずれか１種類以上の要素に、関数説明情報、入力データ説明情報、出力データ説明情報のいずれか１種類以上の説明情報を対応付けて、付加した命令である。
【０２０２】
つまり、説明付加命令取得部７２は、要素説明情報取得部７１が取得した要素説明情報を、対応する要素に置き換えても良いし、対応する要素に対応するように付加しても良い。
【０２０３】
要素の種類が第一の種類（例えば、関数）である場合、説明付加命令取得部７２は、要素説明情報取得部７１が取得した要素説明情報を要素に対応するように付加して、説明付加命令を構成し、要素の種類が第一の種類（例えば、入力データ、出力データ）である場合、説明付加命令取得部７２は、要素説明情報取得部７１が取得した要素説明情報を要素に置き換えて、説明付加命令を構成する。
【０２０４】
構成部７３は、説明付加命令取得部７２が取得した１以上の説明付加命令を有するドキュメントである説明付加ソースドキュメントを構成する。
【０２０５】
構成部７３は、通常、プログラムが有する１以上の各命令を、説明付加命令取得部７２が取得した説明付加命令に置き換え、説明付加ソースドキュメントを構成する。
【０２０６】
出力部８は、構成部７３が構成した説明付加ソースドキュメントを出力する。ここで、出力とは、ディスプレイへの表示、プロジェクターを用いた投影、プリンタでの印字、音出力、外部の装置への送信、記録媒体への蓄積、他の処理装置や他のプログラムなどへの処理結果の引渡しなどを含む概念である。
【０２０７】
処理部７、要素説明情報取得部７１、説明付加命令取得部７２、および構成部７３は、通常、ＭＰＵやメモリ等から実現され得る。処理部７等の処理手順は、通常、ソフトウェアで実現され、当該ソフトウェアはＲＯＭ等の記録媒体に記録されている。但し、ハードウェア（専用回路）で実現しても良い。
【０２０８】
出力部８は、ディスプレイやスピーカー等の出力デバイスを含むと考えても含まないと考えても良い。出力部８は、出力デバイスのドライバーソフトまたは、出力デバイスのドライバーソフトと出力デバイス等で実現され得る。
【０２０９】
次に、ドキュメント生成装置Ｃの動作について、図２１のフローチャートを用いて説明する。図２１のフローチャートにおいて、図２のフローチャートと同一のステップについて説明を省略する。
【０２１０】
（ステップＳ２１０１）受付部４は、出力指示を受け付けたか否かを判断する。出力指示を受け付けた場合はステップＳ１４０２に行き、出力指示を受け付けない場合はステップＳ１４１１に行く。
【０２１１】
（ステップＳ２１０２）処理部５は、プログラム格納部１１から、ソースプログラムを読み出す。
【０２１２】
（ステップＳ２１０３）処理部５は、カウンタｉに１を代入する。
【０２１３】
（ステップＳ２１０４）要素説明情報取得部７１は、ステップＳ２１０２で読み出したソースプログラムの中に、ｉ番目の行が存在するか否かを判断する。ｉ番目の行が存在する場合はステップＳ２１０５に行き、ｉ番目の行が存在しない場合はステップＳ２１０９に行く。
【０２１４】
（ステップＳ２１０５）要素説明情報取得部７１は、ｉ番目の行の中の予め決められた種類の要素の要素識別子を取得する。なお、ここで、要素説明情報取得部７１は、要素識別子を取得できない場合もあることは言うまでもない。
【０２１５】
（ステップＳ２１０６）要素説明情報取得部７１は、カウンタｊに１を代入する。
【０２１６】
（ステップＳ２１０７）要素説明情報取得部７１は、ステップＳ２１０５で取得した要素識別子の中で、ｊ番目の要素識別子が存在するか否かを判断する。存在する場合はステップＳ２１０８に行き、存在しない場合はステップＳ２１１２に行く。
【０２１７】
（ステップＳ２１０８）要素説明情報取得部７１は、ｊ番目の要素識別子に対応する要素説明情報を取得する。
【０２１８】
（ステップＳ２１０９）要素説明情報取得部７１は、カウンタｊを１、インクリメントする。ステップＳ２１０７に戻る。
【０２１９】
（ステップＳ２１１０）説明付加命令取得部７２は、ｉ番目の行に対応する要素識別子の要素説明情報を取得できたか否かを判断する。取得できた場合はステップＳ２１１１に行き、取得できなかった場合はステップＳ２１１２に行く。
【０２２０】
（ステップＳ２１１１）説明付加命令取得部７２は、ｉ番目の行に対応する１以上の各要素識別子に対応する要素説明情報を、各要素識別子に置き換えるまたは付加することにより、説明付加命令を構成する。説明付加命令取得部７２は、ステップＳ２１０２で読み出したソースプログラムのｉ番目の行を構成した説明付加命令に置き換えることは好適である。
【０２２１】
（ステップＳ２１１２）処理部５は、カウンタｉを１、インクリメントする。ステップＳ２１０４に戻る。
【０２２２】
（ステップＳ２１１３）構成部７３は、出力する説明付加ソースドキュメントを構成する。なお、ステップＳ２１１１における処理により、説明付加ソースドキュメントが完成している場合は、ステップＳ２１１３の処理は無くても良い。また、構成部７３は、出力する説明付加ソースドキュメントを構成できれば、その処理内容は問わない。また、構成部７３は、ステップＳ２１１１における処理により作成された説明付加ソースドキュメントに加えて、当該関数の１以上の入力データ情報、または／および当該関数の１以上の出力データ情報を含むドキュメントを構成しても良い。かかる場合、ドキュメント生成装置Ｃは、入力データ識別子取得部２２、出力データ識別子取得部２３、入力データ説明情報取得部２５、出力データ説明情報取得部２６のうちのいずれか１以上を備える。
【０２２３】
（ステップＳ２１１４）出力部８は、構成部７３が構成した説明付加ソースドキュメントを出力する。ステップＳ２１０１に戻る。
【０２２４】
なお、図２１のフローチャートにおいて、電源オフや処理終了の割り込みにより処理は終了する。
【０２２５】
以下、本実施の形態におけるドキュメント生成装置Ｃの具体的な動作について説明する。
【０２２６】
今、ドキュメント生成装置Ｂのプログラム格納部１１には、処理対象のソースプログラムが格納されている。また、要素情報格納部１３には、図７に示す関数情報管理表が格納されている。また、要素情報格納部１３には、図１１に示す変数情報管理表が格納されている。
【０２２７】
かかる状況において、ユーザは、ドキュメント生成装置Ｃに出力指示を入力した、とする。すると、ドキュメント生成装置Ｃの受付部４は、出力指示を受け付ける。すると、処理部２は、プログラム格納部１１からソースプログラムを読み出す。
【０２２８】
そして、上記したドキュメント生成装置Ｃの動作により、構成部７３が構成した説明付加ソースドキュメントを構成し、出力部８は、当該説明付加ソースドキュメントを出力する。
【０２２９】
かかる説明付加ソースドキュメントの出力例は、図２２である。図２２において、セクション識別子（関数識別子と言っても良い）に説明情報が付加され、説明付加命令が構成されている。かかる例は、図２２の２２０１、２２０２である。また、変数が要素説明情報（変数説明情報）に置き換えられて、説明付加命令が構成されている。かかる例は、図２２の２２０３、２２０４である。
【０２３０】
なお、説明付加ソースドキュメントは、図２２の２２０５のみでも良い。ただし、説明付加ソースドキュメントは、図２２の２２０６の入力データ情報、２２０７の出力データ情報を含むことは好適である。かかる場合、ドキュメント生成装置Ｃは、入力データ識別子取得部２２、出力データ識別子取得部２３、入力データ説明情報取得部２５、出力データ説明情報取得部２６のうちのいずれか１以上を備える。
【０２３１】
以上、本実施の形態によれば、ソースプログラムをより理解しやすい説明付加ソースドキュメントを自動生成できる。
【０２３２】
なお、本実施の形態におけるドキュメント生成装置Ｃを実現するソフトウェアは、以下のようなプログラムである。つまり、このプログラムは、コンピュータを、ソースプログラムを構成する１以上の各命令を構成する要素のうち、予め決められた種類の要素に対して、当該要素を説明する要素説明情報を取得する要素説明情報取得部と、前記要素説明情報取得部が取得した要素説明情報を、対応する要素に置き換える、または対応する要素に付加して、要素説明情報が付加された１以上の説明付加命令を取得する説明付加命令取得部と、前記１以上の説明付加命令を有するドキュメントである説明付加ソースドキュメントを構成するドキュメント構成部と、前記説明付加ソースドキュメントを出力する出力部として機能させるためのプログラムである。
【０２３３】
また、図２３は、本明細書で述べたプログラムを実行して、上述した種々の実施の形態のドキュメント生成装置を実現するコンピュータの外観を示す。上述の実施の形態は、コンピュータハードウェア及びその上で実行されるコンピュータプログラムで実現され得る。図２３は、このコンピュータシステム３００の概観図であり、図２４は、システム３００のブロック図である。
【０２３４】
図２３において、コンピュータシステム３００は、ＣＤ−ＲＯＭドライブを３０１２含むコンピュータ３０１と、キーボード３０２と、マウス３０３と、モニタ３０４とを含む。
【０２３５】
図２４において、コンピュータ３０１は、ＣＤ−ＲＯＭドライブ３０１２と、ＭＰＵ３０１３と、バス３０１４と、ＲＯＭ３０１５と、ＲＡＭ３０１６と、ハードディスク３０１７とを含む。ＲＯＭ３０１５は、ブートアッププログラム等のプログラムを記憶している。ＲＡＭ３０１６は、ＭＰＵ３０１３に接続され、アプリケーションプログラムの命令を一時的に記憶するとともに一時記憶空間を提供する。ハードディスク３０１７は、通常、アプリケーションプログラム、システムプログラム、及びデータを記憶している。ここでは、図示しないが、コンピュータ３０１は、さらに、ＬＡＮへの接続を提供するネットワークカードを含んでも良い。
【０２３６】
コンピュータシステム３００に、上述した実施の形態のドキュメント生成装置の機能を実行させるプログラムは、ＣＤ−ＲＯＭ３１０１に記憶されて、ＣＤ−ＲＯＭドライブ３０１２に挿入され、さらにハードディスク３０１７に転送されても良い。また、プログラムは、図示しないネットワークを介してコンピュータ３０１に送信され、ハードディスク３０１７に記憶されても良い。プログラムは実行の際にＲＡＭ３０１６にロードされる。プログラムは、ＣＤ−ＲＯＭ３１０１またはネットワークから直接、ロードされても良い。
【０２３７】
プログラムは、コンピュータ３０１に、上述した実施の形態のドキュメント生成装置の機能を実行させるオペレーティングシステム（ＯＳ）、またはサードパーティープログラム等は、必ずしも含まなくても良い。プログラムは、制御された態様で適切なモジュールを呼び出し、所望の結果が得られるようにする命令の部分のみを含んでいれば良い。コンピュータシステム３００がどのように動作するかは周知であり、詳細な説明は省略する。
【０２３８】
また、上記プログラムを実行するコンピュータは、単数であってもよく、複数であってもよい。すなわち、集中処理を行ってもよく、あるいは分散処理を行ってもよい。
【０２３９】
また、上記各実施の形態において、各処理は、単一の装置によって集中処理されることによって実現されてもよく、あるいは、複数の装置によって分散処理されることによって実現されてもよい。
【０２４０】
本発明は、以上の実施の形態に限定されることなく、種々の変更が可能であり、それらも本発明の範囲内に包含されるものであることは言うまでもない。
【産業上の利用可能性】
【０２４１】
以上のように、本発明にかかるドキュメント生成装置は、ソースプログラムを理解しやすいドキュメントを自動生成できるという効果を有し、ドキュメント生成装置等として有用である。
【符号の説明】
【０２４２】
１  格納部
２、５、７  処理部
３、６、８  出力部
４  受付部
１１  プログラム格納部
１２  ドキュメント格納部
１３  要素情報格納部
２１  関数識別子取得部
２２  入力データ識別子取得部
２３  出力データ識別子取得部
２４  関数説明情報取得部
２５  入力データ説明情報取得部
２６  出力データ説明情報取得部
２７、５２、７３  構成部
２８  要素情報蓄積部
５１  関数間情報取得部
７１  要素説明情報取得部
７２  説明付加命令取得部
【図１】
2018194883.tif 000003
【図２】
2018194883.tif 000004
【図３】
2018194883.tif 000005
【図４】
2018194883.tif 000006
【図５】
2018194883.tif 000007
【図６】
2018194883.tif 000008
【図７】
2018194883.tif 000009
【図８】
2018194883.tif 000010
【図９】
2018194883.tif 000011
【図１０】
2018194883.tif 000012
【図１１】
2018194883.tif 000013
【図１２】
2018194883.tif 000014
【図１３】
2018194883.tif 000015
【図１４】
2018194883.tif 000016
【図１５】
2018194883.tif 000017
【図１６】
2018194883.tif 000018
【図１７】
2018194883.tif 000019
【図１８】
2018194883.tif 000020
【図１９】
2018194883.tif 000021
【図２０】
2018194883.tif 000022
【図２１】
2018194883.tif 000023
【図２２】
2018194883.tif 000024
【図２３】
2018194883.tif 000025
【図２４】
2018194883.tif 000026