JPH11288367A - プログラム自動生成システムと方法 - Google Patents
プログラム自動生成システムと方法Info
- Publication number
- JPH11288367A JPH11288367A JP9024998A JP9024998A JPH11288367A JP H11288367 A JPH11288367 A JP H11288367A JP 9024998 A JP9024998 A JP 9024998A JP 9024998 A JP9024998 A JP 9024998A JP H11288367 A JPH11288367 A JP H11288367A
- Authority
- JP
- Japan
- Prior art keywords
- state
- transition
- event
- program
- lock
- 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.)
- Pending
Links
Landscapes
- Stored Programmes (AREA)
Abstract
(57)【要約】
【課題】 従来、多くの機器や複数の端末と接続された
端末システム等の状態遷移オートマトンの記述によるプ
ログラム生成技術において、排他制御(ロック制御)の
表現に煩雑な記述が必要であった。 【解決手段】 状態遷移オートマトンの記述体系を拡大
し、状態遷移オートマトンに、所定の排他制御動作を行
うロック状態の遷移を組み込んでおく。そして、ユーザ
が、ロック状態に遷移した時のこのロック状態の遷移を
制御する動作を状態遷移オートマトンに記述すると、こ
の記述を検出して、ロック状態の時は外部のイベントに
対して、ロックされていることを表すイベントを返すよ
うに、プログラムを生成する。これにより、ユーザが一
々複雑なロック制御の状態遷移を書かなくてもロック制
御を実現したプログラムを自動生成することができる。
端末システム等の状態遷移オートマトンの記述によるプ
ログラム生成技術において、排他制御(ロック制御)の
表現に煩雑な記述が必要であった。 【解決手段】 状態遷移オートマトンの記述体系を拡大
し、状態遷移オートマトンに、所定の排他制御動作を行
うロック状態の遷移を組み込んでおく。そして、ユーザ
が、ロック状態に遷移した時のこのロック状態の遷移を
制御する動作を状態遷移オートマトンに記述すると、こ
の記述を検出して、ロック状態の時は外部のイベントに
対して、ロックされていることを表すイベントを返すよ
うに、プログラムを生成する。これにより、ユーザが一
々複雑なロック制御の状態遷移を書かなくてもロック制
御を実現したプログラムを自動生成することができる。
Description
【0001】
【発明の属する技術分野】本発明は、状態遷移オートマ
トン、すなわち、状態遷移と各状態における動作定義か
らなるモジュールの記述の集まりで表現されたシステム
の記述に基づき、コンピュータ処理により、対応するプ
ログラムを自動生成(作成)する技術に係わり、特に、
金融/公共などの分野でネットワークを経由して遠隔の
顧客/住民にサービスを提供するシステムのように、1
つの端末が、その端末に装備されているプリンタ、スキ
ャナ、現金発行機、カードリーダ等から送られるイベン
トや、相手の端末からの要求を表すイベントなど、多く
のイベントに反応しなければならないシステムの構築に
用いるプログラムを効率的に生成するのに好適なプログ
ラム自動生成システムと方法に関するものである。
トン、すなわち、状態遷移と各状態における動作定義か
らなるモジュールの記述の集まりで表現されたシステム
の記述に基づき、コンピュータ処理により、対応するプ
ログラムを自動生成(作成)する技術に係わり、特に、
金融/公共などの分野でネットワークを経由して遠隔の
顧客/住民にサービスを提供するシステムのように、1
つの端末が、その端末に装備されているプリンタ、スキ
ャナ、現金発行機、カードリーダ等から送られるイベン
トや、相手の端末からの要求を表すイベントなど、多く
のイベントに反応しなければならないシステムの構築に
用いるプログラムを効率的に生成するのに好適なプログ
ラム自動生成システムと方法に関するものである。
【0002】
【従来の技術】従来、複数の機器や通信相手のイベント
を処理するシステムのプログラムの開発技術として、例
えば、水野忠則監修「プロトコル言語」(1994年、(株)
カットシステム出版)に記載の「Estelle」や「SDL」が
ある。特に、その第63〜85頁に記載のEstelleはプ
ロトコル記述のための言語であり、このEstelleでは、
ユーザは、そのようなシステムを、お互いにイベントを
送り合う有限状態オートマトンの集まり(以下、モジュ
ールと呼ぶ)として記述し、Estelle用に提供されている
ツールを使って、コンピュータにより、その記述からプ
ログラムを自動生成することができる。
を処理するシステムのプログラムの開発技術として、例
えば、水野忠則監修「プロトコル言語」(1994年、(株)
カットシステム出版)に記載の「Estelle」や「SDL」が
ある。特に、その第63〜85頁に記載のEstelleはプ
ロトコル記述のための言語であり、このEstelleでは、
ユーザは、そのようなシステムを、お互いにイベントを
送り合う有限状態オートマトンの集まり(以下、モジュ
ールと呼ぶ)として記述し、Estelle用に提供されている
ツールを使って、コンピュータにより、その記述からプ
ログラムを自動生成することができる。
【0003】このようなEstelleの機能を、上述の文献
の第68頁における記述例を用いて説明する。ここで
は、2つのチャンネルを持ち、内部に4つの状態を持
ち、外部とイベントのやり取りを行うモジュールEを定
義している。
の第68頁における記述例を用いて説明する。ここで
は、2つのチャンネルを持ち、内部に4つの状態を持
ち、外部とイベントのやり取りを行うモジュールEを定
義している。
【0004】 Specification Example; default individual queue; channel ChU(R1, R2); by R1: put; channel ChS(Ra, Rb); by Ra: dt0; dt1; by Rb: ak0; ak1; module E systemprocess; ip U: ChU(R2); S: ChS(Ra); end; body E1 for E; state s0, s1, s2, s4; ................. (1) initialize to s0 begin end; ................ (2) trans ...................................... (3) when U.put ............................. (4) from s0 to s1 ........................ (5) begin output S.dt0 end; ............ (6) from s2 to s3 ........................ (7) begin output S.dt1 end; ............ (8) when S.ak0 ............................. (9) : : end; end;
【0005】上記(1)の行は、モジュールEが4つの
状態「S0,S1,S2,S3」を持っていることを表す。(2)
の行は、システムが起動された時、モジュールEが「s
0」の状態にあることを示す。その行の「begin end;」
は、システムが起動された時に実行するプログラムが
「begin」と「end」の間に記述するためのものだが、こ
の例では何も行わないので、空になっている。
状態「S0,S1,S2,S3」を持っていることを表す。(2)
の行は、システムが起動された時、モジュールEが「s
0」の状態にあることを示す。その行の「begin end;」
は、システムが起動された時に実行するプログラムが
「begin」と「end」の間に記述するためのものだが、こ
の例では何も行わないので、空になっている。
【0006】また、(3)の行の「trans」以降には、
イベントに対する状態の遷移が記述されている。すなわ
ち、行(4)の「when U.put」は、「U」というチャン
ネルから、「put」というイベントがきた時の状態遷移
の記述がその行以降に記述されることを表し、行(5)
の「from s0 to s1」は、そのイベントが来た時、状態
「s0」から状態「s1」へ遷移することを表し、行(6)
の「begin output S.dt0 end;」は、状態遷移の時の動
作を記述しており、ここでは、チャンネルSにイベント
「dt0」を送る動作が記述されている。
イベントに対する状態の遷移が記述されている。すなわ
ち、行(4)の「when U.put」は、「U」というチャン
ネルから、「put」というイベントがきた時の状態遷移
の記述がその行以降に記述されることを表し、行(5)
の「from s0 to s1」は、そのイベントが来た時、状態
「s0」から状態「s1」へ遷移することを表し、行(6)
の「begin output S.dt0 end;」は、状態遷移の時の動
作を記述しており、ここでは、チャンネルSにイベント
「dt0」を送る動作が記述されている。
【0007】このように、「Estelle」などでは、モジ
ュールの並列的な動作を、状態遷移と、その時のイベン
トのやり取りなどの動作で記述するので、直感的でわか
りやすい。また、「Estelle」では、状態遷移はテキス
トで表されるが、上記文献に同じく記載の「SDL」で
は、グラフィカルな記述方式が開発されており、ユーザ
は、各モジュールの状態遷移をさらにわかりやすく定義
できる。
ュールの並列的な動作を、状態遷移と、その時のイベン
トのやり取りなどの動作で記述するので、直感的でわか
りやすい。また、「Estelle」では、状態遷移はテキス
トで表されるが、上記文献に同じく記載の「SDL」で
は、グラフィカルな記述方式が開発されており、ユーザ
は、各モジュールの状態遷移をさらにわかりやすく定義
できる。
【0008】以下、このような、状態遷移と各状態にお
ける動作定義からなるモジュールの記述の集まりでシス
テムを記述してプログラムを作成する技術における、シ
ステムの記述例を説明する。図16は、各状態における
動作定義の記述例を示す説明図であり、図17は、各状
態における状態遷移の記述例を示す説明図である。
ける動作定義からなるモジュールの記述の集まりでシス
テムを記述してプログラムを作成する技術における、シ
ステムの記述例を説明する。図16は、各状態における
動作定義の記述例を示す説明図であり、図17は、各状
態における状態遷移の記述例を示す説明図である。
【0009】本図16,17で示す例では、状態定義1
61と状態遷移定義171でシステムを定義しており、
図16の状態定義161では、そのモジュールにどのよ
うな状態があるかの指定を状態名162のフィールド
に、その内どの状態がシステムが起動された時の状態
(この状態を初期状態と呼ぶ)かの指定を初期状態16
3のフィールドに、また、各状態に遷移した時に実行さ
れるコマンドの定義(これを状態の動作定義と呼ぶ)を
動作定義164のフィールドに記述する。
61と状態遷移定義171でシステムを定義しており、
図16の状態定義161では、そのモジュールにどのよ
うな状態があるかの指定を状態名162のフィールド
に、その内どの状態がシステムが起動された時の状態
(この状態を初期状態と呼ぶ)かの指定を初期状態16
3のフィールドに、また、各状態に遷移した時に実行さ
れるコマンドの定義(これを状態の動作定義と呼ぶ)を
動作定義164のフィールドに記述する。
【0010】図16で記述されるモジュールは、「IDO
L」という状態が初期状態で、システムが起動された
時、その動作定義に記述されている send(モジュールA,初期化) send(モジュールB,初期化) send(モジュールC,初期化) send(モジュールD,初期化) が実行される。また、状態「IDOL」の他に、状態「Prin
ting」、状態「Completed」、状態「Incompleted」など
がある。
L」という状態が初期状態で、システムが起動された
時、その動作定義に記述されている send(モジュールA,初期化) send(モジュールB,初期化) send(モジュールC,初期化) send(モジュールD,初期化) が実行される。また、状態「IDOL」の他に、状態「Prin
ting」、状態「Completed」、状態「Incompleted」など
がある。
【0011】図17において、状態の遷移は状態遷移定
義171のような表で表現される。この表は、状態名1
72、イベント名173、および、次の状態名174の
各フィールドからなり、各状態について、イベントが送
られてきた時、どの状態に遷移するかが記述されてい
る。上記2つの表、図16の状態定義161と図17の
状態遷移定義171で表現されるモジュールを図式言語
で表現したものを図18に示す。
義171のような表で表現される。この表は、状態名1
72、イベント名173、および、次の状態名174の
各フィールドからなり、各状態について、イベントが送
られてきた時、どの状態に遷移するかが記述されてい
る。上記2つの表、図16の状態定義161と図17の
状態遷移定義171で表現されるモジュールを図式言語
で表現したものを図18に示す。
【0012】図18は、図16および図17における状
態定義と状態遷移定義で表現されるモジュールを図式で
表現する図式言語例を示す説明図である。図18におい
て、モジュール181の「状態」は丸の中に状態名を記
述して表現され、特に、初期状態は2重丸で記述してい
る。また、「状態遷移」は、「状態」から「状態」への
エッジにイベント名を記述して表現する。そして、各状
態の「動作定義」は、「状態」に四角を対応付けて表現
している。例えば、状態「IDOL」182に対しては動作
定義183が記述されている。
態定義と状態遷移定義で表現されるモジュールを図式で
表現する図式言語例を示す説明図である。図18におい
て、モジュール181の「状態」は丸の中に状態名を記
述して表現され、特に、初期状態は2重丸で記述してい
る。また、「状態遷移」は、「状態」から「状態」への
エッジにイベント名を記述して表現する。そして、各状
態の「動作定義」は、「状態」に四角を対応付けて表現
している。例えば、状態「IDOL」182に対しては動作
定義183が記述されている。
【0013】この状態「IDOL」182から状態「Printi
ng」184にエッジ「資料印刷」が出ているが、これ
は、モジュールが状態「IDOL」182の時に、イベント
「資料印刷」がこのモジュールに送られてきた時は、状
態「Printing」184に遷移して、動作定義185で示
される動作を行うものである。状態「Printing」18
4、および、状態「Completed」186、状態「Incompl
eted」187等に関しても同様である。このような図式
表現の方が直感的にわかりやすいので、以下、この図式
表現を用いて説明を続ける。
ng」184にエッジ「資料印刷」が出ているが、これ
は、モジュールが状態「IDOL」182の時に、イベント
「資料印刷」がこのモジュールに送られてきた時は、状
態「Printing」184に遷移して、動作定義185で示
される動作を行うものである。状態「Printing」18
4、および、状態「Completed」186、状態「Incompl
eted」187等に関しても同様である。このような図式
表現の方が直感的にわかりやすいので、以下、この図式
表現を用いて説明を続ける。
【0014】遠隔サービス窓口システムでは、種々のデ
バイスの制御や複数の通信相手との同期を行うための複
雑な排他制御(ロック制御)が必要である。すなわち、
一つのモジュールは、多くのデバイス制御モジュール
と、イベントを送り合うので、ロック中に送られる可能
性のある全てのイベントに対して状態遷移を書かねばな
らず、例えば、次の図19で示すように、記述が大変煩
雑になる。
バイスの制御や複数の通信相手との同期を行うための複
雑な排他制御(ロック制御)が必要である。すなわち、
一つのモジュールは、多くのデバイス制御モジュール
と、イベントを送り合うので、ロック中に送られる可能
性のある全てのイベントに対して状態遷移を書かねばな
らず、例えば、次の図19で示すように、記述が大変煩
雑になる。
【0015】図19は、従来技術によるロック制御に対
する状態遷移の記述例を示す説明図である。本例では、
あるシステムのメインモジュールの状態遷移の一部分を
表現している。ここでは、メインモジュールは、最初、
「IDOL」状態191にあり、メインモジュールに「資料
プリント」のイベントが来ると「Printing」状態192
に推移し、プリンタ制御モジュールにプリントのイベン
トを送った後、プリンタが印刷完了するのを待つ。
する状態遷移の記述例を示す説明図である。本例では、
あるシステムのメインモジュールの状態遷移の一部分を
表現している。ここでは、メインモジュールは、最初、
「IDOL」状態191にあり、メインモジュールに「資料
プリント」のイベントが来ると「Printing」状態192
に推移し、プリンタ制御モジュールにプリントのイベン
トを送った後、プリンタが印刷完了するのを待つ。
【0016】この間、メインモジュールは、プリンタ以
外の要求を受け付けないようにするためには、本図に示
すように、メインモジュールに送られる可能性がある全
てのイベントに対して、ロックされていることを表すイ
ベントを送り返すための状態遷移(「Answering LockSt
atus A」状態193、「Answering LockStatus B」状態
194、動作定義195,196)を書かなければなら
ない。
外の要求を受け付けないようにするためには、本図に示
すように、メインモジュールに送られる可能性がある全
てのイベントに対して、ロックされていることを表すイ
ベントを送り返すための状態遷移(「Answering LockSt
atus A」状態193、「Answering LockStatus B」状態
194、動作定義195,196)を書かなければなら
ない。
【0017】
【発明が解決しようとする課題】解決しようとする問題
点は、従来の技術では、ロック制御が必要なシステムの
記述においては、送られてくる可能性のある全てのイベ
ントに対して、ロックされていることを表すイベントを
送り返すための状態遷移をユーザが一々書かなければな
らない点である。本発明の目的は、これら従来技術の課
題を解決し、金融や公共などの分野における、ネットワ
ーク経由で遠隔の顧客/住民にサービスを提供するシス
テムのように、1つの端末が多くのイベントに反応しな
ければならないシステムの構築に用いるプログラムを効
率的に生成することを可能とするプログラム自動生成シ
ステムと方法を提供することである。
点は、従来の技術では、ロック制御が必要なシステムの
記述においては、送られてくる可能性のある全てのイベ
ントに対して、ロックされていることを表すイベントを
送り返すための状態遷移をユーザが一々書かなければな
らない点である。本発明の目的は、これら従来技術の課
題を解決し、金融や公共などの分野における、ネットワ
ーク経由で遠隔の顧客/住民にサービスを提供するシス
テムのように、1つの端末が多くのイベントに反応しな
ければならないシステムの構築に用いるプログラムを効
率的に生成することを可能とするプログラム自動生成シ
ステムと方法を提供することである。
【0018】
【課題を解決するための手段】上記目的を達成するた
め、本発明のプログラム自動生成システムと方法は、イ
ベントに従って内部状態を遷移し、この遷移した状態に
従って、外部や内部へのイベントの送信、コマンドの実
行等の動作を状態遷移オートマトンの集まりとしてユー
ザがシステムを記述し、このような記述からコンピュー
タ処理によりシステムのプログラムを自動生成するもの
であり、状態遷移オートマトンの記述体系を拡大し、状
態遷移オートマトンに、所定の排他制御動作を行うロッ
ク状態の遷移を組み込んでおく。そして、ユーザが、ロ
ック状態に遷移した時のこのロック状態の遷移を制御す
る動作を状態遷移オートマトンに記述すると、この記述
を検出して、ロック状態の時は外部のイベントに対し
て、ロックされていることを表すイベントを返すよう
に、プログラムを生成する。また、状態遷移オートマト
ンがとり得るロック状態として、「ロック」と「アンロ
ック」の2つの状態だけでなく、さらに、「短時間ロッ
ク」の3つ目の状態を設ける。そして、「短時間ロック
状態」の状態遷移オートマトンは、送信されたイベント
に対して、「短時間ロック状態」であるということを表
すイベントを送り主に送り返し、送り主の状態遷移オー
トマトンは、「短時間ロック状態」であれば、ロックが
はずれるのを待つ動作を行うものとして、プログラムを
生成する。このように、状態遷移オートマトンの記述体
系を拡大し、ロック状態の遷移を組み込むことにより、
ユーザが一々複雑なロック制御の状態遷移を書かなくて
もロック制御を実現したプログラムを自動生成すること
ができる。
め、本発明のプログラム自動生成システムと方法は、イ
ベントに従って内部状態を遷移し、この遷移した状態に
従って、外部や内部へのイベントの送信、コマンドの実
行等の動作を状態遷移オートマトンの集まりとしてユー
ザがシステムを記述し、このような記述からコンピュー
タ処理によりシステムのプログラムを自動生成するもの
であり、状態遷移オートマトンの記述体系を拡大し、状
態遷移オートマトンに、所定の排他制御動作を行うロッ
ク状態の遷移を組み込んでおく。そして、ユーザが、ロ
ック状態に遷移した時のこのロック状態の遷移を制御す
る動作を状態遷移オートマトンに記述すると、この記述
を検出して、ロック状態の時は外部のイベントに対し
て、ロックされていることを表すイベントを返すよう
に、プログラムを生成する。また、状態遷移オートマト
ンがとり得るロック状態として、「ロック」と「アンロ
ック」の2つの状態だけでなく、さらに、「短時間ロッ
ク」の3つ目の状態を設ける。そして、「短時間ロック
状態」の状態遷移オートマトンは、送信されたイベント
に対して、「短時間ロック状態」であるということを表
すイベントを送り主に送り返し、送り主の状態遷移オー
トマトンは、「短時間ロック状態」であれば、ロックが
はずれるのを待つ動作を行うものとして、プログラムを
生成する。このように、状態遷移オートマトンの記述体
系を拡大し、ロック状態の遷移を組み込むことにより、
ユーザが一々複雑なロック制御の状態遷移を書かなくて
もロック制御を実現したプログラムを自動生成すること
ができる。
【0019】
【発明の実施の形態】以下、本発明の実施例を、図面に
より詳細に説明する。図1は、本発明のプログラム自動
生成システムの本発明に係る構成の一実施例を示すブロ
ック図であり、図2は、図1におけるプログラム自動生
成システムの装置構成例を示すブロック図である。
より詳細に説明する。図1は、本発明のプログラム自動
生成システムの本発明に係る構成の一実施例を示すブロ
ック図であり、図2は、図1におけるプログラム自動生
成システムの装置構成例を示すブロック図である。
【0020】図2において、21はCRT(Cathode Ra
y Tube)等からなる表示装置、22はキーボードやマウ
ス等からなる入力装置、23はCPU(Central Proces
singUnit)とメインメモリ等を具備して蓄積プログラム
方式によるコンピュータ処理を行う情報処理装置、24
はハードディスク装置等からなる補助記憶装置、25は
本発明のプログラム自動生成方法の手順プログラムを記
録した光ディスク、26は光ディスク25からプログラ
ムおよびデータを読み取る光ディスク駆動装置である。
y Tube)等からなる表示装置、22はキーボードやマウ
ス等からなる入力装置、23はCPU(Central Proces
singUnit)とメインメモリ等を具備して蓄積プログラム
方式によるコンピュータ処理を行う情報処理装置、24
はハードディスク装置等からなる補助記憶装置、25は
本発明のプログラム自動生成方法の手順プログラムを記
録した光ディスク、26は光ディスク25からプログラ
ムおよびデータを読み取る光ディスク駆動装置である。
【0021】情報処理装置23は、光ディスク駆動装置
26を介して光ディスク25に記録されたプログラムを
メインメモリや補助記憶装置24上に読み込み、図1に
示すプログラム生成部2の各機能を構築する。
26を介して光ディスク25に記録されたプログラムを
メインメモリや補助記憶装置24上に読み込み、図1に
示すプログラム生成部2の各機能を構築する。
【0022】図1において、1はユーザが図2の入力装
置22を介して表示装置21の画面上に状態遷移オート
マトンで記述し情報処理装置23に入力されるシステム
記述、2はシステム記述1の記述内容に基づくコンピュ
ータ処理により所定のプログラムを生成するプログラム
生成部、3はプログラム生成部2で生成されたプログラ
ムである。
置22を介して表示装置21の画面上に状態遷移オート
マトンで記述し情報処理装置23に入力されるシステム
記述、2はシステム記述1の記述内容に基づくコンピュ
ータ処理により所定のプログラムを生成するプログラム
生成部、3はプログラム生成部2で生成されたプログラ
ムである。
【0023】システム記述1は、ユーザにより、システ
ムをお互いにイベントと呼ばれる信号をやり取りするモ
ジュール(モジュール定義1a)の集まりとして記述さ
れている。そして、各モジュール定義1aは、そのモジ
ュール定義1aが取り得る状態の集合、および、各状態
で実行するコマンドの記述からなる状態定義1bと、各
状態に対してイベントが送られた時の状態の遷移(状態
と状態の間のエッジ)を表す状態遷移定義1cで記述さ
れる。尚、これらの状態定義1bと状態遷移定義1cの
詳細は、図3,4で後述する。
ムをお互いにイベントと呼ばれる信号をやり取りするモ
ジュール(モジュール定義1a)の集まりとして記述さ
れている。そして、各モジュール定義1aは、そのモジ
ュール定義1aが取り得る状態の集合、および、各状態
で実行するコマンドの記述からなる状態定義1bと、各
状態に対してイベントが送られた時の状態の遷移(状態
と状態の間のエッジ)を表す状態遷移定義1cで記述さ
れる。尚、これらの状態定義1bと状態遷移定義1cの
詳細は、図3,4で後述する。
【0024】プログラム生成部2は、プログラム3の固
定部分としてイベント管理エンジンのコード3aとイベ
ントキュー格納領域3bを生成するイベント管理エンジ
ンおよびイベントキュー生成部2aと、システム記述1
の各モジュール定義1aに対応してそのモジュールの機
能をプログラム3において実現する関数のコード(モジ
ュール対応関数コード3cを生成するモジュール対応関
数コード生成部2bとを有している。生成されたプログ
ラム3では、各モジュールがイベントを送ると、それが
イベントキュー格納領域3bに入り、イベント管理エン
ジンのコード3aは、イベントキュー格納領域3bに入
っているイベントを引数にして、送信先のモジュールの
関数を順次呼出す。
定部分としてイベント管理エンジンのコード3aとイベ
ントキュー格納領域3bを生成するイベント管理エンジ
ンおよびイベントキュー生成部2aと、システム記述1
の各モジュール定義1aに対応してそのモジュールの機
能をプログラム3において実現する関数のコード(モジ
ュール対応関数コード3cを生成するモジュール対応関
数コード生成部2bとを有している。生成されたプログ
ラム3では、各モジュールがイベントを送ると、それが
イベントキュー格納領域3bに入り、イベント管理エン
ジンのコード3aは、イベントキュー格納領域3bに入
っているイベントを引数にして、送信先のモジュールの
関数を順次呼出す。
【0025】プログラム生成部2におけるモジュール対
応関数コード生成部2bは、プログラム3のモジュール
対応関数コード3cにおける状態・ロック状態格納領域
3dを生成する状態格納領域生成部2cと、ロック状態
中に他のモジュールからイベントが送られた時、そのモ
ジュールがロックされていることを表すイベントを送る
プログラム3におけるロック時イベント処理コード3e
を生成するロック時コード生成部2dと、システム記述
1における状態遷移定義1bに基づき、プログラム3に
おける状態遷移コード(送られてきたイベントの種類に
従って状態を遷移するコード)3fを生成する状態遷移
コード生成部2eと、システム記述1における状態定義
1cに基づき、プログラム3における動作コード3g
(各状態に遷移した時実行されるコード)を生成する動
作コード生成部2fからなる。
応関数コード生成部2bは、プログラム3のモジュール
対応関数コード3cにおける状態・ロック状態格納領域
3dを生成する状態格納領域生成部2cと、ロック状態
中に他のモジュールからイベントが送られた時、そのモ
ジュールがロックされていることを表すイベントを送る
プログラム3におけるロック時イベント処理コード3e
を生成するロック時コード生成部2dと、システム記述
1における状態遷移定義1bに基づき、プログラム3に
おける状態遷移コード(送られてきたイベントの種類に
従って状態を遷移するコード)3fを生成する状態遷移
コード生成部2eと、システム記述1における状態定義
1cに基づき、プログラム3における動作コード3g
(各状態に遷移した時実行されるコード)を生成する動
作コード生成部2fからなる。
【0026】さらに、動作コード生成部2fは、システ
ム記述1におけるロックの指定1dに基づき、プログラ
ム3におけるロックのコード3hを生成するロックコー
ド生成部2gを有している。このように、本例のプログ
ラム自動生成システムでは、システム記述1において、
状態の動作定義(状態定義1c)の中でロックの指定1
dがされていれば、動作コード3gの中に、ロックを掛
けるコード(ロックのコード3h)を生成する。
ム記述1におけるロックの指定1dに基づき、プログラ
ム3におけるロックのコード3hを生成するロックコー
ド生成部2gを有している。このように、本例のプログ
ラム自動生成システムでは、システム記述1において、
状態の動作定義(状態定義1c)の中でロックの指定1
dがされていれば、動作コード3gの中に、ロックを掛
けるコード(ロックのコード3h)を生成する。
【0027】以下、ユーザによるシステム記述1から生
成されるプログラム3の記述に用いられている言語(C
やPASCAL、Basic、Lispなどのプログラミング言語)を
ターゲット言語、また、ユーザがシステム記述1に用い
る言語をソース言語として、上述の構成からなるプログ
ラム自動生成システムの動作を説明する。
成されるプログラム3の記述に用いられている言語(C
やPASCAL、Basic、Lispなどのプログラミング言語)を
ターゲット言語、また、ユーザがシステム記述1に用い
る言語をソース言語として、上述の構成からなるプログ
ラム自動生成システムの動作を説明する。
【0028】本例のプログラム自動生成システムでは、
ソース言語でのシステム記述1に用いる状態定義1bと
状態遷移定義1cの内、状態定義1bの中で、 LockMeWithout(モジュール名1, ..., モジュール名n) という記述および UnlockMe というロックの指定1dの記述を許し、それをターゲッ
ト言語に変換してプログラム3を生成する。
ソース言語でのシステム記述1に用いる状態定義1bと
状態遷移定義1cの内、状態定義1bの中で、 LockMeWithout(モジュール名1, ..., モジュール名n) という記述および UnlockMe というロックの指定1dの記述を許し、それをターゲッ
ト言語に変換してプログラム3を生成する。
【0029】すなわち、プログラム3における固定部分
として、イベント管理エンジンのコード3aとイベント
キュー格納領域3bを生成し、また、各モジュール定義
1aに対して、そのモジュールの機能を実現する関数の
コード(モジュール対応関数3c)を生成し、各モジュ
ールがイベントを送るとそれをイベントキュー格納領域
3bに入れ、イベント管理エンジンのコード3aは、イ
ベントキュー格納領域3bに入っているイベントを引数
にして、送信先のモジュールの関数を順次呼出す。
として、イベント管理エンジンのコード3aとイベント
キュー格納領域3bを生成し、また、各モジュール定義
1aに対して、そのモジュールの機能を実現する関数の
コード(モジュール対応関数3c)を生成し、各モジュ
ールがイベントを送るとそれをイベントキュー格納領域
3bに入れ、イベント管理エンジンのコード3aは、イ
ベントキュー格納領域3bに入っているイベントを引数
にして、送信先のモジュールの関数を順次呼出す。
【0030】プログラム3において、各モジュールの機
能を実現する関数は、(1)状態、および、ロック状態
を格納する領域(状態・ロック状態格納領域3d)、
(2)ロック状態の時に他のモジュールからイベントが
送られた時、そのモジュールがロックされていることを
表すイベントを送るコード(ロック時イベント処理コー
ド3e)、(3)送られてきたイベントの種類に従っ
て、状態を遷移するコード(状態遷移コード3f)、
(4)各状態に遷移した時実行されるコード(動作コー
ド3g)からなる。
能を実現する関数は、(1)状態、および、ロック状態
を格納する領域(状態・ロック状態格納領域3d)、
(2)ロック状態の時に他のモジュールからイベントが
送られた時、そのモジュールがロックされていることを
表すイベントを送るコード(ロック時イベント処理コー
ド3e)、(3)送られてきたイベントの種類に従っ
て、状態を遷移するコード(状態遷移コード3f)、
(4)各状態に遷移した時実行されるコード(動作コー
ド3g)からなる。
【0031】そして、システム記述1における状態の動
作定義(状態定義1c)の中で、ロックを掛けたり外し
たりする指定(ロックの指定1d)がされていれば、ロ
ックコード生成部2gにより、動作コード3gの中に、
ロックを掛けたり外したりするコード(ロックのコード
3h)を生成する。
作定義(状態定義1c)の中で、ロックを掛けたり外し
たりする指定(ロックの指定1d)がされていれば、ロ
ックコード生成部2gにより、動作コード3gの中に、
ロックを掛けたり外したりするコード(ロックのコード
3h)を生成する。
【0032】これにより、本例のプログラム自動生成シ
ステムでは、ユーザが、従来のようにロック状態を状態
遷移定義1bで一つ一つ表現しなくても、状態の動作指
定(状態定義1c)の中で、例えば、 LockMeWithout(MODULE1, ..., MODULEn) と記述すれば、その関数のロック状態を表す変数をロッ
ク状態にし、モジュール名、 MODULE1, ..., MODULEn が「ロックの対象外となるモジュール名を記憶する変
数」を記録し、これにより、ロック時イベント処理コー
ド3eで、送り元にイベント「LOCKED」を送ることがで
きる。
ステムでは、ユーザが、従来のようにロック状態を状態
遷移定義1bで一つ一つ表現しなくても、状態の動作指
定(状態定義1c)の中で、例えば、 LockMeWithout(MODULE1, ..., MODULEn) と記述すれば、その関数のロック状態を表す変数をロッ
ク状態にし、モジュール名、 MODULE1, ..., MODULEn が「ロックの対象外となるモジュール名を記憶する変
数」を記録し、これにより、ロック時イベント処理コー
ド3eで、送り元にイベント「LOCKED」を送ることがで
きる。
【0033】また、ロック状態を、「非ロック状態」と
「ロック状態」、および、「短いロック状態(短時間ロ
ック状態)」の3種類にし、ソース言語における、状態
での動作指定を「LockMeWithout」の他に LockMeShortWithout(モジュール名1, ..., モジュール
名n) も記述可能にする。
「ロック状態」、および、「短いロック状態(短時間ロ
ック状態)」の3種類にし、ソース言語における、状態
での動作指定を「LockMeWithout」の他に LockMeShortWithout(モジュール名1, ..., モジュール
名n) も記述可能にする。
【0034】この記述に対しては、ロック状態を表す変
数を、短時間ロック状態にするコードを生成し、短時間
ロック状態であるモジュールに対応する関数に対して、
ロック除外されたモジュール以外からイベントが送られ
た時は、イベントキュー格納領域3bの管理機能により
そのことを判定し、送られる先のモジュールのロック状
態が解除されるまで、そのイベントをイベントキュー格
納領域3bに保持することにより、短時間ロック状態で
の待ち合わせの機能が実現できる。
数を、短時間ロック状態にするコードを生成し、短時間
ロック状態であるモジュールに対応する関数に対して、
ロック除外されたモジュール以外からイベントが送られ
た時は、イベントキュー格納領域3bの管理機能により
そのことを判定し、送られる先のモジュールのロック状
態が解除されるまで、そのイベントをイベントキュー格
納領域3bに保持することにより、短時間ロック状態で
の待ち合わせの機能が実現できる。
【0035】以下、図3〜図15を用いて、このような
プログラム自動生成システムを、さらに詳細に説明す
る。まず、ユーザが記述するシステム記述1の詳細につ
いて、図3〜図5を用いて説明する。
プログラム自動生成システムを、さらに詳細に説明す
る。まず、ユーザが記述するシステム記述1の詳細につ
いて、図3〜図5を用いて説明する。
【0036】図3は、図1における状態定義の詳細例を
示す説明図である。本例の状態定義1cでは、該当する
モジュールにどのような状態があるかを指定する状態名
31と、その内どの状態がシステムが起動された時の状
態かを指定する初期状態32、および、各状態に遷移し
た時に実行されるコマンドを定義する動作定義33が記
述される。
示す説明図である。本例の状態定義1cでは、該当する
モジュールにどのような状態があるかを指定する状態名
31と、その内どの状態がシステムが起動された時の状
態かを指定する初期状態32、および、各状態に遷移し
た時に実行されるコマンドを定義する動作定義33が記
述される。
【0037】本例の状態定義1cでは、動作定義33と
して、 send(モジュール名, イベント名, 引数1, ...) LockMeWithout(モジュール名1, モジュール名2, ...) UnlockMe の3つの動作の列が記述できる。
して、 send(モジュール名, イベント名, 引数1, ...) LockMeWithout(モジュール名1, モジュール名2, ...) UnlockMe の3つの動作の列が記述できる。
【0038】尚、「send(モジュール名, イベント名,
引数1, ...)」は、「モジュール名」で指定されるモジ
ュールに「イベント名」で指定されるイベントを、「引
数1」,「引数2」,...を引数として送る動作であ
る。また、「LockMeWithout(モジュール名1, モジュー
ル名2, ...)」は、この動作指定を行ったモジュール
を、「モジュール名1」,...で指定されるモジュール以
外からロックする動作であり、ここでロックするという
のは、送られて来た任意のイベントに対して、LOCKEDと
いうイベントを送り返すことである。また、「UnlockM
e」は、ロックの状態を解除する動作である。
引数1, ...)」は、「モジュール名」で指定されるモジ
ュールに「イベント名」で指定されるイベントを、「引
数1」,「引数2」,...を引数として送る動作であ
る。また、「LockMeWithout(モジュール名1, モジュー
ル名2, ...)」は、この動作指定を行ったモジュール
を、「モジュール名1」,...で指定されるモジュール以
外からロックする動作であり、ここでロックするという
のは、送られて来た任意のイベントに対して、LOCKEDと
いうイベントを送り返すことである。また、「UnlockM
e」は、ロックの状態を解除する動作である。
【0039】本図3の例で記述されているモジュールで
は、「IDOL」という状態が初期状態で、システムが起動
された時、その動作定義に記述されている「send(モジ
ュールA,初期化)」が実行される。そして、次の状態
「Printing」では、「LockMeWithout(プリンタ, U
L)」と、「writeMessage(プリントしています)」、お
よび、「send(プリンタ, Print,資料A)」が実行され
る。さらに、状態「Completed」では、「writeMessage
(プリントが終了しました)」、および、「unLockMe」が
実行され、状態「Incompleted」では、「writeMessage
(キャンセルされました)」、および、「unLockMe」が実
行される。
は、「IDOL」という状態が初期状態で、システムが起動
された時、その動作定義に記述されている「send(モジ
ュールA,初期化)」が実行される。そして、次の状態
「Printing」では、「LockMeWithout(プリンタ, U
L)」と、「writeMessage(プリントしています)」、お
よび、「send(プリンタ, Print,資料A)」が実行され
る。さらに、状態「Completed」では、「writeMessage
(プリントが終了しました)」、および、「unLockMe」が
実行され、状態「Incompleted」では、「writeMessage
(キャンセルされました)」、および、「unLockMe」が実
行される。
【0040】図4は、図1における状態遷移定義の詳細
例を示す説明図である。本例の状態遷移定義1bは、状
態名41、イベント名42、および、次の状態名43の
各フィールドからなり、各状態について、イベントが送
られてきた時、どの状態に遷移するかが記述されてい
る。尚、ここで、特殊なイベント「*immediate*」を設
けておいて、これ(「*immediate*」)は、イベントを
受けなくても直ぐ次の状態に遷移することを表すものと
する。例えば、本例の状態遷移定義1bでは、状態「Co
mpleted」からイベント名「*immediate*」で「IDOL」に
遷移しているが、これは、「Completed」に遷移し、そ
こでの動作を終えた後、直ぐに「IDOL」に遷移すること
を意味する。
例を示す説明図である。本例の状態遷移定義1bは、状
態名41、イベント名42、および、次の状態名43の
各フィールドからなり、各状態について、イベントが送
られてきた時、どの状態に遷移するかが記述されてい
る。尚、ここで、特殊なイベント「*immediate*」を設
けておいて、これ(「*immediate*」)は、イベントを
受けなくても直ぐ次の状態に遷移することを表すものと
する。例えば、本例の状態遷移定義1bでは、状態「Co
mpleted」からイベント名「*immediate*」で「IDOL」に
遷移しているが、これは、「Completed」に遷移し、そ
こでの動作を終えた後、直ぐに「IDOL」に遷移すること
を意味する。
【0041】図3と図4で示す2つの表、すなわち、図
3の状態定義1cと図4の状態遷移定義1bで表現され
るモジュールを図式言語で表現したものを図5に示す。
図5は、図3および図4における状態定義と状態遷移定
義で表現されるモジュールを図式で表現する図式言語例
を示す説明図である。本例のモジュール定義1aの記述
においては、各「状態」は丸の中に状態名を記述して表
現され、特に、初期状態は2重丸で記述している。
3の状態定義1cと図4の状態遷移定義1bで表現され
るモジュールを図式言語で表現したものを図5に示す。
図5は、図3および図4における状態定義と状態遷移定
義で表現されるモジュールを図式で表現する図式言語例
を示す説明図である。本例のモジュール定義1aの記述
においては、各「状態」は丸の中に状態名を記述して表
現され、特に、初期状態は2重丸で記述している。
【0042】また、「状態遷移」は、「状態」から「状
態」へのエッジにイベント名を記述して表現する。そし
て、各状態の「動作定義」は、「状態」に四角を対応付
けて表現している。すなわち、本例では、モジュール定
義1aは、最初に「IDOL」の状態で停止している。そし
て、初期状態「IDOL」51から状態「Printing」52に
エッジ「資料印刷」が出ているので、初期状態「IDOL」
51の時に、他のモジュールからイベント「資料印刷」
が送られてくると、モジュール定義1aは、状態「Prin
ting」52に遷移する。
態」へのエッジにイベント名を記述して表現する。そし
て、各状態の「動作定義」は、「状態」に四角を対応付
けて表現している。すなわち、本例では、モジュール定
義1aは、最初に「IDOL」の状態で停止している。そし
て、初期状態「IDOL」51から状態「Printing」52に
エッジ「資料印刷」が出ているので、初期状態「IDOL」
51の時に、他のモジュールからイベント「資料印刷」
が送られてくると、モジュール定義1aは、状態「Prin
ting」52に遷移する。
【0043】そして、状態「Printing」52では、自分
自身をプリンタとUI以外からロックし、「プリンタ」
にイベント「資料Aをプリント」というメッセージを送
り、再度停止している。すなわち、動作定義53に従っ
て、「LockMeWithout(プリンタ, UL)」と、「send(プ
リンタ, Print, 資料A)」、および、図示していない
が、「LockMeWithout(プリンタ, UI)」で指定されて
いるプリンタとUI以外のイベントに対する「writeMes
sage(プリントしています)」を実行する。
自身をプリンタとUI以外からロックし、「プリンタ」
にイベント「資料Aをプリント」というメッセージを送
り、再度停止している。すなわち、動作定義53に従っ
て、「LockMeWithout(プリンタ, UL)」と、「send(プ
リンタ, Print, 資料A)」、および、図示していない
が、「LockMeWithout(プリンタ, UI)」で指定されて
いるプリンタとUI以外のイベントに対する「writeMes
sage(プリントしています)」を実行する。
【0044】同様にして、モジュール定義1aが状態
「Printing」52の時に、エッジ「印刷終了」が送られ
てくると、状態「Completed」54に遷移し、この状態
「Completed」54では、動作定義55に従って、「Unl
ockMe」を実行する。また、「プリンタ」から「印刷終
了」というイベントが送られれば、状態「Completed」
54に遷移し、「Unlocked」との動作定義55により、
そこでロックを解除する。また、状態「Printing」52
の時に、「キャンセル」というイベントが来れば、状態
「Incompleted」56に遷移する。
「Printing」52の時に、エッジ「印刷終了」が送られ
てくると、状態「Completed」54に遷移し、この状態
「Completed」54では、動作定義55に従って、「Unl
ockMe」を実行する。また、「プリンタ」から「印刷終
了」というイベントが送られれば、状態「Completed」
54に遷移し、「Unlocked」との動作定義55により、
そこでロックを解除する。また、状態「Printing」52
の時に、「キャンセル」というイベントが来れば、状態
「Incompleted」56に遷移する。
【0045】このように、本例では、排他制御を行なう
場合には、所望のモジュールに、「LockMeWithout(モジ
ュール名1, モジュール名2, ...)」との動作指定を行
なうことにより、「モジュール名1」,...で指定される
モジュール以外から送られて来た各イベントに対して、
LOCKEDというイベントを送り返すことができるので、例
えば、遠隔サービス窓口システムのように、種々のデバ
イスの制御や複数の通信相手との同期を行うための複雑
な排他制御(ロック制御)が必要なシステムのプログラ
ムを簡素なシステム記述で生成することができる。
場合には、所望のモジュールに、「LockMeWithout(モジ
ュール名1, モジュール名2, ...)」との動作指定を行
なうことにより、「モジュール名1」,...で指定される
モジュール以外から送られて来た各イベントに対して、
LOCKEDというイベントを送り返すことができるので、例
えば、遠隔サービス窓口システムのように、種々のデバ
イスの制御や複数の通信相手との同期を行うための複雑
な排他制御(ロック制御)が必要なシステムのプログラ
ムを簡素なシステム記述で生成することができる。
【0046】次に、図1において、ソース言語によるシ
ステム記述1で記述されたシステムと等価な動作を行う
ターゲット言語のプログラム3について説明する。ター
ゲット言語のプログラム3は、ソース言語の内容によら
ず共通に存在するイベントキュー格納領域3bとイベン
ト管理エンジンのコード3a、および、各モジュール毎
に存在する、その機能を実現する関数であるモジュール
対応関数コード3cの集まりで構成される。
ステム記述1で記述されたシステムと等価な動作を行う
ターゲット言語のプログラム3について説明する。ター
ゲット言語のプログラム3は、ソース言語の内容によら
ず共通に存在するイベントキュー格納領域3bとイベン
ト管理エンジンのコード3a、および、各モジュール毎
に存在する、その機能を実現する関数であるモジュール
対応関数コード3cの集まりで構成される。
【0047】モジュール対応関数コード3cは、「モジ
ュールの状態」と「ロックの状態」および「ロックが除
外される対象のモジュール名のリスト」を格納する状態
・ロック状態格納領域3dと、イベントとそのイベント
がどのモジュールから来たか、および、イベントの引数
の3つをパラメータとして取り、そのイベントがそのモ
ジュールに送られた時の動作を実行する関数であり、ロ
ックされた状態でのイベント処理を行うロック時イベン
ト処理コード3eと、状態遷移を実行する状態遷移コー
ド3f、および、各状態に対応する動作を実行する動作
コード3gから構成される。
ュールの状態」と「ロックの状態」および「ロックが除
外される対象のモジュール名のリスト」を格納する状態
・ロック状態格納領域3dと、イベントとそのイベント
がどのモジュールから来たか、および、イベントの引数
の3つをパラメータとして取り、そのイベントがそのモ
ジュールに送られた時の動作を実行する関数であり、ロ
ックされた状態でのイベント処理を行うロック時イベン
ト処理コード3eと、状態遷移を実行する状態遷移コー
ド3f、および、各状態に対応する動作を実行する動作
コード3gから構成される。
【0048】ロック時イベント処理コード3eは、ロッ
ク除外対象モジュール以外のモジュールから送られたイ
ベントに対して「LOCKED」というイベントを返送する処
理である。状態遷移コード3fは、モジュール毎の状態
・ロック状態格納領域3dに格納されているモジュール
の状態とイベントから次の状態を求め、次の状態に遷移
するコードである。実際のモジュールの状態・ロック状
態格納領域3dの書き換えや、状態に遷移した時の動作
は、各状態での動作に対応するコードである動作コード
3gで行われる。
ク除外対象モジュール以外のモジュールから送られたイ
ベントに対して「LOCKED」というイベントを返送する処
理である。状態遷移コード3fは、モジュール毎の状態
・ロック状態格納領域3dに格納されているモジュール
の状態とイベントから次の状態を求め、次の状態に遷移
するコードである。実際のモジュールの状態・ロック状
態格納領域3dの書き換えや、状態に遷移した時の動作
は、各状態での動作に対応するコードである動作コード
3gで行われる。
【0049】次に、このようなターゲット言語で記述さ
れたプログラム3の動作を簡単に説明する。イベント管
理エンジンのコード3aは、イベントキュー格納領域3
bに何かイベントがあれば、それを取り出して、どのモ
ジュールからどのモジュールへ向けたイベントかを調
べ、宛先のモジュールに対応する関数のコードである、
モジュール対応関数コード3cを呼出す。
れたプログラム3の動作を簡単に説明する。イベント管
理エンジンのコード3aは、イベントキュー格納領域3
bに何かイベントがあれば、それを取り出して、どのモ
ジュールからどのモジュールへ向けたイベントかを調
べ、宛先のモジュールに対応する関数のコードである、
モジュール対応関数コード3cを呼出す。
【0050】このモジュール対応関数コード3cでは、
ロックされていれば、ロック時イベント処理コード3e
で、送り元に「LOCK」というイベントを返す。そうでな
ければ、状態遷移コード3fで状態遷移を行い、動作コ
ード3g内で、遷移した先の状態の動作を行う。
ロックされていれば、ロック時イベント処理コード3e
で、送り元に「LOCK」というイベントを返す。そうでな
ければ、状態遷移コード3fで状態遷移を行い、動作コ
ード3g内で、遷移した先の状態の動作を行う。
【0051】この動作コード3g中で別のモジュールへ
のイベント送信が記述してあれば、動作コード3gでイ
ベントをイベントキュー格納領域3bに追加し、また、
イベント管理エンジンのコード3aが、イベントキュー
格納領域3bからイベントを取り出して、モジュール対
応関数コード3cを呼び出す。
のイベント送信が記述してあれば、動作コード3gでイ
ベントをイベントキュー格納領域3bに追加し、また、
イベント管理エンジンのコード3aが、イベントキュー
格納領域3bからイベントを取り出して、モジュール対
応関数コード3cを呼び出す。
【0052】また、遷移した先の状態の動作に、ロック
を掛けたり外したりする記述があれば、ロックのコード
3hで、関数の状態をロックしたり、外したりする。こ
の動作を繰り返すことにより、ソース言語によるシステ
ム記述1に記述してあるシステムの振る舞いを実現する
ことができる。
を掛けたり外したりする記述があれば、ロックのコード
3hで、関数の状態をロックしたり、外したりする。こ
の動作を繰り返すことにより、ソース言語によるシステ
ム記述1に記述してあるシステムの振る舞いを実現する
ことができる。
【0053】次に、ソース言語によるシステム記述1か
らターゲット言語で記述されたプログラム3を生成する
プログラム生成部2の動作を説明する。まず、イベント
管理エンジンおよびイベントキュー生成部2aで、どん
なモジュール記述にも共通な、イベント管理エンジンの
コード3aとイベントキュー格納領域3bを生成する。
らターゲット言語で記述されたプログラム3を生成する
プログラム生成部2の動作を説明する。まず、イベント
管理エンジンおよびイベントキュー生成部2aで、どん
なモジュール記述にも共通な、イベント管理エンジンの
コード3aとイベントキュー格納領域3bを生成する。
【0054】そして、モジュール対応関数コード生成部
2bにおいて、各モジュール毎に、状態格納領域生成部
2c以下の各処理を繰り返し、モジュール対応関数コー
ド3c、および、モジュールの状態格納領域やロック状
態格納領域およびロック除外対象モジュール格納領域か
らなる状態・ロック状態格納領域3dを生成する。
2bにおいて、各モジュール毎に、状態格納領域生成部
2c以下の各処理を繰り返し、モジュール対応関数コー
ド3c、および、モジュールの状態格納領域やロック状
態格納領域およびロック除外対象モジュール格納領域か
らなる状態・ロック状態格納領域3dを生成する。
【0055】すなわち、まず、状態格納領域生成部2c
で、各関数に対してモジュールの状態を格納する領域を
生成する。次に、ロック時コード生成部2dで、各関数
に対してロック状態を格納する領域およびどのモジュー
ルに対してロックを除外するかを格納する領域を生成
し、関数の先頭に、ロック状態の処理部分であるロック
時イベント処理コード3eを埋め込む。
で、各関数に対してモジュールの状態を格納する領域を
生成する。次に、ロック時コード生成部2dで、各関数
に対してロック状態を格納する領域およびどのモジュー
ルに対してロックを除外するかを格納する領域を生成
し、関数の先頭に、ロック状態の処理部分であるロック
時イベント処理コード3eを埋め込む。
【0056】さらに、状態遷移コード生成部2eで、ソ
ース言語でのイベントと状態から次の状態へ遷移するた
めの状態遷移コード3fを生成する。そして、最後に、
動作コード生成部2fにより、各状態での動作に対応す
る動作コード3gを生成して、各モジュールに対応する
モジュール対応関数コード3cを完成させる。
ース言語でのイベントと状態から次の状態へ遷移するた
めの状態遷移コード3fを生成する。そして、最後に、
動作コード生成部2fにより、各状態での動作に対応す
る動作コード3gを生成して、各モジュールに対応する
モジュール対応関数コード3cを完成させる。
【0057】以上でソース言語、ターゲット言語および
プログラム生成方法の概要を述べた。以下、各々につい
てさらに詳細に説明していく。まず、図6を用いて、タ
ーゲット言語で記述されたプログラムの構造の詳細な説
明を行う。
プログラム生成方法の概要を述べた。以下、各々につい
てさらに詳細に説明していく。まず、図6を用いて、タ
ーゲット言語で記述されたプログラムの構造の詳細な説
明を行う。
【0058】図6は、図1におけるプログラム自動生成
システムで生成されたプログラムの全体構成例を示す説
明図である。プログラム3のイベントキュー格納領域3
bは、4つのフィールド「送り先モジュール」、「イベ
ント」、「送り元モジュール」、「引数」からなるテー
ブルであり、FIFO(First-In-First-Out)形式で出し入
れされる。すなわち、最初に入れられたデータが最初に
取り出される。
システムで生成されたプログラムの全体構成例を示す説
明図である。プログラム3のイベントキュー格納領域3
bは、4つのフィールド「送り先モジュール」、「イベ
ント」、「送り元モジュール」、「引数」からなるテー
ブルであり、FIFO(First-In-First-Out)形式で出し入
れされる。すなわち、最初に入れられたデータが最初に
取り出される。
【0059】モジュール対応関数コード3cは、「MODU
LE(event, fromWhom, args)」のように、3つのパラメ
ータの関数として実現する。ここで、パラメータ「even
t」はイベント、パラメータ「fromWhom」は、そのイベ
ントを送ったモジュール、パラメータ「args:」は、そ
のイベント送信の時の引数を配列にして一つのデータに
まとめたもの意味である。
LE(event, fromWhom, args)」のように、3つのパラメ
ータの関数として実現する。ここで、パラメータ「even
t」はイベント、パラメータ「fromWhom」は、そのイベ
ントを送ったモジュール、パラメータ「args:」は、そ
のイベント送信の時の引数を配列にして一つのデータに
まとめたもの意味である。
【0060】イベント管理エンジンのコード3aは、図
6内に記述されているPAD図のように動作する。すなわ
ち、まず、ステップ600の処理で、全てのモジュール
の関数を初期化する。この実施例では、初期化の方法と
しては、各関数に特殊なイベント名「_init_」を送り、
呼出すものとする。後で述べるように、各モジュールの
関数はイベント「_init_」が送られると、初期化処理、
すなわち初期状態へ遷移する動作を行うように生成され
る。
6内に記述されているPAD図のように動作する。すなわ
ち、まず、ステップ600の処理で、全てのモジュール
の関数を初期化する。この実施例では、初期化の方法と
しては、各関数に特殊なイベント名「_init_」を送り、
呼出すものとする。後で述べるように、各モジュールの
関数はイベント「_init_」が送られると、初期化処理、
すなわち初期状態へ遷移する動作を行うように生成され
る。
【0061】次に、ステップ602の処理で、キューに
何かイベントがあるか調べ、もしあれば、ステップ60
3の処理でそれを取り出し、 toWhom : 送り先のモジュール event : イベント名 fromWhom : 送り元のモジュール args : 引数 を設定する。
何かイベントがあるか調べ、もしあれば、ステップ60
3の処理でそれを取り出し、 toWhom : 送り先のモジュール event : イベント名 fromWhom : 送り元のモジュール args : 引数 を設定する。
【0062】次に、ステップ604の処理で、モジュー
ル「toWhom」に対応する関数を求め、「event」と「fro
mWhom」および「args」を引数として、その関数を呼出
す。呼出された関数コード3cは、内部で状態遷移およ
び状態へ遷移した時の動作を行い、その過程として send(MODULEi, EVENTA, args) などのイベント発信の動作を行うので、再度、イベント
キューにイベントが追加され、イベント管理エンジンの
コード3aは、再度そのイベントを取り出し、モジュー
ルに対応する関数を呼出す。
ル「toWhom」に対応する関数を求め、「event」と「fro
mWhom」および「args」を引数として、その関数を呼出
す。呼出された関数コード3cは、内部で状態遷移およ
び状態へ遷移した時の動作を行い、その過程として send(MODULEi, EVENTA, args) などのイベント発信の動作を行うので、再度、イベント
キューにイベントが追加され、イベント管理エンジンの
コード3aは、再度そのイベントを取り出し、モジュー
ルに対応する関数を呼出す。
【0063】このようにして生成されたモジュール対応
関数コード3cの構造の詳細を、次の図7を用いて説明
する。図7は、図1におけるモジュール対応関数の詳細
構成例を示す説明図である。生成されたモジュール対応
関数コード3cは、ヘッダ部分71のように、「MainMo
dule(event, fromWhom, args)」の形をしている。すな
わち、イベントの種別(event)と、どのモジュールか
ら送られたものか(fromWhom)、および、その時の引数
を配列にして一つにまとめたもの(args)の3つの情報
を受け取る関数として実現される。
関数コード3cの構造の詳細を、次の図7を用いて説明
する。図7は、図1におけるモジュール対応関数の詳細
構成例を示す説明図である。生成されたモジュール対応
関数コード3cは、ヘッダ部分71のように、「MainMo
dule(event, fromWhom, args)」の形をしている。すな
わち、イベントの種別(event)と、どのモジュールか
ら送られたものか(fromWhom)、および、その時の引数
を配列にして一つにまとめたもの(args)の3つの情報
を受け取る関数として実現される。
【0064】そして、状態やロック状態、ロック除外対
象モジュール格納領域の宣言と、初期化処理部分からな
る状態・ロック状態格納領域3dを有する。この部分の
詳細を図9に示す。図9は、図1における状態・ロック
状態格納領域の詳細構成例を示す説明図である。本例で
は、ターゲットの言語は、明示的に代入を行うまでは恒
久的に値を保存できる変数を関数に対して定義できる機
能を持っているものとする。
象モジュール格納領域の宣言と、初期化処理部分からな
る状態・ロック状態格納領域3dを有する。この部分の
詳細を図9に示す。図9は、図1における状態・ロック
状態格納領域の詳細構成例を示す説明図である。本例で
は、ターゲットの言語は、明示的に代入を行うまでは恒
久的に値を保存できる変数を関数に対して定義できる機
能を持っているものとする。
【0065】そして、ここでは、その機能を使って宣言
部91において、モジュールの状態格納領域を「userSt
atus」、ロック状態格納領域を「lockStatus」、ロック
除外対象モジュール格納領域を「moduleList」として実
現している。また、ここでは、状態の初期化コードとし
て、 という記述が置かれている。図1におけるイベント管理
エンジンのコード3aは、システムが立ち上がると同時
に各モジュールの関数にイベント「_init_」を送ること
により、初期状態に遷移させる。
部91において、モジュールの状態格納領域を「userSt
atus」、ロック状態格納領域を「lockStatus」、ロック
除外対象モジュール格納領域を「moduleList」として実
現している。また、ここでは、状態の初期化コードとし
て、 という記述が置かれている。図1におけるイベント管理
エンジンのコード3aは、システムが立ち上がると同時
に各モジュールの関数にイベント「_init_」を送ること
により、初期状態に遷移させる。
【0066】図7において、次にロック時イベント処理
コード3eとして、ロック状態の時にロック除外の対象
になっていないモジュールからイベント送信があった場
合に「toWhom」にイベント「LOCKED」を返す処理が埋め
込まれる。このコードのアルゴリズムを図8に示す。
コード3eとして、ロック状態の時にロック除外の対象
になっていないモジュールからイベント送信があった場
合に「toWhom」にイベント「LOCKED」を返す処理が埋め
込まれる。このコードのアルゴリズムを図8に示す。
【0067】図8は、図1におけるロック時イベント処
理の手順例を示すPAD図である。図7の状態・ロック
状態格納領域3dにおける変数「lockStatus」が「Lock
ed」であり(ステップ801)、変数「fromWhom」が変
数「moduleList」に入っていなければ(ステップ80
2)、イベントの送り主(fromWhom)にロック状態(Lo
cked)を返す(ステップ803)。
理の手順例を示すPAD図である。図7の状態・ロック
状態格納領域3dにおける変数「lockStatus」が「Lock
ed」であり(ステップ801)、変数「fromWhom」が変
数「moduleList」に入っていなければ(ステップ80
2)、イベントの送り主(fromWhom)にロック状態(Lo
cked)を返す(ステップ803)。
【0068】図7のモジュール対応関数コード3cにお
いては、次に、状態遷移コード3fで、現在の状態「us
erStatus」とイベント「event」の組みで場合分けし、
次のイベントへ遷移するコードへジャンプするコードが
埋め込まれる。そして、各状態に遷移するためのコード
が、それぞれラベル72,73が付けられて埋め込ま
れ、状態遷移コード3fの処理からジャンプできるよう
になっている。
いては、次に、状態遷移コード3fで、現在の状態「us
erStatus」とイベント「event」の組みで場合分けし、
次のイベントへ遷移するコードへジャンプするコードが
埋め込まれる。そして、各状態に遷移するためのコード
が、それぞれラベル72,73が付けられて埋め込ま
れ、状態遷移コード3fの処理からジャンプできるよう
になっている。
【0069】ラベル72において示されるように、各状
態への遷移は、まず、フィールド74で、変数「userSt
atus」を、その状態を表す値にし、次に、状態遷移した
時の動作をターゲット言語に生成したもの(動作コード
3g)が埋め込まれる。ここで、 send(MODULE, event, arg1, ...) に対しては、イベントキューにこのイベント送信を追加
するランタイムルーティンの呼出し処理75が埋め込ま
れる。
態への遷移は、まず、フィールド74で、変数「userSt
atus」を、その状態を表す値にし、次に、状態遷移した
時の動作をターゲット言語に生成したもの(動作コード
3g)が埋め込まれる。ここで、 send(MODULE, event, arg1, ...) に対しては、イベントキューにこのイベント送信を追加
するランタイムルーティンの呼出し処理75が埋め込ま
れる。
【0070】また、 LockMeWithout(MODULE1, ..., MODULEn) に対しては、 lockStatus = LOCKED; moduleList にMODULE1, ..., MODULEn を設定 を行い、ロックされた状態と除外するモジュールのリス
トを記録する処理76が埋め込まれる。
トを記録する処理76が埋め込まれる。
【0071】また、 Unlock に対しては、 lockStatus = UNLOCK でロック状態を解除する処理77が埋め込まれる。ま
た、その他の動作については、ターゲット言語の対応す
るランタイムルーティンの呼出しが埋め込まれる。
た、その他の動作については、ターゲット言語の対応す
るランタイムルーティンの呼出しが埋め込まれる。
【0072】このように、動作コード3gにおいて、状
態に遷移した時の動作に書かれているもの全てがこのよ
うに変換され埋め込まれた後、 return の命令78が置かれ、この関数を終了する。
態に遷移した時の動作に書かれているもの全てがこのよ
うに変換され埋め込まれた後、 return の命令78が置かれ、この関数を終了する。
【0073】ただし、この状態からイベント *immediate* で別の状態へエッジが定義されていれば、これは、新た
なイベントを待たずにすぐその状態に遷移することを意
味するので、「return」の代わりに、goto 次の状態の
ラベル名;を埋め込み、即座にその状態に遷移するコー
ドを生成する。
なイベントを待たずにすぐその状態に遷移することを意
味するので、「return」の代わりに、goto 次の状態の
ラベル名;を埋め込み、即座にその状態に遷移するコー
ドを生成する。
【0074】以下、図1における状態遷移定義1bから
状態遷移コード3fを生成する方法、および、状態定義
1cから各動作コード3gを生成する方法を詳細に述べ
る。まず、図10を使って、状態遷移に対応するコード
(状態遷移コード3f)の生成処理を詳細に説明する。
尚、ここでは、ターゲット言語をプログラミング言語C
とした場合で説明する。
状態遷移コード3fを生成する方法、および、状態定義
1cから各動作コード3gを生成する方法を詳細に述べ
る。まず、図10を使って、状態遷移に対応するコード
(状態遷移コード3f)の生成処理を詳細に説明する。
尚、ここでは、ターゲット言語をプログラミング言語C
とした場合で説明する。
【0075】図10は、図1における状態遷移コード生
成部の処理手順例を示すPAD図である。まず、ステッ
プ1001の処理で、「Slist」に、そのモジュールの
全ての状態の集合を入れ、次に、ステップ1002の処
理で、「switch(userStatus) {」というコードの生成を
行ない、場合分けの開始を宣言する。
成部の処理手順例を示すPAD図である。まず、ステッ
プ1001の処理で、「Slist」に、そのモジュールの
全ての状態の集合を入れ、次に、ステップ1002の処
理で、「switch(userStatus) {」というコードの生成を
行ない、場合分けの開始を宣言する。
【0076】そして、次のステップ1003の処理で、
「Slist」の中の全ての状態「S」に対して、ステップ1
004以下の一連の処理を繰り返し、それぞれの状態に
対して、各イベントが来たとき次の状態に遷移するため
のジャンプ命令を生成する。まず、ステップ1004の
処理で、「case Sの名前:」 というコードを生成し、状
態「S」の時の動作指定開始を宣言する。次に、「even
t」で場合分けするためにステップ1005の処理で、
「switch(event) {」 というコードを生成する。
「Slist」の中の全ての状態「S」に対して、ステップ1
004以下の一連の処理を繰り返し、それぞれの状態に
対して、各イベントが来たとき次の状態に遷移するため
のジャンプ命令を生成する。まず、ステップ1004の
処理で、「case Sの名前:」 というコードを生成し、状
態「S」の時の動作指定開始を宣言する。次に、「even
t」で場合分けするためにステップ1005の処理で、
「switch(event) {」 というコードを生成する。
【0077】さらに、次のステップ1006の処理で、
「Elist」に、状態「S」に定義されている全てのイベン
トの集合を入れ、ステップ1007の処理で、「Elis
t」の全てのイベント「E」に対して、ステップ1008
以下の一連の処理を繰り返し、それぞれジャンプ文を生
成する。尚、ここで、イベント「*immediate*」は、即
時の遷移と解釈しているので、イベントの集合を格納す
る変数「Elist」には加えない。
「Elist」に、状態「S」に定義されている全てのイベン
トの集合を入れ、ステップ1007の処理で、「Elis
t」の全てのイベント「E」に対して、ステップ1008
以下の一連の処理を繰り返し、それぞれジャンプ文を生
成する。尚、ここで、イベント「*immediate*」は、即
時の遷移と解釈しているので、イベントの集合を格納す
る変数「Elist」には加えない。
【0078】ステップ1008の処理では、「case Eの
名前:」 というコードを生成し、次に、ステップ100
9の処理で、「Next」を状態「S」から、「E」で遷移す
る先の状態のラベルとし、ステップ1010の処理で、
「goto Nextの名前;」というコードの生成を行なう。そ
して、最後に、2つの場合分けを終了するために、ステ
ップ1011の処理で、「}」を生成し、ステップ10
12の処理で、「}」を生成する。このようにして生成
された結果のコードを図11に示す。
名前:」 というコードを生成し、次に、ステップ100
9の処理で、「Next」を状態「S」から、「E」で遷移す
る先の状態のラベルとし、ステップ1010の処理で、
「goto Nextの名前;」というコードの生成を行なう。そ
して、最後に、2つの場合分けを終了するために、ステ
ップ1011の処理で、「}」を生成し、ステップ10
12の処理で、「}」を生成する。このようにして生成
された結果のコードを図11に示す。
【0079】図11は、図1における状態遷移コードの
生成例を示す説明図である。「switch」および「case」
等により、各状態「IDOL」,「PRINTING」の動作分けが
実行されるコードが生成されている。尚、状態「Comple
ted」や状態「Incompleted」からは「*Immediate*」の
遷移しか無いので、この状態遷移コードの中には、場合
分けとして現れていない。
生成例を示す説明図である。「switch」および「case」
等により、各状態「IDOL」,「PRINTING」の動作分けが
実行されるコードが生成されている。尚、状態「Comple
ted」や状態「Incompleted」からは「*Immediate*」の
遷移しか無いので、この状態遷移コードの中には、場合
分けとして現れていない。
【0080】次に、図12を用いて、図1の動作コード
生成部2fによる各状態での動作コードの生成動作を説
明する。図12は、図1におけるプログラム自動生成シ
ステムの本発明に係わる第1の処理動作例を示すPAD
図である。本例は、図1における各状態での動作コード
生成部の処理手順例を示すものであり、まず、ステップ
1201の処理で、「Slist」にそのモジュールの全て
の状態の集合を設定する。
生成部2fによる各状態での動作コードの生成動作を説
明する。図12は、図1におけるプログラム自動生成シ
ステムの本発明に係わる第1の処理動作例を示すPAD
図である。本例は、図1における各状態での動作コード
生成部の処理手順例を示すものであり、まず、ステップ
1201の処理で、「Slist」にそのモジュールの全て
の状態の集合を設定する。
【0081】次に、ステップ1202の処理で、「Slis
t」の全ての状態「S」に対して、ステップ1203以下
の一連の処理を繰り返し、状態に遷移したときの動作を
実現するコードを生成する。まず、ステップ1203の
処理で、状態「S」の名前のラベルを作る。次に、ステ
ップ1204の処理で、「userStatus = S」というコー
ドを生成し、モジュールの状態を表す変数に、遷移した
先の状態を記憶する。
t」の全ての状態「S」に対して、ステップ1203以下
の一連の処理を繰り返し、状態に遷移したときの動作を
実現するコードを生成する。まず、ステップ1203の
処理で、状態「S」の名前のラベルを作る。次に、ステ
ップ1204の処理で、「userStatus = S」というコー
ドを生成し、モジュールの状態を表す変数に、遷移した
先の状態を記憶する。
【0082】そして、ステップ1205の処理で、「Ac
ts」に、状態「S」で定義されている動作の列を入れ、
ステップ1206の処理で、「Acts」の中の動作「A」
に対して、ステップ1207の処理で場合分けを行な
い、それぞれ適切なコードを生成する。
ts」に、状態「S」で定義されている動作の列を入れ、
ステップ1206の処理で、「Acts」の中の動作「A」
に対して、ステップ1207の処理で場合分けを行な
い、それぞれ適切なコードを生成する。
【0083】このステップ1207の場合分け処理で、
動作「A」が「send(M1, E1, ARG1,...)」の形の時に
は、まず、ステップ1208の処理で、このモジュール
の名前を「M2」とし、次に、ステップ1209の処理
で、「ARGS1, ..., ARGSn」を構造体「args」に入れる
コードを生成し、最後に、ステップ1210の処理で、
「send(M1, E1, M2, args)」というコードを生成する。
動作「A」が「send(M1, E1, ARG1,...)」の形の時に
は、まず、ステップ1208の処理で、このモジュール
の名前を「M2」とし、次に、ステップ1209の処理
で、「ARGS1, ..., ARGSn」を構造体「args」に入れる
コードを生成し、最後に、ステップ1210の処理で、
「send(M1, E1, M2, args)」というコードを生成する。
【0084】また、ステップ1207の場合分け処理
で、動作「A」が「LockMeWithout(M1,...)」の形の時に
は、次のような一連の処理を行なう。まず、ステップ1
211の処理で、「lockStatus = LOCKED」というコー
ドを生成し、次に、ステップ1212の処理で、「M1,
..., Mn」を「moduleList」に入れるコードを生成す
る。これにより、ロック状態の設定と、ロック対象から
除外したモジュールの設定ができる。
で、動作「A」が「LockMeWithout(M1,...)」の形の時に
は、次のような一連の処理を行なう。まず、ステップ1
211の処理で、「lockStatus = LOCKED」というコー
ドを生成し、次に、ステップ1212の処理で、「M1,
..., Mn」を「moduleList」に入れるコードを生成す
る。これにより、ロック状態の設定と、ロック対象から
除外したモジュールの設定ができる。
【0085】さらに、ステップ1207の場合分け処理
で、動作「A」が「UnlockMe」の形の時には、ステップ
1213の処理で、「lockStatus = UNLOCKED」という
コードを生成し、ロックを外す。
で、動作「A」が「UnlockMe」の形の時には、ステップ
1213の処理で、「lockStatus = UNLOCKED」という
コードを生成し、ロックを外す。
【0086】以上の例では、説明を簡単にするために、
状態での動作指定を「send」,「LockMeWithout」,「Unl
ock」の3つに限った。ここでの動作指定種類を増やし
たい場合は、ステップ1207の場合分け処理に、その
動作指定の場合を追加し、コードの生成方法を組み込め
ば良い。例えば、ターゲット言語で提供される関数を呼
出す動作 call 関数名(引数1, ..., 引数n) を追加しておくと、ターゲット言語で提供されている機
能を利用することができ、便利である。
状態での動作指定を「send」,「LockMeWithout」,「Unl
ock」の3つに限った。ここでの動作指定種類を増やし
たい場合は、ステップ1207の場合分け処理に、その
動作指定の場合を追加し、コードの生成方法を組み込め
ば良い。例えば、ターゲット言語で提供される関数を呼
出す動作 call 関数名(引数1, ..., 引数n) を追加しておくと、ターゲット言語で提供されている機
能を利用することができ、便利である。
【0087】また、これを追加したい場合は、場合分け
として、この形の識別を、ステップ1207の場合分け
処理に追加し、生成するコードとしては、ターゲット言
語のこの関数を呼出すコードを生成すれば良い。このよ
うにして、図3,4および図5の状態定義から、図13
に示す動作コードが生成される。図13は、図1におけ
る動作コードの具体例を示す説明図である。「IDOL」、
「Printing」、「Completed」、「Incompleted」の各状
態別に、それぞれの動作を行うコード(動作コード3
g)が生成されている。
として、この形の識別を、ステップ1207の場合分け
処理に追加し、生成するコードとしては、ターゲット言
語のこの関数を呼出すコードを生成すれば良い。このよ
うにして、図3,4および図5の状態定義から、図13
に示す動作コードが生成される。図13は、図1におけ
る動作コードの具体例を示す説明図である。「IDOL」、
「Printing」、「Completed」、「Incompleted」の各状
態別に、それぞれの動作を行うコード(動作コード3
g)が生成されている。
【0088】次に、図14を用いて、ロック状態を3値 UNLOCKED .......ロックが掛かっていない。どんなモ
ジュールからのイベントにも応答する。 LOCKED ...........ロックが掛かっており、限定された
モジュールからのイベントのみに応答する。それ以外の
モジュールにはLOCKEDを返す。 LOCKEDSHORT ......短い時間のロックが掛かっている。
限定されたモジュールにはすぐ答える。それ以外のモジ
ュールからのイベントはロックが解除するまで待たされ
る。 に拡張したときの、図1のイベントキュー格納領域3b
におけるイベントキュー管理のアルゴリズムを説明す
る。
ジュールからのイベントにも応答する。 LOCKED ...........ロックが掛かっており、限定された
モジュールからのイベントのみに応答する。それ以外の
モジュールにはLOCKEDを返す。 LOCKEDSHORT ......短い時間のロックが掛かっている。
限定されたモジュールにはすぐ答える。それ以外のモジ
ュールからのイベントはロックが解除するまで待たされ
る。 に拡張したときの、図1のイベントキュー格納領域3b
におけるイベントキュー管理のアルゴリズムを説明す
る。
【0089】図14は、図1におけるプログラムによる
イベントキュー格納領域の管理手順例を示す説明図であ
る。イベントキュー管理では、システムが起動される
と、ステップ1401で繰り返し処理を行い、モジュー
ルに対応する関数を呼出す処理を繰り返す。
イベントキュー格納領域の管理手順例を示す説明図であ
る。イベントキュー管理では、システムが起動される
と、ステップ1401で繰り返し処理を行い、モジュー
ルに対応する関数を呼出す処理を繰り返す。
【0090】すなわち、ステップ1402の処理で、ま
ず、図1のイベントキュー格納領域3bから1行取り出
し、 toWhom:送り先 event :イベント fromWhom:送り元 args:引数 とする。
ず、図1のイベントキュー格納領域3bから1行取り出
し、 toWhom:送り先 event :イベント fromWhom:送り元 args:引数 とする。
【0091】次に、ステップ1403の条件判定処理
で、「toWhom」のロック状態が「LOCKEDSHORT」でかつ
「fromWhom」が除外リストに入っていないかどうかを調
べ、この条件が成立する時は、短時間ロックが掛かって
いるので、ステップ1404の処理で、「(toWhom,even
t,fromWhom,args)」をキューの後ろに戻し、イベントの
処理を待たせる。
で、「toWhom」のロック状態が「LOCKEDSHORT」でかつ
「fromWhom」が除外リストに入っていないかどうかを調
べ、この条件が成立する時は、短時間ロックが掛かって
いるので、ステップ1404の処理で、「(toWhom,even
t,fromWhom,args)」をキューの後ろに戻し、イベントの
処理を待たせる。
【0092】また、ステップ1403の条件判定処理で
条件が成立しない時、すなわち、短時間ロックの対象で
はない時には、ステップ1405の処理で、「toWhom」
に対応する関数を「f」とし、「f(event, fromWhom, ar
gs)」を呼び出す。これを繰り返すことにより、短時間
ロックにおいては、それが外れたら、イベントキューに
溜まっていたイベントが、そのモジュールに対応する関
数で実行される。
条件が成立しない時、すなわち、短時間ロックの対象で
はない時には、ステップ1405の処理で、「toWhom」
に対応する関数を「f」とし、「f(event, fromWhom, ar
gs)」を呼び出す。これを繰り返すことにより、短時間
ロックにおいては、それが外れたら、イベントキューに
溜まっていたイベントが、そのモジュールに対応する関
数で実行される。
【0093】このような、短時間ロックコマンドを含ん
だ状態の動作生成法の処理を、次の図15を用いて詳細
に説明する。図15は、図1におけるプログラム自動生
成システムの本発明に係わる第2の処理動作例を示すP
AD図である。本例は、図12で示した、図1における
動作コード生成部2fの他の処理手順例を示すもので、
短時間ロックコマンドを含んだ状態の動作生成手順であ
り、図12におけるステップ1206の処理でのループ
を、この図15のものに置き換える。
だ状態の動作生成法の処理を、次の図15を用いて詳細
に説明する。図15は、図1におけるプログラム自動生
成システムの本発明に係わる第2の処理動作例を示すP
AD図である。本例は、図12で示した、図1における
動作コード生成部2fの他の処理手順例を示すもので、
短時間ロックコマンドを含んだ状態の動作生成手順であ
り、図12におけるステップ1206の処理でのループ
を、この図15のものに置き換える。
【0094】すなわち、変数「Acts」を状態に記述され
た全ての動作のリストとし、その全ての動作「A」に対
して、ステップ1502の処理でコードを生成する。本
例が、図12の例と異なるのは、動作「A」の形の場合
わけで、動作「A」がLockShortMeWithout(M1, ...)の場
合が追加されていることである。この場合は、ステップ
1508の処理で、「lockStatus = LOCKEDSHORT」とい
うコードを生成し、次に、ステップ1509の処理で、
「M1, ..., Mn」を「moduleList」に入れるコードを生
成する。
た全ての動作のリストとし、その全ての動作「A」に対
して、ステップ1502の処理でコードを生成する。本
例が、図12の例と異なるのは、動作「A」の形の場合
わけで、動作「A」がLockShortMeWithout(M1, ...)の場
合が追加されていることである。この場合は、ステップ
1508の処理で、「lockStatus = LOCKEDSHORT」とい
うコードを生成し、次に、ステップ1509の処理で、
「M1, ..., Mn」を「moduleList」に入れるコードを生
成する。
【0095】以上、図1〜図15を用いて説明したよう
に、本実施例のプログラム自動生成システムと方法で
は、状態遷移オートマトンの記述体系を拡大し、予めオ
ートマトンにロックの状態を組み込み、オートマトンの
ロック状態を変更する動作指定をユーザに許し、ロック
されているオートマトンにイベントが送られると、今ロ
ックされているというイベントを送り返すプログラムを
生成するので、ユーザは、ロックによる排他制御を、コ
マンドを一つ発行する記述で表現できる。
に、本実施例のプログラム自動生成システムと方法で
は、状態遷移オートマトンの記述体系を拡大し、予めオ
ートマトンにロックの状態を組み込み、オートマトンの
ロック状態を変更する動作指定をユーザに許し、ロック
されているオートマトンにイベントが送られると、今ロ
ックされているというイベントを送り返すプログラムを
生成するので、ユーザは、ロックによる排他制御を、コ
マンドを一つ発行する記述で表現できる。
【0096】これにより、多くの機器や複数の端末と接
続され、複数の機器のイベントや別のシステムからのイ
ベントに対して反応する分散システム等のソフトウエア
を、状態遷移オートマトンの記述で構築する場合にも、
ユーザ(システム開発者)は、簡単な記述で、複雑なロ
ック制御(排他制御:1つの仕事をしているとき他の機
器や端末の依頼を受けないための制御)を実現できる。
続され、複数の機器のイベントや別のシステムからのイ
ベントに対して反応する分散システム等のソフトウエア
を、状態遷移オートマトンの記述で構築する場合にも、
ユーザ(システム開発者)は、簡単な記述で、複雑なロ
ック制御(排他制御:1つの仕事をしているとき他の機
器や端末の依頼を受けないための制御)を実現できる。
【0097】尚、本発明は、図1〜図15を用いて説明
した実施例に限定されるものではなく、その要旨を逸脱
しない範囲において種々変更可能である。例えば、本例
では、光ディスクからプログラムを提供する構成として
いるが、FD(フレキスブルディスク)等、他のコンピ
ュータ読み取り可能な記録媒体を用いることでも良い。
した実施例に限定されるものではなく、その要旨を逸脱
しない範囲において種々変更可能である。例えば、本例
では、光ディスクからプログラムを提供する構成として
いるが、FD(フレキスブルディスク)等、他のコンピ
ュータ読み取り可能な記録媒体を用いることでも良い。
【0098】
【発明の効果】本発明によれば、ロック制御が必要なシ
ステムの記述においても、送られてくる可能性のある全
てのイベントに対して、ロックされていることを表すイ
ベントを送り返すための状態遷移をユーザが一々書く必
要がなくなり、金融や公共などの分野における、ネット
ワーク経由で遠隔の顧客/住民にサービスを提供するシ
ステムのように、1つの端末が多くのイベントに反応し
なければならないシステムの構築に用いるプログラムを
効率的に生成することが可能である。
ステムの記述においても、送られてくる可能性のある全
てのイベントに対して、ロックされていることを表すイ
ベントを送り返すための状態遷移をユーザが一々書く必
要がなくなり、金融や公共などの分野における、ネット
ワーク経由で遠隔の顧客/住民にサービスを提供するシ
ステムのように、1つの端末が多くのイベントに反応し
なければならないシステムの構築に用いるプログラムを
効率的に生成することが可能である。
【図1】本発明のプログラム自動生成システムの本発明
に係る構成の一実施例を示すブロック図である。
に係る構成の一実施例を示すブロック図である。
【図2】図1におけるプログラム自動生成システムの装
置構成例を示すブロック図である。
置構成例を示すブロック図である。
【図3】図1における状態定義の詳細例を示す説明図で
ある。
ある。
【図4】図1における状態遷移定義の詳細例を示す説明
図である。
図である。
【図5】図3および図4における状態定義と状態遷移定
義で表現されるモジュールを図式で表現する図式言語例
を示す説明図である。
義で表現されるモジュールを図式で表現する図式言語例
を示す説明図である。
【図6】図1におけるプログラム自動生成システムで生
成されたプログラムの全体構成例を示す説明図である。
成されたプログラムの全体構成例を示す説明図である。
【図7】図1におけるモジュール対応関数の詳細構成例
を示す説明図である。
を示す説明図である。
【図8】図1におけるロック時イベント処理の手順例を
示すPAD図である。
示すPAD図である。
【図9】図1における状態・ロック状態格納領域の詳細
構成例を示す説明図である。
構成例を示す説明図である。
【図10】図1における状態遷移コード生成部の処理手
順例を示すPAD図である。
順例を示すPAD図である。
【図11】図1における状態遷移コードの生成例を示す
説明図である。
説明図である。
【図12】図1におけるプログラム自動生成システムの
本発明に係わる第1の処理動作例を示すPAD図であ
る。
本発明に係わる第1の処理動作例を示すPAD図であ
る。
【図13】図1における動作コードの具体例を示す説明
図である。
図である。
【図14】図1におけるプログラムによるイベントキュ
ー格納領域の管理手順例を示す説明図である。
ー格納領域の管理手順例を示す説明図である。
【図15】図1におけるプログラム自動生成システムの
本発明に係わる第2の処理動作例を示すPAD図であ
る。
本発明に係わる第2の処理動作例を示すPAD図であ
る。
【図16】各状態における動作定義の記述例を示す説明
図である。
図である。
【図17】各状態における状態遷移の記述例を示す説明
図である。
図である。
【図18】図16および図17における状態定義と状態
遷移定義で表現されるモジュールを図式で表現する図式
言語例を示す説明図である。
遷移定義で表現されるモジュールを図式で表現する図式
言語例を示す説明図である。
【図19】従来技術によるロック制御に対する状態遷移
の記述例を示す説明図である。
の記述例を示す説明図である。
1:システム記述、1a:モジュール定義、1b:状態
遷移定義、1c:状態定義、1d:ロックの指定、2:
プログラム生成部、2a:イベント管理エンジンおよび
イベントキュー生成部、2b:モジュール対応関数コー
ド生成部、2c:状態格納領域生成部、2d:ロック時
コード生成部、2e:状態遷移コード生成部、2f:動
作コード生成部、2g:ロックコード生成部、3:プロ
グラム、3a:イベント管理エンジンのコード、3b:
イベントキュー格納領域、3c:モジュール対応関数コ
ード、3d:状態・ロック状態格納領域、3e:ロック
時イベント処理コード、3f:状態遷移コード、3g:
動作コード、3h:ロックのコード、21:表示装置、
22:入力装置、23:情報処理装置、24:補助記憶
装置、25:光ディスク、26:光ディスク駆動装置、
31:状態名(フィールド)、32:初期状態(フィー
ルド)、33:動作定義(フィールド)、41:状態名
(フィールド)、42:イベント名(フィールド)、4
3:次の状態名(フィールド)、51:初期状態「IDO
L」、52:状態「Printing」、53:動作定義、5
4:状態「Completed」、55:動作定義、56:状態
「Incompleted」、71:ヘッダ部分、72,73:ラ
ベル、74:フィールド、75:ランタイムルーティン
の呼出し処理、76:ロックされた状態と除外するモジ
ュールのリストを記録する処理、77:ロック状態を解
除する処理、78:命令(return)、91:宣言部、1
61:状態定義、162:状態名(フィールド)、16
3:初期状態(フィールド)、164:動作定義(フィ
ールド)、171:状態遷移定義、172:状態名(フ
ィールド)、173:イベント名(フィールド)、17
4:次の状態名(フィールド)、181:モジュール、
182:状態「IDOL」、183:動作定義、184:状
態「Printing」、185:動作定義、186:状態「Co
mpleted」、187:状態「Incompleted」、191:
「IDOL」状態、192:「Printing」状態、193:
「Answering LockStatus A」状態、194:「Answerin
g LockStatus B」状態、195,196:動作定義。
遷移定義、1c:状態定義、1d:ロックの指定、2:
プログラム生成部、2a:イベント管理エンジンおよび
イベントキュー生成部、2b:モジュール対応関数コー
ド生成部、2c:状態格納領域生成部、2d:ロック時
コード生成部、2e:状態遷移コード生成部、2f:動
作コード生成部、2g:ロックコード生成部、3:プロ
グラム、3a:イベント管理エンジンのコード、3b:
イベントキュー格納領域、3c:モジュール対応関数コ
ード、3d:状態・ロック状態格納領域、3e:ロック
時イベント処理コード、3f:状態遷移コード、3g:
動作コード、3h:ロックのコード、21:表示装置、
22:入力装置、23:情報処理装置、24:補助記憶
装置、25:光ディスク、26:光ディスク駆動装置、
31:状態名(フィールド)、32:初期状態(フィー
ルド)、33:動作定義(フィールド)、41:状態名
(フィールド)、42:イベント名(フィールド)、4
3:次の状態名(フィールド)、51:初期状態「IDO
L」、52:状態「Printing」、53:動作定義、5
4:状態「Completed」、55:動作定義、56:状態
「Incompleted」、71:ヘッダ部分、72,73:ラ
ベル、74:フィールド、75:ランタイムルーティン
の呼出し処理、76:ロックされた状態と除外するモジ
ュールのリストを記録する処理、77:ロック状態を解
除する処理、78:命令(return)、91:宣言部、1
61:状態定義、162:状態名(フィールド)、16
3:初期状態(フィールド)、164:動作定義(フィ
ールド)、171:状態遷移定義、172:状態名(フ
ィールド)、173:イベント名(フィールド)、17
4:次の状態名(フィールド)、181:モジュール、
182:状態「IDOL」、183:動作定義、184:状
態「Printing」、185:動作定義、186:状態「Co
mpleted」、187:状態「Incompleted」、191:
「IDOL」状態、192:「Printing」状態、193:
「Answering LockStatus A」状態、194:「Answerin
g LockStatus B」状態、195,196:動作定義。
Claims (5)
- 【請求項1】 状態遷移オートマトンの記述に基づきコ
ンピュータ処理して、対応するプログラムを自動生成す
るプログラム自動生成システムにおいて、上記状態遷移
オートマトンの記述から、所定の排他制御動作を行うロ
ック状態の遷移を検出し、該検出したロック状態の遷移
に対応して、ロックされていることを表すイベントを外
部のイベントに対して返すプログラムを生成するロック
コード生成手段を設け、上記状態遷移オートマトンに予
め組み込まれた上記ロック状態の遷移に基づき、上記所
定の排他制御動作を行なうプログラムを生成することを
特徴とするプログラム自動生成システム。 - 【請求項2】 請求項1のプログラム自動生成システム
において、上記状態遷移オートマトンに予め組み込まれ
るロック状態には、所定の外部イベントを特定する記述
が含まれ、上記ロックコード生成手段は、上記特定の外
部イベントを除く外部のイベントに対して、上記ロック
されていることを表すイベントを返すプログラムを生成
する手段を有することを特徴とするプログラム自動生成
システム。 - 【請求項3】 請求項1、もしくは、請求項2のいずれ
かに記載のプログラム自動生成システムにおいて、上記
ロック状態の解除を待つ動作を指定した短時間ロック状
態の遷移を上記状態遷移オートマトンの記述から検出す
る手段と、該検出した短時間ロック状態の遷移の記述に
対応して、上記外部イベントの送信元の状態遷移オート
マトンに、上記短時間ロックされていることを表すイベ
ントを送り返し、上記送信元の状態遷移オートマトンに
上記短時間ロック状態の解除を待つよう動作させるプロ
グラムを生成する手段とを有することを特徴とするプロ
グラム自動生成システム。 - 【請求項4】 請求項1から請求項3のいずれかに記載
のプログラム自動生成システムにおいて、上記ロック状
態を解除するためのアンロック状態の遷移を上記状態遷
移オートマトンの記述から検出する手段と、該検出した
アンロック状態の遷移の記述に対応して、上記ロック状
態を解除するプログラムを生成する手段とを有すること
を特徴とするプログラム自動生成システム。 - 【請求項5】 状態遷移オートマトンを用いたシステム
の記述に基づきコンピュータ処理して、上記システムの
プログラムを自動生成するプログラム自動生成方法にお
いて、上記状態遷移オートマトンの記述から、所定の排
他制御動作を行うロック状態の遷移を検出するステップ
と、該検出したロック状態の遷移に含まれて記述されて
いる、所定の外部イベントを特定するステップと、該特
定した上記所定の外部イベントを除く外部イベントに対
して、上記ロック状態を表すイベントを返すプログラム
を生成するステップと、上記状態遷移オートマトンの記
述から、上記ロック状態の解除を待つ動作を指定した短
時間ロック状態の遷移を検出するステップと、該検出し
た短時間ロック状態の遷移の記述に対応して、上記外部
イベントの送信元の状態遷移オートマトンに、上記短時
間ロックされていることを表すイベントを送り返すプロ
グラムと、上記送信元の状態遷移オートマトンに上記短
時間ロック状態の解除を待たせるプログラムを生成する
ステップと、上記状態遷移オートマトンの記述から、上
記ロック状態を解除するためのアンロック状態の遷移を
検出するステップと、該検出したアンロック状態の遷移
の記述に対応して、上記ロック状態を解除するプログラ
ムを生成するステップとを有し、上記状態遷移オートマ
トンに予め組み込まれた上記ロック状態の遷移の記述に
基づき、上記所定の排他制御動作の制御を行なうプログ
ラムを生成することを特徴とするプログラム自動生成方
法。
Priority Applications (1)
| Application Number | Priority Date | Filing Date | Title |
|---|---|---|---|
| JP9024998A JPH11288367A (ja) | 1998-04-02 | 1998-04-02 | プログラム自動生成システムと方法 |
Applications Claiming Priority (1)
| Application Number | Priority Date | Filing Date | Title |
|---|---|---|---|
| JP9024998A JPH11288367A (ja) | 1998-04-02 | 1998-04-02 | プログラム自動生成システムと方法 |
Publications (1)
| Publication Number | Publication Date |
|---|---|
| JPH11288367A true JPH11288367A (ja) | 1999-10-19 |
Family
ID=13993236
Family Applications (1)
| Application Number | Title | Priority Date | Filing Date |
|---|---|---|---|
| JP9024998A Pending JPH11288367A (ja) | 1998-04-02 | 1998-04-02 | プログラム自動生成システムと方法 |
Country Status (1)
| Country | Link |
|---|---|
| JP (1) | JPH11288367A (ja) |
Cited By (3)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| WO2010125960A1 (ja) * | 2009-04-28 | 2010-11-04 | インターナショナル・ビジネス・マシーンズ・コーポレーション | マルチスレッド上で動作するプログラムのプログラム・コードをロック衝突が少ないプログラム・コードに変換するための方法、並びにそのコンピュータ・プログラム及びコンピュータ・システム |
| JP2015204014A (ja) * | 2014-04-15 | 2015-11-16 | 三菱電機株式会社 | ソフトウェア生成方法、ソフトウェア生成装置及びソフトウェア実行装置 |
| CN107943470A (zh) * | 2017-11-23 | 2018-04-20 | 四川长虹电器股份有限公司 | 云管理平台代码生成与回收的系统与方法 |
-
1998
- 1998-04-02 JP JP9024998A patent/JPH11288367A/ja active Pending
Cited By (7)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| WO2010125960A1 (ja) * | 2009-04-28 | 2010-11-04 | インターナショナル・ビジネス・マシーンズ・コーポレーション | マルチスレッド上で動作するプログラムのプログラム・コードをロック衝突が少ないプログラム・コードに変換するための方法、並びにそのコンピュータ・プログラム及びコンピュータ・システム |
| CN102292709A (zh) * | 2009-04-28 | 2011-12-21 | 国际商业机器公司 | 用于将在多线程上工作的程序的程序代码变换为锁冲突少的程序代码的方法及其计算机程序和计算机系统 |
| JP5204300B2 (ja) * | 2009-04-28 | 2013-06-05 | インターナショナル・ビジネス・マシーンズ・コーポレーション | マルチスレッド上で動作するプログラムのプログラム・コードをロック衝突が少ないプログラム・コードに変換するための方法、並びにそのコンピュータ・プログラム及びコンピュータ・システム |
| US8972959B2 (en) | 2009-04-28 | 2015-03-03 | International Business Machines Corporation | Method of converting program code of program running in multi-thread to program code causing less lock collisions, computer program and computer system for the same |
| JP2015204014A (ja) * | 2014-04-15 | 2015-11-16 | 三菱電機株式会社 | ソフトウェア生成方法、ソフトウェア生成装置及びソフトウェア実行装置 |
| CN107943470A (zh) * | 2017-11-23 | 2018-04-20 | 四川长虹电器股份有限公司 | 云管理平台代码生成与回收的系统与方法 |
| CN107943470B (zh) * | 2017-11-23 | 2020-10-23 | 四川长虹电器股份有限公司 | 云管理平台代码生成与回收的系统与方法 |
Similar Documents
| Publication | Publication Date | Title |
|---|---|---|
| CN110768833B (zh) | 基于kubernetes的应用编排部署方法及装置 | |
| CN100440141C (zh) | 可用户化的信息处理装置及方法 | |
| JP3439337B2 (ja) | ネットワーク管理システム | |
| JP4701148B2 (ja) | 障害回復システム及びサーバ | |
| JP2874032B2 (ja) | ソフトウェア作業ツール | |
| US5175854A (en) | Inter-applicataion interface system | |
| KR20040051738A (ko) | 이기종 네트워크 장비의 구성 관리를 위한 엑스엠엘 기반망 관리 시스템 및 방법 | |
| JPH0512025A (ja) | オブジエクト指向言語間インタフエース実現方法 | |
| JP2000504868A (ja) | 管理インターワーキング・ユニットおよびかかるユニットの形成方法 | |
| Padgham et al. | A unified graphical notation for AOSE | |
| US7092984B2 (en) | Method and apparatus for determining dynamic flow and computer-readable medium storing a program for performing the method | |
| WO2024002299A1 (zh) | 应用管理方法、应用订阅方法及相关设备 | |
| JPH11288367A (ja) | プログラム自動生成システムと方法 | |
| CN114611917A (zh) | 一种人员管理系统 | |
| US8384921B2 (en) | Image forming apparatus and method for managing a mode program constituted by operation mode information set to a job performed by the image forming apparatus | |
| CN117234576A (zh) | 无编码软件开发方法及装置 | |
| JPH09160847A (ja) | クライアント・サーバ型分散処理システム | |
| CN114968339A (zh) | 基于有向无环图特性进行软件基础设施资源部署的方法 | |
| CN112748980A (zh) | 消息推送方法、装置、设备及计算机可读存储介质 | |
| JP2005092522A (ja) | 画面状態遷移システム、インターフェースシステム、画面状態遷移プログラム、インターフェースシステム用プログラム、画面状態遷移方法及びインターフェース方法 | |
| JP2009157847A (ja) | プログラム開発装置、プログラム開発プログラム | |
| US6032176A (en) | Data-independent type computer system: processing machine, data machine and man-machine interface therein | |
| JP2002297402A (ja) | デジタル機器、タスク管理方法及びそのプログラム | |
| Gregory | Interclient Communication | |
| JP2000172462A (ja) | スケジュ―ルデ―タベ―ス連動印刷システム |