(57)【要約】【課題】  システムの状態とイベントとの組にアクションを割り当てる対応情報に基づいたプログラム生成において、生成されたプログラムの実行時に状態が想定外のものになった場合でも、システムの挙動の不安定化を抑える。【解決手段】    パーソナルコンピュータは、記憶媒体から状態遷移表を読み出し、その状態遷移表中のイベントを、１イベント毎に選択し、選択したイベント毎に状態を１つずつ選択する。そして、その状態が例外状態であるか通常状態であるかを、その状態が例外状態である旨の情報がこの状態遷移表にｅｘｅｐｔｉｏｎマークとして含まれているか否かに基づいて判定し、その判定結果に基づいて、状態に例外が発生した場合に、状態遷移表において例外状態に割り当てられた状態遷移や処理を実行するためのプログラムを生成する。【選択図】 図５
2006012017.tif 000002
【特許請求の範囲】
【請求項１】
状態に対してアクションを割り当てた対応情報を読み出す読み出し手段、
読み出された前記対応情報中の状態が例外状態であるか通常状態であるかを、その状態が例外状態である旨の情報が前記対応情報に含まれているか否かに基づいて判定する判定手段、および
読み出された対応情報に基づいてプログラムＡを生成する生成手段、としてコンピュータを機能させるプログラム生成プログラム。
ただし、前記プログラムＡは、
現在の状態を記憶媒体中の状態情報に基づいて検出する状態検出機能、
検出した状態が通常状態に該当するという条件に基づいて、この状態に前記対応情報が割り当てたアクションを実行する通常実行機能、
検出した状態が通常状態のいずれにも該当しないという条件に基づいて、例外状態に前記対応情報が割り当てたアクションを実行する例外実行機能、をコンピュータに実現させる。
【請求項２】
前記読み出し手段は、状態とイベントとの組に対してアクションを割り当てた対応情報を読み出し、
前記プログラムＡがコンピュータに実現させる前記通常実行機能は、検出した状態が通常状態に該当するという条件に基づいて、この状態および検出したイベントの組に前記対応情報が割り当てたアクションを実行し、
前記プログラムＡがコンピュータに実現させる前記例外実行機能は、検出した状態が通常状態のいずれにも該当しないという条件に基づいて、例外状態および検出したイベントの組に前記対応情報が割り当てたアクションを実行し、
さらに前記プログラムＡは、イベントの発生を検出するイベント検出機能をコンピュータに実現させ、
また、前記通常実行機能および例外実行機能は、実行するアクションが状態遷移を含んでいる場合、遷移先の状態を状態情報として前記記憶媒体に記憶させることを特徴とする請求項１に記載のプログラム生成プログラム。
【請求項３】
前記読み出し手段は、状態とイベントとの組に対するアクションの割り当てについての対応情報を、一組毎に読み出し、
前記判定手段は、前記対応情報が一組読み出される毎に、その組に係る状態が例外状態であるか通常状態であるかを判定し、
前記生成手段は、読み出された組に係る状態が例外状態と判定される毎に、前記プログラムＡの、コンピュータに前記例外実行機能を実現させる部分を生成することを特徴とする請求項２に記載のプログラム生成プログラム。
【請求項４】
前記生成手段は、読み出された対応情報において、１つの状態に割り当てられたアクションが、例外状態への状態遷移を含むことに基づいて、警告メッセージを出力することを特徴とする請求項１ないし３のいずれか１つに記載のプログラム生成プログラム。
【請求項５】
前記対応情報における状態は、１つの状態が複数の状態を子として含むことができる階層構造となっており、
前記例外実行機能は更に、検出した状態がある通常状態に該当し、かつその該当する通常状態の子の通常状態のいずれにも該当しないという条件に基づいて、その該当する通常状態の子である例外状態に前記対応情報が割り当てたアクションを実行することを特徴とする請求項１ないし４のいずれか１つに記載のプログラム生成プログラム。
【請求項６】
前記生成手段は、読み出された対応情報中の例外状態が子の状態を有することに基づいて、警告メッセージを出力することを特徴とする請求項５に記載のプログラム生成プログラム。
【請求項７】
前記生成手段は、読み出された対応情報中の１つの状態に、複数の例外状態が子として含まれていることに基づいて、警告メッセージを出力することを特徴とする請求項５または６に記載のプログラム生成プログラム。
【請求項８】
前記判定手段が判定基準とする例外状態である旨の情報とは、前記対応情報中の状態の名称に含まれる所定の情報であることを特徴とする請求項１ないし７のいずれか１つに記載のプログラム生成プログラム。
【請求項９】
前記対応情報は、状態を示す図形および状態遷移を示すこれら図形間の矢印を有する図形情報であり、
前記判定手段が判定基準とする例外状態である旨の情報とは、前記図形が所定の形状をしているという情報であることを特徴とする請求項１ないし７のいずれか１つに記載のプログラム生成プログラム。
【請求項１０】
状態に対するアクションの割り当てについての対応情報を読み出す読み出し手段と、
読み出された前記対応情報中の状態が例外状態であるか通常状態であるかを、その状態が例外状態である旨の情報が前記対応情報に含まれているか否かで判定する判定手段と、
読み出した対応情報に基づいてプログラムＡを生成する生成手段と、を備えたプログラム生成装置。
ただし、前記プログラムＡは、
現在の状態を記憶媒体中の状態情報に基づいて検出する状態検出機能、
検出した状態が通常状態と判定された状態に該当する場合、この状態に前記対応情報が割り当てたアクションを実行する通常実行機能、
検出した状態が通常状態と判定された状態のいずれにも該当しない場合、例外状態と判定された状態に前記対応情報が割り当てたアクションを実行する例外実行機能、をコンピュータに実現させる。
【請求項１１】
状態に対するアクションの割り当てについての対応情報を読み出す手順と、
読み出された前記対応情報中の状態が例外状態であるか通常状態であるかを、その状態が例外状態である旨の情報が前記対応情報に含まれているか否かで判定する手順と、
読み出した対応情報に基づいてプログラムＡを生成する手順と、を備えたプログラム生成方法。
ただし、前記プログラムＡは、
現在の状態を記憶媒体中の状態情報に基づいて検出する状態検出機能、
検出した状態が通常状態と判定された状態に該当する場合、この状態に前記対応情報が割り当てたアクションを実行する通常実行機能、
検出した状態が通常状態と判定された状態のいずれにも該当しない場合、例外状態と判定された状態に前記対応情報が割り当てたアクションを実行する例外実行機能、をコンピュータに実現させる。
【請求項１２】
ユーザの入力に基づいて状態とその状態に対応するアクションを割り当てた対応情報を記憶媒体に記憶させる機能をコンピュータに実現させる対応情報生成プログラムであって、
ユーザによる例外状態およびその例外状態に対応するアクションの設定入力を受け付ける受付手段、および
受け付けた例外状態に受け付けた対応するアクションを割り当てる情報および当該状態が例外状態である旨の情報を含む対応情報を、請求項１０に記載のプログラム生成装置に読み出させるために記憶媒体に記憶させる記憶制御手段として、コンピュータを機能させることを特徴とする対応情報生成プログラム。
【請求項１３】
前記受け付け手段が例外状態への状態遷移を含むアクションの設定入力を受け付けることに基づいて警告メッセージを出力する警告手段としてコンピュータを機能させることを特徴とする請求項１２に記載の対応情報生成プログラム。
【請求項１４】
前記対応情報における状態は、１つの状態が複数の状態を子として含むことができる階層構造となっており、
前記警告手段は、前記受付手段が受け付けた例外状態がある通常状態の子であり、かつその通常状態の子として他の例外状態が前記対応情報に含まれていることに基づいて、警告メッセージを出力することを特徴とする請求項１２または１３に記載の対応情報生成プログラム。
【請求項１５】
前記対応情報における状態は、１つの状態が複数の状態を子として含むことができる階層構造となっており、
前記警告手段は、前記受付手段が、例外状態が子の状態を持つような設定入力を受けたことに基づいて、警告メッセージを出力することを特徴とする請求項１２または１３に記載のプログラム生成プログラム。
【請求項１６】
対応情報に基づく映像を表示装置に表示させる表示制御手段としてコンピュータを機能させ、
前記表示制御手段が表示させる映像は、状態を示す図形および状態遷移を示すこれら図形間の矢印を有する図形情報であり、状態を示す図形は、通常状態と例外状態とで異なっていることを特徴とする請求項１２ないし１５のいずれか１つに記載の対応情報生成プログラム。
【請求項１７】
対応情報に基づく映像を表示装置に表示させる表示制御手段としてコンピュータを機能させ、
前記表示制御手段が表示させる映像は、状態とアクションの対応関係を表形式で示すものであり、その表中、例外状態については、それが例外状態であることを示すマークが付されていることを特徴とする請求項１２ないし１６のいずれか１つに記載の対応情報生成プログラム。
【請求項１８】
ユーザの入力に基づいて状態とその状態に対応するアクションを割り当てた対応情報を記憶媒体に記憶させる対応情報生成装置であって、
ユーザによる例外状態およびその例外状態に対応するアクションの設定入力を受け付ける受付手段と、
受け付けた例外状態に受け付けた対応するアクションを割り当てる情報および当該状態が例外状態である旨の情報を含む対応情報を、請求項１０に記載のプログラム生成装置に読み出させるために記憶媒体に記憶させる記憶制御手段と、を備えた対応情報生成装置。
【請求項１９】
ユーザの入力に基づいて状態とその状態に対応するアクションを割り当てた対応情報を記憶媒体に記憶させる対応情報生成方法であって、
ユーザによる例外状態およびその例外状態に対応するアクションの設定入力を受け付ける手順と、
受け付けた例外状態に受け付けた対応するアクションを割り当てる情報および当該状態が例外状態である旨の情報を含む対応情報を、請求項１０に記載のプログラム生成装置に読み出させるために記憶媒体に記憶させる記憶制御手順と、を備えた対応情報生成方法。
【請求項２０】
状態に対してアクションを割り当てた対応情報を読み出す読み出し手段、
読み出された前記対応情報が、状態が例外となった際のアクションの指定を含むことを判定する判定手段、および
読み出された前記対応情報に基づいてプログラムＡを生成する生成手段、としてコンピュータを機能させるプログラム生成プログラム。
ただし、前記プログラムＡは、
現在の状態を記憶媒体中の状態情報に基づいて検出する状態検出機能、
検出した状態に該当する対応情報中の状態に前記対応情報が割り当てたアクションを実行する通常実行機能、
検出した状態が対応情報中の状態のいずれにも該当しないという条件に基づいて、前記対応情報において指定された、状態が例外となった際のアクションを実行する例外実行機能、をコンピュータに実現させる。
【請求項２１】
前記対応情報における状態は、１つの状態が複数の状態を子として含むことができる階層構造となっており、
前記判定手段は、同じ状態の子から成る状態階層に関連づけられた、状態が例外となった際のアクションの指定を含むことを判定し、
前記例外実行機能は更に、検出した状態が前記対応情報中のある状態に該当し、かつその該当する状態の子の状態のいずれにも該当しないという条件に基づいて、前記対応情報において、その該当する状態の子から成る状態階層に関連づけて指定された、状態が例外となった際のアクションを実行することを特徴とする請求項２０に記載のプログラム生成プログラム。
【請求項２２】
状態に対してアクションを割り当てた対応情報を読み出す読み出し手段と、
読み出された前記対応情報が、状態が例外となった際のアクションの指定を含むことを判定する判定手段と、
読み出された前記対応情報に基づいてプログラムＡを生成する生成手段、を備えたプログラム生成装置。
ただし、前記プログラムＡは、
現在の状態を記憶媒体中の状態情報に基づいて検出する状態検出機能、
検出した状態に該当する対応情報中の状態に前記対応情報が割り当てたアクションを実行する通常実行機能、
検出した状態が対応情報中の状態のいずれにも該当しないという条件に基づいて、前記対応情報において指定された、状態が例外となった際のアクションを実行する例外実行機能、をコンピュータに実現させる。
【請求項２３】
状態に対してアクションを割り当てた対応情報を読み出す手順と、
読み出された前記対応情報が、状態が例外となった際のアクションの指定を含むことを判定する手順と、
読み出された前記対応情報に基づいてプログラムＡを生成する手順と、を備えたプログラム生成方法。
ただし、前記プログラムＡは、
現在の状態を記憶媒体中の状態情報に基づいて検出する状態検出機能、
検出した状態に該当する対応情報中の状態に前記対応情報が割り当てたアクションを実行する通常実行機能、
検出した状態が対応情報中の状態のいずれにも該当しないという条件に基づいて、前記対応情報において指定された、状態が例外となった際のアクションを実行する例外実行機能、をコンピュータに実現させる。
【請求項２４】
ユーザの入力に基づいて状態とその状態に対応するアクションを割り当てた対応情報を記憶媒体に記憶させる機能をコンピュータに実現させる対応情報生成プログラムであって、
ユーザによる状態が例外となった際のアクションの指定の設定入力を受け付ける受付手段、および
前記受付手段が受け付けた前記指定を含む対応情報を、請求項２２に記載のプログラム生成装置に読み出させるために記憶媒体に記憶させる記憶制御手段として、コンピュータを機能させることを特徴とする対応情報生成プログラム。
【請求項２５】
ユーザの入力に基づいて状態とその状態に対応するアクションを割り当てた対応情報を記憶媒体に記憶させる対応情報生成装置であって、
ユーザによる状態が例外となった際のアクションの指定の設定入力を受け付ける受付手段と、
前記受付手段が受け付けた前記指定を含む対応情報を、請求項２２に記載のプログラム生成装置に読み出させるために記憶媒体に記憶させる記憶制御手段と、を備えた対応情報生成装置。
【請求項２６】
ユーザの入力に基づいて状態とその状態に対応するアクションを割り当てた対応情報を記憶媒体に記憶させる対応情報生成方法であって、
ユーザによる状態が例外となった際のアクションの指定の設定入力を受け付ける手順と、
前記受付手段が受け付けた前記指定を含む対応情報を、請求項２２に記載のプログラム生成装置に読み出させるために記憶媒体に記憶させる手順と、を備えた対応情報生成方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、状態遷移表や状態遷移図等の、状態とイベントとの組にアクションを割り当てる対応情報に基づいたプログラムを生成する技術、および対応情報を生成する技術に関し、特に組込み制御システムに用いて好適である。
【背景技術】
【０００２】
従来、組み込み制御システムの分野では、イベント（システム外部からの入力信号の変化やシステム内部で発生した変化）が発生すると、この発生したイベント、およびイベントが発生した時のシステムの状態に対応したアクション（処理や状態間の遷移）が実行されるようなシステム設計が為されている。
【０００３】
このような設計のシステムを実現するため、システムの開発者は、このシステムの設計書として、そのシステムの状態とイベントの組に対するアクションの割り当てについての対応情報をあらかじめ記述することがある。対応情報は、表形式の状態遷移表や、図形式の状態遷移図等で表現される。
【０００４】
開発者は、この対応情報に基づいて、このシステムを実現するためのプログラムを、例えばプログラミング言語Ｃで作成する。さらに近年は、状態遷移表や状態遷移図の入力を受けると、その内容をプログラミング言語のソースコードに自動的に変換するプログラム生成装置が開発されている（例えば特許文献１参照）。
【０００５】
以下、図１〜図３を用い、従来の対応情報を用いたプログラム生成の一例を概説する。図１は、従来から用いられている状態遷移表の一例である。この対応表において、各行には１つのイベントが対応し、各列には１つの状態が対応している。図１においては、例えば、状態１とイベントＥ１の組には、状態１から状態２への遷移および処理Ａから成るアクションが割り当てられている。
【０００６】
また、この状態遷移表中の状態は、１つの状態が子の状態を含むことができるような階層構造を形成している。例えば、図１においては、状態２は状態２−１および状態２−２を含んでいる。ここで、逆三角形４１、４２が付された状態は、その状態が属する階層において最初に移行する状態を示している。
【０００７】
図２は、従来から用いられている状態遷移図の一例である。この図中においては、状態は角の丸い長方形で表され、状態間の遷移が矢印線で表され、矢印線に付された文字が、その矢印線の状態遷移が起こる原因となるイベント、およびそのイベントが発生したときに実行される処理を示している。
【０００８】
したがって、ある状態を始点とする矢印線、およびその矢印線に付された文字から、その状態と、その状態において発生することが想定されるイベントが特定でき、またその状態とイベントの組に割り当てられたアクションが特定できる。
【０００９】
また、この状態遷移図においては、ある状態の子の状態は、その状態の中に記載されている。また、黒丸を始点とする矢印線の先にある状態は、その状態が属する階層において最初に移行する状態を示している。
【００１０】
図１の状態遷移表と図２の状態遷移図が示すシステムの振る舞いは同一である。すなわち、これらの図は、
（１）状態１においてイベントＥ１が発生すると処理Ａが実行されて状態２−１に遷移する
（２）状態２−１においてイベントＥ１が発生すると状態２−２に遷移する
（３）状態２−２においてイベントＥ１が発生すると処理Ｂが実行されて状態２−１に遷移する
（４）状態２−２においてイベントＥ２が発生すると処理Ｃが実行されて状態１に遷移する
という４種類のアクションを表している。
【００１１】
図３は、図１、図２に示した対応情報に基づいて従来のプログラム生成装置が生成したＣソースコードのリストである。このＣソースコードは、現在のシステムの状態を記憶媒体から読み出すＧｅｔＳｔａｔｅ（）関数、および現在発生しているイベントを記憶媒体から読み出すＧｅｔＥｖｅｎｔ（）関数によって特定した状態およびイベントの組に基づいて、上記の（１）〜（４）のアクションを実行するような記載となっている。
【特許文献１】特開２００３−７６５４３号公報
【発明の開示】
【発明が解決しようとする課題】
【００１２】
しかし、従来のプログラム生成装置では、システムにおいて想定される状態をまず規定し、それらの状態に対応したアクションを設計書に記述するようになっている。したがって、設計書および生成したプログラムには、設計時に想定していない状態に対するアクションは全く含まれない。
【００１３】
このため、従来のプログラム生成装置で作成されたプログラムは、そのプログラムを実行するシステムの状態を示すデータが何らかの理由で想定外の値に変化してしまうと、システムの挙動が全く予期できないものとなってしまうという不安定性を有しており、自動車などの安全性を重視するシステムに適用することが困難であった。
【００１４】
本発明は上記点に鑑み、システムの状態とイベントとの組にアクションを割り当てる対応情報に基づいたプログラム生成において、生成されたプログラムの実行時に状態が想定外のものになった場合でも、システムの挙動の不安定化を抑えることを目的とする。
【課題を解決するための手段】
【００１５】
上記目的を達成する本発明の第１の特徴は、プログラム生成プログラムが、コンピュータに、「状態に対してアクションを割り当てた対応情報を読み出し、読み出された前記対応情報中の状態が例外状態であるか通常状態であるかを、その状態が例外状態である旨の情報がこの対応情報に含まれているか否かに基づいて判定し、読み出された対応情報に基づいてプログラムＡを生成する機能」を実現させることである。
【００１６】
ただし、プログラムＡとは、「現在の状態を記憶媒体中の状態情報に基づいて検出し、検出した状態が通常状態に該当するという条件に基づいて、この状態に上記の対応情報が割り当てたアクションを実行し、検出した状態が通常状態のいずれにも該当しないという条件に基づいて、例外状態に対応情報が割り当てたアクションを実行する」という機能をコンピュータに実現させるものである。
【００１７】
このようになっているので、このプログラム生成プログラムを実行するコンピュータは、例外状態と、それが例外状態である旨の情報を含む対応情報を読み出すと、「検出した状態が通常状態のいずれにも該当しない」という条件に基づいて、その例外状態に対応情報が割り当てたアクションを実行するプログラムＡを生成する。
【００１８】
したがって、対応情報に基づいたプログラム生成において、生成されたプログラムＡの実行時に状態が想定外のものになった場合でも、例外状態に割り当てられたアクションが実行されるようになっているので、システムが予期しない挙動をすることがない。それゆえ、本発明によって、システムの挙動の不安定化を抑えることができる。
【００１９】
なお、ここでは、「判定手段によって通常状態と判定された状態」を単に通常状態といい、「判定手段によって例外状態と判定された状態」を単に例外状態という。
【００２０】
また、プログラム実行プログラムの実行によってコンピュータが読み出す対応情報は、状態とイベントとの組に対してアクションを割り当てており、プログラムＡがコンピュータに実現させる機能は、検出した状態が通常状態に該当するという条件に基づいて、この状態および検出したイベントの組に対応情報が割り当てたアクションを実行し、検出した状態が通常状態のいずれにも該当しないという条件に基づいて、例外状態および検出したイベントの組に対応情報が割り当てたアクションを実行し、さらに実行するアクションが状態遷移を含んでいる場合、遷移先の状態を状態情報として記憶媒体に記憶させるものであってもよい。
【００２１】
このようになっていることで、検出した状態が通常状態のいずれにも該当しない場合におけるシステムの挙動について、発生イベントに基づいたよりきめ細かい設定を行うことができる。
【００２２】
また、より具体的には、プログラム生成プログラムによって実現するコンピュータの機能において、読み出しは、状態とイベントとの組に対するアクションの割り当てについての対応情報を、一組毎に読み出すようになっており、判定は、対応情報が一組読み出される毎に、その組に係る状態が例外状態であるか通常状態であるかを判定するようになっており、プログラムＡの生成は、読み出された組に係る状態が例外状態と判定される毎に、当該プログラムＡの、コンピュータに「検出した状態が通常状態のいずれにも該当しないという条件に基づいて、例外状態に対応情報が割り当てたアクションを実行する」という機能を実現させる部分を生成するようになっていてもよい。
【００２３】
また、例外状態は、検出した状態が通常状態のいずれにも該当しない場合のための状態であるので、対応情報中のアクションにおいて、例外状態への遷移が含まれていると、不都合が発生する可能性がある。そこで、プログラム生成プログラムは、読み出された対応情報において、１つの状態に割り当てられたアクションが、例外状態への状態遷移を含むことに基づいて、警告メッセージを出力するよう、コンピュータを機能させてもよい。
【００２４】
このようになっていることで、例外状態へ遷移する状態が対応情報に含まれることが警告されるので、開発者が例外状態へ遷移する状態を対応情報に含める恐れが低減する。
【００２５】
また、対応情報における状態は、１つの状態が複数の状態を子として含むことができる階層構造となっている場合があるので、そのような場合は、生成されるプログラムＡは、それを実行するコンピュータが、検出した状態がある通常状態に該当し、かつその該当する通常状態の子の通常状態のいずれにも該当しないという条件に基づいて、その該当する通常状態の子である例外状態に対応情報が割り当てたアクションを実行するようになっていてもよい。
【００２６】
また、プログラム生成プログラムは、それを実行するコンピュータが、読み出された対応情報中の例外状態が子の状態を有することに基づいて、警告メッセージを出力するよう作成されていてもよい。このようになっていることで、開発者が、例外状態の子の状態を対応情報に含める恐れが低減する。
【００２７】
また、プログラム生成プログラムは、それを実行するコンピュータが、読み出された対応情報中の１つの状態に、複数の例外状態が子として含まれていることに基づいて、警告メッセージを出力するよう作成されていてもよい。このようになっていることで、１つの状態の子に複数の例外状態がある状況、すなわち、同一階層に複数の例外状態がある状況、が発生する恐れが低減する。
【００２８】
また、対応情報中の「例外状態である旨の情報」とは、対応情報中の状態の名称に含まれる所定の情報であってもよいし、対応情報に含まれる、例外情報であるか否かを示す所定のデータ項目であってもよい。
【００２９】
また、対応情報は、状態を示す図形および状態遷移を示すこれら図形間の矢印を有する図形情報であり、「例外状態である旨の情報」とは、その図形が所定の形状であるという情報であってもよい。
【００３０】
また、この第１の特徴に係る発明は、このようなプログラム生成プログラムに規定される機能を実現するプログラム生成装置としても、また、このようなプログラム生成プログラムに規定される手順を実施するプログラム生成方法としても、把握することが可能である。
【００３１】
また、本発明の第２の特徴は、ユーザの入力に基づいて状態とその状態に対応するアクションを割り当てた対応情報を記憶媒体に記憶させる機能をコンピュータに実現させる対応情報生成プログラムが、さらに、ユーザによる例外状態およびその例外状態に対応するアクションの設定入力を受け付ける機能、および受け付けた例外状態に受け付けた対応するアクションを割り当てる情報および当該状態が例外状態である旨の情報を含む対応情報を、上記のプログラム生成装置に読み出させるために記憶媒体に記憶させる機能を、コンピュータに実現させることである。
【００３２】
このようになっていることで、ユーザの例外状態および対応するアクションの入力に基づいて、その例外状態にそのアクションを割り当てる情報および当該状態が例外状態である旨の情報を含む対応情報が記憶媒体に記憶され、上記のプログラム生成装置がこれに基づいて上記のプログラムＡを生成する。
【００３３】
したがって、対応情報に基づいたプログラム生成において、生成されたプログラムＡの実行時に状態が想定外のものになった場合でも、例外状態に割り当てられたアクションが実行されるようになっているので、システムが予期しない挙動をすることがない。それゆえ、本発明によって、システムの挙動の不安定化を抑えることができる。
【００３４】
また、対応情報生成プログラムは、それを実行するコンピュータが、例外状態への状態遷移を含むアクションの設定入力を受け付けることに基づいて警告メッセージを出力するよう作成されていてもよい。このようになっていることで、例外状態へ遷移する状態が対応情報に含まれることが警告されるので、開発者が例外状態へ遷移する状態を対応情報に含める恐れが低減する。
【００３５】
また、対応情報における状態は、１つの状態が複数の状態を子として含むことができる階層構造となっている場合があるので、そのような場合は、対応情報生成プログラムは、受け付けた例外状態がある通常状態の子であり、かつその通常状態の子として他の例外状態が対応情報に含まれていることに基づいて、警告メッセージを出力するよう作成されていてもよい。このようになっていることで、１つの状態の子に複数の例外状態がある状況、すなわち、同一階層に複数の例外状態がある状況、が発生する恐れが低減する。
【００３６】
また、対応情報生成プログラムは、それを実行するコンピュータが、ユーザから、例外状態が子の状態を持つような入力を受けたことに基づいて、警告メッセージを出力するよう作成されていてもよい。このようになっていることで、開発者が、例外状態の子の状態を対応情報に含める恐れが低減する。
【００３７】
また、対応情報生成プログラムは、それを実行するコンピュータが、対応情報に基づく映像を表示装置に表示させるように作成されており、表示させる映像は、状態を示す図形および状態遷移を示すこれら図形間の矢印を有する図形情報であり、状態を示す図形は、通常状態と例外状態とで異なっているようになっていてもよい。このようになっていることで、ユーザにとって通常状態と例外状態との区別が容易になる。
【００３８】
また、対応情報生成プログラムは、それを実行するコンピュータが、対応情報に基づく映像を表示装置に表示させるように作成されており、表示させる映像は、状態とアクションの対応関係を表形式で示すものであり、その表中、例外状態については、それが例外状態であることを示すマークが付されているようになっていてもよい。このようになっていることで、ユーザにとって通常状態と例外状態との区別が容易になる。
【００３９】
また、この第２の特徴に係る発明は、このような対応情報生成プログラムに規定される機能を実現する対応情報生成装置としても、また、このような対応情報生成プログラムに規定される手順を実施する対応情報生成方法としても、把握することが可能である。
【００４０】
また、本発明の第３の特徴は、プログラム生成プログラムが、状態に対してアクションを割り当てた対応情報を読み出し、読み出された対応情報が、状態が例外となった際のアクションの指定を含むことを判定し、読み出された対応情報に基づいてプログラムＡを生成することである。
【００４１】
ただし、プログラムＡは、「現在の状態を記憶媒体中の状態情報に基づいて検出し、  検出した状態に該当する対応情報中の状態に対応情報が割り当てたアクションを実行し、  検出した状態が対応情報中の状態のいずれにも該当しないという条件に基づいて、対応情報において指定された、状態が例外となった際のアクションを実行する」という機能をコンピュータに実現させるものである。
【００４２】
このようになっているので、このプログラム生成プログラムを実行するコンピュータは、状態が例外となった際のアクションの指定を含む対応情報を読み出すと、「検出した状態が対応情報中の状態のいずれにも該当しない」という条件に基づいて、その例外状態に対応情報が割り当てたアクションを実行するプログラムＡを生成する。
【００４３】
したがって、対応情報に基づいたプログラム生成において、生成されたプログラムＡの実行時に状態が想定外のものになった場合でも、対応情報において指定された、状態が例外となった際のアクションが実行されるようになっているので、システムが予期しない挙動をすることがない。それゆえ、本発明によって、システムの挙動の不安定化を抑えることができる。
【００４４】
また、対応情報における状態は、１つの状態が複数の状態を子として含むことができる階層構造となっている場合があるので、そのような場合は、生成されるプログラムＡは、それを実行するコンピュータが、検出した状態が対応情報中のある状態に該当し、かつその該当する状態の子の状態のいずれにも該当しないという条件に基づいて、対応情報において、その該当する状態の子から成る状態階層に関連づけて指定された、状態が例外となった際のアクションを実行するようになっていてもよい。
【００４５】
また、この第３の特徴に係る発明は、このようなプログラム生成プログラムに規定される機能を実現するプログラム生成装置としても、また、このようなプログラム生成プログラムに規定される手順を実施するプログラム生成方法としても、把握することが可能である。
【００４６】
また、本発明の第４の特徴は、ユーザの入力に基づいて状態とその状態に対応するアクションを割り当てた対応情報を記憶媒体に記憶させる機能をコンピュータに実現させる対応情報生成プログラムが、「ユーザによる状態が例外となった際のアクションの指定の設定入力を受け付け、受け付けた指定を含む対応情報を、上記のプログラム生成装置に読み出させるために記憶媒体に記憶させる」機能をコンピュータに実現させることである。
【００４７】
このようになっていることで、ユーザによる状態が例外となった際のアクションの指定の設定入力に基づいて、その指定の情報を含む対応情報が記憶媒体に記憶され、上記のプログラム生成装置がこれに基づいて上記のプログラムＡを生成する。
【００４８】
したがって、対応情報に基づいたプログラム生成において、生成されたプログラムＡの実行時に状態が想定外のものになった場合でも、例外状態に割り当てられたアクションが実行されるようになっているので、システムが予期しない挙動をすることがない。それゆえ、本発明によって、システムの挙動の不安定化を抑えることができる。
【００４９】
また、この第４の特徴に係る発明は、このような対応情報生成プログラムに規定される機能を実現する対応情報生成装置としても、また、このような対応情報生成プログラムに規定される手順を実施する対応情報生成方法としても、把握することが可能である。
【発明を実施するための最良の形態】
【００５０】
（第１実施形態）
以下、本発明の第１実施形態について説明する。図４に、本実施形態に係るプログラム生成装置と対応情報生成装置とを兼ねるパーソナルコンピュータ１の構成を示す。このパーソナルコンピュータ１は、ディスプレイ１１、入力装置１２、ＲＡＭ１３、ＲＯＭ１４、ＨＤＤ（ハードディスクドライブ）１５、ＣＰＵ（演算装置に相当する）１６等から構成される。
【００５１】
ディスプレイ１１は、ＣＰＵ１６（コンピュータに相当する）から受けた映像信号を、ユーザ（開発者）に対して映像として表示する。
【００５２】
入力装置１２は、キーボード、マウス等から構成され、ユーザが操作することにより、その操作に応じた信号をＣＰＵ１６に出力する。
【００５３】
ＲＡＭ１３は読み出し、書き込み可能な揮発性記憶媒体であり、ＲＯＭ１４は読み出し専用の不揮発性記憶媒体であり、ＨＤＤ１５は読み出し、書き込み可能な不揮発性記憶媒体である。ＲＯＭ１４、ＨＤＤ１５には、ＣＰＵ１６が読み出して実行するプログラム等があらかじめ記憶されている。またＨＤＤ１５には、後述するモデルが記憶されている。
【００５４】
ＲＡＭ１３は、ＣＰＵ１６がＲＯＭ１４、ＨＤＤ１５に記憶されたプログラムを実行する際に、そのプログラムを一時的に保存するための記憶領域、および作業用のデータを一時的に保存するための記憶領域として用いられる。
【００５５】
ＣＰＵ１６は、パーソナルコンピュータ１に電源が投入されることによって起動すると、ＲＯＭ１４から所定のブートプログラムを読み出して実行し、このブートプログラムに規定されるオペレーティングシステム（以下ＯＳと記す）その他のプログラムをＨＤＤ１５から読み出して実行することにより、起動処理を行う。起動処理以後、電源が遮断されるまで、ＣＰＵ１６は、入力装置１２からの信号、ＯＳによって予め定められたスケジュール等に基づいて、ＨＤＤ１５に記録されている各種プログラムを当該ＯＳ上のプロセスとして実行する。また、上記の起動処理およびプロセスにおいて、ＣＰＵ１６は必要に応じて入力装置１２から信号の入力を受け付け、またディスプレイ１１に映像信号を出力し、またＲＡＭ１３、ＨＤＤ１５に対してデータの読み出し／書き込みの制御を行う。
【００５６】
本実施形態においては、ＣＰＵ１６は、プログラム生成プログラムを実行するようになっている。このプログラム生成プログラムは、ＲＡＭ１３またはＨＤＤ１５に記憶されている対応情報を参照するようになっている。
【００５７】
対応情報とは、状態とイベントの組に対応するアクションの割り当てを示す情報をいう。対応情報は、ユーザがテキストエディタ、表計算アプリケーション等を用いて別途あらかじめ作成しておいてもよい。また、ＣＰＵ１６は、対応情報生成プログラムを実行することで、ユーザによる状態、イベントおよびアクションの入力に基づいて、状態とイベントの組に、その組に対応するアクションを割り当て、その割り当てを示す対応情報を、ＨＤＤ１５に記憶させ、かつユーザに表示する機能をＣＰＵ１６に実現させるようになっていてもよい。
【００５８】
対応情報の例としては、状態遷移表、状態遷移図等がある。プログラム生成プログラムは、対応情報を読み出し、その対応情報中の状態が例外状態であるか通常状態であるかを判定し、その判定結果に基づいて、以下の機能（１）〜（３）をコンピュータに実現させるソースコードを生成するためのプログラムである。
機能（１）：  現在の状態を記憶媒体中の状態情報に基づいて検出する
機能（２）：  イベントの発生を検出する
機能（３）：  検出した状態およびイベントに割り当てられたアクションを実行する
ただし、機能（３）は、より具体的には、「検出した状態が通常状態に該当する」という条件に基づいて、この状態および検出したイベントの組に対応情報が割り当てたアクションを実行し、「検出した状態が子を有さない通常状態のいずれにも該当しない」という条件に基づいて、例外状態および検出したイベントの組に対応情報が割り当てたアクションを実行することを特徴とする。
【００５９】
なお、ソースコードが実現させる機能の記載において、通常状態とは、プログラム生成プログラム１００の実行によって通常状態と判定された状態のことである。また、例外状態とは、プログラム生成プログラム１００の実行によって例外状態と判定された状態のことである。
【００６０】
ここで、状態とは、このソースコードからコンパイルによって生成されるオブジェクトコードを実行するコンピュータシステムにおける、当該コードの実行状態をいう。本実施形態においては、１つの状態は、複数の状態を子として含むことができるようになっている。またそれら子状態は、更に複数の状態を子として含むことができるようになっている。ここで、１つの状態の子の状態は、同一の状態階層に属する状態であるという。また、どの状態の子でもない状態は、最上位の状態階層に属する状態であるという。
【００６１】
このように、状態は階層構造となることができ、状態の親子関係は任意の階層だけ多重させることができる。
【００６２】
また、コードの実行が想定通りであれば、実行状態は必ず、子を有さない状態（以降末端状態と記す）のいずれかに該当するようになっている。そして、本実施形態においては、現在の実行状態は、その実行状態に該当する末端状態を含む全ての状態（親状態、親状態の親状態等）に該当するものとする。
【００６３】
また、本実施形態においては、ある状態の子状態とは、その状態が直下に含む状態のみをいい、その直下の状態にさらに含まれる状態は除外される。例えば、状態αが子として状態β、状態γを含んでおり、状態βが更に子として状態δ、状態εを有している場合、
状態αにとっては、状態δ、状態εは、子状態ではなく孫状態である。
【００６４】
また、イベントとは、その実行におけるコンピュータシステム外部からの入力の変化やコンピュータシステム内部で発生した変化等、コンピュータシステムに対する刺激をいう。また、アクションとは、そのプログラムによって規定された演算処理、入出力処理、および状態間の遷移の処理等をいう。
【００６５】
以下、このようなプログラム生成プログラムを実行するＣＰＵ１６の作動について詳細に説明する。まず、図５に、本実施形態においてＣＰＵ１６がソースコードを生成する際に参照する対応情報の一例を示す。
【００６６】
この図に例示される対応情報は、表形式の状態遷移表である。この状態遷移表は、３行６列構成のセルから成り、最上行を除く各行が１つのイベントについてのアクションの情報を示している。また、最左列を除く各行が末端状態の１つについてのアクションの情報を示している。したがって、この状態遷移表においては、ある行のある列に該当するセルは、その列に対応する末端状態にシステムがあるときに、その行に対応するイベントが発生した場合のアクションを表すことになる。
【００６７】
なお、各行のイベントの名称および識別番号は、その行の最左列のセルに表され、各列の状態の名称および識別番号は、その列の最上行のセルに表される。例えば、２行目は、名称がＥ１、識別番号が０のイベントについての行であり、４列目は、名称が状態２−２、識別番号が１−１の状態についての行である。また、その末端状態の列の最上行には、その状態を含む状態全ての名称および識別番号が、上から階層順に格納されるようになっている。
【００６８】
ここで状態の識別番号の付与規則について説明する。まず、最上位の階層に属する状態の識別番号は、１つの数字である。そして、それ以外の状態の識別番号は、親状態の識別番号に１つのハイフンと１つの階層内番号を続けて付加したものとなっている。階層内番号とは、同じ階層中の状態間で同じにならないように割り当てられた数字である。
【００６９】
例えば、図５の状態遷移表においては、状態２の識別番号は数字の１であり、状態２−２の番号は、状態２の識別番号にハイフンを付し、さらに自己の階層内番号として１を付した１−１となっている。
【００７０】
以上のようなデータ構造により、状態遷移表は、末端状態およびイベントの組のそれぞれに、一種類のアクションを割り当てることになる。
【００７１】
また、一行目の最左端を除く各セルには、ｄｅｆａｕｌｔマークおよびｅｘｃｅｐｔｉｏｎマークの有無の情報を示すことができる。ｄｅｆａｕｌｔマークがあるということは、そのセルに対応する状態が始状態であることを表している。ｅｘｃｅｐｔｉｏｎマークがあるということは、そのセルに対応する状態が例外状態であることを表している。したがって、このｄｅｆａｕｌｔマーク、ｅｘｃｅｐｔｉｏｎマークのための項目は、状態が例外情報であるか否かを示す所定のデータ項目である。
【００７２】
なお、この図５の例においては、状態遷移表の各列は、末端状態に割り当てられたアクションを表すようになっているが、状態遷移表は、末端以外の状態についての列を有していてもよい。そして、そのような末端以外の状態の列には、その列に対応する状態にシステムがあるときに、その行に対応するイベントが発生した場合のアクションを表すようになっていてもよい。
【００７３】
次に、このような状態遷移表から、その状態遷移表に規定された機能をコンピュータに実現させるプログラム生成プログラムについて説明する。図６〜図９に、このプログラム生成プログラム１００のフローチャートを示す。また、プログラム生成プログラム１００が実行されることで、ＣＰＵ１６によって図５の対応表から生成されるＣソースコードを図１０に示す。なお、図１０のＣソースコードの各行の左端には、説明の便宜のために、実際にはない行番号を付してある。
【００７４】
ＣＰＵ１６は、ユーザによる入力装置１２を用いた所定の起動操作を検出することにより、このプログラム生成プログラム１００の実行を開始する。
【００７５】
ＣＰＵ１６は、まずステップ１１０で、全体の前処理を行う。例えば、図５の状態遷移表の場合には、生成するＣソースコード等のためのＲＡＭ１３上の作業領域の確保、図１０の０１行目〜０７行目、および６９行目のコードの生成等を行う。０１行目〜０３行目、および６９行目のコードは、図１０のＣソースコード全体を１つの関数として表現するための文であり、０３行目および６９行目の中括弧で挟まれた領域が、この関数の処理内容となる。
【００７６】
また、０４、０５行目は、現在の状態を記憶する変数ｓｔ、ｓｔ２の型宣言文である。また、０６行目は、発生するイベントを記憶する変数ｅｖの型宣言文である。また、０７行目は、ＧｅｔＥｖｅｎｔ関数を呼び出し、その戻り値を変数ｅｖに代入することで、記憶媒体中の発生したイベントの情報を参照するための文である。なお、ＧｅｔＥｖｅｎｔ関数は、呼び出されることで、前回呼び出されて以降発生したイベントの識別番号を戻り値として返すように外部で定義されている。
【００７７】
なお、０１行目〜０７行目の内容は、参照する状態遷移表の内容に基づいて、後述する後処理で変更が加えられるようになっていてもよい。
【００７８】
続いてステップ１２０で、ＲＡＭ１３またはＨＤＤ１５中の状態遷移表を読み出し、その状態遷移表中の最初のイベント、すなわち２行目のイベントを選択する。例えば、図５においては、イベントＥ１に相当する。
【００７９】
続いてステップ１３０で、上述したステップ１２０の処理または後述するステップ１８０の処理の結果現在イベントを選択しているか否かを判定する。選択していれば続いてステップ１４０を実行し、選択していなければ続いてステップ１９０を実行する。
【００８０】
ステップ１４０では、選択したイベントに対する前処理のコードを生成する。具体的には、当該選択したイベントに割り当てられたアクションが実行される条件を示す文を生成する。例えば、図５の状態遷移表の場合には、イベントＥ１に対応する０８行目のコメント文および０９行目のｉｆ文、イベントＥ２に対応する３８行目のコメント文および３９行目のｉｆ文が当該コードに相当する。なお、０９行目のｉｆ文中の評価式（ｅｖ  ＆＆  ＥｖｅｎｔＥ１）は、発生したイベントの１つにイベントＥ１がある場合にのみ真となる。また、３９行目の評価式（ｅｖ  ＆＆  ＥｖｅｎｔＥ２）は、発生したイベントの１つにイベントＥ２がある場合にのみ真となる。
【００８１】
続いてステップ１５０では、状態階層を最上位に設定する。すなわち、ＲＡＭ１３中の設定状態階層を指定する階層変数に、最上位の状態階層、すなわち、親を有さない状態から成る状態階層の指定を代入する。なお、階層変数には、その状態階層を特定する情報として、その状態階層の状態の親状態の識別番号が含まれる。これは、その状態階層がどの状態の子階層であるかの情報である。ただし、最上位の状態階層の場合は、階層変数には、その状態階層がどの状態の子階層でもない旨の情報が含まれる。
【００８２】
続いてステップ１６０では、選択イベント、すなわちステップ１２０またはステップ１８０で選択されたイベント、についての各状態のための処理を行うためのサブルーチン２００を呼び出す。この処理によって、当該選択されたイベントと各状態との各組に割り当てられたアクションが、そのイベントがその状態のときに発生した場合のアクションの実行文として、ステップ１５０で生成された前処理用の文の後に追加される。このサブルーチン２００の処理については、後述する。
【００８３】
続いてステップ１７０で、選択イベントに対する後処理のコードを生成する。具体的には、当該選択したイベントに割り当てられたアクションが記述される範囲の終わりを示す文を、ステップ１６０で生成されたコードの後に生成する。例えば、図５の状態遷移表の場合には、３７行目および６８行目の、ｉｆブロックの終了を示す中括弧が、当該コードに相当する。
【００８４】
続いてステップ１８０では、状態遷移表中の次のイベントを選択する。次のイベントとは、状態遷移表の各行に対応するイベントのうち、プログラム生成プログラム１００の実行開始以来まだ選択されていないものを１つ選択することに相当する。プログラム生成プログラム１００の実行開始以来まだ選択されていないイベントが１つもなければ、何も選択しない。ステップ１８０の後、続いてステップ１３０を実行する。
【００８５】
ステップ１３０でイベントが選択されていないと判定された場合に続いて実行されるステップ１９０では、全体の後処理を行う。例えば、図５の状態遷移表においては、上記の０１〜０７行の内容を、読み出した状態遷移表に基づいて変更する。
【００８６】
次に、サブルーチン２００の処理について詳述する。図６に、このサブルーチン２００のフローチャートを示す。
【００８７】
ＣＰＵ１６は、このサブルーチン２００の実行を開始すると、まずステップ２１０で、設定された状態階層に対する前処理を行う。設定された状態階層とは、プログラム生成プログラム１００のステップ１５０または後述するステップ４３０で階層変数として設定された、この各状態用サブルーチンに渡す引数としての状態階層である。
【００８８】
ここでいう前処理とは、具体的には、現在の状態が、その状態階層中のどの状態に該当するかを、記憶媒体中の状態情報に基づいて特定するための文、およびその状態階層における各状態において選択イベントが発生したときのアクションの実行文を列挙するための範囲の始まりを示す文を生成することをいう。文の生成位置は、このサブルーチン２００の呼び出し前に生成されたコード、すなわち、ステップ１４０における前処理のコードまたは後述するステップ４１０における前処理のコード、の直後である。
【００８９】
例えば、図５の状態遷移表の場合には、１０行目、１７行目、４０行目および４８行目の代入文、ならびに１１行目、１８行目、４１行目および４８行目のｓｗｉｔｃｈ文が、当該コードに相当する。
【００９０】
上記の１０行目、１７行目および４０行目の代入文は、記憶媒体に記憶された現在の状態情報を読み出すＧｅｔＳｔａｔｅ（）関数を呼び出し、その戻り値を状態用の変数に代入する文である。
【００９１】
ここで、ＧｅｔＳｔａｔｅ関数について説明する。ＧｅｔＳｔａｔｅ関数は、呼び出されることで、記憶媒体に記憶されている状態情報を読み出し、呼び出し時に渡された引数に基づいて、状態情報の一部を戻り値として返すように外部で定義されている。なお、後述する通り、状態情報は、実行状態が該当する末端状態の識別番号となっている。
【００９２】
具体的には、ＧｅｔＳｔａｔｅ関数は、−１を第２引数として呼び出されることで、読み出した状態情報中の、ハイフンを区切りとした最初の数字部分、すなわち、最上位の状態階層において実行状態に該当する状態の識別番号を戻り値として返す。そして、ＧｅｔＳｔａｔｅ関数は、１を第２引数として呼び出されることで、読み出した状態情報中の、ハイフンを区切りとした２番目の数字部分、すなわち、最上位の状態階層の子階層において実行状態に該当する状態の識別番号を戻り値として返す。このようになっていることで、ＧｅｔＳｔａｔｅ関数は、現在の実行状態が、その状態階層中のどの状態に該当するかを、状態情報に基づいて特定することができる。
【００９３】
続いてステップ２２０で、設定された状態階層で最初の状態を選択する。なお、ある状態がどの状態階層に属するかは、その状態が状態階層変数に含まれる識別番号に該当する状態の子状態であるか否かを、状態遷移表に基づいて判定する。
【００９４】
続いてステップ２３０で、ステップ２２０、または後述するステップ２７０で選択された状態があるか否かを判定する。あれば続いてステップ２４０を実行し、なければ続いてステップ２８０を実行する。
【００９５】
ステップ２４０では、選択された状態が例外状態であるか否かを、状態遷移表の当該状態の列の情報に基づいて判定する。具体的には、状態遷移表の当該状態の列中のｅｘｃｅｐｔｉｏｎマークがあることに基づいて、選択された状態が例外状態であることを判定する。なお、例外状態の名称は、特定の文字列（例えば“例外”）を含むように記載すると取り決められている場合、状態遷移表の当該状態の列中の状態の名称に、その特定の文字列が含まれることに基づいて、選択された状態が例外状態であると判定してもよい。例外状態である場合、続いてステップ２５０の処理を実行し、例外状態でない場合すなわち通常状態である場合、続いてステップ２６０の処理を実行する。
【００９６】
ステップ２５０では、選択された状態についての例外状態のコードを、ステップ２１０で生成した前処理用のコードの後に、生成する。例外状態のコードとは、「検出した状態が子を有さない通常状態のいずれにも該当しない」という条件に基づいて、例外状態および検出したイベントの組に状態遷移表が割り当てたアクションを実行する機能を記述するコードである。この例外状態のコード生成の処理については後述する。
【００９７】
ステップ２６０では、選択された状態についての通常状態のコードを、ステップ２１０で生成した前処理用のコードの後に、生成する。通常状態のコードとは、「検出した状態が通常状態に該当する」という条件に基づいて、この状態および検出したイベントの組に状態遷移表が割り当てたアクションを実行する機能を記述するコードである。なお、条件としては、「検出した状態が子を有さない通常状態に該当する」であってもよい。この通常状態のコード生成の処理については後述する。
【００９８】
ステップ２５０、２６０に続いては、ステップ２７０で、状態遷移表に基づいて、設定された状態階層中の次の状態を選択する。次の状態とは、設定された状態階層の状態のうち、今回のサブルーチン２００の実行開始以来まだ選択されていないものを１つ選択することに相当する。今回のサブルーチン２００の実行開始以来まだ選択されていないイベントが１つもなければ、何も選択しない。ステップ２７０の後、続いてステップ２３０を実行する。
【００９９】
ステップ２３０で状態が選択されていないと判定された場合に続いて実行されるステップ２８０では、設定された状態階層全体の後処理を行う。ここでいう後処理とは、具体的には、現在のその状態階層についての状態を特定するための文、およびその状態階層における各状態において選択イベントが発生したときのアクションの実行文を列挙するための範囲の終わりを示すコードを生成することをいう。例えば、図５の状態遷移表の場合には図１０のＣソースコードの３０行目、３６行目、６１行目および６７行目の中括弧が、当該コードに相当する。
【０１００】
ステップ２８０の後、サブルーチン２００の処理が終了し、処理はこのサブルーチン２００の呼び出し元の終了時点、すなわちステップ１７０の開始時点または後述するステップ４５０の開始時点に戻る。
【０１０１】
続いて、ステップ２５０の例外状態コード生成処理について詳述する。図８にこの処理の詳細なフローチャートを示す。
【０１０２】
まずステップ３１０で、現在設定された状態階層で例外状態のコードが既に生成済みか否かを判定する。生成済みの場合、現在の状態階層に例外状態が複数存在することになる。そこでこの場合、続いてステップ３７０で例外状態が複数存在する旨の警告メッセージをディスプレイ１１およびＨＤＤ１５に出力した上でステップ２５０の処理を終了する。生成済みでない場合、続いてステップ３２０の処理を実行する。
【０１０３】
ステップ３２０では、現在選択された例外状態が子状態を有しているか否かを、状態遷移表に基づいて判定する。子状態が存在する場合、続いてステップ３７０で例外状態の子状態が存在する旨の警告メッセージをディスプレイ１１およびＨＤＤ１５に出力した上でステップ２５０の処理を終了する。子状態が存在しない場合、続いてステップ３３０を実行する。
【０１０４】
ステップ３３０では、例外状態用のコードとして、「検出した状態が設定された状態階層のどの通常状態にも該当しない」という条件に基づいて、この例外状態および検出したイベントの組に対応情報が割り当てたアクションを実行するためのコードの前処理部分を、直前に生成されたコードのうしろに生成する。
【０１０５】
具体的には、「検出した状態が設定された状態階層のどの通常状態にも該当しない」という条件文、および、その条件文の条件が満たされたときに実行される文の範囲の開始位置を示す文を生成する。例えば、図５の状態遷移図の場合、図１０の２６行目、３２行目、５７行目および６３行目のｄｅｆａｕｌｔ：文が、当該コードに相当する。このｄｅｆａｕｌｔ文は、上述したｓｗｉｔｃｈ文およびｃａｓｅ文と対になって記述され、ｓｗｉｔｃｈ文の引数に指定された変数が、ｃａｓｅ文の指定する値のいずれにも合致しない場合、そのｄｅｆａｕｌｔ：文から対応するｂｒｅａｋ文までの範囲の文を実行する機能を実現するようになっている。
【０１０６】
ここで、「検出した状態が設定された状態階層のどの通常状態にも該当しない」ことは、その設定された状態階層についての状態の変数、例えば図１０においては変数ｓｔまたはｓｔ２が、ｃａｓｅ文が指定する値のいずれにも合致しないことに相当する。
【０１０７】
ステップ３４０では、例外状態に定義された処理のコードを生成する。すなわち、この例外状態および選択されたイベントの組に状態遷移表が割り当てたアクションを実行するためのコードを、ステップ３３０で生成した処理の後に生成する。例えば、図５の状態遷移図の場合、図１０の２７〜２８行目、３３〜３４行目、５４〜５５行目および６８〜６９行目のＡｃｔｉｏｎ（）関数およびＳｅｔＳｔａｔｅ（）関数の呼び出し文が、当該コードに相当する。なおここで、Ａｃｔｉｏｎ（）関数はその引数に記載された処理を実行するように、外部で定義された関数である。また、ＳｅｔＳｔａｔｅ（）関数は、ＧｅｔＳｔａｔｅ（）関数によって参照できるＲＡＭ等の記憶媒体中の状態情報を示す値を、その引数に記載された値に書き換えるように、外部で定義された関数である。ここで、ＳｅｔＳｔａｔｅ（）関数に渡される引数は、当該アクションが含む状態遷移の遷移先の識別番号である。
【０１０８】
ステップ３５０では、この例外状態から他の例外状態への遷移があるか否かを判定する。これは、直前のステップ３４０によって生成されたコード中に、ＳｅｔＳｔａｔｅ（）関数の呼び出し文があり、その引数の示す状態が例外状態である旨の情報が状態遷移図中にあるか否かで判定する。例外状態への遷移がある場合、続いてステッ３７０で、例外状態への遷移がある旨の警告メッセージをディスプレイ１１およびＨＤＤ１５に出力した上でステップ２５０の処理を終了する。例外状態への遷移がない場合、続いてステップ３６０の処理を実行する。
【０１０９】
ステップ３６０では、例外状態用のコードとして、「検出した状態が設定された状態階層のどの通常状態にも該当しない」という条件に基づいて、この例外状態および検出したイベントの組に対応情報が割り当てたアクションを実行するためのコードの後処理部分を生成する。
【０１１０】
具体的には、「検出した状態が設定された状態階層のどの状態とも合致しない」という条件が満たされたときに実行される文の範囲の終了位置を示す文を、ステップ３４０で生成したコードの後に、生成する。例えば、図５の状態遷移図の場合、図１０の２９行目、３５行目、６０行目および６６行目のｂｒｅａｋ文が、当該コードに相当する。
【０１１１】
ステップ３６０の後、ステップ２５０の処理は終了し、続いて上述したステップ２７０が実行される。
【０１１２】
続いて、ステップ２６０の通常状態のコード生成処理の詳細について説明する。この通常状態のコード生成処理の詳細なフローチャートを図９に示す。
【０１１３】
まずステップ４１０で、選択された通常状態用の前処理コードを、直前に生成されたコードのうしろに生成する。具体的には「検出した状態が当該通常状態に該当する」という条件文、および、その条件文の条件が満たされたときに実行される文の範囲の開始位置を示す文を生成する。例えば、図５の状態遷移図の場合、図１０の１２行目、１６行目、１９行目、２２行目、４２行目、４６行目、４９行目および５３行目のｃａｓｅ：文が、当該コードに相当する。
【０１１４】
続いてステップ４２０では、状態遷移表に基づいて、選択された状態に子状態が存在するか否かを判定する。子状態が存在する場合、続いてステップ４３０を実行し、子状態が存在しない場合、すなわち選択された状態が末端状態の場合、続いてステップ４６０の処理を実行する。
【０１１５】
ステップ４３０では、状態の階層を子状態の階層に設定する。具体的には、階層変数を、ステップ４２０で存在するとした子状態の階層を示す値に設定する。
【０１１６】
続いてステップ４４０では、選択イベントに対する各状態の処理、すなわち図７に詳細にフローチャートとして示したサブルーチン２００の処理を、再起的に呼び出して実行する。このようにすることで、処理が続いてステップ４５０に戻るときには、子状態以下の階層についてのコード生成が終了している。すなわち、このステップ２６０の開始時における選択状態についてのコードの内に、入れ子状に、子状態以下の階層についてのコードが追加される。
【０１１７】
続いてステップ４５０では、状態階層を元に戻す。すなわち、階層変数を、ステップ４３０で変更される前の値に戻す。
ステップ４５０の後、続いてステップ４６０を実行する。
【０１１８】
ステップ４６０では、選択状態に定義された処理のコードを生成する。すなわち、この状態および選択されたイベントの組に状態遷移表が割り当てたアクションを実行するためのコードを、ステップ４１０で生成した処理の後に生成する。例えば、図５の状態遷移図の場合、図１０の１３〜１４行目、２０行目、２３〜２４行目および５４〜５５行目のＡｃｔｉｏｎ（）関数およびＳｅｔＳｔａｔｅ（）関数の呼び出し文が、当該コードに相当する。
【０１１９】
続いてステップ４７０では、選択された通常状態から例外状態への遷移があるか否かを判定する。これは、直前のステップ４６０によって生成されたコード中に、ＳｅｔＳｔａｔｅ（）関数の呼び出し文があり、その引数の示す状態が例外状態である旨の情報が状態遷移図中にあるか否かで判定する。例外状態への遷移がある場合、続いてステッ４９０で、例外状態への遷移がある旨の警告メッセージをディスプレイ１１およびＨＤＤ１５に出力した上でステップ２６０の処理を終了する。例外状態への遷移がない場合、続いてステップ４８０の処理を実行する。
【０１２０】
ステップ４８０では、選択された状態の後処理のコードを生成する。具体的には、「検出した状態が選択された通常状態に該当する」という条件が満たされたときに実行される文の範囲の終了位置を示す文を、ステップ４６０で生成したコードの後に、生成する。例えば、図５の状態遷移図の場合、図１０の１５行目、２１行目、２５行目、４５行目、５２行目および５６行目のｂｒｅａｋ文が、当該コードに相当する。
【０１２１】
ステップ４８０の後、ステップ２６０の処理は終了し、続いて上述したステップ２７０が実行される。
【０１２２】
以上のようなプログラム生成プログラム１００をＣＰＵ１６が実行することで、パーソナルコンピュータ１は、ＲＡＭ１３またはＨＤＤ１５から状態遷移表を読み出す（ステップ１２０参照）。そして、その状態遷移表中のイベントを、ステップ１３０〜１８０を繰り返すことで１イベント毎に選択する。そして、選択したイベント毎にステップ２３０〜２７０を繰り返すことで、ある状態階層について、当該イベントと状態を１状態毎に選択する。そして、その状態が例外状態であるか通常状態であるかを、その状態が例外状態である旨の情報がこの対応情報に含まれているか否かに基づいて判定し（ステップ２４０参照）、読み出された対応情報に基づいて上記の（１）〜（３）の機能を有するＣソースコードを生成する（ステップ２５０、２６０参照）。そして、通常状態が子を有する場合は、ステップ４４０で、ステップ２１０〜２８０を再帰的に実行することで、最上位の階層から末端の階層まで全ての階層の状態について、上記の判定およびＣソースコードの生成が行われる。
【０１２３】
また、ステップ２１０〜２８０が再帰的に実行されることで、親子関係にある通常状態についてのＣソースコードは入れ子状に生成される。したがって、ある設定された階層の例外状態について生成されるコードにおいて、「検出した状態がその状態階層のどの通常状態にも該当しない」ことを判定する部分は、その親の階層の通常状態のコードにおいて、「検出した状態がその状態階層の通常状態に該当する」という条件が満たされた場合にのみ実行されるようになる。したがって、「検出した状態が設定された状態階層のどの通常状態にも該当しない」という条件は、その設定された状態階層が最上位のものでない限り、「検出した状態がある通常状態に該当し、検出した状態がその通常状態の子の通常状態のいずれにも該当しない」という条件と同等である。
【０１２４】
ここで、図１０のＣソースコードにおいては、現在の状態を記憶媒体中の状態情報に基づいて検出する機能（１）は、ＧｅｔＳｔａｔｅ（）関数を呼び出す部分によって実現される。そして、 イベントの発生を検出する機能（２）は、ＧｅｔＥｖｅｎｔ（）関数を呼び出す部分によって実現される。また、検出した状態およびイベントに割り当てられたアクションを実行する機能（３）は、ｃａｓｅ文とｂｒｅａｋ文、またはｄｅｆａｕｌｔ文とｂｒｅａｋ文に挟まれたＡｃｔｉｏｎ（）関数およびＳｅｔＳｔａｔｅ（）関数を呼び出す部分によって実現される。
【０１２５】
そして、機能（３）のうち、「検出した状態が通常状態に該当する」という条件に基づいて、この状態および検出したイベントの組に対応情報が割り当てたアクションを実行する機能は、ｃａｓｅ文とｂｒｅａｋ文に挟まれたＡｃｔｉｏｎ（）関数およびＳｅｔＳｔａｔｅ（）関数を呼び出す部分によって実現される。
【０１２６】
そして、機能（３）のうち、「検出した状態が子を有さない通常状態のいずれにも該当しない」という条件に基づいて、例外状態および検出したイベントの組に対応情報が割り当てたアクションを実行する機能は、ｄｅｆａｕｌｔ文とｂｒｅａｋ文に挟まれたＡｃｔｉｏｎ（）関数およびＳｅｔＳｔａｔｅ（）関数を呼び出す部分によって実現される。
【０１２７】
なお、「検出した状態が子を有さない通常状態のいずれにも該当しない」という条件が満たされる場合は、具体的には、「検出した状態が状態階層の通常状態のいずれにも該当しない」という条件が満たされる場合と、「検出した状態がある通常状態に該当し、かつ、検出した状態が、その通常状態の子階層において通常状態のいずれにも該当しない」という条件が満たさせる場合の２に分かれる。
【０１２８】
そして、「検出した状態が状態階層の通常状態のいずれにも該当しない」という条件が満たされる場合は、最上位の状態階層に属する例外状態に割り当てられたアクションが実行される。また、「検出した状態がある通常状態に該当し、かつ、検出した状態が、その通常状態の子階層において通常状態のいずれにも該当しない」という条件が満たさせる場合は、その該当する通常状態の子階層に属する例外状態に割り当てられたアクションが実行される。
【０１２９】
このようになっているので、対応情報に基づいたプログラム生成において、生成されたプログラムの実行時に状態が想定外のものになった場合でも、例外状態に割り当てられたアクションが実行されるようになっているので、システムが予期しない挙動をすることがない。それゆえ、本発明によって、システムの挙動の不安定化を抑えることができる。
【０１３０】
また、例外状態にもイベント毎にアクションが割り当てられているので、検出した状態が通常状態のいずれにも該当しない場合におけるシステムの挙動について、発生イベントに基づいたよりきめ細かい設定を行うことができる。
【０１３１】
また、例外状態は、検出した状態が末端の通常状態のいずれにも該当しない場合のため、すなわち状態が想定外となってしまった場合のための状態である。したがって、対応情報中のアクションにおいて、例外状態への遷移が含まれていると、不都合が発生する可能性がある。本実施形態のパーソナルコンピュータ１は、プログラム生成プログラム１００のステップ３５０とステップ３７０の組、およびステップ４７０とステップ４９０の組は、読み出された対応情報において、１つの状態に割り当てられたアクションが、例外状態への状態遷移を含むことに基づいて、警告メッセージを出力するようになっているので、例外状態へ遷移する状態が対応情報に含まれることが警告され、開発者が例外状態へ遷移する状態を対応情報に含める恐れが低減する。
【０１３２】
また、プログラム生成プログラム１００を実行することで、パーソナルコンピュータ１は、読み出された対応情報中の例外状態が子の状態を有することに基づいて、警告メッセージを出力するようになっている（ステップ３２０、ステップ３７０参照）。このようになっていることで、開発者が、間違って例外状態の子の状態を対応情報に含める恐れが低減する。
【０１３３】
また、プログラム生成プログラム１００を実行することで、パーソナルコンピュータ１は、読み出された対応情報中の１つの状態に、複数の例外状態が子として含まれていることに基づいて、警告メッセージを出力するよう作成されている（ステップ３１０、ステップ３７０参照）。このようになっていることで、１つの状態の子に複数の例外状態がある状況、すなわち、同一階層に複数の例外状態がある状況が発生する恐れが低減する。
【０１３４】
なお、本実施形態においては、プログラム生成プログラム１００が読み出す対応情報としては、図１１に示すような状態遷移図であってもよい。
この図１１の状態遷移図は、図５に示した状態遷移表と同等の内容を表している。したがって、図１１の状態遷移図から生成されるＣソースコードは、図５の状態遷移表と同じく、図１０のようになる。
【０１３５】
状態遷移図は、領域を画定する図形（以下領域図形と記す）と、その領域図形間を繋ぐ矢印線を有している。１つの領域図形が１つの状態に相当し、矢印線が状態間の遷移を示している。図１１においては、丸みのある長方形が通常状態に相当し、二重丸が例外状態に相当する。
【０１３６】
また、状態が親と子の関係にあるとき、親側の状態の領域図形は、子側の状態の領域図形を直接含むようになっている。したがって、ある階層に属する複数の状態の領域図形は、同じ親状態の領域図形に直接含まれる。また、どの領域図形にも含まれない領域図形は、最上位の階層の状態に対応する。図１１においては、例えば、領域図形３１に相当する状態２は、領域図形３２に相当する状態２−１、領域図形３３に相当する状態２−２を子として含んでいる。
【０１３７】
また、通常状態の領域図形には、その通常状態の名称および識別番号が表示されるようになっている。また、各矢印線には、その矢印線に相当する状態遷移の起こる原因となるイベントの名称、およびその状態遷移と共に実行される処理が記載される。図１１においては、例えば、矢印３４は、状態１においてイベントＥ１が発生すると、処理Ａと共に状態１から状態２への状態遷移が実行されることを示している。また矢印３４は、状態２−２においてイベントＥ２が発生すると、処理Ｃと共に状態２−２から状態１への状態遷移が実行されることを示している。また矢印３６は、状態２−１においてイベントＥ１が発生すると、状態２−１から状態２−２への状態遷移が実行されることを示している。
【０１３８】
また、黒丸の図形から矢印線で繋がれた先の状態が、その状態階層において最初に遷移する先の状態である。
【０１３９】
なお、例外状態は、通常状態と区別された特別な図形として表現してもよいが、通常状態と同じ領域図形を用いて表現してもよい。この場合は、例外状態の名称には、所定の文字列を含めるようにする等の取り決めをしておけば、どの状態が例外状態であるかを特定することができる。この場合は、例外状態の名称が、それが例外情報である旨の情報となる。このような場合、従来から用いられている状態遷移図作成プログラムを用いて例外状態を表現することが可能となる。
【０１４０】
なお、状態遷移図は、ＲＡＭ１３またはＨＤＤ１５に記憶されるときには、状態毎のエントリからなるデータとなり、各エントリは、その状態の階層、その状態の親状態、その状態の子状態、状態の名称および識別番号、状態の図形を示す情報、状態に定義されたイベント、そのイベントに対応するアクション（処理および状態遷移）の情報を有する。
【０１４１】
なお、状態遷移図においては、１つの状態は１つの領域図形として表され、同じイベントが複数の矢印線として表され、あるイベントに相当する矢印線が必ずしも全ての状態から始まっていないという特徴を有している。
【０１４２】
したがって、プログラム生成プログラム１００のように、まずイベントを選択し、次にそのイベント毎に状態階層を１つずつ選択し、その後にその状態階層中の状態を１つずつ選択し、それら選択されたイベントと状態の組に対するＣソースコードを生成するようになっている、いわゆるイベントドリブン型のプログラム以外にも、まず状態階層を選択し、次にその状態階層中の状態を１つずつ選択し、その後にその状態において定義されたイベントを１つずつ選択し、それら選択されたイベントと状態の組に対するＣソースコードを生成するようになっているような、いわゆるステートドリブン型のプログラム生成プログラムをＣＰＵ１６が実行することで、状態遷移図からＣソースコードを生成するようになっていてもよい。
（第２実施形態）
次に、本発明の第２実施形態について説明する。本実施形態が第１実施形態と異なるのは、第１実施形態において示した、ユーザの状態およびイベントの入力を受け付け、その入力に基づいて、状態とイベントの組に、その組に対応するアクションを割り当て、その割り当てを示す対応情報を、ＨＤＤ１５に記憶させ、かつユーザに表示する機能をＣＰＵ１６に実現させる対応情報生成プログラムが、下記（Ａ）〜（Ｄ）等の機能をＣＰＵ１６に実現させるようになっていることである。
機能（Ａ）：例外状態の入力を受け付ける。
機能（Ｂ）：ユーザから例外状態への状態遷移を含むアクションを受け付けることに基づいて警告メッセージを出力し、入力の受け付けをキャンセルする。
機能（Ｃ）：受け付けた例外状態と同一階層に他の例外状態が含まれていることに基づいて、警告メッセージを出力し、入力の受け付けをキャンセルする。
機能（Ｄ）：例外状態の子の状態が生じるような入力を受けたことに基づいて、警告メッセージを出力し、入力の受け付けをキャンセルする。
【０１４３】
以下、このような対応情報生成プログラムについて詳しく説明する。ＣＰＵ１６は、ユーザによる入力装置１２の操作に基づいて、対応情報生成プログラムの実行を開始する。そしてＣＰＵ１６は、この対応情報生成プログラムの実行中、編集対象となる対応情報（状態遷移図または状態遷移表）の指定をユーザの入力装置１２の操作により受け付け、その受け付けた対応情報をＨＤＤ１５から読み出し、状態遷移図ならば図形式で、状態遷移表なら表形式でディスプレイ１１に表示させる。
【０１４４】
そしてＣＰＵ１６は、この対応情報生成プログラムの実行中、状態、イベント、アクションの新規作成、内容変更、削除のためのユーザの操作を入力装置１２から受けると、その操作に基づいた新規作成、内容変更、削除を、その編集対象となる対応情報に反映させ、その反映の結果の対応情報をディスプレイ１１に表示させ、またＨＤＤ１５に上書きする。
【０１４５】
図１２および図１３に、この対応情報生成プログラムの一部であり、例外状態の受け付けを行うための部分である例外状態変更受付プログラム７００および例外状態新規受付プログラム８００のフローチャートを示す。
【０１４６】
例外状態変更受付プログラム７００は、通常状態から例外状態への変更を受け付けるための部分である。
【０１４７】
この例外状態変更受付プログラム７００の実行は、ユーザによる１つの状態の選択操作を入力装置１２が受けた時に始まり、まずステップ７１０で、その選択を受け付ける。
【０１４８】
続いてステップ７１５で、状態の属性を通常状態から例外状態に変更する要求を受け付ける。具体的には、通常状態から例外状態への変更のための所定の操作を、入力装置１２を介して検出するまで待ち、検出すると、続いてステップ７２０に進む。
【０１４９】
ステップ７２０では、編集対象の対応情報に基づいて、選択された状態と同一階層の他の状態に例外状態があるか否かを判定する。あれば続いてステップ７２５を実行し、なければ続いてステップ７４５で、警告情報として同一階層に２以上の例外状態がある旨のエラーメッセージを出力し、受け付けた変更の操作を編集中の対応情報に反映せずに破棄し、その後例外状態変更受付プログラム７００の処理を終了する。
【０１５０】
ステップ７２５では、編集対象の対応情報に基づいて、選択された状態が子状態を有しているか否かを判定する。有していなければ、続いてステップ７３０を実行し、有していなければ続いてステップ７４５で、警告情報として子を有する例外状態を作成しようとしている旨のエラーメッセージを出力し、受け付けた変更の操作を編集中の対応情報に反映せずに破棄し、その後例外状態変更受付プログラム７００の処理を終了する。
【０１５１】
ステップ７３０では、編集対象の対応情報に基づいて、選択された状態から例外状態への遷移が１つでも定義されているか否かを判定する。例外状態への遷移が定義されているとは、当該状態に割り当てられたアクション中に、例外状態への遷移が含まれていることをいう。例外状態への遷移が含まれてなければ、続いてステップ７３５の処理を実行する。例外状態への遷移が含まれていれば、続いてステップ７４５で、警告情報として例外状態への遷移がある状態を作成しようとしている旨のエラーメッセージを出力し、受け付けた変更の操作を編集中の対応情報に反映せずに破棄し、その後例外状態変更受付プログラム７００の処理を終了する。
【０１５２】
ステップ７３５では、選択された状態を例外情報に変更する。具体的には、対応情報中の、選択された状態の属性の値を例外状態である旨の値に変更する。
【０１５３】
続いてステップ７４０では、選択された状態の表現を例外状態用に変更する。具体的には、ステップ７３５で変更された後の対応情報を、ＨＤＤ１５に上書きし、またディスプレイ１１に出力する。これによって、ディスプレイ１１に表示される当該状態が、通常状態用の表示から、例外状態用の表示に変化する。ステップ７４０の後、例外状態変更受付プログラム７００の処理は終了する。
【０１５４】
このような例外状態変更受付プログラム７００を実行するＣＰＵ１６は、対応情報中の通常状態を例外状態に変更する要求を受け付けると（ステップ７１５参照）、変更対象の状態と同じ状態階層に他の例外状態がなく（ステップ７２０参照）、変更対象の状態が子を有さず（ステップ７３０参照）、変更対象への遷移が定義されていない（ステップ７３５参照）という３つの条件が満たされる場合に、この変更対象の状態を例外状態に変更し（ステップ７３５参照）、変更結果をディスプレイ１１、ＨＤＤ１５に出力する（ステップ７４０参照）。そして、これら３つの条件の１つでも満たされない場合は、警告情報を出力し、変更の要求をキャンセルする（ステップ７４５参照）。
【０１５５】
次に、例外状態新規受付プログラム８００について説明する。例外状態新規受付プログラム８００は、対応情報生成プログラムの、例外状態の新規追加を受け付けるための部分である。
【０１５６】
この例外状態新規受付プログラム８００の実行は、ユーザによる新たな例外状態作成のための操作を入力装置１２が受けた時に始まり、まずステップ８１０で、新たな例外状態の定義、すなわち名称等の情報の入力を受け付ける。
【０１５７】
続いてステップ８２０で、どの状態階層に例外状態を定義するかの選択をユーザに促す表示をディスプレイ１１に出力し、入力装置１２を用いたその選択操作を検出するまで待つ。
【０１５８】
選択操作を検出すると、続いてステップ８３０で、編集対象の対応情報に基づいて、選択された状態階層に他の例外状態が存在するか否かを判定する。他の例外状態存在しない場合、続いてステップ８４０を実行する。例外状態が存在する場合、続いてステップ８５０で、警告情報として同一階層に２以上の例外状態がある旨のエラーメッセージを出力し、受け付けた状態追加の操作を編集中の対応情報に反映せずに破棄し、その後例外状態新規受付プログラム８００処理を終了する。
【０１５９】
ステップ８４０では、編集対象の対応情報の選択された状態階層に、ステップ８１０で受け付けた情報に基づいて、新規な例外状態を追加し、その追加が反映された対応情報をディスプレイ１１およびＨＤＤ１５に出力し、その後例外状態新規受付プログラム８００の処理を終了する。
【０１６０】
このような例外状態新規受付プログラム８００を実行するＣＰＵ１６は、例外状態を新規追加する要求を受け付けると（ステップ８１０、８２０参照）、変更対象の状態と同じ状態階層に他の例外状態がない（ステップ８３０参照）という条件が満たされる場合に、受け付けた状態を新規例外状態として対応情報に追加し、追加結果をディスプレイ１１、ＨＤＤ１５に出力する（ステップ８４０参照）。そして、この条件が満たされない場合は、警告情報を出力し、新規追加の要求をキャンセルする（ステップ８５０参照）。
【０１６１】
次に、図１４に、この対応情報生成プログラムの一部であり、例外状態の受け付けを行うための部分であるイベント新規受付プログラム９００のフローチャートを示す。
【０１６２】
イベント新規受付プログラム９００は、対応情報生成プログラム中の、編集対象の対応情報の状態に新たにイベントを定義するための部分である。
【０１６３】
このイベント新規受付プログラム９００の実行は、ユーザによる新たなイベント定義の対象となる状態の選択操作を入力装置１２が検出したときに始まり、まず、ステップ９１０では、その選択操作を受け付け、対象の状態を特定する。
【０１６４】
続いてステップ９２０で、当該選択した状態に対するイベントの新規定義の旨の操作を入力装置１２が検出するまで待ち、検出すると、その要求を受け付け、続いてステップ９３０に進む。
【０１６５】
続いてステップ９３０で、選択した状態でそのイベントが発生したときの遷移先の状態選択を促す旨のメッセージをディスプレイ１１に出力し、ユーザによる入力装置１２を用いた選択を検出すると、続いてステップ９４０を実行する。
【０１６６】
ステップ９４０では、ステップ９３０で選択された遷移先の状態が例外状態であるか否かを、編集対象の対応情報に基づいて判定する。例外状態でなければ続いてステップ９５０を実行する。例外状態であれば続いてステップ９７０で、警告情報として遷移先が例外情報である旨のエラーメッセージを出力し、受け付けたイベントを編集中の対応情報に反映せずに破棄し、その後例外状態新規受付プログラム９００の処理を終了する。
【０１６７】
ステップ９５０では、イベントの内容、すなわち、イベントの名称、識別番号、選択した状態でそのイベントが発生したときの処理等の設定の入力を促す表示をディスプレイ１１に行わせ、入力装置１２に対する設定操作を検出するまで待ち、設定操作があると、続いてステップ９６０を実行する。
【０１６８】
ステップ９６０では、検出した設定の内容を、編集対象の対応情報に反映させる。すなわち、選択された状態から選択された遷移先へ移るためのイベントの名称、そのイベントの発生時の処理等の情報を対応情報に追加する。そして、この内容が反映された後の対応情報を、ディスプレイ１１に出力し、またＨＤＤ１５に上書きする。ステップ９６０の後、イベント新規受付プログラム９００の処理は終了する。
【０１６９】
このようなイベント新規受付プログラム９００を実行するＣＰＵ１６は、ある状態に対するイベントの新規追加の要求を受け付けると（ステップ９２０、９３０参照）、その状態においてそのイベントが発生したときの遷移先が例外状態でない（ステップ９４０参照）という条件が満たされる場合に、受け付けたイベントを、その状態における新規イベントとして対応情報に追加し、追加結果をディスプレイ１１、ＨＤＤ１５に出力する（ステップ９６０参照）。そして、この条件が満たされない場合は、警告情報を出力し、イベント追加の要求をキャンセルする（ステップ９７０参照）。
【０１７０】
ＣＰＵ１６が以上のような例外状態変更受付プログラム７００、例外状態新規受付プログラム８００、イベント新規受付プログラム９００を含む対応情報生成プログラムを実行することで、パーソナルコンピュータ１は、ユーザによる例外状態とイベントの組、およびその組に対応するアクションの設定入力を受け付ける。そして、受け付けた組に受け付けた対応するアクションを割り当てる情報および当該状態が例外状態である旨の情報を含む情報を、対応情報としてＨＤＤ１５に記憶させる、さらにディスプレイ１１に表示させる。
【０１７１】
このようになっていることで、ユーザの例外状態、イベント、および対応するアクションの入力に基づいて、その例外状態とイベントの組にそのアクションを割り当てる情報および当該状態が例外状態である旨の情報を含む対応情報が記憶媒体に記憶され、第１実施形態に示したプログラム生成プログラム１００の実行によって、この対応情報に基づいてＣソースコードがプログラムＡ生成される。
【０１７２】
また、対応情報生成プログラムは、例外状態への状態遷移を含むアクションを受け付けることに基づいて、警告メッセージを出力して受け付けたアクションをキャンセルするよう作成されているので、例外状態へ遷移する状態が対応情報に含まれることが警告されるので、開発者が例外状態へ遷移する状態を対応情報に含める恐れが低減する。
【０１７３】
また、対応情報生成プログラムは、受け付けた例外状態と同一階層に他の例外状態がある場合、すなわち、受け付けた例外状態がある通常状態の子であり、かつ通常状態の子として他の例外状態が対応情報に含まれている場合、警告メッセージを出力して受け付けた例外状態をキャンセルするよう作成されているので、１つの状態の子に複数の例外状態がある状況、すなわち、同一階層に複数の例外状態がある状況、が発生する恐れが低減する。
【０１７４】
また、対応情報生成プログラムは、ユーザから、例外状態の入力を受け付けることで、子を有する例外状態が生成されることに基づいて、警告メッセージを出力して受け付けた入力をキャンセルするよう作成されているので、開発者が、例外状態の子の状態を対応情報に含める恐れが低減する。
【０１７５】
なお、上記のステップ７４０、８４０および９６０におけるディスプレイ１１の表示映像が状態遷移図である場合、図１１に示したように、例外状態は二重丸、通常状態は角が丸い長方形という風に、例外状態と通常状態の図形が異なっているので、ユーザにとって通常状態と例外状態との区別が容易になる。
【０１７６】
また、上記のステップ７４０、８４０および９６０におけるディスプレイ１１の表示映像が状態遷移表である場合、図５に示したように、例外状態には、それが例外状態である旨の印として、ｅｘｅｐｔｉｏｎマークが付されるようになっていてもよい。
【０１７７】
なお、上記の各実施形態において、ＣＰＵ１６が、プログラム生成プログラムおよび対応情報生成プログラムを実行するコンピュータに相当する。
【０１７８】
また、ＣＰＵ１６が、プログラム生成プログラム１００のステップ１２０の処理を実行することで、読み出し手段として機能する。
【０１７９】
また、ＣＰＵ１６が、図７のステップ２４０を実行することで、判定手段として機能する。
【０１８０】
また、ＣＰＵ１６が、図７のステップ２５０およびステップ２６０が、生成手段、として機能する。
【０１８１】
また、ＣＰＵ１６が、図１２のステップ７１０、７１５、図１３のステップ８１０、図１４のステップ９１０を実行することで、受付手段として機能する。
【０１８２】
また、ＣＰＵ１６が、図１２のステップ７４０、図１３のステップ８４０、図１４のステップ９６０を実行することで、記憶制御手段および表示制御手段として機能する。
【０１８３】
また、ＣＰＵ１６が、図１２のステップ７４５、図１３のステップ８５０、図１４のステップ９７０を実行することで、警告手段として機能する。
【０１８４】
また、対応情報生成プログラムは、ユーザから、例外状態の子として状態の入力を受けたことに基づいて、警告メッセージを出力し、受けた入力をキャンセルする警告手段としてＣＰＵ１６を機能させるようになっていてもよい。
【０１８５】
また、図１０に示したＣソースコードが、プログラム生成プログラムの実行によって生成されるプログラムＡに相当する。
【０１８６】
また、例えばＣＰＵ１６等のコンピュータが、図１０のＣソースコードの１０行目、１７行目、４０行目、４７行目のＧｅｔＳｔａｔｅ（）関数の呼び出し部分を実行することで、状態検出機能を実現する。
【０１８７】
また、例えばＣＰＵ１６等のコンピュータが、図１０の７行目のＧｅｔＥｖｅｎｔ（）関数の呼び出しを実行することで、イベント検出機能を実現する。
【０１８８】
また、例えばＣＰＵ１６等のコンピュータが、図１０の１２〜１５行目、１９〜２１行目、２２〜２５行目、５３〜５６行目の、ｃａｓｅ文、Ａｃｔｉｏｎ（）関数およびＳｅｔＳｔａｔｅ（）関数の呼び出し、ｂｒｅａｋ文の部分を実行することで、通常実行機能を実現する。
【０１８９】
また、例えばＣＰＵ１６等のコンピュータが、図１０の２７〜２９行目、３２〜３５行目、５７〜６０行目、６３〜６６行目の、ｄｅｆａｕｌｔ文、Ａｃｔｉｏｎ（）関数およびＳｅｔＳｔａｔｅ（）関数の呼び出し、ｂｒｅａｋ文の部分を実行することで、例外実行機能を実現する。
【０１９０】
また、本実施形態の状態遷移図および状態遷移表は、例外状態とイベントとの組にアクションを割り当てているが、必ずしもこのようになっておらずともよい。例えば、例外状態には、イベントによらずにアクションが割り当てられていてもよい。そしてこのような状態遷移図および状態遷移表から生成するプログラムは、現在の状態が末端の通常状態のいずれにも該当しない場合、その例外状態に割り当てられたアクションを実行するよう、コンピュータを機能させるようになっていてもよい。
【０１９１】
また、上記の実施形態の対応情報においては、状態階層毎に例外状態が設けられているが、必ずしもこのようになっておらずともよい。例えば、１つの状態遷移図、状態遷移表には、状態階層数にかかわらずただ１つだけ例外状態が設けられ、プログラム生成装置は、「検出した状態が末端の状態のいずれにも該当しない場合、その例外状態に割り当てられたアクションを実行する機能をコンピュータに実現させる」プログラムを生成するようになっていてもよい。
【０１９２】
また、本実施形態におけるプログラム生成装置からによって生成されるのはＣソースコードだが、プログラム生成プログラムから生成されるのはソースコードに限らず、オブジェクトコードであってもよい。
【０１９３】
また、本実施形態においては、プログラム生成プログラムの実行によって生成されたプログラム中、「検出した状態が末端の状態のいずれにも該当しない場合」を検出するための文としては、ｓｗｉｔｃｈと対で現れるｄｅｆａｕｌｔ文が用いられているが、必ずしもこれに限らない。例えば、ｉｆ文と対で現れるｅｌｓｅ文が用いられてもよい。
【０１９４】
また、本実施形態においては、対応情報中における、状態が例外となった際のアクションの指定が、ある状態が例外状態である旨の情報、およびその例外状態に割り当てられたアクションの指定の情報として実現されているが、必ずしもこのようになっている必要はない。
【０１９５】
例えば、対応情報中の状態は、例外状態と通常状態とを区別する情報は有さず、状態に例外が発生した場合に実行するアクションの情報、すなわち例外アクション情報を付加情報として有するようになっていてもよい。そして更に、例外アクション情報は、対応情報中の各状態階層のそれぞれに１つずつ関連づけられた形で、対応情報中に記載されていてもよい。
【０１９６】
例外アクション情報が状態階層毎に割り当てられている場合、プログラム生成プログラムを実行するＣＰＵ１６が、対応情報を読み出し、以下の機能（ａ）〜（ｅ）をコンピュータに実現させるようなソースコードを生成するようになっていればよい。
機能（ａ）：  現在の状態を記憶媒体中の状態情報に基づいて検出する
機能（ｂ）：  イベントの発生を検出する
機能（ｃ）：  検出した状態およびイベントに割り当てられたアクションを実行する
機能（ｄ）：  検出した状態が対応情報中の状態のいずれにも該当しないという条件に基づいて、最上位の状態階層に割り当てられた例外アクションを実行する。
機能（ｅ）：  検出した状態が対応情報中のある状態に該当し、かつその該当する状態の子の状態のいずれにも該当しないという条件に基づいて、その子の状態が属する状態階層に関連づけられた例外アクションを実行する。
【０１９７】
また、このような例外アクションの入力を受け付けるために、対応情報生成プログラムは、第２実施形態で示した（Ａ）〜（Ｄ）の機能に代えて、状態階層と関連づけられた例外アクションの入力を受け付け、受け付けた例外アクションを含む対応情報を、ＨＤＤ１５に記憶させ、ディスプレイ１１に表示させる機能をＣＰＵ１６に実現させるようになっていてもよい。
【０１９８】
具体的には、ディスプレイ１１に例外アクション設定受付用の表示を行い、ユーザによる１２を用いた、関連する状態階層およびアクションの設定入力を受けると、その受け付けた設定入力をＨＤＤ１５に記憶させ、さらにその例外アクションの存在を示す対応情報の表示をディスプレイ１１に行わせる。
【０１９９】
例えば、対応情報が状態遷移図なら、受け付けた関連する状態階層を子として有する状態の領域図形内部に、受け付けたアクションを示す文字列や例外アクションがある旨のマークを表示させる。また、対応情報が状態遷移表なら、受け付けた関連する状態階を子として有する状態の列に、例外アクションがある旨、またはそのアクションの内容を示すマークを表示させてもよい。この際、受け付けた関連する状態階層が最上位の階層なら、図５のような表の１行１列目に、例外アクションがある旨、またはそのアクションの内容を示すマークを表示させてもよい。
【図面の簡単な説明】
【０２００】
【図１】従来の状態遷移表を示す図表である。
【図２】従来の状態遷移図である。
【図３】従来の状態遷移表、状態遷移図から生成されるＣソースコードのリストである。
【図４】本発明の第１実施形態におけるパーソナルコンピュータ１のハードウェア構成を示す図である。
【図５】状態遷移表の一例を示す図表である。
【図６】プログラム生成プログラム１００のフローチャートである。
【図７】サブルーチン２００のフローチャートである。
【図８】図７のステップ２５０を詳細に示すフローチャートである。
【図９】図７のステップ２６０を詳細に示すフローチャートである。
【図１０】プログラム生成プログラム１００を実行することで、図５の状態遷移表に基づいてＣＰＵ１６が生成するＣソースコードのリストである。
【図１１】状態遷移図の一例を示す図である。
【図１２】例外状態変更受付プログラム７００のフローチャートである。
【図１３】例外状態新規受付プログラム８００のフローチャートである。
【図１４】イベント新規受付プログラム９００のフローチャートである。
【符号の説明】
【０２０１】
１…パーソナルコンピュータ、１１…ディスプレイ、１２…入力装置、１３…ＲＡＭ、
１４…ＲＯＭ、１５…ＨＤＤ、１６…ＣＰＵ、３１〜３３…領域図形、
３４〜３６…矢印線、４１、４２…逆三角形、１００…プログラム生成プログラム、
２００…サブルーチン、７００…例外状態変更受付プログラム、
８００…例外状態新規受付プログラム、９００…イベント新規受付プログラム。
【図１】
2006012017.tif 000003
【図２】
2006012017.tif 000004
【図３】
2006012017.tif 000005
【図４】
2006012017.tif 000006
【図５】
2006012017.tif 000007
【図６】
2006012017.tif 000008
【図７】
2006012017.tif 000009
【図８】
2006012017.tif 000010
【図９】
2006012017.tif 000011
【図１０】
2006012017.tif 000012
【図１１】
2006012017.tif 000013
【図１２】
2006012017.tif 000014
【図１３】
2006012017.tif 000015
【図１４】
2006012017.tif 000016