JPH04257028A - プログラム生成/合成装置および方法 - Google Patents
プログラム生成/合成装置および方法Info
- Publication number
- JPH04257028A JPH04257028A JP3907891A JP3907891A JPH04257028A JP H04257028 A JPH04257028 A JP H04257028A JP 3907891 A JP3907891 A JP 3907891A JP 3907891 A JP3907891 A JP 3907891A JP H04257028 A JPH04257028 A JP H04257028A
- Authority
- JP
- Japan
- Prior art keywords
- program
- recursive
- component
- argument
- recursively
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
Landscapes
- Stored Programmes (AREA)
Abstract
(57)【要約】本公報は電子出願前の出願データであるた
め要約のデータは記録されません。
め要約のデータは記録されません。
Description
【0001】
【産業上の利用分野】本発明は,プログラム部品により
プログラムの生成ないし合成を行うプログラム生成/合
成装置および方法に関する。
プログラムの生成ないし合成を行うプログラム生成/合
成装置および方法に関する。
【0002】ソフトウェアの生産性向上,品質向上を図
るため,プログラムを部品化し,部品単位でソースプロ
グラムを記述し再利用するプログラム生成ないし合成ツ
ールが提供されている。しかし,再帰的な構造を持つ部
品(例えば,キーブレイク処理部品など)を記述するた
めの効率の良い文法が無く,部品の記述が冗長になる等
の問題があり,汎用性の高い部品を効率良く記述するた
めの,文法の整備および部品を展開する技術が望まれて
いる。
るため,プログラムを部品化し,部品単位でソースプロ
グラムを記述し再利用するプログラム生成ないし合成ツ
ールが提供されている。しかし,再帰的な構造を持つ部
品(例えば,キーブレイク処理部品など)を記述するた
めの効率の良い文法が無く,部品の記述が冗長になる等
の問題があり,汎用性の高い部品を効率良く記述するた
めの,文法の整備および部品を展開する技術が望まれて
いる。
【0003】
【従来の技術】ソフトウェアの生産性を向上させるため
,従来,生成(合成)するプログラムのひな型のような
プログラム部品を用意しておき,部品中の条件制御文に
従い,また仮引数を実引数に置き換えることなどにより
,所望する処理を実現するプログラムを自動生成/合成
する技術が用いられている。
,従来,生成(合成)するプログラムのひな型のような
プログラム部品を用意しておき,部品中の条件制御文に
従い,また仮引数を実引数に置き換えることなどにより
,所望する処理を実現するプログラムを自動生成/合成
する技術が用いられている。
【0004】しかし,従来技術では,プログラム部品中
で,その同じプログラム部品を入れ子状に組み込み,再
帰的に展開させることはできなかった。
で,その同じプログラム部品を入れ子状に組み込み,再
帰的に展開させることはできなかった。
【0005】コンパイラ言語には,サブルーチンの再帰
的呼び出しを可能にしているものがあるが,例えばプロ
グラム実行時のスタック方式によるデータ領域の退避復
元を行う方式であり,入れ子状に展開するという技術と
は異なるため,ソース展開を前提としたプログラム生成
ないし合成ツールには適用できない。
的呼び出しを可能にしているものがあるが,例えばプロ
グラム実行時のスタック方式によるデータ領域の退避復
元を行う方式であり,入れ子状に展開するという技術と
は異なるため,ソース展開を前提としたプログラム生成
ないし合成ツールには適用できない。
【0006】また,一部の高級アセンブラ言語などに見
られる,マクロ命令の再帰的展開機能は,再帰的に展開
するデータ項目名の下一桁などを数字として,再帰的に
展開を行う都度,項目名に含まれる数字をカウントアッ
プする方式であり,データ項目名が固定化されてしまう
ため,近年の超大規模システム開発で採用されている,
日常の業務用語をデータ項目とすることで保守性の良い
ソースを記述しようとするアプローチには適していない
。
られる,マクロ命令の再帰的展開機能は,再帰的に展開
するデータ項目名の下一桁などを数字として,再帰的に
展開を行う都度,項目名に含まれる数字をカウントアッ
プする方式であり,データ項目名が固定化されてしまう
ため,近年の超大規模システム開発で採用されている,
日常の業務用語をデータ項目とすることで保守性の良い
ソースを記述しようとするアプローチには適していない
。
【0007】
【発明が解決しようとする課題】説明を簡単にするため
,再帰的な構造を持つ部品の例として,グループトータ
ルを求めるためのn段キーブレイク処理を部品として記
述する場合を示し説明する。キーブレイク処理とは,例
えば「部−課−従業員」というような階層的構造をとる
データの報告書を作成する場合などに,従業員ごとの情
報を出力し,課が切り替わるごとに課ごとの合計情報を
出力し,さらに部が切り替わるごとに部ごとの合計情報
を出力するというような処理である。
,再帰的な構造を持つ部品の例として,グループトータ
ルを求めるためのn段キーブレイク処理を部品として記
述する場合を示し説明する。キーブレイク処理とは,例
えば「部−課−従業員」というような階層的構造をとる
データの報告書を作成する場合などに,従業員ごとの情
報を出力し,課が切り替わるごとに課ごとの合計情報を
出力し,さらに部が切り替わるごとに部ごとの合計情報
を出力するというような処理である。
【0008】図6ないし図9は従来のプログラム部品に
おけるキーブレイク処理の記述例を示す図である。
おけるキーブレイク処理の記述例を示す図である。
【0009】従来の技術では,n段キーブレイク処理を
部品として記述することは,nが未定の場合は不可能で
あり,そのためキーブレイクの上限を決め(例えば10
段),展開制御文(ある仮引数に対する実引数が与えら
れた場合にソース展開を行うか,行わないかの制御を記
述する文)を使用して記述し,部品利用時に,必要な階
層までの仮引数に対する実引数を与えることで所望の階
層のキーブレイク処理を残す以外に方法がなかった。
部品として記述することは,nが未定の場合は不可能で
あり,そのためキーブレイクの上限を決め(例えば10
段),展開制御文(ある仮引数に対する実引数が与えら
れた場合にソース展開を行うか,行わないかの制御を記
述する文)を使用して記述し,部品利用時に,必要な階
層までの仮引数に対する実引数を与えることで所望の階
層のキーブレイク処理を残す以外に方法がなかった。
【0010】図6は,図7ないし図9の関連図を示し,
図7ないし図9はYPS表記による10段までのキーブ
レイク処理の展開が可能なプログラム部品の記述例を示
している。
図7ないし図9はYPS表記による10段までのキーブ
レイク処理の展開が可能なプログラム部品の記述例を示
している。
【0011】図7ないし図9において,例えば次の記述
− @COND = &仮部品IDn−●PAR
A &仮部品IDn − @ENDCOND は,仮引数「&仮部品IDn」に対する実引数が指定さ
れた場合に,「@COND」から「@ENDCOND」
間のプログラム記述を展開することを意味する条件制御
文である。なお,他の一般的な表記は,YPSの文法と
してよく知られているので,ここでの説明は省略する。
− @COND = &仮部品IDn−●PAR
A &仮部品IDn − @ENDCOND は,仮引数「&仮部品IDn」に対する実引数が指定さ
れた場合に,「@COND」から「@ENDCOND」
間のプログラム記述を展開することを意味する条件制御
文である。なお,他の一般的な表記は,YPSの文法と
してよく知られているので,ここでの説明は省略する。
【0012】以上のように従来技術では,あらかじめ定
められた上限による段数分の部品ソースを,繰り返し記
述しなければならず,部品利用時に,当該部品の上限を
超える(当例では11段以上)キーブレイク処理を必要
とする場合には,この部品を使用することはできなかっ
た。
められた上限による段数分の部品ソースを,繰り返し記
述しなければならず,部品利用時に,当該部品の上限を
超える(当例では11段以上)キーブレイク処理を必要
とする場合には,この部品を使用することはできなかっ
た。
【0013】また,多い段数にも対応できるようにする
には,上限を大きめに設定して部品を作成する必要があ
るため,ステップ数が増大し,かつ,展開制御記述が複
雑になる等の弊害が生じていた。
には,上限を大きめに設定して部品を作成する必要があ
るため,ステップ数が増大し,かつ,展開制御記述が複
雑になる等の弊害が生じていた。
【0014】本発明は,プログラム部品ソースを再帰的
に組み込むことを指示する部品文法と,それを解析しソ
ース展開する機構を提供することで,再帰的な構造を持
つプログラム部品を短いステップ数で,効率良く,しか
も汎用的(データ項目名などは,外部から自由に与えら
れ,業務用語をデータ項目名としても一向に差支えない
など)に使用できるような記述を可能にすることを目的
とする。
に組み込むことを指示する部品文法と,それを解析しソ
ース展開する機構を提供することで,再帰的な構造を持
つプログラム部品を短いステップ数で,効率良く,しか
も汎用的(データ項目名などは,外部から自由に与えら
れ,業務用語をデータ項目名としても一向に差支えない
など)に使用できるような記述を可能にすることを目的
とする。
【0015】
【課題を解決するための手段】図1は,本発明の原理構
成図である。図1において,プログラム部品1は再帰的
組み込みを行うための『部品文法』に基づいて記述した
プログラム部品ソースである。プログラム部品1には,
プログラム部品ソースを再帰的に組み込むことを指示す
る組込位置指示子1a,再帰的に実引数が付加されてい
く仮引数であることを明示する再帰的展開指示子1bお
よびプログラム部品ソースの記述中で再帰的に展開する
範囲を明示するための文1c,1dの記述が含まれてい
る。
成図である。図1において,プログラム部品1は再帰的
組み込みを行うための『部品文法』に基づいて記述した
プログラム部品ソースである。プログラム部品1には,
プログラム部品ソースを再帰的に組み込むことを指示す
る組込位置指示子1a,再帰的に実引数が付加されてい
く仮引数であることを明示する再帰的展開指示子1bお
よびプログラム部品ソースの記述中で再帰的に展開する
範囲を明示するための文1c,1dの記述が含まれてい
る。
【0016】実引数指定手段2は,仮引数に対応する実
引数を指定する手段であって,プログラム部品ソース中
に記述された仮引数に対する実引数(データ項目名,フ
ァイル名,レコード名,部品IDなど)を入力する入力
ファイル(図中では,会話型ファイルとしているが,パ
ラメタファイルでもよい)である。
引数を指定する手段であって,プログラム部品ソース中
に記述された仮引数に対する実引数(データ項目名,フ
ァイル名,レコード名,部品IDなど)を入力する入力
ファイル(図中では,会話型ファイルとしているが,パ
ラメタファイルでもよい)である。
【0017】プログラム生成/合成機構3は,実引数指
定手段2により取得した入力情報を解析し,部品ライブ
ラリ4より必要な部品を取り込み,再帰的組み込み指示
のある部品の処理については,再帰的組込機構5に処理
を依頼する。
定手段2により取得した入力情報を解析し,部品ライブ
ラリ4より必要な部品を取り込み,再帰的組み込み指示
のある部品の処理については,再帰的組込機構5に処理
を依頼する。
【0018】再帰的組込機構5は,部品中の再帰的展開
記述を,仮引数に対応する実引数を指定する実引数指定
手段2により取得した情報を用いて置き換えながら,組
込位置指示子1aの位置に,再帰的展開開始行1cから
再帰的展開終了行1dまでのプログラム部品を再帰的に
組み込んでいく。
記述を,仮引数に対応する実引数を指定する実引数指定
手段2により取得した情報を用いて置き換えながら,組
込位置指示子1aの位置に,再帰的展開開始行1cから
再帰的展開終了行1dまでのプログラム部品を再帰的に
組み込んでいく。
【0019】再帰的展開後のソース6は,プログラム生
成/合成機構3によって生成/合成されたプログラムで
あり,部品の持つ仮引数に対応する実引数が組み込まれ
たものである。この再帰的展開後のソース6は,ソース
ライブラリ8に格納され,言語処理系(コンパイラ9等
)への入力となる。
成/合成機構3によって生成/合成されたプログラムで
あり,部品の持つ仮引数に対応する実引数が組み込まれ
たものである。この再帰的展開後のソース6は,ソース
ライブラリ8に格納され,言語処理系(コンパイラ9等
)への入力となる。
【0020】設計情報ファイル7は,プログラムを生成
(合成)するための各種設計情報を格納するファイルで
あり,仮引数と実引数の対応関係などが格納される。
(合成)するための各種設計情報を格納するファイルで
あり,仮引数と実引数の対応関係などが格納される。
【0021】
【作用】本発明は,図1に示すように,プログラム部品
を再帰的に組み込むことを指示する部品文法に基づいて
記述されたプログラム部品1,および部品中の仮引数に
対する実引数指定手段2から入力された仮引数と実引数
の対応情報に基づいて,プログラム生成/合成機構3が
,部品ライブラリ4を参照して必要な部品を取り込み,
仮引数についてはすべて実引数への置き換えを行う。さ
らに,再帰的組込機構5が,部品文法を解釈しプログラ
ム部品の再帰的組み込みを行うことで,言語処理系の入
力となり得るプログラムソースを合成する。
を再帰的に組み込むことを指示する部品文法に基づいて
記述されたプログラム部品1,および部品中の仮引数に
対する実引数指定手段2から入力された仮引数と実引数
の対応情報に基づいて,プログラム生成/合成機構3が
,部品ライブラリ4を参照して必要な部品を取り込み,
仮引数についてはすべて実引数への置き換えを行う。さ
らに,再帰的組込機構5が,部品文法を解釈しプログラ
ム部品の再帰的組み込みを行うことで,言語処理系の入
力となり得るプログラムソースを合成する。
【0022】したがって,再帰的な構造を持つ処理が,
比較的短いステップ数で記述でき(参考値として従来の
最大10階層まで可能なキーブレイク処理の部品が約3
00ステップ必要であったのに比べ,当部品文法で記述
すると約30ステップで済む),さらに,論理的には無
限階層のキーブレイクが可能(物理的には,アプリケー
ションで使用可能なメモリサイズにより制限される)と
なる。
比較的短いステップ数で記述でき(参考値として従来の
最大10階層まで可能なキーブレイク処理の部品が約3
00ステップ必要であったのに比べ,当部品文法で記述
すると約30ステップで済む),さらに,論理的には無
限階層のキーブレイクが可能(物理的には,アプリケー
ションで使用可能なメモリサイズにより制限される)と
なる。
【0023】
【実施例】図2は本発明の実施例による再帰的な構造を
持つプログラム部品の例,図3は本発明の実施例による
仮引数に実引数を指定する入力画面の例,図4は本発明
の実施例による再帰的展開後のソースの例を示す。
持つプログラム部品の例,図3は本発明の実施例による
仮引数に実引数を指定する入力画面の例,図4は本発明
の実施例による再帰的展開後のソースの例を示す。
【0024】以下,YPS表記によるプログラム部品の
記述例に従って,本発明の実施例を説明するが,部品を
作成する際のプログラム言語がこの表記に関するものに
限定されるわけではない。
記述例に従って,本発明の実施例を説明するが,部品を
作成する際のプログラム言語がこの表記に関するものに
限定されるわけではない。
【0025】本実施例に関係する部品文法として,以下
の記述が可能になっている。 (1) 再帰的展開開始文(1c) 『−@再帰的展開開始行』というように記述される。こ
れから次に現れる再帰的展開終了文までのステートメン
ト群を,再帰的組込位置指示子の箇所に展開することを
指示するための文である。当文は,再帰的展開終了文よ
り前に出現しなければならない。
の記述が可能になっている。 (1) 再帰的展開開始文(1c) 『−@再帰的展開開始行』というように記述される。こ
れから次に現れる再帰的展開終了文までのステートメン
ト群を,再帰的組込位置指示子の箇所に展開することを
指示するための文である。当文は,再帰的展開終了文よ
り前に出現しなければならない。
【0026】(2) 再帰的展開終了文(1d)『−@
再帰的展開終了行』というように記述される。既出の再
帰的展開開始文から当文までのステートメント群を,再
帰的組込位置指示子の箇所に展開することを指示するた
めの文である。当文は,再帰的展開開始文より後に出現
しなければならない。
再帰的展開終了行』というように記述される。既出の再
帰的展開開始文から当文までのステートメント群を,再
帰的組込位置指示子の箇所に展開することを指示するた
めの文である。当文は,再帰的展開開始文より後に出現
しなければならない。
【0027】(3) 再帰的組込位置指示子(1a)『
−●RECURSIVE 』というように記述される。 この記述位置に再帰的展開開始文から再帰的展開終了文
までのステートメント群を展開することを指示する記述
である。 当指示子は,再帰的展開開始文から再帰的展開終了文ま
での間に出現しなければならない。
−●RECURSIVE 』というように記述される。 この記述位置に再帰的展開開始文から再帰的展開終了文
までのステートメント群を展開することを指示する記述
である。 当指示子は,再帰的展開開始文から再帰的展開終了文ま
での間に出現しなければならない。
【0028】(4) 再帰的展開指示子(1b)『−&
再帰的展開( &( ))』というように記述
される。括弧内に記述されたソースについて再帰的展開
を行う度に,仮引数があれば実引数に置き換え,かつ,
直前の再帰的展開で展開されたステートメント群の直後
に,現在の再帰的展開で展開されたステートメントを追
加したステートメント群に展開することを指示する記述
である。
再帰的展開( &( ))』というように記述
される。括弧内に記述されたソースについて再帰的展開
を行う度に,仮引数があれば実引数に置き換え,かつ,
直前の再帰的展開で展開されたステートメント群の直後
に,現在の再帰的展開で展開されたステートメントを追
加したステートメント群に展開することを指示する記述
である。
【0029】この再帰的展開指示子の括弧内には,仮引
数(&PARMnn,&仮部品IDなど)を含んだステ
ートメントを記述できる。仮引数を含まなくてもよい。 また,この括弧内には,現在の再帰的展開の後に,続け
て再帰的展開を行う場合に限ってステートメントを展開
することを明示する指示子『&( )』を記述できる
。
数(&PARMnn,&仮部品IDなど)を含んだステ
ートメントを記述できる。仮引数を含まなくてもよい。 また,この括弧内には,現在の再帰的展開の後に,続け
て再帰的展開を行う場合に限ってステートメントを展開
することを明示する指示子『&( )』を記述できる
。
【0030】(5) 再帰的展開従属指示子再帰的展開
指示子の括弧内における『&( )』という形の記述
である。この中に記述されたステートメントは,現在の
再帰的展開の後に,続けて再帰的展開を行う場合に限り
展開される。『&( )』の括弧内には,仮引数(&
PARMnn,&仮部品IDなど)を含んだ(または含
まない)ステートメントを記述できる。この再帰的展開
従属指示子は,再帰的展開指示子の括弧内に限り記述で
きる。
指示子の括弧内における『&( )』という形の記述
である。この中に記述されたステートメントは,現在の
再帰的展開の後に,続けて再帰的展開を行う場合に限り
展開される。『&( )』の括弧内には,仮引数(&
PARMnn,&仮部品IDなど)を含んだ(または含
まない)ステートメントを記述できる。この再帰的展開
従属指示子は,再帰的展開指示子の括弧内に限り記述で
きる。
【0031】図2中における他の部品記述は,従来技術
と同様であり,例えば − @COND = &仮部品IDn−●PAR
A &仮部品IDn − @ENDCOND は,仮引数『&仮部品IDn』に対する実引数が指定さ
れた場合に,「@COND」と「@ENDCOND」間
のプログラム記述を展開することを意味する条件制御文
である。
と同様であり,例えば − @COND = &仮部品IDn−●PAR
A &仮部品IDn − @ENDCOND は,仮引数『&仮部品IDn』に対する実引数が指定さ
れた場合に,「@COND」と「@ENDCOND」間
のプログラム記述を展開することを意味する条件制御文
である。
【0032】本実施例では,図2に示すプログラム部品
1に対して,図3に示す実引数指定手段2による入力画
面で仮引数に対する実引数を入力し,それによって解決
した回数分だけ,再帰的に部品ソースを組み込む処理を
行い,最終的に図4に示すような再帰的展開後のソース
6を出力する。以下,この処理について詳述する。
1に対して,図3に示す実引数指定手段2による入力画
面で仮引数に対する実引数を入力し,それによって解決
した回数分だけ,再帰的に部品ソースを組み込む処理を
行い,最終的に図4に示すような再帰的展開後のソース
6を出力する。以下,この処理について詳述する。
【0033】図2に示す再帰的な構造をもつプログラム
部品1は,プログラム生成(合成)系への入力となるプ
ログラム部品であって,プログラム部品ソースの再帰的
組込位置指示子1a,再帰的に実引数が付加されてゆく
仮引数を明示する再帰的展開指示子1b,再帰的に展開
させる範囲を明示するための記述1c,1dのほかに,
部品,データ項目名などを組み込む場所を仮引数(変数
名と言ってもよい)で持つものである。
部品1は,プログラム生成(合成)系への入力となるプ
ログラム部品であって,プログラム部品ソースの再帰的
組込位置指示子1a,再帰的に実引数が付加されてゆく
仮引数を明示する再帰的展開指示子1b,再帰的に展開
させる範囲を明示するための記述1c,1dのほかに,
部品,データ項目名などを組み込む場所を仮引数(変数
名と言ってもよい)で持つものである。
【0034】図3に示す実引数指定手段2による入力画
面(a) 〜(c) は,部品の持つ仮引数に対する実
引数を入力する画面を示している。プログラム生成/合
成機構3は,この入力画面の遷移を画面制御部32によ
り制御し,(a) ,(b) ,(c) というように
任意の段数分の実引数指定情報を,設計情報ファイル7
中に入力する。
面(a) 〜(c) は,部品の持つ仮引数に対する実
引数を入力する画面を示している。プログラム生成/合
成機構3は,この入力画面の遷移を画面制御部32によ
り制御し,(a) ,(b) ,(c) というように
任意の段数分の実引数指定情報を,設計情報ファイル7
中に入力する。
【0035】次にプログラム生成/合成機構3は,画面
より入力された設計情報ファイル7の情報を入力情報解
析部34によって解析する。そして,必要な部品を部品
ライブラリ4から取得し,構文解析部31によって構文
を解析して,ソース展開部33によってプログラムを完
成させる。
より入力された設計情報ファイル7の情報を入力情報解
析部34によって解析する。そして,必要な部品を部品
ライブラリ4から取得し,構文解析部31によって構文
を解析して,ソース展開部33によってプログラムを完
成させる。
【0036】部品ライブラリ4は,プログラムを完成さ
せるために必要な部品を格納するファイルである。
せるために必要な部品を格納するファイルである。
【0037】再帰的組込機構5は,プログラム部品の再
帰的展開を司るものであり,プログラム生成/合成機構
3により制御される。再帰的組込機構5は,プログラム
生成/合成機構3における仮引数の再帰的展開用ソース
保持領域35に,入力画面(a) 〜(c) から入力
した各仮引数に対応する実引数の組を用いて,部品を入
れ子状に組み込んだソース展開を行う。
帰的展開を司るものであり,プログラム生成/合成機構
3により制御される。再帰的組込機構5は,プログラム
生成/合成機構3における仮引数の再帰的展開用ソース
保持領域35に,入力画面(a) 〜(c) から入力
した各仮引数に対応する実引数の組を用いて,部品を入
れ子状に組み込んだソース展開を行う。
【0038】こうして,図4に示す再帰的展開後のソー
ス6が展開される。この再帰的展開後のソース6は,プ
ログラム生成/合成機構3が出力したプログラムであり
,当例は,報告書作成処理というプログラムの骨格部品
(スケルトン)にキーブレイク部品を3回再帰的に組み
込んだものとなっている。
ス6が展開される。この再帰的展開後のソース6は,プ
ログラム生成/合成機構3が出力したプログラムであり
,当例は,報告書作成処理というプログラムの骨格部品
(スケルトン)にキーブレイク部品を3回再帰的に組み
込んだものとなっている。
【0039】次に,図5のフローチャートに示す■〜■
の順序に従い,本実施例の処理動作を説明する。
の順序に従い,本実施例の処理動作を説明する。
【0040】図5の■では,プログラム名やプログラム
の骨格となる部品(スケルトン)に組み込む部品IDな
ど,プログラムの概要を入力する。ここで入力された部
品IDをもとに,部品ライブラリ4中の該当するプログ
ラム部品を参照し,部品ソース中に定義されている仮引
数を画面に表示する。これにより,例えば図3に示す実
引数指定手段2による入力画面(a) が表示されるこ
とになる。
の骨格となる部品(スケルトン)に組み込む部品IDな
ど,プログラムの概要を入力する。ここで入力された部
品IDをもとに,部品ライブラリ4中の該当するプログ
ラム部品を参照し,部品ソース中に定義されている仮引
数を画面に表示する。これにより,例えば図3に示す実
引数指定手段2による入力画面(a) が表示されるこ
とになる。
【0041】図5の■では,プログラム部品の持つ仮引
数に対する実引数の情報を入力する。これは,図3に示
す入力画面(a) (次のループでは順次(b) ,(
c) に遷移する)にプリ表示された“仮引数名”に対
して,実引数として,データ項目名や,部品IDなどを
入力することを意味している。
数に対する実引数の情報を入力する。これは,図3に示
す入力画面(a) (次のループでは順次(b) ,(
c) に遷移する)にプリ表示された“仮引数名”に対
して,実引数として,データ項目名や,部品IDなどを
入力することを意味している。
【0042】なお,図3に示す入力画面が表示された時
点で,プログラムの骨格となる部品に組み込むための部
品として,プログラム部品1が選択されているものとす
る。
点で,プログラムの骨格となる部品に組み込むための部
品として,プログラム部品1が選択されているものとす
る。
【0043】図5の■では,上記■で入力された実引数
を用いて,プログラム部品中の仮引数を置き換え,組み
込むべき部品中へ組み込む。このとき,再帰的展開中で
あれば,再帰的に実引数が付加されていく仮引数のひと
つ前の展開結果を,記憶装置(図3に示す仮引数の再帰
的ソース保持領域35)上より取得し,今行っている仮
引数の実引数への置き換え結果と組み合わせて,組み込
むべき部品中へ組み込む処理を行う。
を用いて,プログラム部品中の仮引数を置き換え,組み
込むべき部品中へ組み込む。このとき,再帰的展開中で
あれば,再帰的に実引数が付加されていく仮引数のひと
つ前の展開結果を,記憶装置(図3に示す仮引数の再帰
的ソース保持領域35)上より取得し,今行っている仮
引数の実引数への置き換え結果と組み合わせて,組み込
むべき部品中へ組み込む処理を行う。
【0044】図5の■では,再帰的に部品を組み込むか
否かを判定する。これは,上記■の処理で,図3に示す
入力画面中の仮引数“仮部品ID2”,すなわち図2に
示すプログラム部品1における − @COND = &仮部品ID2−●PAR
A &仮部品ID2 − @ELSE −●RECURSIVE − @ENDCOND という記述で,『“仮部品ID2”に実引数が定義され
なかったときは,再帰的に部品を組み込みなさい。』と
定義してある仮引数に対し,図3に示す入力画面の“実
引数指定欄”で,部品IDが与えられた(何らかの文字
入力があった)か,与えられなかった(文字入力がなか
った(NULL),または,空白文字が入力された)か
,を判定することを意味している。
否かを判定する。これは,上記■の処理で,図3に示す
入力画面中の仮引数“仮部品ID2”,すなわち図2に
示すプログラム部品1における − @COND = &仮部品ID2−●PAR
A &仮部品ID2 − @ELSE −●RECURSIVE − @ENDCOND という記述で,『“仮部品ID2”に実引数が定義され
なかったときは,再帰的に部品を組み込みなさい。』と
定義してある仮引数に対し,図3に示す入力画面の“実
引数指定欄”で,部品IDが与えられた(何らかの文字
入力があった)か,与えられなかった(文字入力がなか
った(NULL),または,空白文字が入力された)か
,を判定することを意味している。
【0045】“再帰的に部品を組み込む”場合には,図
5の■で,再帰的に展開させる範囲にある仮引数を入力
画面に表示し,次の入力を促すとともに,再帰的に実引
数が付加されていく仮引数の現時点までの展開結果を記
憶装置上に格納する。
5の■で,再帰的に展開させる範囲にある仮引数を入力
画面に表示し,次の入力を促すとともに,再帰的に実引
数が付加されていく仮引数の現時点までの展開結果を記
憶装置上に格納する。
【0046】“再帰的に部品を組み込まない”場合には
,図5の■で,仮引数が未解決のままになっている部品
があるかどうかを判定し,なければ処理を終了する。
,図5の■で,仮引数が未解決のままになっている部品
があるかどうかを判定し,なければ処理を終了する。
【0047】図5の■では,仮引数が未解決のままにな
っている部品の仮引数を入力画面に表示し,次の入力を
促す。そして処理■へ戻り,処理■以下の動作を仮引数
の未解決部品がなくなるまで繰り返す。
っている部品の仮引数を入力画面に表示し,次の入力を
促す。そして処理■へ戻り,処理■以下の動作を仮引数
の未解決部品がなくなるまで繰り返す。
【0048】次に,図2ないし図4に示す例を用いて,
本発明の具体的な展開動作について説明する。 (1) 図2に示すプログラム部品1のソース中の『&
再帰的展開(&PARMO1%と旧&PARMO1%が
等しくない &(または) )』という記述は,図
3の入力画面(a) により入力された情報により,『
部コード と 旧部コード が等しくない』とい
うソースに変換される。そして,『&再帰的展開』とい
う記述があるため,次の再帰的展開に備え,『部コード
と旧部コード が等しくない または』という
ソースを記憶装置上に保持する。
本発明の具体的な展開動作について説明する。 (1) 図2に示すプログラム部品1のソース中の『&
再帰的展開(&PARMO1%と旧&PARMO1%が
等しくない &(または) )』という記述は,図
3の入力画面(a) により入力された情報により,『
部コード と 旧部コード が等しくない』とい
うソースに変換される。そして,『&再帰的展開』とい
う記述があるため,次の再帰的展開に備え,『部コード
と旧部コード が等しくない または』という
ソースを記憶装置上に保持する。
【0049】ここで,『&PARMO1%を旧&PAR
MO1%に転記する』という記述は,『&再帰的展開』
という指示がないので,図3の入力画面(a) により
入力された情報によって,『部コード を 旧部コ
ード に転記する』というソースに変換されるが,次
の再帰的展開に備えて記憶装置上に保持することはしな
い。
MO1%に転記する』という記述は,『&再帰的展開』
という指示がないので,図3の入力画面(a) により
入力された情報によって,『部コード を 旧部コ
ード に転記する』というソースに変換されるが,次
の再帰的展開に備えて記憶装置上に保持することはしな
い。
【0050】また,『仮部品ID1』,『仮部品ID3
』,『仮部品ID4』は,それぞれ,図3の入力画面(
a) により入力された情報により,『□部毎合計行ク
リア』,『□部毎合計編集出力』,『□総合計加算』と
いうソースに変換される。なお,□は黒塗りの四角であ
る。(当例では,YPS表記でいう段階的詳細化の概要
部として変換され,処理の詳細は段階的詳細化の詳細部
(黒の▽から黒の△まで)として展開されている。)
』,『仮部品ID4』は,それぞれ,図3の入力画面(
a) により入力された情報により,『□部毎合計行ク
リア』,『□部毎合計編集出力』,『□総合計加算』と
いうソースに変換される。なお,□は黒塗りの四角であ
る。(当例では,YPS表記でいう段階的詳細化の概要
部として変換され,処理の詳細は段階的詳細化の詳細部
(黒の▽から黒の△まで)として展開されている。)
【
0051】そして,『仮部品ID2』については,入力
画面より何も入力されなかったため,部品ソース中の『
●RECURSIVE 』により,この位置に自分自身
を組み込むために,新たな入力画面を表示する。
0051】そして,『仮部品ID2』については,入力
画面より何も入力されなかったため,部品ソース中の『
●RECURSIVE 』により,この位置に自分自身
を組み込むために,新たな入力画面を表示する。
【0052】ここまでの処理で,図4の再帰的展開後の
ソース6に示した,点線(1) 内の,点線(2) 内
を含まない部分がプログラムの骨格部品(スケルトン)
中に組み込まれたことになる。
ソース6に示した,点線(1) 内の,点線(2) 内
を含まない部分がプログラムの骨格部品(スケルトン)
中に組み込まれたことになる。
【0053】(2) 引き続き,図3の入力画面(b)
より入力された情報によって,プログラム部品1のソ
ース中の『&再帰的展開(&PARMO1%と旧&PA
RMO1%が等しくない &(または) )』とい
う記述は,『課コード と 旧課コード が等し
くない または』というソースに変換され,記憶装置
上に保持されたソース『部コード と 旧部コード
が等しくない または』と組み合わされて,『部
コード と 旧部コード が等しくないまたは課
コード と 旧課コード が等しくない また
は』となる。
より入力された情報によって,プログラム部品1のソ
ース中の『&再帰的展開(&PARMO1%と旧&PA
RMO1%が等しくない &(または) )』とい
う記述は,『課コード と 旧課コード が等し
くない または』というソースに変換され,記憶装置
上に保持されたソース『部コード と 旧部コード
が等しくない または』と組み合わされて,『部
コード と 旧部コード が等しくないまたは課
コード と 旧課コード が等しくない また
は』となる。
【0054】その他の仮引数については,入力画面(a
) の場合と同様に,入力画面(b) で指定された実
引数に置き換えられ,次の入力画面(c) が表示され
る。
) の場合と同様に,入力画面(b) で指定された実
引数に置き換えられ,次の入力画面(c) が表示され
る。
【0055】ここまでの処理で,再帰的展開後のソース
6に示した,点線(3) 内を含まない部分がプログラ
ムの骨格部品(スケルトン)中に組み込まれたことにな
る。
6に示した,点線(3) 内を含まない部分がプログラ
ムの骨格部品(スケルトン)中に組み込まれたことにな
る。
【0056】(3) 引き続き,図3の入力画面(c)
より入力された情報によって,プログラム部品ソース
1中の『&再帰的展開(&PARMO1%と旧&PAR
MO1%が等しくない &(または) )』という
記述は,『従業員コード と 旧従業員コード
が等しくない』というソースに変換され,記憶装置上に
保持されたソース『部コード と 旧部コード
が等しくない または課コード と 旧課コード
が等しくない または』と組み合わされて,『部
コード と 旧部コード が等しくない また
は課コード と 旧課コード が等しくない
または従業員コード と 旧従業員コード が等
しくない』となる。
より入力された情報によって,プログラム部品ソース
1中の『&再帰的展開(&PARMO1%と旧&PAR
MO1%が等しくない &(または) )』という
記述は,『従業員コード と 旧従業員コード
が等しくない』というソースに変換され,記憶装置上に
保持されたソース『部コード と 旧部コード
が等しくない または課コード と 旧課コード
が等しくない または』と組み合わされて,『部
コード と 旧部コード が等しくない また
は課コード と 旧課コード が等しくない
または従業員コード と 旧従業員コード が等
しくない』となる。
【0057】そして,『仮部品ID2』に対して,実引
数として『課毎合計加算』という部品IDが指定された
ため,これ以降は,再帰的に展開しない。その他の仮引
数については,前記の入力画面(a) の場合に準じて
,実引数に置き換えられる。
数として『課毎合計加算』という部品IDが指定された
ため,これ以降は,再帰的に展開しない。その他の仮引
数については,前記の入力画面(a) の場合に準じて
,実引数に置き換えられる。
【0058】ここまでの処理で,図4の再帰的展開後の
ソース6に示したソースが生成(合成)されたことにな
る。YPS表記の部品の展開例について説明したが,部
品を作成する際のプログラム言語は,これに関するもの
に限らず,COBOLやFORTRAN等の各種のプロ
グラム言語についても,同様に本発明を実施できること
は言うまでもない。
ソース6に示したソースが生成(合成)されたことにな
る。YPS表記の部品の展開例について説明したが,部
品を作成する際のプログラム言語は,これに関するもの
に限らず,COBOLやFORTRAN等の各種のプロ
グラム言語についても,同様に本発明を実施できること
は言うまでもない。
【0059】
【発明の効果】以上説明したように,本発明によれば,
再帰的な構造を持ったプログラム部品を簡単に,しかも
,より汎用性をもたせて記述でき,部品作成者の負担を
軽減できると共に,部品ライブラリの運用・保守を容易
に行うことができる。また,部品を利用してプログラム
を開発するユーザは,従来のように再帰的構造の上限値
を意識しないで部品を使用することができると共に,再
帰的構造の各レベル毎に,そのレベルで行うべき機能を
纏めて定義できるようになるので,ソフトウェアの生産
性・信頼性が向上する。
再帰的な構造を持ったプログラム部品を簡単に,しかも
,より汎用性をもたせて記述でき,部品作成者の負担を
軽減できると共に,部品ライブラリの運用・保守を容易
に行うことができる。また,部品を利用してプログラム
を開発するユーザは,従来のように再帰的構造の上限値
を意識しないで部品を使用することができると共に,再
帰的構造の各レベル毎に,そのレベルで行うべき機能を
纏めて定義できるようになるので,ソフトウェアの生産
性・信頼性が向上する。
【図1】本発明の原理構成図である。
【図2】本発明の実施例による再帰的な構造を持つプロ
グラム部品の例を示す図である。
グラム部品の例を示す図である。
【図3】本発明の実施例による仮引数に実引数を指定す
る入力画面の例を示す図である。
る入力画面の例を示す図である。
【図4】本発明の実施例による再帰的展開後のソースの
例を示す図である。
例を示す図である。
【図5】本発明の一実施例フローチャートである。
【図6】従来技術によるキーブレイク処理の記述例を示
す図である。
す図である。
【図7】従来技術によるキーブレイク処理の記述例を示
す図である。
す図である。
【図8】従来技術によるキーブレイク処理の記述例を示
す図である。
す図である。
【図9】従来技術によるキーブレイク処理の記述例を示
す図である。
す図である。
【符号の説明】
1 プログラム部品
2 実引数指定手段
3 プログラム生成/合成機構
4 部品ライブラリ
5 再帰的組込機構
6 再帰的展開後のソース
7 設計情報ファイル
8 ソースライブラリ
9 コンパイラ
Claims (2)
- 【請求項1】 部品化・再利用の仕組みを応用してプ
ログラムを生成または合成するプログラム生成/合成装
置において,プログラム部品ソースを再帰的に組み込む
ことを指示する組込位置指示子(1a),再帰的に実引
数が付加されていく仮引数であることを明示する再帰的
展開指示子(1b)およびプログラム部品ソースの記述
中で再帰的に展開する範囲を明示するための文(1c,
1d) による再帰的記述を可能とした部品文法に基づ
いて記述されたプログラム部品(1) と,プログラム
部品(1) 中の仮引数に対して実引数を指定する実引
数指定手段(2) と,部品文法を解析し,プログラム
部品(1) 中に前記再帰的記述がある場合に,そのプ
ログラム部品ソースを再帰的に入れ子状に組み込む展開
を行う再帰的組込機構(5) を有するプログラム生成
/合成機構(3) とを備え,プログラム部品の再帰的
組み込みを行ったソースプログラムを出力するようにし
たことを特徴とするプログラム生成/合成装置。 - 【請求項2】 部品化・再利用の仕組みを応用して計
算機によりプログラムを生成または合成するプログラム
生成/合成方法において,プログラム部品ソースを再帰
的に組み込むことを指示する組込位置指示子(1a),
再帰的に実引数が付加されていく仮引数であることを明
示する再帰的展開指示子(1b)およびプログラム部品
ソースの記述中で再帰的に展開する範囲を明示するため
の文(1c,1d) による再帰的記述を可能とした部
品文法に基づいて記述されたプログラム部品(1) を
解析する過程と,プログラム部品(1) 中の仮引数に
対して,置き換えるべき実引数を入力する過程と,部品
文法を解析し,プログラム部品(1) 中に前記再帰的
記述がある場合に,前記実引数を入力する過程を繰り返
し,実引数の組の入力回数に応じて仮引数を実引数に置
き換えたプログラム部品ソースを,再帰的に入れ子状に
組み込む展開を行う過程とを備え,プログラムの生成ま
たは合成を行うことを特徴とするプログラム生成/合成
方法。
Priority Applications (1)
| Application Number | Priority Date | Filing Date | Title |
|---|---|---|---|
| JP3039078A JP3019874B2 (ja) | 1991-02-08 | 1991-02-08 | プログラム生成/合成装置および方法 |
Applications Claiming Priority (1)
| Application Number | Priority Date | Filing Date | Title |
|---|---|---|---|
| JP3039078A JP3019874B2 (ja) | 1991-02-08 | 1991-02-08 | プログラム生成/合成装置および方法 |
Publications (2)
| Publication Number | Publication Date |
|---|---|
| JPH04257028A true JPH04257028A (ja) | 1992-09-11 |
| JP3019874B2 JP3019874B2 (ja) | 2000-03-13 |
Family
ID=12543072
Family Applications (1)
| Application Number | Title | Priority Date | Filing Date |
|---|---|---|---|
| JP3039078A Expired - Fee Related JP3019874B2 (ja) | 1991-02-08 | 1991-02-08 | プログラム生成/合成装置および方法 |
Country Status (1)
| Country | Link |
|---|---|
| JP (1) | JP3019874B2 (ja) |
Cited By (1)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| JP2013506175A (ja) * | 2009-09-25 | 2013-02-21 | インターナショナル・ビジネス・マシーンズ・コーポレーション | 統一リソース識別子(uri)による、アプリケーション状態情報の管理 |
-
1991
- 1991-02-08 JP JP3039078A patent/JP3019874B2/ja not_active Expired - Fee Related
Cited By (1)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| JP2013506175A (ja) * | 2009-09-25 | 2013-02-21 | インターナショナル・ビジネス・マシーンズ・コーポレーション | 統一リソース識別子(uri)による、アプリケーション状態情報の管理 |
Also Published As
| Publication number | Publication date |
|---|---|
| JP3019874B2 (ja) | 2000-03-13 |
Similar Documents
| Publication | Publication Date | Title |
|---|---|---|
| US5812851A (en) | Compiler with generic front end and dynamically loadable back ends | |
| US7743362B2 (en) | Automatic generation of application domain specific graphical programs | |
| JP3762867B2 (ja) | コンパイラ装置、コンパイル方法、およびそのためのプログラムを格納した記憶媒体 | |
| US7216334B2 (en) | Self-determining behavior node for use in creating a graphical program | |
| US5187788A (en) | Graphics system for automatic computer code generation | |
| US7954082B2 (en) | Automatically analyzing and modifying a graphical program | |
| US8943469B2 (en) | Type generic graphical programming | |
| US8429627B2 (en) | Asynchronous preemptive edit time semantic analysis of a graphical program | |
| US20010024211A1 (en) | System and method for programmatically modifying a graphical program in response to program information | |
| US6349407B1 (en) | Method and apparatus for re-introducing version control | |
| JPH08202545A (ja) | ターゲット言語コードを生成するためのオブジェクト指向システム及びその方法 | |
| JPH07182147A (ja) | コンピュータプログラムを発生する方法及びシステム | |
| JPWO2000045260A1 (ja) | コンパイラ装置、コンパイル方法、およびそのためのプログラムを格納した記憶媒体 | |
| JP5147240B2 (ja) | リバーシブルなデザイン・ツリーの変換のための方法とシステム | |
| US8176471B2 (en) | Static binding of nodes to virtual instruments in a graphical program | |
| US6874148B1 (en) | System and method for exporting a graphical program to a shared library | |
| JP3019874B2 (ja) | プログラム生成/合成装置および方法 | |
| JP3196675B2 (ja) | 言語処理方式 | |
| GB2420638A (en) | Method of substituting code fragments in Internal Representation | |
| JP3294691B2 (ja) | オブジェクト指向システム構築方法 | |
| KR20060120004A (ko) | 대화 시스템을 위한 대화 제어 장치 | |
| JPH06110733A (ja) | プログラムのテストケース生成装置 | |
| JPH07295612A (ja) | 高級言語シーケンス命令プログラム生成装置および汎用シーケンサ | |
| Palanque et al. | Interactive cooperative objects: an object-oriented formalism based on petri nets for user interface design | |
| JP7447574B2 (ja) | サポート装置、サポートプログラムおよびサポート方法 |
Legal Events
| Date | Code | Title | Description |
|---|---|---|---|
| A01 | Written decision to grant a patent or to grant a registration (utility model) |
Free format text: JAPANESE INTERMEDIATE CODE: A01 Effective date: 19991214 |
|
| FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20080107 Year of fee payment: 8 |
|
| FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20090107 Year of fee payment: 9 |
|
| LAPS | Cancellation because of no payment of annual fees |