(57)【特許請求の範囲】
【請求項１】
プログラムの構成要素であるプログラム要素を結合することによって前記プログラムを生成するプログラム生成装置において、
前記プログラム要素の種類に応じて表示の異なるノードのアイコンが記憶されているノード記憶手段と、
前記ノードの属性として少なくとも前記ノードに関連づけたファイル名が記憶されている属性記憶手段と、
処理の流れを表すデータフローを有する前記プログラム要素、もしくは下位に処理の流れを表すデータフローを有する前記プログラム要素を有する前記プログラム要素に対応するノードの前記アイコンを前記ノード記憶手段から読み出し、ツリー状に接続することで、前記プログラム要素間の階層構造を表すプログラムツリーを生成するツリー生成手段と、
前記ツリー生成手段が生成した前記プログラムツリーに対して、前記データフローを持たない前記プログラム要素である外部プログラムに対応した前記アイコンを前記ノード記憶手段から読み出し、前記ノードとして設定する外部プログラム設定手段と、
前記データフローと、前記外部プログラムとから前記プログラムを生成するプログラム生成手段と、
を有し、前記属性記憶手段に記憶されたファイル名は、前記プログラム生成手段が前記ノードに対応するプログラム要素からプログラムを生成する際のプログラム名として設定されることを特徴とするプログラム生成装置。
【請求項２】
前記プログラム生成手段は、前記外部プログラムの実体を前記プログラムに取り込み、前記プログラムを生成することを特徴とする請求項１記載のプログラム生成装置。
【請求項３】
前記プログラム生成手段は、前記外部プログラムの実体を前記プログラムに取り込まず、前記外部プログラムの属性を取り込んで前記プログラムを生成することを特徴とする請求項１記載のプログラム生成装置。
【請求項４】
前記プログラム要素には、プロジェクトと、コンパイル単位と、機能単位があることを特徴とする請求項１記載のプログラム生成装置。
【請求項５】
プログラムの構成要素であるプログラム要素を結合することによって前記プログラムを生成するプログラム生成プログラムにおいて、
コンピュータを、
前記プログラム要素の種類に応じて表示の異なるノードのアイコンをノード記憶手段に記憶させ、前記ノードの属性として少なくとも前記ノードに関連づけたファイル名を属性記憶手段に記憶させる記憶手段、
処理の流れを表すデータフローを有する前記プログラム要素、もしくは下位に処理の流れを表すデータフローを有する前記プログラム要素を有する前記プログラム要素に対応するノードの前記アイコンを前記ノード記憶手段から読み出し、ツリー状に接続することで、前記プログラム要素間の階層構造を表すプログラムツリーを生成するツリー生成手段、
前記ツリー生成手段が生成した前記プログラムツリーに対して、前記データフローを持たない前記プログラム要素である外部プログラムに対応した前記アイコンを前記ノード記憶手段から読み出し、前記ノードとして設定する外部プログラム設定手段、
前記データフローと、前記外部プログラムとから前記プログラムを生成するとともに前記属性記憶手段に記憶されたファイル名を前記ノードに対応するプログラム要素からプログラムを生成する際のプログラム名として設定するプログラム生成手段、
として機能させることを特徴とするプログラム生成プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、プログラム生成装置およびプログラム生成プログラムに関し、特にプログラムの構成要素であるプログラム要素を結合することによってプログラムを生成するプログラム生成装置およびプログラム生成プログラムに関する。
【背景技術】
【０００２】
従来から、プログラムを開発する方法として、テキストエディタを使用してＣ言語などのテキストベースの言語でプログラムを記述し、コンパイラなどのツールを使用してコンピュータが処理できる形式のロードモジュールに変換する方法が知られている。
【０００３】
上記の方法では、プログラムを作成すると同時にドキュメントを別途製作することが多く、この別途製作されたドキュメントは視覚的に把握しやすいように図形を多用した形式で記載されることが多い。
【０００４】
こうして製作されたドキュメントは、プログラムとは１対１で対応している。また、図形ベースのドキュメントからＣ言語などのテキストベースプログラムへ変換する操作には機械的な操作が多くあり、操作実行中に人的誤りが含まれてしまうことが多い。そのため、この操作に費やす時間や間違いが問題視されてきた。
【０００５】
そこで、図形ベースのドキュメントをテキストベースのプログラムに自動的に変換し、これらの時間の浪費や、人的誤りの混入を防止するシステムが開発されてきた。たとえば、プログラムを複数の図面で表現し、そのデータからソースコードを生成するプログラミング装置が提案されている（特許文献１参照）。図式を用いて記述したプログラムから、テキスト型のプログラミング言語を生成するプログラミング方法が提案されている（特許文献２参照）。
【０００６】
また、データフロー図とスケジュール表から、プログラム作成を行うプログラム装置が提案されている（特許文献３参照）。データフロー図を用いて記述したプログラムコードを生成するソフトウェア開発方式が提案されている（特許文献４参照）。プログラムを階層的な図的表現で表現するソフトウェア設計・試験支援装置が提案されている（特許文献５参照）。
【０００７】
ところで、このような図式プログラムにおいては、上述の機械的操作や人的誤りの軽減というメリットがあるものの、図で記述するのにそぐわないアルゴリズムを記述しようとすると不都合が生じるというデメリットも併せ持っている。
【０００８】
たとえば、データフロー図は、信号の流れなどを記述するのには非常に便利であるが、繰り返しループなどの制御構造を記述するのには困難がある。
そのため、複数の手段により製作したプログラムを結合してプログラムを作成する方法が提案されている。たとえば、入力と出力とだけに限定して他のモジュールと関連づけることによってプログラムを作成するプログラム作成支援方法が提案されている（特許文献６参照）。
【０００９】
また、プログラムが自動生成される第１領域と、それ以外のプログラムである第２領域にわけて取り扱うソフトウエア開発支援システムが提案されている（特許文献７参照）。複数の手段で製作されたプログラムを統一的な形式の中間オブジェクトに変換してから、組み合わせて１つのプログラムにまとめるシーケンスプログラム生成方法が提案されている（特許文献８参照）。
【特許文献１】特開平１０−３０７７１６号公報
【特許文献２】特開平８−５５０１９号公報
【特許文献３】特許第３００７２４８号公報
【特許文献４】特開昭６３−２１９０３６号公報
【特許文献５】特開平１０−１７１６４１号公報
【特許文献６】特開平４−１０２９１９号公報
【特許文献７】特開２０００−８９９４５号公報
【特許文献８】特開２０００−２２７８５４号公報
【発明の開示】
【発明が解決しようとする課題】
【００１０】
しかし、上記特許文献６記載のプログラム作成支援方法では、入出力インタフェースのみで関連づけられており、他のモジュールの持つ変数などの他の情報を、図式プログラムの製作装置内部のプログラムと同じように利用することができなかった。したがって、統一的なプログラム製作手法にのっとってプログラムを製作することができなかった。
【００１１】
また、上記特許文献８記載のシーケンスプログラム生成方法では、中間オブジェクトの段階で結合可能となるため、プログラマがプログラムを作成している段階では、統一的なプログラム製作手法にのっとってプログラムを製作することができなかった。
【００１２】
また、上記特許文献７記載のソフトウエア開発支援システムでは、既存のプログラムと図式プログラムからの自動生成結果が１つのファイルに合成されてしまい、既存のプログラムを改変せずに再利用することができず、再利用によるテスト工程の低減のメリットを得ることができなかった。
【００１４】
本発明の目的は、外部プログラムをデータフローに変換することなくデータフローを持つプログラム要素とともにプログラミングを行うことが可能なプログラム生成装置を提供することである。
【００１５】
また、本発明の他の目的は、外部プログラムをデータフローに変換することなくデータフローを持つプログラム要素とともにプログラミングを行うことが可能なプログラム生成プログラムを提供することである。
【課題を解決するための手段】
【００１８】
本発明では上記問題を解決するために、プログラムの構成要素であるプログラム要素を結合することによって前記プログラムを生成するプログラム生成装置において、前記プログラム要素の種類に応じて表示の異なるノードのアイコンが記憶されているノード記憶手段と、前記ノードの属性として少なくとも前記ノードに関連づけたファイル名が記憶されている属性記憶手段と、処理の流れを表すデータフローを有する前記プログラム要素、もしくは下位に処理の流れを表すデータフローを有する前記プログラム要素を有する前記プログラム要素に対応するノードの前記アイコンを前記ノード記憶手段から読み出し、ツリー状に接続することで、前記プログラム要素間の階層構造を表すプログラムツリーを生成するツリー生成手段と、前記ツリー生成手段が生成した前記プログラムツリーに対して、前記データフローを持たない前記プログラム要素である外部プログラムに対応した前記アイコンを前記ノード記憶手段から読み出し、前記ノードとして設定する外部プログラム設定手段と、前記データフローと、前記外部プログラムとから前記プログラムを生成するプログラム生成手段と、を有し、前記属性記憶手段に記憶されたファイル名は、前記プログラム生成手段が前記ノードに対応するプログラム要素からプログラムを生成する際のプログラム名として設定されることを特徴とするプログラム生成装置が提供される。
【００１９】
これにより、ノード記憶手段が、プログラム要素に応じたノードを記憶する。ツリー生成手段が、処理の流れを表すデータフローを有するプログラム要素、もしくは下位に処理の流れを表すデータフローを有するプログラム要素を有するプログラム要素に対応するノードをツリー状に接続することで、プログラム要素間の階層構造を表すプログラムツリーを生成する。外部プログラム設定手段が、ツリー生成手段が生成したプログラムツリーに対して、データフローを持たないプログラム要素である外部プログラムをノードとして設定する。プログラム生成手段が、データフローと、外部プログラムとからプログラムを生成する。
【００２０】
また、本発明では、プログラムの構成要素であるプログラム要素を結合することによって前記プログラムを生成するプログラム生成プログラムにおいて、コンピュータを、前記プログラム要素の種類に応じて表示の異なるノードのアイコンをノード記憶手段に記憶させ、前記ノードの属性として少なくとも前記ノードに関連づけたファイル名を属性記憶手段に記憶させる記憶手段、処理の流れを表すデータフローを有する前記プログラム要素、もしくは下位に処理の流れを表すデータフローを有する前記プログラム要素を有する前記プログラム要素に対応するノードの前記アイコンを前記ノード記憶手段から読み出し、ツリー状に接続することで、前記プログラム要素間の階層構造を表すプログラムツリーを生成するツリー生成手段、前記ツリー生成手段が生成した前記プログラムツリーに対して、前記データフローを持たない前記プログラム要素である外部プログラムに対応した前記アイコンを前記ノード記憶手段から読み出し、前記ノードとして設定する外部プログラム設定手段、前記データフローと、前記外部プログラムとから前記プログラムを生成するとともに前記属性記憶手段に記憶されたファイル名を前記ノードに対応するプログラム要素からプログラムを生成する際のプログラム名として設定するプログラム生成手段、として機能させることを特徴とするプログラム生成プログラムが提供される。
【００２１】
これにより、ノード記憶手段が、プログラム要素に応じたノードを記憶する。ツリー生成手段が、処理の流れを表すデータフローを有するプログラム要素、もしくは下位に処理の流れを表すデータフローを有するプログラム要素を有するプログラム要素に対応するノードをツリー状に接続することで、プログラム要素間の階層構造を表すプログラムツリーを生成する。外部プログラム設定手段が、ツリー生成手段が生成したプログラムツリーに対して、データフローを持たないプログラム要素である外部プログラムをノードとして設定する。プログラム生成手段が、データフローと、外部プログラムとからプログラムを生成する。
【発明の効果】
【００２３】
本発明のプログラム生成装置によれば、外部プログラムをデータフローに変換することなくデータフローを持つプログラム要素とともにプログラムを生成することができるので、外部プログラムをデータフローに変換することに伴う作業工数が削減できる。したがって、プログラムを生成するためのコストを削減することができる。また、外部プログラムをデータフローに変換するときに発生する作業に伴うミスをなくすことができるので、生成されるプログラムの信頼性を向上することができる。
【００２４】
また、本発明のプログラム生成プログラムによれば、外部プログラムをデータフローに変換することなくデータフローを持つプログラム要素とともにプログラムを生成することができるので、外部プログラムをデータフローに変換することに伴う作業工数が削減できる。したがって、プログラムを生成するためのコストを削減することができる。また、外部プログラムをデータフローに変換するときに発生する作業に伴うミスをなくすことができるので、生成されるプログラムの信頼性を向上することができる。
【発明を実施するための最良の形態】
【００２５】
以下、本発明の実施の形態を図面を参照して詳細に説明する。
図１は、本実施の形態に適用される発明の概念図である。図１に示すように、コンピュータ１は、ノード記憶手段１ａ、ツリー生成手段１ｂ、および外部プログラム設定手段１ｃを備えている。また、コンピュータ１には、入力手段２と表示手段３が接続されている。
【００２６】
コンピュータ１は、入力手段２から入力された指示信号を受けて、プログラム全体をツリー状に表したプログラムツリーを生成し、そのプログラムツリーを表示手段３へ出力する。このプログラムツリーのノードは、プログラムの構成要素であるプログラム要素に対応づけられている。
【００２７】
また、コンピュータ１は、プログラム要素の１つである機能単位の処理の流れを示すデータフローから部分プログラムを生成し、生成した部分プログラムを結合することによって所望のプログラムを生成する。
【００２８】
また、生成された部分プログラムとは別に、あらかじめ用意された部分プログラムを用いてプログラムを生成するときには、データフローから生成した部分プログラムと、あらかじめ用意された部分プログラムを結合することによって所望のプログラムを生成する。
【００２９】
あらかじめ用意された部分プログラムとは、たとえば、プログラミングを行うときに頻繁に使用するために、プログラミング時に流用できるようにあらかじめ用意された部分プログラムであり、十分な回数使用されることによって信頼性が高く、もう修正の必要がないためデータフローに作り替えるメリットがない部分プログラムである。
【００３０】
ノード記憶手段１ａには、プログラムツリーを表示するときに用いられる、プログラムツリーのノードを示すアイコンが記憶されている。このアイコンは、プログラム要素の種類ごとに用意されている。たとえば、プログラムが１つ以上のコンパイル単位と、１つ以上の機能単位から構成されているとき、ノード記憶手段１ａには、プログラム全体、コンパイル単位、および機能単位を示すアイコンが記憶されている。
【００３１】
したがって、プログラムツリーが表示されているときに、プログラムツリーのノードとして表示されているアイコンの種類を見ることで、各ノードがどの種類のプログラム要素に対応づけられているかを一目で判断することが可能となる。
【００３２】
ツリー生成手段１ｂは、プログラムツリーに設定したいプログラム要素の親ノードとなるノードに対して、設定したいプログラム要素を子ノードとして設定する旨の操作を行うと、親ノードの一段下位に子ノードを形成し、親子ノード間の接続関係を設定する。
【００３３】
そして、子ノードとして設定されるプログラム要素の種類に応じてノード記憶手段１ａからアイコンを取得し、表示手段３に表示する。また、必要であれば、プログラム要素の属性情報をノードに関連づけて受け付け、記憶する。
【００３４】
これを繰り返すことによってプログラム全体を表すノードを頂点とするツリー構造が形成され、このプログラムツリーを表示手段３に表示することによって、プログラム全体のプログラム要素の関係が一目でわかるようになる。
【００３５】
外部プログラム設定手段１ｃは、ツリー生成手段１ｂからツリー生成手段１ｂによって生成されたプログラムツリーを受け取り、プログラムツリーの所望の位置にデータフローに作り替えるメリットがないプログラム要素である外部プログラムを設定する。
【００３６】
具体的には、外部プログラム設定手段１ｃは、外部プログラムの親ノードとなるノードに対して、設定したいプログラム要素を子ノードとして設定する旨の操作を行うと、親ノードの一段下位に子ノードを形成し、親子ノード間の接続関係を設定する。
【００３７】
そして、子ノードとして設定されるプログラム要素の種類に応じてノード記憶手段１ａからアイコンを取得し、表示手段３に表示する。また、必要であれば、外部プログラムの属性情報をノードに関連づけて受け付け、記憶する。
【００３８】
このとき、ノード記憶手段１ａには、データフローがある部分プログラムのコンパイル単位を示すアイコンとは別に、データフローに作り替えるメリットがない部分プログラムのコンパイル単位を示すアイコンが記憶されている。
【００３９】
これにより、ツリー生成手段１ｂによって生成されたプログラムツリーに対して、外部プログラムに対応するノードを設定することができるので、データフローを持つプログラム要素と、データフローを持たないプログラム要素を構成要素に含むプログラムのプログラム要素間の階層構造を見ることが可能となる。
【００４０】
なお、外部プログラム設定手段１ｃがツリー生成手段１ｂからプログラムツリーを取得し、そのプログラムツリーに対して外部プログラムに対応するノードを設定する旨の説明をしたが、外部プログラムに対応するノードを設定した後に、外部プログラムに対応するノードが設定されたプログラムツリーをツリー生成手段１ｂが取得し、データフローがあるプログラム要素をさらに設定するなど、外部プログラム設定手段１ｃとツリー生成手段１ｂが交互にノードの追加を行ってもよい。
【００４１】
次に、本発明のプログラムツリー表示方法をプログラム生成装置に適用した場合の実施の形態について図面を参照して詳細に説明する。
図２は、本実施の形態に用いるプログラム生成装置のハードウェア構成例を示す図である。プログラム生成装置１００は、ＣＰＵ（Central Processing Unit）１０１によって装置全体が制御されている。ＣＰＵ１０１には、バス１０６を介してＲＡＭ（Random Access Memory）１０２、ハードディスクドライブ（ＨＤＤ:Hard Disk Drive）１０３、グラフィック処理装置１０４、および入力インタフェース１０５が接続されている。
【００４２】
ＲＡＭ１０２には、ＣＰＵ１０１に実行させるＯＳ（Operating System）のプログラムやアプリケーションプログラムの少なくとも一部が一時的に格納される。また、ＲＡＭ１０２には、ＣＰＵ１０１による処理に必要な各種データが格納される。ＨＤＤ１０３には、ＯＳやアプリケーションプログラムが格納される。
【００４３】
グラフィック処理装置１０４には、モニタ１３が接続されている。グラフィック処理装置１０４は、ＣＰＵ１０１からの命令に従って、画像をモニタ１３の画面に表示させる。入力インタフェース１０５には、キーボード１２とマウス１１とが接続されている。入力インタフェース１０５は、キーボード１２やマウス１１から送られてくる信号を、バス１０６を介してＣＰＵ１０１に送信する。
【００４４】
以上のようなハードウェア構成によって、本実施の形態の処理機能を実現することができる。
次に、プログラム生成装置１００が有する処理機能について説明する。
【００４５】
図３は、プログラム生成装置の処理機能を示す図である。図３に示すように、プログラム生成装置１００は、図式プログラム管理部１１０、位置関係情報記憶部１２０、ライブラリ１３０、属性情報記憶部１４０、外部プログラム設定部１５０、およびプログラム自動生成部１６０を備えている。また、図式プログラム管理部１１０は、データフロー生成部１１１、およびプログラムツリー生成部１１２を備えている。
【００４６】
データフロー生成部１１１は、ユーザからデータフロー生成指示を受けると、指示信号に従ってプログラムを構成する機能単位の処理の流れを示すデータフローを生成する。具体的には、ユーザからの指示信号に基づいて、ライブラリ１３０からデータフローの構成要素である各種の単位ブロックを読み出し、各種単位ブロックを配列することによってデータフローを生成する。
【００４７】
そして、生成したデータフローの各種単位ブロック間の接続関係を位置関係情報記憶部１２０に記憶する。また、機能単位や各種単位ブロックに設定された属性情報を属性情報記憶部１４０に記憶する。
【００４８】
プログラムツリー生成部１１２は、ユーザからプログラムツリー指示を受けると、指示信号に従ってプログラムのプログラム要素をノードとしてツリー状に表したプログラムツリーを生成する。具体的には、ユーザからの指示信号に基づいて、ライブラリ１３０からプログラムツリーのノードアイコンを読み出し、指示された順番に各種アイコンを配列することによってプログラムツリーを生成する。
【００４９】
そして、生成したプログラムツリーの各種ノード間の接続関係を位置関係情報記憶部１２０に記憶する。また、各種ノードに設定された属性情報を属性情報記憶部１４０に記憶する。
【００５０】
位置関係情報記憶部１２０は、データフローの各構成要素の位置関係を記憶する。また、プログラムツリーの各ノードの位置関係を記憶する。
ライブラリ１３０には、データフロー生成部１１１がデータフローを生成するときに必要となるすべての機能単位に関する情報が記憶されている。また、プログラムツリー生成部１１２がプログラムツリーを生成するときに必要となるすべてのノードのアイコンが記憶されている。なお、すべての機能単位に関する情報とは、図形の種類、名称、機能単位が必要とするパラメータの属性、および機能単位が機能を実現するためのアルゴリズムである。
【００５１】
属性情報記憶部１４０は、機能単位が必要とする属性の属性情報を記憶している。
外部プログラム設定部１５０は、ユーザから外部プログラム設定指示を受けると、指示信号に従ってプログラムツリーに対して外部プログラムを設定する。具体的には、ユーザからの指示信号に基づいて、ライブラリ１３０からプログラムツリーに設定する外部プログラムを読み出し、プログラムツリーの指示された場所に外部プログラムを設定する。この外部プログラムは、ユーザが追加したものであってもよい。
【００５２】
プログラム自動生成部１６０は、データフロー、外部プログラム、およびデータフローと外部プログラムの属性情報からプログラムを生成する。具体的には、データフロー生成部１１１が生成したデータフローを、位置関係情報記憶部１２０に記憶されている位置関係情報と、属性情報記憶部１４０に記憶されている属性情報とともに取得し、取得したすべての情報からデータフローに対応するプログラム要素を生成する。
【００５３】
また、ライブラリ１３０から外部プログラムを取得する。そして、データフローから生成したプログラム要素と、外部プログラムをリンカで結合することによってプログラムを生成する。
【００５４】
以上のような機能を有しているプログラム生成装置１００により、以下の処理が行われる。
図４は、プログラム生成装置１００によるプログラムを生成する処理の手順を示すフローチャートである。以下、図４に示す処理をステップ番号に沿って説明する。
【００５５】
〔ステップＳ１１〕プログラムツリー生成部１１２は、ユーザからマウス１１もしくはキーボード１２を介してプログラムツリーを生成するようにプログラムツリー生成指示を受け付ける。
【００５６】
〔ステップＳ１２〕プログラムツリー生成部１１２は、プログラムツリー生成指示に基づいてプログラムツリーを生成する。
〔ステップＳ１３〕図式プログラム管理部１１０は、データフローを持つプログラム要素に関係をツリー状に表したプログラムツリーの生成が完了したか否かを判断する。プログラムツリーの生成が完了したと判断した場合には、処理をステップＳ１４へ進め、完了していないと判断した場合には、処理をステップＳ１１へ進める。
【００５７】
〔ステップＳ１４〕データフロー生成部１１１は、ユーザからマウス１１もしくはキーボード１２を介してデータフローを生成するようにデータフロー生成指示を受け付ける。
〔ステップＳ１５〕データフロー生成部１１１は、データフロー生成指示に基づいてデータフローを生成する。
【００５８】
〔ステップＳ１６〕図式プログラム管理部１１０は、プログラムを生成するのに必要なデータフローの生成が完了したか否かを判断する。データフローの生成が完了したと判断した場合には、処理をステップＳ１７へ進め、完了していないと判断した場合には、処理をステップＳ１４へ進める。
【００５９】
〔ステップＳ１７〕外部プログラム設定部１５０は、ユーザからマウス１１もしくはキーボード１２を介して外部プログラムをプログラムツリー生成部１１２が生成したプログラムツリーに対して設定するように外部プログラム設定指示を受け付ける。
【００６０】
〔ステップＳ１８〕外部プログラム設定部１５０は、外部プログラム設定指示に基づいて外部プログラムをプログラムツリー生成部１１２が生成したプログラムツリーに設定する。
【００６１】
〔ステップＳ１９〕プログラム自動生成部１６０は、ユーザからマウス１１もしくはキーボード１２を介して、データフロー生成部１１１が生成したデータフローと外部プログラムからプログラムを自動生成するようにプログラム自動生成指示を受け付ける。
【００６２】
〔ステップＳ２０〕プログラム自動生成部１６０は、データフロー生成部１１１からデータフローを受け取る。そのとき、データフローとともに、データフローに関連づけられている属性情報を受け取る。そして、データフローからプログラム要素を生成する。たとえば、データフローからＣ言語形式のソースコードを生成する。そして、データフローから生成したソースコードをコンパイルし、外部プログラムとリンカやリンケージ・エディタと呼ばれるツールを用いて結合することによって所望のプログラムを生成する。なお、この場合、外部プログラムがＣ言語形式のときには、外部プログラムもコンパイルする必要がある。
【００６３】
なお、上記ステップＳ１１からステップＳ１３までの処理をプログラムツリー生成処理と呼び、上記ステップＳ１４からステップＳ１６までの処理をデータフロー生成処理と呼び、上記ステップＳ１７、１８の処理を外部プログラム設定処理と呼ぶものとする。
【００６４】
上記図４のフローチャートで示した処理の順番は、あくまで一例であり、たとえば、データフローを生成している途中に、再度プログラムツリーを生成したくなったような場合には、データフロー生成処理の後に再度プログラムツリー生成処理を行ってもよい。
【００６５】
また、外部プログラムをプログラムツリーに設定した後で、さらにプログラムツリーにノードを追加したくなったような場合には、外部プログラム設定処理の後に再度プログラムツリー生成処理を行ってもよい。
【００６６】
次に、プログラム生成装置１００がモニタ１３に表示する画面表示例について説明する。
図５は、プログラムを自動生成するときの画面表示例を示す図である。図５に示すように、画面表示例２００には、プログラムツリー表示部２１０とデータフロー表示部２２０を備えている。
【００６７】
プログラムツリー表示部２１０には、プログラム全体を示すノード２１１、データフローを持つプログラム要素がコンパイル単位であることを示すノード２１２、および外部プログラムのコンパイル単位であることを示すノード２１３が表示されている。本実施の形態においては、コンパイル単位を分離可能なソフトウェア部品であるモジュールと捉える。
【００６８】
プログラムツリー表示部２１０では、インバータ制御処理を行うプログラムのプログラム要素の階層構造を示しており、インバータ制御のプログラムは、入力制御、故障検出、および電源同期のコンパイル単位から構成されていることを示している。
【００６９】
ノード２１１の右に「インバータ制御」と表示されている文字２１１ａは、ノード２１１がインバータ制御のプログラム全体を表すノードであることを示している。また、ノード２１２の右に「入力制御」と表示されている文字２１２ａは、ノード２１２が入力制御の処理を行うモジュールを表すノードであり、ノード２１３の右に「電源同期」と表示されている文字２１３ａは、ノード２１３が電源同期の処理を行う外部プログラムを表すノードであることを示している。
【００７０】
このように、各ノードの右側にノードの内容を表す文字を表示することにより、各ノードがどのような機能のプログラム要素と対応づけられているかを一目で判断することが可能となる。
【００７１】
ノード２１１の右側に表示されている文字２１１ａは、ノード２１１に関連づけられており、プログラム自動生成部１６０によって最終的に生成されるプログラムのファイル名として設定される。
【００７２】
また、ノード２１２の右側に表示されている文字２１２ａは、ノード２１２に関連づけられており、プログラム自動生成部１６０によってモジュールから生成されるプログラムのファイル名として設定される。
【００７３】
ただし、このようにノードに対して文字を関連づけると、使用するＣコンパイラなどのツールによっては、データを受け付けられない場合がある。たとえば、日本語を表すための２バイト系の文字が使えないときには、ノードに関連づけて設定された文字に対してさらに関連づけたファイル名を別途設定する。このような属性情報は、属性情報記憶部１４０に格納される。
【００７４】
また、これらのノード２１１、２１２には、プログラムを生成するときに用いられる属性情報が関連づけられている。これらのノード２１１、２１２の右に表示される文字２１１ａ、２１２ａを含めた属性情報は、たとえば、対応するノードから属性情報を入力するための入力窓を呼びだし、その入力窓に属性情報を入力することによって行う。以下に、ノードに関連づけて記憶する属性情報を入力するための入力窓の一例を説明する。
【００７５】
図６は、ノードに関連づけて記憶する属性情報を入力するための入力窓の一例を示す図である。図６に示すように、入力窓３００は、たとえば、入力制御のモジュールを表すノード２１２を右クリックして、ノード２１２に関連づけられている入力窓を呼び出したものであり、入力欄３１０、入力欄の説明３２０、入力を確定する入力ボタン３３０、および入力を取り消す取消ボタン３４０を備えている。
【００７６】
入力窓３００は、コンパイル単位の名称を入力する入力欄３１１と、生成Ｃ言語プログラム名を入力する入力欄３１２が表示されている。入力欄３１１に入力された文字列は、入力ボタン３３０が選択されることにより入力が確定されると、コンパイル単位の名称として、ノード２１２に関連づけて属性情報記憶部１４０に記憶される。そして、プログラムツリー表示部２１０のノード２１２の右には、入力欄３１１から入力された文字列が表示される。
【００７７】
また、入力欄３１２に入力された文字列は、入力ボタン３３０が選択されることにより入力が確定されると、ノード２１２に関連づけられているモジュールが、プログラム自動生成部１６０により生成されるＣ言語形式のプログラムのプログラム名として設定されるために、ノード２１２に関連づけて属性情報記憶部１４０に記憶される。
【００７８】
次に、プログラムツリーとして、コンパイル単位内の機能単位をも表示するときの表示例を示す。
図７は、コンパイル単位内の機能単位をも表示する画面表示例を示す図である。図７に示すように、画面表示例２０１は、データフロー表示部２２０とプログラムツリー表示部２３０を備えている。
【００７９】
プログラムツリー表示部２３０には、プログラム全体を示すノード２１１、データフローを持つプログラム要素がコンパイル単位であることを示すノード２１２、外部プログラムのコンパイル単位であることを示すノード２１３、および機能単位を示すノード２１４、２１５が表示されている。
【００８０】
ところで、電流制御の機能単位は、入力制御のコンパイル単位に属するものである。そこで、その従属関係を明確にするために、電流制御の機能単位を表すノード２１４は、入力制御のコンパイル単位を表すノード２１２の下位に従属するように表示している。また、コンパイル単位は、機能単位を入れる器のように考えるため、直接コンパイル単位に属する処理機能というのは存在せず、必ず処理機能は機能単位に属する。
【００８１】
また、機能単位の中には、さらに細かな機能単位が含まれていることがある。これは、構造化プログラミングの考え方におけるプログラムの構造化に伴う機能の詳細分割に相当する考え方である。
【００８２】
プログラムツリー表示部２３０に表示されているプログラムツリー上においては、その様子は電流制御の機能単位を表すノード２１４と、電流指令演算の機能単位を表すノード２１５の関係において示している。
【００８３】
つまり、電流指令演算の機能単位は、電流制御の機能単位に属する部分機能であり、お互いの機能単位同士の従属関係の視認性を向上するために、ノード２１５をノード２１４の下位に従属するように表示する。
【００８４】
このことは、細分化され、下位の機能単位においても同様に起こりうることであり、その場合には、再帰的に下位の部分機能単位を表すノードを、属する上位の機能単位に従属するように表示する。
【００８５】
機能単位の実装の形は、Ｃ言語では関数と呼ばれ、他のプログラミング言語では、サブルーチン、プロシージャなどと呼ばれていることもある副プログラムに相当するものである。
【００８６】
関数には、関数名、引数リスト、および返却値などの属性があるが、機能単位に関連づけられたプログラムはデータフローで表示しているため、これらの属性は図に記述されているものとすることができる。なお、関数名などの属性を別個に設定したい場合には、図６に示したような入力窓から属性を入力し、設定できるようにしてもよい。
【００８７】
ところで、コンパイル単位は、コンパイルした結果として１つのファイルを出力するものである。より具体的には、Ｃ言語形式のプログラムにおいて、コンパイル単位は拡張子が通常「ｃ」で表されるＣ言語のソースファイルであり、これをコンパイルすることにより、拡張子が通常「ｏ」や「ｏｂｊ」で表されるオブジェクトファイルが生成される。
【００８８】
この出力ファイルは、直接ＣＰＵが解釈して実行できるバイナリファイルとなっている場合もありうるが、バイナリファイルで出力すると中・大規模プログラムの製作や、プログラムの再利用が容易でないため、通常はコンパイルが終了した段階ではメモリ上での絶対位置が決定されておらず、モジュールの先頭からの相対位置でアドレスが記述されているようなリロケータブル・オブジェクトが生成される。
【００８９】
このようなリロケータブル・オブジェクトを１つ以上必要な分だけ製作してから、実行環境のメモリ環境に合致したリンク用のメモリマップコマンドなどの情報を与える。そして、リンカもしくはリンゲージ・エディタと呼ばれるツールでこれらを結合して、最終的な実行可能な形式のプログラムとする。
【００９０】
ところで、ノード２１３に関連づけられている外部プログラムとは、データフローを持たないのでデータフロー表示部２２０には表示できない形式の部分プログラムである。たとえば、あらかじめ完全な形でＣ言語のプログラムが用意されているときにおける用意されているプログラムを指す。
【００９１】
たとえば、このＣ言語ファイルには、機能単位として同期演算機能と、同期異常検出機能とが関数の形で実装されているものとすると、それらの関数名や引数リストや返却値の型をプログラムツリー表示部２３０に表示されているプログラムツリー上の機能単位の属性として記憶すれば、データフロー表示部２２０により表示できる形式のモジュールに属する機能単位と同様に扱うことができる。
【００９２】
つまり、データフロー内で他のモジュールの機能単位を呼び出すようなプログラムを書いた場合には、プログラムツリーの機能単位に関連づけて属性である関数名や、引数リストや、返却値の型を記憶しているので、データフロー同士でプログラムを接続してプログラムを記述することができる。
【００９３】
それと同じように、外部プログラムに属する機能単位の属性もノードに関連づけて記憶することにより、データフローから同じようにその機能単位を呼び出すことが可能となる。
【００９４】
ただし、外部プログラムの機能単位の属性は、プログラムツリーにノードを設定したときには関連づけができていないので、別途上述したような入力窓から入力することによって属性をノードに関連づけて記憶させるか、Ｃ言語パーサを用いて情報を拾い出し、ノードに関連づけて記憶させる必要がある。
【００９５】
プログラムツリー表示部２３０に表示されているプログラムツリーとして表されたプログラムは、３つのコンパイル単位を有しているが、コンパイル後にリンケージ・エディタを使って最終的な実行可能な形式のプログラム製作が目的であるから、リンケージ・エディタで結合する単位を表す概念を設けておくと有用である。
【００９６】
そこで、コンパイル単位を１つ以上含み、各コンパイル単位から生成される出力を結合してできるロードモジュールに対応する単位をプロジェクトと定義する。プロジェクトは、プログラムツリー表示部２３０に表示されているプログラムツリー上にノード２１１として示される記号で表している。
【００９７】
以上のことから、プログラムツリー表示部２３０に表示されたプログラムツリーは、インバータ制御のプロジェクトを構成するモジュールに分けてツリー状に図式化したものであるといえる。
【００９８】
上記のとおり、プログラム生成装置１００によれば、画面表示例にプログラムツリーが表示され、プログラムの構造を簡易に読み取ることが可能となるので、構造化プログラミングによるプログラムの製作が容易になる。
【００９９】
ユーザは、プログラムツリー表示部２１０に表示されるプログラムツリーを見ることによって、プログラム生成装置１００から生成されるプログラムのプログラム要素間の階層構造を見ることが可能となる。
【０１００】
また、データフロー表示部２２０に表示されるデータフローは、プログラムツリー表示部２１０に表示されるプログラムツリーのノードに関連づけられており、プログラムツリーのどのノードに関連づけられているデータフローを見ているかも容易に知ることが可能である。
【０１０１】
また、データフローがプログラムツリーのノードに関連づけられているので、ノードごとのデータフローをデータフロー表示部２２０に表示させることによって、プログラムツリーのノードごとにプログラミングすることができる。
【０１０２】
また、データフロー表示部２２０に表示できない部分プログラムをもプログラムツリー表示部２３０に表示できるようにすることによって、たとえば、ノード２１２に関連づけられている入力制御モジュールと、ノード２１３に関連づけられている電源同期プログラムという形式の異なるプログラムを１つのプログラムツリー上に表し、同様の操作によって扱うことができるようになる。
【０１０３】
なお、外部プログラムのプログラムへの取り込み方は２パターン考えられる。外部プログラムのコンパイル単位の実体をプログラムの一部として取り込む場合と、外部プログラムのコンパイル単位の実体をプログラムの一部として取り込まずに、属性情報のみを登録する場合である。
【０１０４】
上記２パターンで、表示の異なるアイコンを用いることによりそれぞれのパターンを区別してもよい。以下に、プログラムツリー表示部２１０もしくは２３０に示した外部プログラムのノードとは異なるアイコンが表示されているプログラムツリーを示す。
【０１０５】
図８は、プログラムツリー表示部の表示例を示す図である。図８に示すように、プログラムツリー表示部２３１は、プログラム全体を示すノード２１１、データフローを持つプログラム要素がコンパイル単位であることを示すノード２１２、機能単位を示すノード２１４、２１５、および外部プログラムのコンパイル単位であることを示すノード２１６が表示されている。
【０１０６】
ノード２１６は、プログラムツリー表示部２１０、およびプログラムツリー表示部２３０で示したプログラムツリーのノード２１３とは区別するためにノードの周りが太線になっている。
【０１０７】
上述した、外部プログラムの取り込み方の２パターンを第１の方法、第２の方法とすると、第１の方法は、図式プログラムのデータを保存するディスク領域に外部プログラムもコピーし、第２の方法は、ファイルのコピーは行われない。
【０１０８】
また、コンパイル時には、第２の方法の場合には、プログラム生成装置１００で、データフローを持たない形式のコンパイル単位に属する機能単位の情報を用いて、プログラムツリーが書かれていた場合には、プログラムツリーからＣ言語形式のプログラムを生成するときに外部プログラムの機能単位の情報を用いて生成するだけであるが、第１の方法の場合には、それに加え、プログラムツリーの出力結果と同列に、登録したＣ言語ファイルもコピーする動作が付け加えられる。
【０１０９】
なお、外部プログラムとして、あらかじめ用意されているＣ言語形式のファイルを用いる旨の説明をしたが、外部プログラムはあらかじめ用意されているファイルだけに限らない。たとえば、プログラム生成装置１００に直接入力されるＣ言語形式のプログラムを用いてもよい。また、外部プログラム設定部１５０は、プログラム自動生成部１６０がデータフローから生成したＣ言語ファイルを直接受け取り、受け取ったファイルを外部プログラムとしてプログラムツリーに設定してもよい。
【０１１０】
また、外部プログラムに属する機能単位を示すノードは、データフローを持つモジュールの機能単位を示すノードと一緒のアイコンを使い、その上位にあるコンパイル単位のノードのアイコンのみ変更することによって区別する旨の説明をしたが、機能単位のノードのアイコンを変更してもよい。
【０１１１】
なお、上記の処理機能は、コンピュータによって実現することができる。その場合、プログラム生成装置が有すべき機能の処理内容を記述したプログラム生成プログラムが提供される。そのプログラム生成プログラムをコンピュータで実行することにより、上記処理機能がコンピュータ上で実現される。処理内容を記述したプログラム生成プログラムは、コンピュータで読み取り可能な記録媒体に記録しておくことができる。コンピュータで読み取り可能な記録媒体としては、磁気記録装置、光ディスク、光磁気記録媒体、半導体メモリなどがある。磁気記録装置には、ＨＤＤ、フレキシブルディスク、磁気テープなどがある。光ディスクには、ＤＶＤ（Digital Versatile Disc）、ＤＶＤ−ＲＡＭ、ＣＤ−ＲＯＭ（Read Only Memory）、ＣＤ−Ｒ（Recordable）／ＲＷ（ReWritable）などがある。光磁気記録装置には、ＭＯ（Magneto Optical disk）などがある。
【０１１２】
プログラム生成プログラムを流通させる場合には、たとえば、そのプログラム生成プログラムが記録されたＤＶＤ、ＣＤ−ＲＯＭなどの可搬型記録媒体が販売される。また、プログラムをサーバコンピュータの記憶装置に格納しておき、ネットワークを介して、サーバコンピュータから他のコンピュータにそのプログラム生成プログラムを転送することもできる。
【０１１３】
プログラム生成プログラムを実行するコンピュータは、たとえば、可搬型記録媒体に記録されたプログラム生成プログラムもしくはサーバコンピュータから転送されたプログラム生成プログラムを、自己の記憶装置に格納する。そして、コンピュータは、自己の記憶装置からプログラム生成プログラムを読み取り、プログラム生成プログラムに従った処理を実行する。なお、コンピュータは、可搬型記録媒体から直接プログラム生成プログラムを読み取り、そのプログラム生成プログラムに従った処理を実行することもできる。また、コンピュータは、サーバコンピュータからプログラム生成プログラムが転送されるごとに、逐次、受け取ったプログラム生成プログラムに従った処理を実行することもできる。
【０１１４】
なお、本発明は、上述の実施の形態にのみ限定されるものではなく、本発明の要旨を逸脱しない範囲内において種々の変更を加えることができる。
上記については単に本発明の原理を示すものである。さらに、多数の変形、変更が当業者にとって可能であり、本発明は上記に示し、説明した正確な構成および応用例に限定されるものではなく、対応するすべての変形例および均等物は、添付の請求項およびその均等物による本発明の範囲とみなされる。
【図面の簡単な説明】
【０１１５】
【図１】本実施の形態に適用される発明の概念図である。
【図２】本実施の形態に用いるプログラム生成装置のハードウェア構成例を示す図である。
【図３】プログラム生成装置の処理機能を示す図である。
【図４】プログラム生成装置によるプログラムを生成する処理の手順を示すフローチャートである。
【図５】プログラムを自動生成するときの画面表示例を示す図である。
【図６】ノードに関連づけて記憶する属性情報を入力するための入力窓の一例を示す図である。
【図７】コンパイル単位内の機能単位をも表示する画面表示例を示す図である。
【図８】プログラムツリー表示部の表示例を示す図である。
【符号の説明】
【０１１６】
１  コンピュータ
１ａ  ノード記憶手段
１ｂ  ツリー生成手段
１ｃ  外部プログラム設定手段
２  入力手段
３  表示手段
【図１】
0004848772.tif 000002
【図２】
0004848772.tif 000003
【図３】
0004848772.tif 000004
【図４】
0004848772.tif 000005
【図５】
0004848772.tif 000006
【図６】
0004848772.tif 000007
【図７】
0004848772.tif 000008
【図８】
0004848772.tif 000009