(57)【要約】【課題】  コード生成に不必要な処理や、冗長な処理を実行せず、プログラムを効率よく自動生成することができるプログラム自動生成装置を提供する。【解決手段】  プログラム情報記憶手段１ａにより、開始要素、通常要素、終端要素を含むプログラム要素と、プログラム要素を結合する結合情報とからなるプログラム情報が記憶され、プログラム生成手段１ｂにより、開始要素から、これに接続される通常要素を結合情報に沿って終端要素にいたるまで追跡すると同時に、プログラム要素をコード生成して実行可能なプログラムが生成される。【選択図】  図１
2006285480.tif 000002
【特許請求の範囲】
【請求項１】
プログラムを自動的に生成するプログラム自動生成装置において、
開始要素、通常要素、終端要素を含むプログラム要素と、前記プログラム要素を結合する結合情報とからなるプログラム情報を記憶するプログラム情報記憶手段と、
前記開始要素から、これに接続される通常要素を前記結合情報に沿って終端要素にいたるまで追跡すると同時に、前記プログラム要素をコード生成して実行可能なプログラムを生成するプログラム生成手段と、
を有することを特徴とするプログラム自動生成装置。
【請求項２】
前記プログラム生成手段は、
すべての前記プログラム要素における、前記プログラム要素に信号が入力する点である入力点と、前記プログラム要素から信号が出力される点である出力点とに対して、一意なマークである識別子を付加する識別子付加手段と、
前記開始要素の前記出力点の前記識別子をすべて格納した出力点リストを作成するリスト作成手段と、
前記プログラム情報に含まれるすべての前記入力点に対して、前記入力点を有する通常要素に対応するコード生成が可能か否かを示すフラグを作成するフラグ作成手段と、
前記出力点リストから１つの出力点を選択する出力点選択手段と、
前記出力点から出力された信号が入力される前記入力点を有する前記プログラム要素を特定するとともに、前記入力点に対応する前記フラグの属性を変更するフラグ属性変更手段と、
特定された前記プログラム要素が有するすべての前記入力点の属性が変更されている場合は、前記プログラム要素に対応するコードを生成するコード生成手段と、
を有することを特徴とする請求項１記載のプログラム自動生成装置。
【請求項３】
前記プログラム情報をデータフロー形式で表示する表示手段を有することを特徴とする請求項１記載のプログラム自動生成装置。
【請求項４】
前記プログラム情報記憶手段に対して前記プログラム情報を操作入力する入力手段を有することを特徴とする請求項１記載のプログラム自動生成装置。
【請求項５】
プログラムを自動的に生成するプログラム自動生成方法において、
プログラム情報記憶手段が、開始要素、通常要素、終端要素を含むプログラム要素と、前記プログラム要素を結合する結合情報とからなるプログラム情報を記憶するステップと、
プログラム生成手段が、前記開始要素から、これに接続される通常要素を前記結合情報に沿って終端要素にいたるまで追跡すると同時に、前記プログラム要素をコード生成して実行可能なプログラムを生成するステップと、
を有することを特徴とするプログラム自動生成方法。
【請求項６】
前記プログラム生成手段は、
すべての前記プログラム要素における、前記プログラム要素に信号が入力する点である入力点と、前記プログラム要素から信号が出力される点である出力点とに対して、一意なマークである識別子を付加するステップと、
前記開始要素の前記出力点の前記識別子をすべて格納した出力点リストを作成するステップと、
前記プログラム情報に含まれるすべての前記入力点に対して、前記入力点を有する通常要素に対応するコード生成が可能か否かを示すフラグを作成するステップと、
前記出力点リストから１つの出力点を選択するステップと、
前記出力点から出力された信号が入力される前記入力点を有する前記プログラム要素を特定するとともに、前記入力点に対応する前記フラグの属性を変更するステップと、
特定された前記プログラム要素が有するすべての前記入力点の属性が変更されている場合は、前記プログラム要素に対応するコード生成するステップの処理を実行させることを特徴とする請求項５記載のプログラム自動生成方法。
【請求項７】
プログラムを自動的に生成するプログラム自動生成プログラムにおいて、
コンピュータに、
プログラム情報記憶手段が、開始要素、通常要素、終端要素を含むプログラム要素と、前記プログラム要素を結合する結合情報とからなるプログラム情報を記憶するステップと、
プログラム生成手段が、前記開始要素から、これに接続される通常要素を前記結合情報に沿って終端要素にいたるまで追跡すると同時に、前記プログラム要素をコード生成して実行可能なプログラムを生成するステップの、
処理を実行させることを特徴とするプログラム自動生成プログラム。
【請求項８】
プログラムを自動的に生成するプログラム自動生成プログラムを記憶したコンピュータ読み取り可能な記録媒体において、
コンピュータに、
プログラム情報記憶手段が、開始要素、通常要素、終端要素を含むプログラム要素と、前記プログラム要素を結合する結合情報とからなるプログラム情報を記憶するステップと、
プログラム生成手段が、前記開始要素から、これに接続される通常要素を前記結合情報に沿って終端要素にいたるまで追跡すると同時に、前記プログラム要素をコード生成して実行可能なプログラムを生成するステップの、
処理を実行させることを特徴とするプログラム自動生成プログラムを記憶したコンピュータ読み取り可能な記録媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、プログラム自動生成装置、方法、およびプログラムに関し、特にプログラムを自動的に生成するプログラム自動生成装置、方法、およびプログラムに関する。
【背景技術】
【０００２】
コンピュータプログラムは、テキストエディタなどを使用して設計者が逐次処理内容を文字入力することにより設計が行われていた。しかし、信号処理などのデータのフローを伴うようなプログラムの場合には、信号の流れを図記号を用いて表示すると見通しがよくなるため、図記号で図面を描いて設計を行い、それをもとに設計者がＣ言語やアセンブラ言語などのプログラム言語を用いてプログラムに変換する。そして、それをクロスコンパイラなどのプログラム製作用のツールを使用して、最終的にコンピュータが実行できるようにしていた。
【０００３】
しかしながら、この方法では、図記号で書いた図面をＣ言語などのプログラム言語に直すときには単純作業を実施する必要がある。そのため、プログラム開発効率は悪く、また人為的なミスによるプログラム品質の低下を招く原因ともなっていた。
【０００４】
そこで、プログラムの開発効率の向上やプログラム品質の向上を目的として、ＣＡＤによるプログラム入力補助装置を実現し、図記号で書かれた図面からコンピュータが実行できる形式や、一般的な従来技術により最終的にコンピュータが実行できる形式に変形できるＣ言語などのプログラム言語形式のプログラムを生成したりするための技術が開発されてきた。これらのプログラムの生成のことは、コード生成もしくは、コード自動生成といわれることがある。
【０００５】
従来からあるコード自動生成方法および装置としては、たとえば、「画面シフト方式」と呼ばれる手段を具備して画面上の位置をシフトさせることにより、制御プログラムを作る方式があった（たとえば、特許文献１参照。）。また、終端要素から順に前方検索し、コード生成順序を自動決定した後に、自動決定した順序に沿ってコードを生成していくものがあった（たとえば、特許文献２参照。）。
【特許文献１】特開昭５９−７３４号公報
【特許文献２】特開平５−８８８６９号公報（段落番号〔００７７〕〜〔００８４〕、図６）
【発明の開示】
【発明が解決しようとする課題】
【０００６】
しかし、上記従来技術においても、プログラムを自動生成することは可能であったが、たとえば、上記特許文献１記載の技術を用いるには、ＣＲＴなどに表示するなどして、その位置関係を用いてコードの生成順序を確定するという本来のコードの自動生成には無関係な位置情報などを取り扱わなければならないため、プログラムが大規模化するにつれ、コード生成の効率が悪化することは避けられなかった。
【０００７】
また、上記特許文献２記載の技術を用いると、一度後方からコード生成順序を決定した後、再度前方からコードを生成していくという作業が必要となり、全体として２回走査を行わなければコードが生成できず、やはりプログラムが大規模化するにつれ、コード生成の処理に時間がかかってしまうという問題があった。
【０００８】
本発明はこのような点に鑑みてなされたものであり、コード生成に不必要な処理や、冗長な処理を実行せず、プログラムを効率よく自動生成することができるプログラム自動生成装置、方法、およびプログラムを提供することを目的とする。
【課題を解決するための手段】
【０００９】
本発明では上記課題を解決するために、プログラムを自動的に生成するプログラム自動生成装置において、開始要素、通常要素、終端要素を含むプログラム要素と、前記プログラム要素を結合する結合情報とからなるプログラム情報を記憶するプログラム情報記憶手段と、前記開始要素から、これに接続される通常要素を前記結合情報に沿って終端要素にいたるまで追跡すると同時に、前記プログラム要素をコード生成して実行可能なプログラムを生成するプログラム生成手段とを有することを特徴とするプログラム自動生成装置が提供される。
【００１０】
このようなプログラム自動生成装置によれば、プログラム情報記憶手段により、開始要素、通常要素、終端要素を含むプログラム要素と、プログラム要素を結合する結合情報とからなるプログラム情報が記憶され、プログラム生成手段により、開始要素から、これに接続される通常要素を結合情報に沿って終端要素にいたるまで追跡すると同時に、プログラム要素をコード生成して実行可能なプログラムが生成される。
【００１１】
また、本発明では、プログラムを自動的に生成するプログラム自動生成方法において、プログラム情報記憶手段が、開始要素、通常要素、終端要素を含むプログラム要素と、前記プログラム要素を結合する結合情報とからなるプログラム情報を記憶するステップと、プログラム生成手段が、前記開始要素から、これに接続される通常要素を前記結合情報に沿って終端要素にいたるまで追跡すると同時に、前記プログラム要素をコード生成して実行可能なプログラムを生成するステップとを有することを特徴とするプログラム自動生成方法が提供される。
【００１２】
このようなプログラム自動生成方法によれば、プログラム情報記憶手段により、開始要素、通常要素、終端要素を含むプログラム要素と、プログラム要素を結合する結合情報とからなるプログラム情報が記憶され、プログラム生成手段により、開始要素から、これに接続される通常要素を結合情報に沿って終端要素にいたるまで追跡すると同時に、プログラム要素をコード生成して実行可能なプログラムが生成される。
【００１３】
また、本発明では、プログラムを自動的に生成するプログラム自動生成プログラムにおいて、コンピュータに、プログラム情報記憶手段が、開始要素、通常要素、終端要素を含むプログラム要素と、前記プログラム要素を結合する結合情報とからなるプログラム情報を記憶するステップと、プログラム生成手段が、前記開始要素から、これに接続される通常要素を前記結合情報に沿って終端要素にいたるまで追跡すると同時に、前記プログラム要素をコード生成して実行可能なプログラムを生成するステップの処理を実行させることを特徴とするプログラム自動生成プログラムが提供される。
【００１４】
このようなプログラム自動生成プログラムによれば、プログラム情報記憶手段により、開始要素、通常要素、終端要素を含むプログラム要素と、プログラム要素を結合する結合情報とからなるプログラム情報が記憶され、プログラム生成手段により、開始要素から、これに接続される通常要素を結合情報に沿って終端要素にいたるまで追跡すると同時に、プログラム要素をコード生成して実行可能なプログラムが生成される。
【発明の効果】
【００１５】
本発明のプログラム自動生成装置、方法、およびプログラムによれば、開始要素から終端要素にいたるまで追跡すると同時に、プログラム要素をコード生成して実行可能なプログラムが生成されるので、前方から１回走査するだけでコードの生成を実現することでき、コード生成の効率を良好にすることができる。
【発明を実施するための最良の形態】
【００１６】
〔第１の実施の形態〕
以下、本発明の実施の形態を図面を参照して詳細に説明する。
図１は、本実施の形態に適用される発明の概念図である。図１に示すように、プログラム自動生成装置１には、入力手段２と、表示手段３とが接続されている。また、プログラム自動生成装置１は、プログラム情報４を記憶するプログラム情報記憶手段１ａと、プログラム情報４からプログラムを生成するプログラム生成手段１ｂと、プログラム生成手段１ｂが生成した生成プログラム１ｃとを有する。
【００１７】
プログラム情報記憶手段１ａは、ユーザが入力手段２を用いて入力したプログラム情報４を記憶し、表示手段３と、プログラム生成手段１ｂとにプログラム情報４を出力する。プログラム生成手段１ｂは、プログラム情報記憶手段１ａから受け取ったプログラム情報４を用いてプログラム生成を行う。そして、生成プログラム１ｃは、プログラム生成手段１ｂが生成したプログラムである。また、表示手段３は、プログラム情報記憶手段１ａから受け取ったプログラム情報４を表示する。
【００１８】
図２は、本実施の形態に係るシステム構成例を示す図である。図２に示すように、プログラム自動生成装置１００は、ネットワーク２００を介して大型プラント３００と接続されている。プログラム自動生成装置１００は、ユーザから入力されたプログラム情報を元にプログラムを自動生成する。そして、プログラム自動生成装置１００は、その生成したプログラムを、ネットワーク２００を介して大型プラント３００へ送信して、大型プラント３００を制御し、動作させる。
【００１９】
図３は、本実施の形態に係るプログラム自動生成装置のハードウェア構成例である。プログラム自動生成装置１００は、ＣＰＵ（Central Processing Unit）１０１によって装置全体が制御されている。ＣＰＵ１０１には、バス１０７を介してＲＡＭ（Random Access Memory）１０２、ハードディスクドライブ（ＨＤＤ:Hard Disk Drive）１０３、グラフィック処理装置１０４、入力インタフェース１０５、および通信インタフェース１０６が接続されている。
【００２０】
ＲＡＭ１０２には、ＣＰＵ１０１に実行させるＯＳのプログラムやアプリケーションプログラムの少なくとも一部が一時的に格納される。また、ＲＡＭ１０２には、ＣＰＵ１０１による処理に必要な各種データが格納される。ＨＤＤ１０３には、ＯＳやアプリケーションプログラムが格納される。
【００２１】
グラフィック処理装置１０４には、モニタ１１が接続されている。グラフィック処理装置１０４は、ＣＰＵ１０１からの命令に従って、画像をモニタ１１の画面に表示させる。入力インタフェース１０５には、キーボード１２とマウス１３とが接続されている。入力インタフェース１０５は、キーボード１２やマウス１３から送られてくる信号を、バス１０７を介してＣＰＵ１０１に送信する。
【００２２】
通信インタフェース１０６は、ネットワーク２００に接続されている。通信インタフェース１０６は、ネットワーク２００を介して、他のコンピュータとの間でデータの送受信を行う。以上のようなハードウェア構成によって、本実施の形態の処理機能を実現することができる。
【００２３】
次に、プログラム自動生成装置１００が有する処理機能について説明する。
図４は、プログラム自動生成装置の処理機能を示す図である。図４に示すように、プログラム自動生成装置１００は、モニタ１１と、キーボード１２が接続されている。また、プログラム自動生成装置１００は、プログラム生成部１１０と、プログラム情報記憶部１２０と、生成プログラム１３０とを有している。
【００２４】
プログラム情報記憶部１２０は、ユーザからキーボード１２を介してプログラム情報４００を受け、記憶する。また、プログラム情報記憶部１２０は、プログラム情報表示指示の信号を受信すると、モニタ１１に対してプログラム情報４００を出力する。
【００２５】
プログラム生成部１１０は、識別番号付加部１１１と、リスト作成部１１２と、フラグ作成部１１３と、出力点選択部１１４と、要素特定部１１５と、フラグ属性変更部１１６と、コード生成部１１７とを有している。
【００２６】
識別番号付加部１１１は、プログラム情報４００の構成要素のすべての入力点および出力点に対して、一意な識別番号を付加する。また、リスト作成部１１２は、プログラム情報４００の開始要素を検出し、開始要素の出力点に付されている識別番号を検出し、検出した識別番号をリスト化した出力点リストを作成する。
【００２７】
フラグ作成部１１３は、プログラム情報４００のすべての通常要素の入力点に対して、その入力点を有する通常要素をコード生成部１１７がコード生成することが可能か否かを示す属性を記憶させるフラグを設ける。
【００２８】
出力点選択部１１４は、出力点リストに格納された識別番号から、対応する出力点を１つ選択する。また、選択した出力点を出力点リストから削除する。要素特定部１１５は、出力点選択部１１４が選択した出力点に対応する入力点を持つプログラム要素を特定する。
【００２９】
フラグ属性変更部１１６は、出力点選択部１１４が選択した出力点に対応する入力点に設けられているフラグの属性を変更する。また、コード生成部１１７は、コード生成を行おうとしている通常要素のすべての入力点のフラグの属性が生成可能になっていることを確認して、コード生成を行う。
【００３０】
プログラム情報４００については、図６以降で処理の内容とともに詳述する。
次に、プログラム自動生成装置１００により行われる処理の説明をする。まずは、フローチャートを使ってプログラム自動生成処理の概要を説明し、その後、具体的な表示例を用いて処理手順を説明する。
【００３１】
図５は、本実施の形態のプログラム自動生成処理の手順を示すフローチャートである。以下、図５に示す処理をステップ番号に沿って説明する。
〔ステップＳ１１〕識別番号付加部１１１は、プログラム情報４００の構成要素のすべての入力点および出力点に対して、一意な識別番号を付する。次に、リスト作成部１１２は、プログラム情報４００の開始要素を検出し、開始要素の出力点に付されている識別番号を検出し、検出した識別番号をリスト化した出力点リストを作成する。
【００３２】
また、フラグ作成部１１３は、プログラム情報４００のすべての通常要素の入力点に対して、その入力点を有する通常要素をコード生成部１１７がコード生成することが可能か否かを示す属性を記憶させるフラグを設ける。この識別番号付加処理と、出力点リスト作成処理と、フラグ作成処理の３つの作業をあわせて初期化処理という。なお、初期化処理のとき、フラグ作成部１１３が作成したすべてのフラグは処理が不可を示す属性に設定しておく。
【００３３】
〔ステップＳ１２〕出力点選択部１１４は、出力点リストに格納された識別番号から、任意の出力点を１つ選択する。
〔ステップＳ１３〕出力点選択部１１４は、出力点の選択に成功した場合は、処理をステップＳ１４へ進め、出力点の選択に成功しなかった場合は、処理を終了する。
【００３４】
〔ステップＳ１４〕出力点選択部１１４は、出力点リストから選択した識別番号を削除する。また、要素特定部１１５は、出力点選択部１１４が選択した出力点に対応する入力点を持つプログラム要素を特定する。
【００３５】
〔ステップＳ１５〕要素特定部１１５は、特定した要素が通常要素であるか否かを判断する。通常要素であると判断した場合は、処理をステップＳ１６へ進め、通常要素でないと判断した場合は、処理をステップＳ１２へ進める。
【００３６】
〔ステップＳ１６〕フラグ属性変更部１１６は、出力点選択部１１４が選択した出力点に対応する入力点に設けられているフラグの属性を生成可能に変更する。
〔ステップＳ１７〕コード生成部１１７は、コード生成を行おうとしている通常要素のすべての入力点のフラグの属性が生成可能になっているか否かを判断する。すべてのフラグの属性が生成可能になっている場合は、処理をステップＳ１８へ進め、すべてのフラグの属性が生成可能になっていない場合は、処理をステップＳ１２へ進める。
【００３７】
〔ステップＳ１８〕コード生成部１１７は、要素特定部１１５によって特定された通常要素のコード生成を行う。
〔ステップＳ１９〕リスト作成部１１２は、コード生成部１１７によってコード生成が行われた通常要素のすべての出力点を読み込み、出力点リストに格納する。
【００３８】
以上が、プログラム自動生成装置１００が行う、プログラム自動生成処理の概要である。続いて、プログラム情報４００の表示例を使って処理手順を説明する。
図６は、本実施の形態の表示装置に表示されるプログラム情報の概要を示す図である。図６に示すように、プログラム情報４００は、開始要素４１１、４１２と、通常要素４２１、４２２、４２３、４２４、４２５と、終端要素４３１とを備えている。開始要素４１１、４１２は、プログラムの端点に相当するものであり、具体的には、外部入力部である。
【００３９】
通常要素４２１、４２２、４２３、４２４、４２５は、プログラム自動生成装置１００が生成したプログラムを動かすコンピュータにおいて実行される処理内容を、機能単位にまとめたものである。具体的には、サブルーチンのようなものであり、Ｃ言語では関数である。
【００４０】
終端要素４３１は、プログラムの端点に相当するものであり、具体的には外部出力部である。識別番号付加部１１１は、プログラム情報４００の各構成要素の出力点と入力点に一意な識別番号を付す。識別番号付加部１１１によって識別番号が付加されたプログラム情報４００を図７に示す。
【００４１】
図７は、本実施の形態のプログラム情報の構成要素に識別番号が付された状態を示す図である。図７に示すように、プログラム情報４００の各プログラム要素の入力点、および出力点には識別番号が付加されている。このとき、リスト作成部１１２は、開始要素４１１、４１２の出力点に付された識別番号を読み取り、出力点リストを作成する。リスト作成部１１２によって作成された出力点リストを図８に示す。
【００４２】
図８は、本実施の形態の出力点リストのデータ構造を示す図である。図８に示すように、初期化処理が行われた後の出力点リスト５００には、開始要素４１１、４１２の出力点に付された識別番号が格納されている。本実施の形態においては、開始要素４１１の出力点の１と、開始要素４１２の出力点の１０が格納されている。
【００４３】
次に、フラグ作成処理について説明する。
図９は、本実施の形態の通常要素の入力点にフラグが設けられた状態を示す図である。図９に示すように、フラグ作成部１１３は、通常要素４２１、４２２、４２３、４２４、４２５の入力点に対して、通常要素４２１、４２２、４２３、４２４、４２５のコード生成の可否を示すフラグを設ける。
【００４４】
初期化処理が行われた後のフラグは黒丸となっている。黒丸は、各フラグに対応する通常要素のコード生成が不可能であることを示している。なお、通常要素４２１、４２２、４２３、４２４、４２５のコード生成が可能な場合、フラグを白丸で表す。
【００４５】
出力点選択部１１４は、コード生成開始信号を受けると、出力点リスト５００から出力点を１つ選択して読み出す。本実施の形態においては、出力点リスト５００には１と１０が格納されており、出力点選択部１１４は１と１０のどちらを選んでもよいが、ここでは１を選んだとして説明する。出力点選択部１１４は、出力点リスト５００から１を選ぶと、出力点リスト５００から選んだ１を削除する。出力点リスト５００は、１が削除されると図１０のようになる。
【００４６】
図１０は、出力点選択部が出力点リストから１が削除した後の出力点リストを示す図である。図１０に示すように、出力点選択部１１４が出力点リスト５００から１を削除すると、出力点リスト５００には１０だけが残される。また、フラグ属性変更部１１６は、出力点選択部１１４によって出力点リスト５００から出力点が選択され、選択された出力点に対応する入力点を有するプログラム要素が要素特定部１１５によって特定されると、特定されたプログラム要素が通常要素か否かを判断する。図９においては、特定されたプログラム要素は通常要素であるので、選択された出力点に対応する入力点のフラグの属性がフラグ属性変更部１１６によって変更される。フラグが変更された後のプログラム情報４００を図１１に示す。
【００４７】
図１１は、出力点選択部が出力点リストから１を選んだ後のプログラム情報を示す図である。図１１に示すように、出力点リスト５００から１が選択されたことによって特定された通常要素４２１の入力点のフラグが白丸になっている。このとき、コード生成部１１７は、特定された通常要素が有するすべての入力点の属性が変更されているか否かを判断する。
【００４８】
図１１においては、特定された通常要素の有するすべての入力点の属性が変更になっている。このとき、コード生成部１１７は、その通常要素のコード生成を行う。コード生成部１１７によってコード生成がされた結果を図１２に示す。
【００４９】
図１２は、通常要素がコード生成されたときの具体例を示す図である。通常要素４２１、４２２、４２３、４２４、４２５がコード生成されると、各通常要素内に表示されているアルファベットａ〜ｅに対応するコードａ（）；〜ｅ（）；が生成されるとして説明する。
【００５０】
図１２に示すように、通常要素４２１がコード生成されている。図１２においては、Ｃ言語でコード生成された場合の書式の例を示している。また、コード生成の部分を明確にするために、関数宣言部などの表記は省略してある。リスト作成部１１２は、コード生成部１１７が１つのコード生成が終了すると、コード生成が終了した通常要素４２１の出力点を検出し、その出力点の識別番号を検出する。そして、検出した識別番号を出力点リスト５００に格納する。このときの出力点リスト５００の状態を図１３に示した。
【００５１】
図１３は、出力点リストの状態を示した図である。図１３に示すように、出力点リスト５００には、図１０のときに残っていた１０と、図１２の処理で新たに付け加わった３が格納されている。
【００５２】
これ以降のコード生成処理は、図９から図１３で示した処理を繰り返す。そこで図１４以降では、プログラム情報４００の表示例と、出力点リスト５００のデータ構造と、コード生成された生成プログラム１３０の結果例の３つを１つの図に表し、各々の状態の遷移を説明する。
【００５３】
図１４は、通常要素４２２が特定されたときの各々の状態を示す図であり、図１４（Ａ）は、通常要素４２２が特定されたときの出力点リストのデータ構造を示す図であり、図１４（Ｂ）は、通常要素４２２が特定されたときのプログラム情報の表示例であり、図１４（Ｃ）は、通常要素４２２が特定されたときのコード生成されたプログラムを示す図である。
【００５４】
出力点選択部１１４は、出力点リスト５００から出力点を１つ選択しようとする。出力点リスト５００には３と１０が格納されている。図１４（Ａ）に示すように、出力点選択部１１４は、出力点選択部１１４が３を選択した場合、出力点リスト５００から３を削除する。そして、要素特定部１１５は、出力点３に対応する入力点４を有する通常要素４２２を特定する。
【００５５】
図１４（Ｂ）に示すように、フラグ属性変更部１１６は、入力点４を有する通常要素４２２が特定されると、入力点４のフラグの属性を変更する。図１４（Ｃ）に示すように、コード生成部１１７は、入力点４を有する通常要素４２２のすべての入力点のフラグの属性が生成可能に変更されていないので、通常要素４２２のコード生成は行わない。
【００５６】
図１５は、通常要素４２４が特定されたときの各々の状態を示す図であり、図１５（Ａ）は、通常要素４２４が特定されたときの出力点リストのデータ構造を示す図であり、図１５（Ｂ）は、通常要素４２４が特定されたときのプログラム情報の表示例であり、図１５（Ｃ）は、通常要素４２４が特定されたときのコード生成されたプログラムを示す図である。
【００５７】
出力点選択部１１４は、出力点リスト５００から出力点を１つ選択しようとする。出力点リスト５００には１０が格納されている。図１５（Ａ）に示すように、出力点選択部１１４は、出力点選択部１１４が１０を選択した場合、出力点リスト５００から１０を削除する。そして、要素特定部１１５は、出力点１０に対応する入力点１１を有する通常要素４２４を特定する。
【００５８】
図１５（Ｂ）に示すように、フラグ属性変更部１１６は、入力点１０を有する通常要素４２４が特定されると、入力点１０のフラグの属性を変更する。図１５（Ｃ）に示すように、コード生成部１１７は、入力点１０を有する通常要素４２４のすべての入力点のフラグの属性が生成可能に変更されているので、通常要素４２４のコード生成を行う。
【００５９】
図１６は、通常要素４２４のコード生成が行われたときの各々の状態を示す図であり、図１６（Ａ）は、通常要素４２４のコード生成が行われたときの出力点リストのデータ構造を示す図であり、図１６（Ｂ）は、通常要素４２４のコード生成が行われたときのプログラム情報の表示例であり、図１６（Ｃ）は、通常要素４２４のコード生成が行われたときのコード生成されたプログラムを示す図である。
【００６０】
リスト作成部１１２は、コード生成部１１７によってコード生成が行われた通常要素４２４のすべての出力点を読み込み、出力点リスト５００に格納する。図１６（Ａ）に示すように、リスト作成部１１２は、出力点リスト５００に１２を格納する。図１６（Ｂ）および（Ｃ）に示すように、リスト作成部１１２がコード生成部１１７によってコード生成された通常要素の出力点を出力点リスト５００に格納する場合、フラグ属性変更部１１６は、フラグの属性の変更を行わない。また、コード生成部１１７は、コード生成を行わない。そして、出力点選択部１１４が出力点リスト５００から出力点を選択しようと試みる。
【００６１】
図１７は、通常要素４２５が特定されたときの各々の状態を示す図であり、図１７（Ａ）は、通常要素４２５が特定されたときの出力点リストのデータ構造を示す図であり、図１７（Ｂ）は、通常要素４２５が特定されたときのプログラム情報の表示例であり、図１７（Ｃ）は、通常要素４２５が特定されたときのコード生成されたプログラムを示す図である。
【００６２】
出力点選択部１１４は、出力点リスト５００から出力点を１つ選択しようとする。出力点リスト５００には１２が格納されている。図１７（Ａ）に示すように、出力点選択部１１４は、出力点選択部１１４が１２を選択した場合、出力点リスト５００から１２を削除する。そして、要素特定部１１５は、出力点１２に対応する入力点１３を有する通常要素４２５を特定する。
【００６３】
図１７（Ｂ）に示すように、フラグ属性変更部１１６は、入力点１３を有する通常要素４２５が特定されると、入力点１３のフラグの属性を変更する。図１７（Ｃ）に示すように、コード生成部１１７は、入力点１３を有する通常要素４２５のすべての入力点のフラグの属性が生成可能に変更されているので、通常要素４２５のコード生成を行う。
【００６４】
図１８は、通常要素４２５のコード生成が行われたときの各々の状態を示す図であり、図１８（Ａ）は、通常要素４２５のコード生成が行われたときの出力点リストのデータ構造を示す図であり、図１８（Ｂ）は、通常要素４２５のコード生成が行われたときのプログラム情報の表示例であり、図１８（Ｃ）は、通常要素４２５のコード生成が行われたときのコード生成されたプログラムを示す図である。
【００６５】
リスト作成部１１２は、コード生成部１１７によってコード生成が行われた通常要素４２５のすべての出力点を読み込み、出力点リスト５００に格納する。図１８（Ａ）に示すように、リスト作成部１１２は、出力点リスト５００に１４を格納する。図１８（Ｂ）および（Ｃ）に示すように、リスト作成部１１２がコード生成部１１７によってコード生成された通常要素の出力点を出力点リスト５００に格納する場合、フラグ属性変更部１１６は、フラグの属性の変更を行わない。また、コード生成部１１７は、コード生成を行わない。そして、出力点選択部１１４が出力点リスト５００から出力点を選択しようと試みる。
【００６６】
図１９は、通常要素４２２が特定されたときの２度目の各々の状態を示す図であり、図１９（Ａ）は、通常要素４２２が特定されたときの２度目の出力点リストのデータ構造を示す図であり、図１９（Ｂ）は、通常要素４２２が特定されたときの２度目のプログラム情報の表示例であり、図１９（Ｃ）は、通常要素４２２が特定されたときの２度目のコード生成されたプログラムを示す図である。
【００６７】
出力点選択部１１４は、出力点リスト５００から出力点を１つ選択しようとする。出力点リスト５００には１４が格納されている。図１９（Ａ）に示すように、出力点選択部１１４は、出力点選択部１１４が１４を選択した場合、出力点リスト５００から１４を削除する。そして、要素特定部１１５は、出力点１４に対応する入力点５を有する通常要素４２２を特定する。
【００６８】
図１９（Ｂ）に示すように、フラグ属性変更部１１６は、入力点５を有する通常要素４２２が特定されると、入力点５のフラグの属性を変更する。図１７（Ｃ）に示すように、コード生成部１１７は、入力点５を有する通常要素４２２のすべての入力点のフラグの属性が生成可能に変更されているので、通常要素４２２のコード生成を行う。
【００６９】
図２０は、通常要素４２２のコード生成が行われたときの各々の状態を示す図であり、図２０（Ａ）は、通常要素４２２のコード生成が行われたときの出力点リストのデータ構造を示す図であり、図２０（Ｂ）は、通常要素４２２のコード生成が行われたときのプログラム情報の表示例であり、図２０（Ｃ）は、通常要素４２２のコード生成が行われたときのコード生成されたプログラムを示す図である。
【００７０】
リスト作成部１１２は、コード生成部１１７によってコード生成が行われた通常要素４２２のすべての出力点を読み込み、出力点リスト５００に格納する。図２０（Ａ）に示すように、リスト作成部１１２は、出力点リスト５００に６を格納する。図２０（Ｂ）および（Ｃ）に示すように、リスト作成部１１２がコード生成部１１７によってコード生成された通常要素の出力点を出力点リスト５００に格納する場合、フラグ属性変更部１１６は、フラグの属性の変更を行わない。また、コード生成部１１７は、コード生成を行わない。そして、出力点選択部１１４が出力点リスト５００から出力点を選択しようと試みる。
【００７１】
図２１は、通常要素４２３が特定されたときの各々の状態を示す図であり、図２１（Ａ）は、通常要素４２３が特定されたときの出力点リストのデータ構造を示す図であり、図２１（Ｂ）は、通常要素４２３が特定されたときのプログラム情報の表示例であり、図２１（Ｃ）は、通常要素４２３が特定されたときのコード生成されたプログラムを示す図である。
【００７２】
出力点選択部１１４は、出力点リスト５００から出力点を１つ選択しようとする。出力点リスト５００には６が格納されている。図２１（Ａ）に示すように、出力点選択部１１４は、出力点選択部１１４が６を選択した場合、出力点リスト５００から６を削除する。そして、要素特定部１１５は、出力点６に対応する入力点７を有する通常要素４２３を特定する。
【００７３】
図２１（Ｂ）に示すように、フラグ属性変更部１１６は、入力点７を有する通常要素４２３が特定されると、入力点７のフラグの属性を変更する。図２１（Ｃ）に示すように、コード生成部１１７は、入力点７を有する通常要素４２３のすべての入力点のフラグの属性が生成可能に変更されているので、通常要素４２３のコード生成を行う。
【００７４】
図２２は、通常要素４２３のコード生成が行われたときの各々の状態を示す図であり、図２２（Ａ）は、通常要素４２３のコード生成が行われたときの出力点リストのデータ構造を示す図であり、図２２（Ｂ）は、通常要素４２３のコード生成が行われたときのプログラム情報の表示例であり、図２２（Ｃ）は、通常要素４２３のコード生成が行われたときのコード生成されたプログラムを示す図である。
【００７５】
リスト作成部１１２は、コード生成部１１７によってコード生成が行われた通常要素４２３のすべての出力点を読み込み、出力点リスト５００に格納する。図２２（Ａ）に示すように、リスト作成部１１２は、出力点リスト５００に８を格納する。図２２（Ｂ）および（Ｃ）に示すように、リスト作成部１１２がコード生成部１１７によってコード生成された通常要素の出力点を出力点リスト５００に格納する場合、フラグ属性変更部１１６は、フラグの属性の変更を行わない。また、コード生成部１１７は、コード生成を行わない。そして、出力点選択部１１４が出力点リスト５００から出力点を選択しようと試みる。
【００７６】
図２３は、終端要素４３１が特定されたときの各々の状態を示す図であり、図２３（Ａ）は、終端要素４３１が特定されたときの出力点リストのデータ構造を示す図であり、図２３（Ｂ）は、終端要素４３１が特定されたときのプログラム情報の表示例であり、図２３（Ｃ）は、終端要素４３１が特定されたときのコード生成されたプログラムを示す図である。
【００７７】
出力点選択部１１４は、出力点リスト５００から出力点を１つ選択しようとする。出力点リスト５００には８が格納されている。図２３（Ａ）に示すように、出力点選択部１１４は、出力点選択部１１４が８を選択した場合、出力点リスト５００から８を削除する。そして、要素特定部１１５は、出力点８に対応する入力点９を有する終端要素４３１を特定する。要素特定部１１５は、特定したプログラム要素が終端要素４３１だったので、ふたたび出力点選択部１１４に出力点リスト５００から出力点を選択するように指示を出す。出力点選択部１１４は、出力点リスト５００から出力点を選択しようと試みるが、出力点リスト５００にはもう出力点が格納されていないので、コード生成処理を終了する。
【００７８】
図２３（Ｂ）および（Ｃ）に示すように、要素特定部１１５が特定したプログラム要素が通常要素でない場合は、フラグ属性変更部１１６は、フラグの属性の変更を行わない。また、コード生成部１１７は、コード生成を行わない。
【００７９】
ここまでは、コード生成の順番を明確にするために、開始要素、終端要素のコード生成や、関数の引数、戻り値などのデータ引渡手段を省略して説明したが、実際にはこれらが必要となる場合が多い。そこで、簡単な図面をＣ言語のプログラムに変換する場合を説明することにより、これらの扱いについて例示する。
【００８０】
図２４は、プログラム情報をＣ言語のプログラムに変換する場合の例を示した図である。図２４に示すような、開始要素１４１１と、通常要素１４２１と、終端要素１４３１とを有するプログラム情報１４００を考える。開始要素１４１１は、ＣＯＮ−ＩＮというラベルで示され、終端要素１４３１は、ＣＯＮ−ＯＵＴというラベルで示されるものとする。
【００８１】
そうすると、コード生成部１１７は、出力点選択部１１４によって出力点リスト５００から出力点が選択されるとともに、ＯＣＮ−ＩＮの読み出し処理に対応するコードを生成する。つまり、読み出した値を自動変数ａに出力するようにしている。これは開始要素１４１１と通常要素１４２１を結ぶ結合要素１４４１が自動変数ａに対応付けられていると考えてもよい。
【００８２】
また、通常要素１４２１は、たとえばｆという名前の関数であり、１入力、１出力であるとしているので、入力を関数の引数、出力を関数の戻り値に割り当てるとよく、関数ｆは、１引数で戻り値を持つ関数とすればよい。この場合、コード生成部１１７が生成するコードの形式については、関数ｆがａを引数として受け取り、戻り値として自動変数ｂを出力するようにすればよい。これは通常要素１４２１と終端要素１４３１を結ぶ結合要素１４４２が自動変数ｂに対応付けられていると考えてもよい。
【００８３】
なお、入力数が多かった場合には、引数を増やせばよいが、出力数が多かった場合については、Ｃ言語の場合には戻り値が１つなので、ポインタを使って値を返すか、構造体を使って値を渡すなどの方法を取る必要がある。
【００８４】
また、コード生成部１１７は、要素特定部１１５によって特定された要素が終端要素１４３１であった場合、ＣＯＮ−ＯＵＴへの書き出し処理に対応するコードを生成する。つまり、通常要素１４２１がｂという値の自動変数を書き出しているので、ＣＯＮ−ＯＵＴにｂを書き出すコードを生成すればよい。このような処理によって生成された生成プログラムを図２５に示す。
【００８５】
図２５は、コード生成したときの出力例を示す図である。図２５に示す生成プログラム１１３０は、プログラム情報１４００をＣ言語のプログラムに変換した場合を示している。また、通常要素１４２１は、ＣＯＮ−ＩＮというラベルで示されており、ａという変数を出力している。出力された変数ａは、関数ｆに渡され、引数として用いられている。この引数ａを使った関数ｆは、変数ｂを出力している。そしてその変数ｂがＣＯＮ−ＯＵＴというラベルで示されている終端要素１４３１に出力されている。
【００８６】
以上の処理によってコード生成が実現される。このコード生成が実現されることによって、開始要素から終端要素にいたるまで追跡すると同時に、プログラム要素をコード生成して実行可能なプログラムが生成されるので、前方から１回走査するだけでコード生成が実現することができ、コード生成の効率を良好にすることができる。
【００８７】
〔第２の実施の形態〕
次に、本発明の第２の実施の形態について説明する。本実施の形態のプログラム自動生成装置は、出力点を複数有する通常要素が含まれる点が異なる以外は、第１の実施の形態で示した構成と同様である。このため、上記第１の実施の形態とほぼ同様の構成部分については同一の符号を付すなどして適宜その説明を省略する。
【００８８】
図２６は、本実施の形態のプログラム情報の構成要素に識別番号が付された状態を示す図である。図２６に示すように、プログラム情報２４００は、開始要素２４１１と、通常要素２４２１、２４２２、２４２３と、終端要素２４３１、２４３２とを備えている。開始要素２４１１は、プログラムの端点に相当するものであり、具体的には、外部入力部である。
【００８９】
通常要素２４２１、２４２２、２４２３は、プログラム自動生成装置１００が生成したプログラムを動かすコンピュータにおいて実行される処理内容を、機能単位にまとめたものである。具体的には、サブルーチンのようなものであり、Ｃ言語では関数である。
【００９０】
終端要素２４３１、２４３２は、プログラムの端点に相当するものであり、具体的には外部出力部である。識別番号付加部１１１は、プログラム情報２４００の各構成要素の出力点と入力点に一意な識別番号を付す。
【００９１】
図２７は、本実施の形態の出力点リストのデータ構造を示す図である。図２７に示すように、初期化処理が行われた後の出力点リスト２５００には、開始要素２４１１の出力点に付された識別番号が格納されている。本実施の形態においては、開始要素２４１１の出力点の２１が格納されている。
【００９２】
次に、フラグ作成処理について説明する。
図２８は、本実施の形態の通常要素の入力点にフラグが設けられた状態を示す図である。図２８に示すように、フラグ作成部１１３は、通常要素２４２１、２４２２、２４２３の入力点に対して、通常要素２４２１、２４２２、２４２３のコード生成の可否を示すフラグを設ける。
【００９３】
初期化処理が行われた後のフラグは黒丸となっている。黒丸は、各フラグに対応する通常要素のコード生成が不可能であることを示している。なお、通常要素２４２１、２４２２、２４２３のコード生成が可能な場合、フラグを白丸で表す。
【００９４】
以上が本実施の形態のコード生成処理における初期化処理である。つづいて、本実施の形態のコード生成処理のつづきを説明する。図２９以降では、プログラム情報２４００の表示例と、出力点リスト２５００のデータ構造と、コード生成されたプログラム２１３０の結果例の３つを１つの図に表し、各々の状態の遷移を説明する。
【００９５】
また、コード生成されたプログラム２１３０は、通常要素２４２１、２４２２、２４２３がコード生成されると、各通常要素内に表示されているアルファベットｘ〜ｚに対応するコードｘ（）；〜ｚ（）；が生成されるとして説明する。
【００９６】
図２９は、通常要素２４２１が特定されたときの各々の状態を示す図であり、図２９（Ａ）は、通常要素２４２１が特定されたときの出力点リストのデータ構造を示す図であり、図２９（Ｂ）は、通常要素２４２１が特定されたときのプログラム情報の表示例であり、図２９（Ｃ）は、通常要素２４２１が特定されたときのコード生成されたプログラムを示す図である。
【００９７】
出力点選択部１１４は、出力点リスト２５００から出力点を１つ選択しようとする。出力点リスト２５００には２１が格納されている。図２９（Ａ）に示すように、出力点選択部１１４は、出力点選択部１１４が２１を選択した場合、出力点リスト２５００から２１を削除する。そして、要素特定部１１５は、出力点２１に対応する入力点２２を有する通常要素２４２１を特定する。
【００９８】
図２９（Ｂ）に示すように、フラグ属性変更部１１６は、入力点２２を有する通常要素２４２１が特定されると、入力点２２のフラグの属性を変更する。図２９（Ｃ）に示すように、コード生成部１１７は、入力点２２を有する通常要素２４２１のすべての入力点のフラグの属性が生成可能に変更されているので、通常要素２４２１のコード生成を行う。
【００９９】
図３０は、通常要素２４２１のコード生成が行われたときの各々の状態を示す図であり、図３０（Ａ）は、通常要素２４２１のコード生成が行われたときの出力点リストのデータ構造を示す図であり、図３０（Ｂ）は、通常要素２４２１のコード生成が行われたときのプログラム情報の表示例であり、図３０（Ｃ）は、通常要素２４２１のコード生成が行われたときのコード生成されたプログラムを示す図である。
【０１００】
リスト作成部１１２は、コード生成部１１７によってコード生成が行われた通常要素２４２１のすべての出力点を読み込み、出力点リスト２５００に格納する。図３０（Ａ）に示すように、リスト作成部１１２は、出力点リスト２５００に２３と２４を格納する。図３０（Ｂ）および（Ｃ）に示すように、リスト作成部１１２がコード生成部１１７によってコード生成された通常要素の出力点を出力点リスト２５００に格納する場合、フラグ属性変更部１１６は、フラグの属性の変更を行わない。また、コード生成部１１７は、コード生成を行わない。そして、出力点選択部１１４が出力点リスト２５００から出力点を選択しようと試みる。
【０１０１】
図３１は、通常要素２４２２が特定されたときの各々の状態を示す図であり、図３１（Ａ）は、通常要素２４２２が特定されたときの出力点リストのデータ構造を示す図であり、図３１（Ｂ）は、通常要素２４２２が特定されたときのプログラム情報の表示例であり、図３１（Ｃ）は、通常要素２４２２が特定されたときのコード生成されたプログラムを示す図である。
【０１０２】
出力点選択部１１４は、出力点リスト２５００から出力点を１つ選択しようとする。出力点リスト２５００には２３と２４が格納されている。図３１（Ａ）に示すように、出力点選択部１１４は、出力点選択部１１４が２３を選択した場合、出力点リスト２５００から２３を削除する。そして、要素特定部１１５は、出力点２３に対応する入力点２５を有する通常要素２４２２を特定する。
【０１０３】
図３１（Ｂ）に示すように、フラグ属性変更部１１６は、入力点２５を有する通常要素２４２２が特定されると、入力点２５のフラグの属性を変更する。図３１（Ｃ）に示すように、コード生成部１１７は、入力点２５を有する通常要素２４２２のすべての入力点のフラグの属性が生成可能に変更されているので、通常要素２４２２のコード生成を行う。
【０１０４】
図３２は、通常要素２４２２のコード生成が行われたときの各々の状態を示す図であり、図３２（Ａ）は、通常要素２４２２のコード生成が行われたときの出力点リストのデータ構造を示す図であり、図３２（Ｂ）は、通常要素２４２２のコード生成が行われたときのプログラム情報の表示例であり、図３２（Ｃ）は、通常要素２４２２のコード生成が行われたときのコード生成されたプログラムを示す図である。
【０１０５】
リスト作成部１１２は、コード生成部１１７によってコード生成が行われた通常要素２４２２のすべての出力点を読み込み、出力点リスト２５００に格納する。図３２（Ａ）に示すように、リスト作成部１１２は、出力点リスト２５００に２７を格納する。図３２（Ｂ）および（Ｃ）に示すように、リスト作成部１１２がコード生成部１１７によってコード生成された通常要素の出力点を２５００に格納する場合、フラグ属性変更部１１６は、フラグの属性の変更を行わない。また、コード生成部１１７は、コード生成を行わない。そして、出力点選択部１１４が出力点リスト２５００から出力点を選択しようと試みる。
【０１０６】
図３３は、終端要素２４３１が特定されたときの各々の状態を示す図であり、図３３（Ａ）は、終端要素２４３１が特定されたときの出力点リストのデータ構造を示す図であり、図３３（Ｂ）は、終端要素２４３１が特定されたときのプログラム情報の表示例であり、図３３（Ｃ）は、終端要素２４３１が特定されたときのコード生成されたプログラムを示す図である。
【０１０７】
出力点選択部１１４は、出力点リスト２５００から出力点を１つ選択しようとする。出力点リスト２５００には２４と２７が格納されている。図３３（Ａ）に示すように、出力点選択部１１４は、出力点選択部１１４が２７を選択した場合、出力点リスト２５００から２７を削除する。そして、要素特定部１１５は、出力点２７に対応する入力点２９を有する終端要素２４３１を特定する。要素特定部１１５は、特定したプログラム要素が終端要素２４３１だったので、ふたたび出力点選択部１１４に出力点リスト２５００から出力点を選択するように指示を出す。
【０１０８】
図３３（Ｂ）および（Ｃ）に示すように、要素特定部１１５が特定したプログラム要素が通常要素でない場合は、フラグ属性変更部１１６は、フラグの属性の変更を行わない。また、コード生成部１１７は、コード生成を行わない。
【０１０９】
図３４は、通常要素２４２３が特定されたときの各々の状態を示す図であり、図３４（Ａ）は、通常要素２４２３が特定されたときの出力点リストのデータ構造を示す図であり、図３４（Ｂ）は、通常要素２４２３が特定されたときのプログラム情報の表示例であり、図３４（Ｃ）は、通常要素２４２３が特定されたときのコード生成されたプログラムを示す図である。
【０１１０】
出力点選択部１１４は、出力点リスト２５００から出力点を１つ選択しようとする。出力点リスト２５００には２４が格納されている。図３４（Ａ）に示すように、出力点選択部１１４は、出力点選択部１１４が２４を選択した場合、出力点リスト２５００から２４を削除する。そして、要素特定部１１５は、出力点２４に対応する入力点２６を有する通常要素２４２３を特定する。
【０１１１】
図３４（Ｂ）に示すように、フラグ属性変更部１１６は、入力点２６を有する通常要素２４２３が特定されると、入力点２６のフラグの属性を変更する。図３４（Ｃ）に示すように、コード生成部１１７は、入力点２６を有する通常要素２４２３のすべての入力点のフラグの属性が生成可能に変更されているので、通常要素２４２３のコード生成を行う。
【０１１２】
図３５は、通常要素２４２３のコード生成が行われたときの各々の状態を示す図であり、図３５（Ａ）は、通常要素２４２３のコード生成が行われたときの出力点リストのデータ構造を示す図であり、図３５（Ｂ）は、通常要素２４２３のコード生成が行われたときのプログラム情報の表示例であり、図３５（Ｃ）は、通常要素２４２３のコード生成が行われたときのコード生成されたプログラムを示す図である。
【０１１３】
リスト作成部１１２は、コード生成部１１７によってコード生成が行われた通常要素２４２３のすべての出力点を読み込み、出力点リスト２５００に格納する。図３５（Ａ）に示すように、リスト作成部１１２は、出力点リスト２５００に２８を格納する。図３５（Ｂ）および（Ｃ）に示すように、リスト作成部１１２がコード生成部１１７によってコード生成された通常要素の出力点を２５００に格納する場合、フラグ属性変更部１１６は、フラグの属性の変更を行わない。また、コード生成部１１７は、コード生成を行わない。そして、出力点選択部１１４が出力点リスト２５００から出力点を選択しようと試みる。
【０１１４】
図３６は、終端要素２４３２が特定されたときの各々の状態を示す図であり、図３６（Ａ）は、終端要素２４３２が特定されたときの出力点リストのデータ構造を示す図であり、図３６（Ｂ）は、終端要素２４３２が特定されたときのプログラム情報の表示例であり、図３６（Ｃ）は、終端要素２４３２が特定されたときのコード生成されたプログラムを示す図である。
【０１１５】
出力点選択部１１４は、出力点リスト２５００から出力点を１つ選択しようとする。出力点リスト２５００には２８が格納されている。図３６（Ａ）に示すように、出力点選択部１１４は、出力点選択部１１４が２８を選択した場合、出力点リスト２５００から２８を削除する。そして、要素特定部１１５は、出力点２８に対応する入力点３０を有する終端要素２４３２を特定する。要素特定部１１５は、特定したプログラム要素が終端要素２４３２だったので、ふたたび出力点選択部１１４に出力点リスト２５００から出力点を選択するように指示を出す。出力点選択部１１４は、出力点リスト２５００から出力点を選択しようと試みるが、出力点リスト２５００にはもう出力点が格納されていないので、コード生成処理を終了する。
【０１１６】
図３６（Ｂ）および（Ｃ）に示すように、要素特定部１１５が特定したプログラム要素が通常要素でない場合は、フラグ属性変更部１１６は、フラグの属性の変更を行わない。また、コード生成部１１７は、コード生成を行わない。
【０１１７】
以上の処理によってコード生成が実現される。このコード生成が実現されることによって、開始要素から終端要素にいたるまで追跡すると同時に、プログラム要素をコード生成して実行可能なプログラムが生成されるので、前方から１回走査するだけでコード生成が実現することができ、コード生成の効率を良好にすることができる。
【０１１８】
なお、上記実施の形態においては、すべての入力点および出力点を一意に識別するために、識別番号を付加することによってそれぞれの点を識別したが、それぞれの入力点および出力点が一意に識別できるならば、識別子としてアルファベットや図形などを用いてもよい。
【０１１９】
また、上記実施の形態においては、プログラム自動生成装置１００が生成した生成プログラム１３０をネットワーク２００を介して大型プラントを制御するためのコンピュータに送信する旨を記載したが、プログラム自動生成装置１００は、大規模なプログラムを自動生成する場合には、どのようなプログラムを自動生成する場合であっても有効である。
【０１２０】
なお、上記の処理機能は、コンピュータによって実現することができる。その場合、電子ファイル管理装置が有すべき機能の処理内容を記述した電子ファイル管理プログラムが提供される。その電子ファイル管理プログラムをコンピュータで実行することにより、上記処理機能がコンピュータ上で実現される。処理内容を記述した電子ファイル管理プログラムは、コンピュータで読み取り可能な記録媒体に記録しておくことができる。コンピュータで読み取り可能な記録媒体としては、磁気記録装置、光ディスク、光磁気記録媒体、半導体メモリなどがある。磁気記録装置には、ＨＤＤ、ＦＤ、磁気テープなどがある。光ディスクには、ＤＶＤ（Digital Versatile Disc）、ＤＶＤ−ＲＡＭ、ＣＤ−ＲＯＭ、ＣＤ−Ｒ（Recordable）／ＲＷ（ReWritable）などがある。光磁気記録装置には、ＭＯ（Magneto Optical disk）などがある。
【０１２１】
電子ファイル管理プログラムを流通させる場合には、たとえば、その電子ファイル管理プログラムが記録されたＤＶＤ、ＣＤ−ＲＯＭなどの可搬型記録媒体が販売される。また、プログラムをサーバコンピュータの記憶装置に格納しておき、ネットワークを介して、サーバコンピュータから他のコンピュータにその電子ファイル管理プログラムを転送することもできる。
【０１２２】
電子ファイル管理プログラムを実行するコンピュータは、たとえば、可搬型記録媒体に記録された電子ファイル管理プログラムもしくはサーバコンピュータから転送された電子ファイル管理プログラムを、自己の記憶装置に格納する。そして、コンピュータは、自己の記憶装置から電子ファイル管理プログラムを読み取り、電子ファイル管理プログラムに従った処理を実行する。なお、コンピュータは、可搬型記録媒体から直接電子ファイル管理プログラムを読み取り、その電子ファイル管理プログラムに従った処理を実行することもできる。また、コンピュータは、サーバコンピュータから電子ファイル管理プログラムが転送される毎に、逐次、受け取った電子ファイル管理プログラムに従った処理を実行することもできる。
【０１２３】
なお、本発明は、上述の実施の形態にのみ限定されるものではなく、本発明の要旨を逸脱しない範囲内において種々の変更を加えることができる。
上記については単に本発明の原理を示すものである。さらに、多数の変形、変更が当業者にとって可能であり、本発明は上記に示し、説明した正確な構成および応用例に限定されるものではなく、対応するすべての変形例および均等物は、添付の請求項およびその均等物による本発明の範囲とみなされる。
【図面の簡単な説明】
【０１２４】
【図１】第１の実施の形態に適用される発明の概念図である。
【図２】第１の実施の形態に係るシステム構成例を示す図である。
【図３】第１の実施の形態に係るプログラム自動生成装置のハードウェア構成例である。
【図４】プログラム自動生成装置の処理機能を示す図である。
【図５】第１の実施の形態のプログラム自動生成処理の手順を示すフローチャートである。
【図６】第１の実施の形態の表示装置に表示されるプログラム情報の概要を示す図である。
【図７】第１の実施の形態のプログラム情報の構成要素に識別番号が付された状態を示す図である。
【図８】第１の実施の形態の出力点リストのデータ構造を示す図である。
【図９】第１の実施の形態の通常要素の入力点にフラグが設けられた状態を示す図である。
【図１０】出力点選択部が出力点リストから１が削除した後の出力点リストを示す図である。
【図１１】出力点選択部が出力点リストから１を選んだ後のプログラム情報を示す図である。
【図１２】通常要素がコード生成されたときの具体例を示す図である。
【図１３】出力点リストの状態を示した図である。
【図１４】通常要素４２２が特定されたときの各々の状態を示す図である。
【図１５】通常要素４２４が特定されたときの各々の状態を示す図である。
【図１６】通常要素４２４のコード生成が行われたときの各々の状態を示す図である。
【図１７】通常要素４２５が特定されたときの各々の状態を示す図である。
【図１８】通常要素４２５のコード生成が行われたときの各々の状態を示す図である。
【図１９】通常要素４２２が特定されたときの２度目の各々の状態を示す図である。
【図２０】通常要素４２２のコード生成が行われたときの各々の状態を示す図である。
【図２１】通常要素４２３が特定されたときの各々の状態を示す図である。
【図２２】通常要素４２３のコード生成が行われたときの各々の状態を示す図である。
【図２３】終端要素４３１が特定されたときの各々の状態を示す図である。
【図２４】プログラム情報をＣ言語のプログラムに変換する場合の例を示した図である。
【図２５】コード生成したときの出力例を示す図である。
【図２６】第２の実施の形態のプログラム情報の構成要素に識別番号が付された状態を示す図である。
【図２７】第２の実施の形態の出力点リストのデータ構造を示す図である。
【図２８】第２の実施の形態の通常要素の入力点にフラグが設けられた状態を示す図である。
【図２９】通常要素２４２１が特定されたときの各々の状態を示す図である。
【図３０】通常要素２４２１のコード生成が行われたときの各々の状態を示す図である。
【図３１】通常要素２４２２が特定されたときの各々の状態を示す図である。
【図３２】通常要素２４２２のコード生成が行われたときの各々の状態を示す図である。
【図３３】終端要素２４３１が特定されたときの各々の状態を示す図である。
【図３４】通常要素２４２３が特定されたときの各々の状態を示す図である。
【図３５】通常要素２４２３のコード生成が行われたときの各々の状態を示す図である。
【図３６】終端要素２４３２が特定されたときの各々の状態を示す図である。
【符号の説明】
【０１２５】
１  プログラム自動生成装置
１ａ  プログラム情報記憶手段
１ｂ  プログラム生成手段
１ｃ  生成プログラム
２  入力手段
３  表示手段
４  プログラム情報
【図１】
2006285480.tif 000003
【図２】
2006285480.tif 000004
【図３】
2006285480.tif 000005
【図４】
2006285480.tif 000006
【図５】
2006285480.tif 000007
【図６】
2006285480.tif 000008
【図７】
2006285480.tif 000009
【図８】
2006285480.tif 000010
【図９】
2006285480.tif 000011
【図１０】
2006285480.tif 000012
【図１１】
2006285480.tif 000013
【図１２】
2006285480.tif 000014
【図１３】
2006285480.tif 000015
【図１４】
2006285480.tif 000016
【図１５】
2006285480.tif 000017
【図１６】
2006285480.tif 000018
【図１７】
2006285480.tif 000019
【図１８】
2006285480.tif 000020
【図１９】
2006285480.tif 000021
【図２０】
2006285480.tif 000022
【図２１】
2006285480.tif 000023
【図２２】
2006285480.tif 000024
【図２３】
2006285480.tif 000025
【図２４】
2006285480.tif 000026
【図２５】
2006285480.tif 000027
【図２６】
2006285480.tif 000028
【図２７】
2006285480.tif 000029
【図２８】
2006285480.tif 000030
【図２９】
2006285480.tif 000031
【図３０】
2006285480.tif 000032
【図３１】
2006285480.tif 000033
【図３２】
2006285480.tif 000034
【図３３】
2006285480.tif 000035
【図３４】
2006285480.tif 000036
【図３５】
2006285480.tif 000037
【図３６】
2006285480.tif 000038