(57)【特許請求の範囲】
【請求項１】
内部に状態を持ち、イベントの発生によって処理を行い、状態を遷移するシステムにおいて、
前記処理の対象を処理対象として格納する処理対象記述列、前記処理対象に対する処理の候補を格納する処理候補記述列および処理候補選択列を有する処理一覧表であって、前記処理一覧表における前記処理候補選択列は、前記状態を記述する関数情報記述行および前記関数情報記述行に記述された状態に対し前記処理対象記述列に記述された処理の候補を前記処理候補記述列から選択するための処理候補選択マスを備えるとともに、前記処理候補選択マスにおいて前記処理候補記述列から選択した候補を示す処理候補選択シンボルを有するものである前記処理一覧表を用いると共に、
前記処理一覧表の前記処理候補選択列におけるすべての処理候補選択マスを走査するために必要な情報を設定する表情報設定部と、
関数名取得部、処理取得部および候補取得部からなる表走査部と、
前記表走査部が取得したソースコードの状態情報、前記処理対象および前記処理の候補からソースコードを生成するコード出力部とを備え、
前記関数名取得部は、前記処理一覧表における前記関数情報記述行から生成するソースコードの状態情報を取得し、
前記処理取得部は、前記表情報設定部が設定した情報に基づいて走査を行い、前記処理一覧表における前記処理対象記述列から前記処理候補選択シンボルで示す処理対象を取得し、
前記候補取得部は、前記表情報設定部が設定した情報に基づいて走査を行い、前記処理一覧表における前記処理候補記述列から前記処理候補選択シンボルで示す前記処理の候補を取得することを特徴とするソースコード生成装置。
【請求項２】
前記処理一覧表は、前記状態に対して与えられる条件成立時の候補を選択するための条件付処理候補選択シンボルを有し、
かつ、
前記条件付処理候補選択シンボルの条件を記述する条件記述列を有する条件管理表を備え、
前記表走査部は、前記条件管理表から条件を取得するための条件取得部を有し、当該条件取得部で取得した条件に一致する条件付処理候補選択シンボルの処理対象と処理の候補とを取得することを特徴とする請求項１記載のソースコード生成装置。
【請求項３】
前記処理一覧表は、前記条件付処理候補選択シンボルを複数組み合わせて新たな条件を作成する新条件作成シンボルを有し、
前記表走査部は、前記新条件作成シンボルに一致する処理対象と処理の候補とを取得することを特徴とする請求項２記載のソースコード生成装置。
【請求項４】
表走査部は、１つの処理対象の処理候補選択マス中に存在する処理候補選択シンボルの個数が１以外であった場合は、処理一覧表に誤りがあると判定することを特徴とする請求項１から請求項３のうちのいずれか１項記載のソースコード生成装置。
【請求項５】
表走査部は、処理一覧表を走査した結果、一度も選択されていない処理の候補が存在する場合は、処理一覧表に誤りがあると判定することを特徴とする請求項１から請求項３のうちのいずれか１項記載のソースコード生成装置。
【請求項６】
内部に状態を持ち、イベントの発生によって処理を行い、状態を遷移するシステムにおいて、
前記処理の対象を処理対象として格納する処理対象記述列と、前記処理対象記述列に記述された前記処理対象に対する処理の候補を格納する処理候補記述列と、前記システムのアクションを記述する処理候補選択列とを有する処理一覧表を用いると共に、
前記処理一覧表におけるすべての前記処理候補選択列を走査するために必要な情報を設定する表情報設定部と、
処理取得部および候補取得部を備える表走査部と、
前記表走査部が取得した前記アクションと前記処理対象と前記処理の候補とからアクション記述を生成するコード出力部と、
前記アクション記述並びに前記状態および前記イベントを記述した遷移情報からソースコードを生成するソースコード生成部と
を備え、
前記処理取得部は、前記表情報設定部が設定した情報に基づいて走査を行い、前記処理対象記述列から前記アクションに対応した処理対象を取得し、
前記候補取得部は、前記表情報設定部が設定した情報に基づいて走査を行い、前記処理候補記述列から前記アクションに対応した処理の候補を取得することを特徴とするソースコード生成装置。
【請求項７】
プログラミング言語ごとのソースコードの記述方法を保持する言語データベースと、
表走査部が取得した情報に対応して生成するソースコードを記述するプログラミング言語を決定し、当該決定したプログラミング言語で前記ソースコードを記述する際に必要となる情報を言語データベースから取得し、当該取得した情報をコード出力部の入力として出力する言語情報取得部を備えたことを特徴とする請求項１から請求項５のうちのいずれか１項記載のソースコード生成装置。
【発明の詳細な説明】
【技術分野】
【０００１】
この発明は、開発対象のシステムの動作・処理を記述したソースコードの仕様に基づき、ソースコードを生成するソースコード生成装置に関するものである。
【背景技術】
【０００２】
組込みシステムのソフトウェア開発では、ソフトウェアの設計において状態遷移表が広く用いられている。状態遷移表では、状態、イベント、アクションの３つを用いてシステムを設計する。システムは状態を持ち、システムの内外で発生しうるイベントに応じて状態を遷移し、アクションを実行する。アクションとは、イベントと状態との組み合わせに対してそれぞれ定義された、システムの実行する処理の集合を指す。典型的な状態遷移表は、表の縦と横にそれぞれ状態とイベントを列挙し、各々の状態とイベントの組に対応する箇所にアクションと状態の遷移先を記述した２次元の表である。もう一つの典型的な状態遷移表は、表の縦と横にそれぞれ状態と状態の遷移先を列挙し、各々の状態と状態の遷移先の組に対応する箇所にアクションとイベントを記述した２次元の表である。以下では、表の縦と横にそれぞれ状態とイベントを列挙し、各々の状態とイベントの組に対応する箇所にアクションと状態の遷移先を記述した２次元の表のことを状態遷移表と呼ぶこととする。
【０００３】
図２６は一般的な状態遷移表を示す図であり、図示した状態遷移表を例に、状態遷移表によって設計されたシステムの動作について説明する。
図２６に示す状態遷移表は、状態がＳ１とＳ２とＳ３の３つ、イベントがＥ１とＥ２の２つ、アクションがＡｃｔｉｏｎ１とＡｃｔｉｏｎ２とＡｃｔｉｏｎ３の３つ存在する。状態遷移表では、状態とイベントからアクションと状態の遷移先が決定する。例えば、図２６において、状態がＳ１でイベントＥ１が発生したとき、Ａｃｔｉｏｎ１が実行され、Ｓ３へ遷移する。ここで、状態Ｓ２における”／”はアクション或いは状態の遷移先が存在しない、即ち状態が遷移しないことを、状態Ｓ３のイベントＥ２における”×”は、起こりえないこと（この例では、状態Ｓ３においてイベントＥ２が起こりえないこと）を指す。このように、状態とイベントとの組み合わせに対し、アクションと状態の遷移先とをそれぞれ定義することができるため、組込みシステムの設計に広く用いられている。
【０００４】
状態遷移表の作成後、システムの開発者は状態遷移表に基づきソースコードをプログラミング言語を用いて作成する。状態遷移表からソースコードを作成するとき、この作業を人手で行うと、ソースコードの作成に開発工数を要することや、ソースコード作成時に誤りが混入し、状態遷移表とソースコードとの間に不整合が生じることによって、システムが正常に動作しないといった問題があった。そのため、状態遷移表からソースコードを自動で生成するソースコード生成装置が考案されている（例えば、特許文献１参照）。状態遷移表からソースコードを自動生成することで、ソースコード作成に要する工数を削減し、状態遷移表とソースコードとの整合性も保持することができる。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開２００３−７６５４３号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
上記従来のソースコード生成装置では、システムの仕様を記述するのに状態遷移表、即ち２次元の表の縦と横へそれぞれ状態とイベントを列挙した表を用いていた。このため、状態の遷移先やアクションは合わせて一つの箇所に記述する必要があり、アクション内における処理量が多い場合においてアクションにおける記述内容の可読性が低下することとなり、処理の過不足が発生しやすいという問題点があった。また、状態およびイベントごとに対応したアクションを記述する必要が生じるため、記述量が増大することや記述に誤りが混入することによる想定外の処理の発生を防ぐことが困難であるという問題もあった。
【０００７】
この発明は上記のような課題を解決するためになされたもので、処理の過不足や想定外の処理の発生を防止することのできるソースコード生成装置を得ることを目的とする。
【課題を解決するための手段】
【０００８】
この発明に係るソースコード生成装置は、内部に状態を持ち、イベントの発生によって処理を行い、状態を遷移するシステムにおいて、処理の対象を処理対象として格納する処理対象記述列、処理対象に対する処理の候補を格納する処理候補記述列および処理候補選択列を有する処理一覧表であって、処理一覧表における処理候補選択列は、状態を記述する関数情報記述行および関数情報記述行に記述された状態に対し処理対象記述列に記述された処理の候補を処理候補記述列から選択するための処理候補選択マスを備えるとともに、処理候補選択マスにおいて処理候補記述列から選択した候補を示す処理候補選択シンボルを有するものである処理一覧表を用いると共に、処理一覧表の処理候補選択列におけるすべての処理候補選択マスを走査するために必要な情報を設定する表情報設定部と、関数名取得部、処理取得部および候補取得部からなる表走査部と、表走査部が取得したソースコードの状態情報、処理対象および処理の候補からソースコードを生成するコード出力部とを備え、関数名取得部は、処理一覧表における関数情報記述行から生成するソースコードの状態情報を取得し、処理取得部は、表情報設定部が設定した情報に基づいて走査を行い、処理一覧表における処理対象記述列から処理候補選択シンボルで示す処理対象を取得し、候補取得部は、表情報設定部が設定した情報に基づいて走査を行い、処理一覧表における処理候補記述列から処理候補選択シンボルで示す処理の候補を取得するものである。
【発明の効果】
【０００９】
この発明のソースコード生成装置は、処理一覧表において、処理対象記述列へ起こりうる処理を列挙し、処理候補記述列へ、処理対象記述列に記載された各々の処理対象に対する処理候補をすべて列挙し、処理候補選択マスへ状態および処理対象ごとに選択する候補を記述し、表走査部が処理一覧表を走査開始位置からすべて走査するようにしたので、仕様からのソースコードを生成することができる。また、各々の状態に対し、各処理に対して処理候補選択マスが存在するため、処理の抜けを防ぐことができ、処理候補選択マスでは直接処理を記述せず、処理候補記述列から選択することで、記述量を削減し、想定外の処理がなされることを防ぐことができる。
【図面の簡単な説明】
【００１０】
【図１】この発明の実施の形態１によるソースコード生成装置を示す構成図である。
【図２】この発明の実施の形態１によるソースコード生成装置のハードウェア構成図である。
【図３】この発明の実施の形態１によるソースコード生成装置の処理一覧表と生成されるプログラムコードを示す説明図である。
【図４】この発明の実施の形態１によるソースコード生成装置の処理一覧表の走査順を示す説明図である。
【図５】この発明の実施の形態１によるソースコード生成装置の動作を示すフローチャートである。
【図６】この発明の実施の形態１によるソースコード生成装置の処理対象記述列と生成されるプログラムコードを示す説明図である。
【図７】この発明の実施の形態１によるソースコード生成装置において処理一覧表にイベントと状態の遷移先を追加した例を示す説明図である。
【図８】この発明の実施の形態２によるソースコード生成装置を示す構成図である。
【図９】この発明の実施の形態２によるソースコード生成装置の処理一覧表を示す説明図である。
【図１０】この発明の実施の形態２によるソースコード生成装置の条件管理表を示す説明図である。
【図１１】この発明の実施の形態２によるソースコード生成装置の新条件作成シンボルとＣ言語との変換例を示す説明図である。
【図１２】この発明の実施の形態２によるソースコード生成装置の条件付選択シンボルおよび新条件作成シンボルからコードを生成する手順を示す説明図である。
【図１３】この発明の実施の形態２によるソースコード生成装置の動作を示すフローチャートである。
【図１４】この発明の実施の形態２によるソースコード生成装置の生成されるプログラムコードの例を示す説明図である。
【図１５】この発明の実施の形態２によるソースコード生成装置の同じ関数内で複数の処理候補選択列を持つ例において生成されるプログラムコードの概略を示す説明図である。
【図１６】この発明の実施の形態２によるソースコード生成装置の同じ関数内で複数の処理候補選択列を持つ処理一覧表の説明図である。
【図１７】この発明の実施の形態３によるソースコード生成装置において処理一覧表の誤りを検出する機能の説明図である。
【図１８】この発明の実施の形態３によるソースコード生成装置において処理一覧表の用いられていない処理候補を検出する機能の説明図である。
【図１９】この発明の実施の形態４によるソースコード生成装置の処理一覧表から従来の状態遷移表におけるアクション記述を生成する機能の説明図である。
【図２０】この発明の実施の形態４によるソースコード生成装置を示す構成図である。
【図２１】この発明の実施の形態５によるソースコード生成装置を示す構成図である。
【図２２】この発明の実施の形態５によるソースコード生成装置のプログラミング言語の違いによるソースコードの記述の違いを示す説明図である。
【図２３】この発明の実施の形態５によるソースコード生成装置の言語ＤＢを示す説明図である。
【図２４】この発明の実施の形態５によるソースコード生成装置の処理一覧表および言語ＤＢからプログラミング言語に応じたプログラムコードを生成する手順の説明図である。
【図２５】この発明の実施の形態５によるソースコード生成装置の中間言語を用いることで１つの記述から複数のプログラミング言語に応じた条件管理表を生成する手順を示す説明図である。
【図２６】従来の状態遷移表の一例を示す説明図である。
【発明を実施するための形態】
【００１１】
実施の形態１．
図１は、この発明の実施の形態１によるソースコード生成装置を示す構成図である。
図１に示すソースコード生成装置は、処理一覧表１とコード生成部２を備えている。
また、図２は、この発明のソースコード生成装置１００を実現するためのハードウェア構成図であり、表示装置１０１と、入力装置１０２と、ＣＰＵ１０３と、主記憶装置１０４と、補助記憶装置１０５とを備える。
【００１２】
開発者は、ソースコード生成装置１００におけるマウスやキーボードなどの入力装置１０２を用いて処理一覧表１を作成する。作成された処理一覧表１は、ＨＤＤ（Ｈａｒｄ  Ｄｉｓｋ  Ｄｒｉｖｅ）やＳＳＤ（Ｓｏｌｉｄ  Ｓｔａｔｅ  Ｄｒｉｖｅ）などの補助記憶装置１０５に保存される。コード生成部２を実現するためのコード生成プログラムは、補助記憶装置１０５に保存されており、ＣＰＵ１０３と主記憶装置１０４などにより実行される。コード生成部２は、処理一覧表１を入力とし、プログラムコード９を生成して補助記憶装置１０５に保存する。また、完了やエラー等の結果を表示装置１０１へ出力し、開発者へと通知する。
【００１３】
なお、以下では処理一覧表１はＥｘｃｅｌ（登録商標）を用いて作成・管理し、コード生成部２を実現するコード生成プログラムは、ＶＢＡ（Ｖｉｓｕａｌ  Ｂａｓｉｃ（登録商標）  ｆｏｒ  Ａｐｐｌｉｃａｔｉｏｎ）で実装し、プログラムコード９はＣ言語で記述されることを想定するが、本発明をこれらに限定するものではなく、他の表作成手段および他のプログラミング言語において適用することも可能である。
【００１４】
本発明は、開発するシステムの対象を限定しないが、システムが内部に状態を持ち、事象の発生によって処理を行い、状態を遷移する、従来、状態遷移図や状態遷移表を用いて開発していた組込みシステムの開発に適している。特に、エレベータやＨＭＩ（Ｈｕｍａｎ  Ｍａｃｈｉｎｅ  Ｉｎｔｅｒｆａｃｅ）のように、状態数が非常に多く、状態ごとの処理量も多いシステムの開発において効果的である。
【００１５】
処理一覧表１は、開発するシステムの仕様を記述するための表である。処理一覧表１の具体的な例を図３に示す。処理一覧表１は、処理対象記述列１０と、処理候補記述列１１と、処理候補選択列１２とを備える。
処理対象記述列１０は、各状態において行われうる処理について、処理対象の一覧を格納する列である。図３の例では、処理対象記述列１０にＶＡＲ１、ＶＡＲ２、ＶＡＲ３の３つが格納されている。これは、３つの変数ＶＡＲ１、ＶＡＲ２、ＶＡＲ３が処理の対象であることを示している。
処理候補記述列１１は、処理対象記述列１０に記述された各々の処理対象に対して、処理の候補を格納する列である。図３の例では、ＶＡＲ１およびＶＡＲ２には候補０と１が、ＶＡＲ３には候補０と１と２が格納されている。これは、２つの変数ＶＡＲ１、ＶＡＲ２のとり得る値が０或いは１の２値であり、ＶＡＲ３は０と１と２の３値をとり得ることを示している。
【００１６】
処理候補選択列１２は、関数情報記述行１３と、処理候補選択マス１４とを備える。関数情報記述行１３は、状態ごとの情報を格納する。ここで、状態ごとの情報とは、状態名や関数名、状態に対する補足説明などを指し、プログラムコード９を生成するために必要な関数名を含むことを除き、関数情報記述行１３に格納する情報を制限しない。図３の例では、状態１および状態２の２つの状態が存在し、それぞれの関数名が“ｓｔａｔｅ１”、“ｓｔａｔｅ２”であることを示している。
【００１７】
処理候補選択マス１４とは、一つの処理対象に対する行と一つの状態に対する列との交差領域のことを指す。処理候補選択マス１４は、１つの状態に対して処理対象記述列１０に格納された処理対象の数に等しい数だけ存在する。図３の例では、状態数が２、処理対象記述列１０に格納された処理対象の数が３であるため、処理候補選択マス１４は６個存在する。処理候補選択マス１４は、関数情報記述行１３に格納された各状態において、処理対象記述列１０に格納された各々の処理対象に対し、処理候補記述列１１に格納された候補から１つ選択して処理を決定する。候補の選択は、処理候補選択マス１４において、選択する候補に等しい行のセルへ処理候補選択シンボル１５を記述することで行う。ここでセルとは、行と列との交差領域を指す。即ち、処理候補選択マス１４は、対応する処理対象の候補の数に等しい数のセルから構成される。ここで図３の例では、状態１において処理候補選択シンボル１５は、ＶＡＲ１の０、ＶＡＲ２の０、ＶＡＲ３の１と等しい行に、計３つ記述されている。これは、状態１において、ＶＡＲ１およびＶＡＲ２の値は０、ＶＡＲ３の値は１となることを示している。
【００１８】
処理候補選択シンボル１５は、本発明において、“●”を用いているが、これは処理候補選択シンボル１５に成りうる文字の一例であり、任意の文字で代用することができる。また、処理候補選択シンボル１５は処理候補を選択するための一手段である。即ち、例えば、ラジオボタンやチェックボックス、プルダウンリストなど、他の手段で代用しても良い。
処理候補選択シンボル１５は、各処理対象の状態ごとの処理候補を決定する。このため、処理候補選択マス１４において、２つ以上の処理候補選択シンボル１５を記述してはならない。
【００１９】
処理候補選択マス１４には、処理候補記述列１１に格納された候補から１つ選択し、処理候補選択シンボル１５を記述するが、例えば、変数の値を以前のまま保持する場合など、候補を選択せず、処理を行わないことも起こりうる。このため、処理候補選択マス１４において１つも処理候補選択シンボル１５が存在しないとき、処理候補の選択が必要であるのに選択されておらず抜けがあるのか、或いは、選択する必要がないから選択されていないのか、を区別することができない。抜けがあるのか、意図的に記述されていないのか、両者を区別する手段は、これを限定しないが、例えば、意図的に記述しない場合は処理候補選択マス１４に斜線を引くなど、開発者およびコード生成部２が共に判別できる手段であれば良い。
【００２０】
コード生成部２は、処理一覧表１から情報を取得し、プログラムコード９を生成する。コード生成部２は、表情報設定部３と、表走査部４と、コード出力部８とを備える。
表情報設定部３は、表走査部４が処理一覧表１を走査するために必要な情報を設定する。図４は、表走査部４が処理一覧表１を走査するときの順序を矢印で示した図である。処理一覧表１の走査は、走査開始位置１６から開始して一列ずつ走査していき、走査終端行１７に到達すると、次の列へと移り、これをすべての列の走査が完了するまで繰り返す。
処理一覧表１の行数および列数は、開発するシステムに依存する。このため、処理一覧表１を走査するには、以下に示す情報を取得する必要がある。ここで、括弧内の値は、図４の例における行或いは列の値である。
・関数情報記述行１３の存在する行          （１、２行）
・走査開始位置１６の位置                  （３行３列）
・処理対象記述列１０の存在する列          （１列）
・処理候補記述列１１の存在する列          （２列）
・処理候補選択列１２の存在する列の範囲    （３−５列）
・走査終端行１７の行                      （９行）
【００２１】
以上の情報を取得する手段の一つとして、処理一覧表１において、上記に示した行或いは列の値を格納するためのセルを定め、表情報設定部３が記述された値を参照することが挙げられる。また、処理対象記述列１０や処理候補記述列１１は１列であるため、予め記述する列を固定すれば、コード生成部２において値を取得しなくても良い。
【００２２】
表走査部４は、関数名取得部５と、処理取得部６と、候補取得部７とを備える。関数名取得部５は、処理一覧表１の走査時に、関数情報記述行１３に記述された関数名を取得する。一方、処理取得部６と候補取得部７は、処理候補選択マス１４の走査時に、処理対象を処理対象記述列１０から、候補を処理候補記述列１１から取得する。
処理候補選択列１２を一列ずつ走査するとき、処理対象記述列１０の存在する列および処理候補記述列１１の存在する列の情報から、現在走査中の行における処理対象および候補を取得することができる。一列ずつ走査していき、処理候補選択シンボル１５が得られれば、処理候補選択マス１４における処理が決定し、処理候補選択シンボル１５が得られなければ、走査の対象を次の行へと移す。
【００２３】
コード出力部８は、表走査部４が取得した情報からコードを生成し、走査終了時にプログラムコード９を出力する。プログラムコード９は、関数情報記述行１３に記述された関数名の個数に等しい個数の関数で構成される。図３にプログラムコード９の一例を示す。プログラムコード９は、関数の集合であり、関数は、関数名および代入文から構成される。関数名は、関数名取得部５が取得した情報から、代入文は、処理取得部６および候補取得部７が取得した情報から、それぞれ生成する。図３の例では、状態１において処理候補選択シンボル１５が３つ存在する。一つ目の処理候補選択シンボルに等しい行に存在する処理対象はＶＡＲ１であり、候補は０であることから、生成される代入文は“ＶＡＲ１＝０；”となる。同様に、“ＶＡＲ２＝０；”、“ＶＡＲ３＝１；”の２つの代入文が生成される。
【００２４】
次に、実施の形態１のソースコード生成装置の動作を図５に示すフローチャートを用いて説明する。
ソースコード生成装置では、最初に表情報設定部３がステップＳＴ１で処理一覧表１の情報を設定する。ステップＳＴ２では、表走査部４が、処理一覧表１において走査していない列が存在するか否か判断し、存在すれば列の走査に移り、存在しなければステップＳＴ８で生成されたコードをコード出力部８から出力した後、処理を完了する。ステップＳＴ３では、関数名取得部５が上記で示した方法により関数名を取得する。ステップＳＴ４では、処理取得部６および候補取得部７が、現在走査中の行が列の最終行であるか否かを判断する。最終行であれば、ステップＳＴ７で現在走査中の列に対応する関数の生成を完了し、次の列へ移る。最終行でなければ、ステップＳＴ５で処理取得部６および候補取得部７によって処理対象および処理候補を取得して、上記で示した方法により代入文を生成し、ステップＳＴ６で次の行へと移る。
なお、これまで処理対象および候補の例として変数への値設定を扱ったが、これは、処理を変数への値設定に限定するものではない。想定される処理には、変数への値設定の他に、関数呼び出しや算術・論理演算が挙げられる。
【００２５】
図６は、処理として、関数呼び出しおよび算術演算を処理一覧表１に記述した例を示す。関数内で実行される処理は、変数への値の代入が発生する処理（以下、代入型と呼ぶ）、および変数への値の代入が発生しない処理（以下、非代入型と呼ぶ）の２つに大別することができる。代入型の例としては変数への値設定が、非代入型の例としては関数呼び出しが挙げられる。
【００２６】
代入型の処理では、左辺と右辺が存在する。左辺には、変数、配列、構造体などが、右辺には定数、変数、演算処理などが考えられるが、左辺を処理対象記述列１０へ、右辺となりうる処理を処理候補記述列１１へと格納すれることで、上記で示した変数の値設定と同様に処理することができる。代入型では、左辺と右辺の型を合わせる必要があるため、処理対象記述列１０に格納された各処理対象の型と、処理対象ごとの候補の型を合わせなければならない。
【００２７】
一方、非代入型の処理では、左辺と右辺は存在しない。そのため、処理対象記述列１０を空欄に、候補を処理候補記述列に格納すればよい。図６の例では、ｆｕｎｃＡ（）、ｆｕｎｃＢ（）、ｆｕｎｃＣ（）の３つの関数が候補として存在し、状態１ではｆｕｎｃＢ（）が呼び出される。なお、非代入型において、処理対象記述列１０を空欄にすると、処理対象を記述する必要がないのか、或いは、処理対象の記述が抜けているのか区別しづらいため、上記で示したように、斜線を引くなどしても良い。
なお、生成する関数について、局所変数の宣言や引数の指定などの処理が必要であれば、関数情報記述行１３へ情報を記述しておき、コード生成部２が参照できるようにすれば良い。
【００２８】
これまで説明した処理一覧表１では、処理候補選択列１２の各列がそれぞれ状態遷移表におけるアクションに対応する。そのため本実施の形態では、アクションを処理一覧表１で管理し、状態の遷移先は状態遷移表など、別の手段を用いて管理する。また、処理一覧表１へ状態の遷移先やイベントを追加しても良い。図７は、処理一覧表１へ状態の遷移先とイベントを追加した例を示す。図７の例は、図２６に示した従来の状態遷移表に対応しており、関数情報記述行１３において、上から順に状態、イベント、状態の遷移先を記述している。
【００２９】
このように、実施の形態１のソースコード生成装置では、起こりうる処理を列挙し、各々に対して処理候補選択マス１４が存在するため、処理の抜けを防ぐことができる。また、処理を状態ごとに別々に記述せず、処理候補から選択することで、記述へ誤りが混入することによる想定外の処理を防止し、同時に記述量も削減することができる。
【００３０】
以上説明したように、実施の形態１のソースコード生成装置によれば、内部に状態を持ち、イベントの発生によって処理を行い、状態を遷移するシステムにおいて、処理の対象を処理対象として格納する処理対象記述列と、処理対象に対する処理の候補を格納する処理候補記述列と、状態を記述する関数情報記述行と、関数情報記述行に記述された状態に対し処理対象記述列に記述された処理の候補を処理候補記述列から選択するための処理候補選択マスと、処理候補選択マスにおいて処理候補記述列から選択した候補を示す処理候補選択シンボルからなる処理候補選択列とを有する処理一覧表を用いると共に、処理一覧表の処理候補選択列におけるすべての処理候補選択マスを走査するために必要な情報を設定する表情報設定部と、処理一覧表における関数情報記述行から生成するソースコードの状態情報を取得する関数名取得部と、表情報設定部３が設定した情報に基づいて走査を行い、処理一覧表における処理対象記述列から処理候補選択シンボルで示す処理対象を取得する処理取得部と、表情報設定部が設定した情報に基づいて走査を行い、処理一覧表における処理候補記述列から処理候補選択シンボルで示す処理の候補を取得する候補取得部とからなる表走査部と、表走査部が取得したソースコードの状態情報と処理対象と処理の候補とからソースコードを生成するコード出力部とを備えたので、処理および各処理の候補をすべて記述しておき選択式にすることで、記述ミスによる想定外の処理を防止し、記述量も削減することができる。また、各処理に対して記述する処理候補選択マスが存在するため、処理の抜けを防ぐことができる。
【００３１】
実施の形態２．
実施の形態１に係るソースコード生成装置では、処理候補選択マス１４において処理候補選択シンボル１５を１つのみ選択していた。即ち、処理対象１つに対して、１つの状態で選択できる処理候補は１つに限定されていた。これに対し、条件に応じて複数の処理候補を選択して処理することができるようにしてもよく、これを実施の形態２として以下説明する。
【００３２】
図８は、本発明の実施の形態２によるソースコード生成装置のブロック図である。図８に示すソースコード生成装置は、図１に示すソースコード生成装置の構成に加えて、条件管理表１８と、コード生成部２ａの表走査部４ａに条件取得部１９を追加した構成である。この条件管理表１８は、条件に応じて複数の処理候補の選択を実現するために、条件を管理する表であり、条件取得部１９は、コード生成部２が処理一覧表１における条件分岐を検出し、条件管理表１８を参照することを実現する機能部である。
【００３３】
次に、実施の形態２に係るソースコード生成装置の動作について説明する。図９は、実施の形態２に係る処理一覧表１ａの例である。図３に示す実施の形態１における処理一覧表１と比較して、条件付処理候補選択シンボル２０と、新条件作成シンボル２１とをさらに備える。条件付処理候補選択シンボル２０は条件成立時の候補を選択するためのシンボルで、新条件作成シンボル２１は既存の条件を組み合わせて新たな条件を作成するためのシンボルである。
【００３４】
次に、図９を例に実施の形態２に係る処理一覧表１ａの記述方法について説明する。図９における状態１での処理については、実施の形態１の図３で示したものと同様であるため省略する。処理対象ＶＡＲ３に対する処理候補は０、１、２の３つ存在するが、状態２ではすべての候補に対して処理候補選択シンボル１５或いは条件付処理候補選択シンボル２０が記述されている。条件付処理候補選択シンボル２０は、条件が条件管理表１８にて管理されており、一つの条件に対し１つの番号が付与される。条件管理表１８へ条件を追加するとき、既に等しい条件が存在すれば、新たに条件を追加せず、既に追加されている条件を用いる。条件付処理候補選択シンボル２０は、処理候補選択シンボル１５に優先し、条件付処理候補選択シンボル２０が処理候補選択マス１４に複数存在するときは、上に記述された条件付処理候補選択シンボル２０が優先される。即ち、図９の例では、優先度は“＃１”、“＃２”、“●”の順となり、条件“＃１”が成立すれば０が、条件“＃１”が成立せず“＃２”が成立すれば１が、“＃１”と“＃２”が共に成立しなければ２が、ＶＡＲ３に代入される。
【００３５】
図１０は、条件管理表１８の一例を示した図である。条件管理表１８は、条件付処理候補選択シンボル記述列２２と、条件記述列２３とを備える。条件付処理候補選択シンボル記述列２２には、処理一覧表１ａにおいて用いられた条件付処理候補選択シンボル２０を昇順に格納する。条件記述列２３の各行には、同じ行に記述された条件付処理候補選択シンボル２０に対応する条件を記述する。例えば、Ｃ言語での条件記述例２４の“Ｘ＝＝１”は、同じ行に存在する“＃１”に対応する条件となる。以上より、図９における状態２でのＶＡＲ３の値は、条件“Ｘ＝＝１”が成立すれば０、条件“Ｘ＝＝１”が成立せず“Ｘ＝＝２”が成立すれば１、“Ｘ＝＝１”と“Ｘ＝＝２”が共に成立しなければ２となる。
【００３６】
次に、新条件作成シンボル２１について説明する。新条件作成シンボル２１は、条件付処理候補選択シンボル２０を複数組み合わせて、新しい条件を作成する。図９の例では、処理候補選択シンボル“＃１”と“＃２”を新条件作成シンボル“ｏｒ”を用いて、新たな条件“＃１ｏｒ＃２”を作成している。ここで“ｏｒ”は、論理和を表し、“＃１ｏｒ＃２”は“＃１”或いは“＃２”のいずれかの成立時に真となる。
【００３７】
図１１は、新条件作成シンボル２１とＣ言語での展開例を示している。図１１では新条件作成シンボルとして“ａｎｄ”、“ｏｒ”、“ｎｏｔ”の３つの例を示しており、それぞれ論理積、論理和、否定を表している。演算子には優先度が定められているため、優先度の逆転を防止する目的で展開後の条件付処理候補選択シンボル２０には括弧が付与されている。図１１に示した例は一例であり、新条件作成シンボル２１をこれらに限定するものではない。また、新条件作成シンボル２１とシンボルの表す意味は、１対１に対応していれば良く、命名規則は、これを限定しない。
【００３８】
図１２は、条件付処理候補選択シンボル２０と、新条件作成シンボル２１との組み合わせ“＃１ａｎｄ（＃２ｏｒ＃３）”から構成される条件を作成する例を示している。条件の作成では、最初に新条件作成シンボル２１を展開する。その後、条件付処理候補選択シンボル２０に対応する条件を条件管理表１８から取得する。条件を作成するためには、条件付処理候補選択シンボル２０と、新条件作成シンボル２１とを分離する必要がある。分離の手段として、処理一覧表１ａを記述するとき、条件付処理候補選択シンボル２０と新条件作成シンボル２１の間に空白を挿入するよう定めることで、挿入された空白から両者を分離することができる。
【００３９】
以上説明した、実施の形態２に係るソースコード生成装置の動作の流れを、図１３に示すフローチャートを用いて説明する。なお、関数名の取得や処理一覧表１ａの走査手順は実施の形態１と同様であるため省略し、図１３では、処理候補選択マス１４から情報を取得し、ソースコードを生成する部分のみの動作を示している。
最初にステップＳＴ１１で、表走査部４ａは処理候補選択マス１４から１行読み取り、条件が存在するか否か判断する。条件が存在しなければ、ステップＳＴ１５へ移り、存在すれば、ステップＳＴ１２へ移る。ステップＳＴ１２では、条件取得部１９が、条件の組み合わせ、即ち新条件作成シンボル２１が存在するか否か判断する。存在すればステップＳＴ１３へ移り、存在しなければ、新条件作成シンボル２１を展開する必要がないためステップＳＴ１４へ移る。ステップＳＴ１３およびステップＳＴ１４では、上記で示した方法により、条件の組み合わせを展開し、条件管理表１８から条件を取得する。ステップＳＴ１５では、処理候補選択マス１４の最後まで走査したか否かを判断し、最後でなければ、ステップＳＴ１１へと遷移し、最後であればステップＳＴ１６で、コード出力部８がプログラムを生成し、表走査部４ａは現在走査中の処理候補選択マス１４の走査を完了する。
【００４０】
上述した実施の形態１では、ひとつの処理対象に対して候補が一意に決定する、即ち処理候補選択マス１４内には１つの処理候補選択シンボル１５のみ存在した。一方で、実施の形態２では、処理候補選択シンボル１５に加え条件付処理候補選択シンボル２０も存在し、かつ処理候補選択マス１４を最後まで走査しないと条件付処理候補選択シンボル２０の数を決定できない。このため、図１３に示すフローチャートでは、ステップＳ１５で処理候補選択マス１４の最後まで走査したか否かを判断した後、プログラムを生成する。
【００４１】
図１４は、図９に示した処理一覧表１ａおよび図１０に示した条件管理表１８から作成したプログラムコード９のうち、状態２に対する関数を示したものである。処理候補選択マス１４に条件付処理候補選択シンボル２０が含まれるＶＡＲ２およびＶＡＲ３において、条件文が生成されており、条件に応じて異なる候補を選択している。上述した、処理候補選択シンボル１５および条件付処理候補選択シンボル２０との優先度から、処理候補選択シンボル１５に対応する候補はｅｌｓｅ文に、条件付処理候補選択シンボル２０に対応する候補は、上から順に、ｉｆ文に格納する。図１４の例ではｉｆ文を用いて条件分岐を実現しているが、これは条件分岐の手段をｉｆ文に限定するものではなく、例えばｃａｓｅ文など、他の手段を用いても良い。
【００４２】
これまで、処理対象ごとに条件を設定し、条件に応じて候補を選択することのできるソースコード生成装置について説明した。しかしながら、例外発生時と通常時の処理など、１つの条件の下、すべての処理対象において別々の処理を行うシステムも存在しうる。以下、このような条件のことを状態内条件と呼ぶ。図１５は、状態内条件を用いて分岐する関数の一例である。１つの条件“条件１”によって、アクション２、或いはアクション３の一方を選択し処理する。アクション１は“条件１”に依存せずに処理される。以下では、このような状態内条件を用いた処理の分岐を処理一覧表１に記述する手法について示す。
【００４３】
図１６は、処理一覧表１ａへ状態内条件を記述した例を示す。図１６へ示した処理一覧表１ａは、関数情報記述行１３において、状態名記述行２５と関数名記述行２６に加え、さらに状態内条件記述行２７を備える。状態内条件記述行２７へ状態内条件を記述することで、その処理候補選択列におけるアクションは、条件成立時にのみ実行される。図１５に示す関数を一例とする、状態内条件を用いて分岐する関数を生成するには、１つの関数に対して、複数の処理候補選択列１２を持たせ、同じ関数であることを示すために関数情報記述列１３の内容を等しくする必要がある。コード生成部２ａでは、予め表情報設定部３ａにおいて状態内条件記述行２７に対応する行を設定しておく必要がある。また、表走査部４ａ内の関数名取得部５においては、前回取得した関数名を保持しておき、新たに取得した関数名と比較する。関数名が前回の関数名と等しければ、１つの関数に対して、複数のアクションが定義されていると判断することができ、状態内条件記述行２７から状態内条件を取得し、条件文を生成する。
【００４４】
１つの関数が複数の処理候補選択列１２を持つとき、処理候補選択列１２は、デフォルトのアクションを記述する列（図１６内、アクション１の記述された列、以下開始列と呼ぶ）、条件付のアクションを記述する列（図１６内、アクション２の記述された列、以下条件列と呼ぶ）、条件を満たさない場合のアクションを記述する列（図１６内、アクション３の記述された列、以下終了列と呼ぶ）の３種類に分類することができる。開始列および終了列は、０列或いは１列であり、条件列は何列でもよい。開始列では、状態内条件は存在せず条件文は生成されない。条件列では状態内条件からｉｆ文を生成する。条件の優先度は最初に定義されるほど高く、条件列の内、多くとも１つのアクションのみが選択され実行される。即ち、Ｃ言語においては、最初の状態内条件のみｉｆ文に、残りの状態内条件はｅｌｓｅ  ｉｆ文に変換する。終了列は条件列内のすべての条件が満たされない場合に実行されるアクションで、状態内条件は存在せず、Ｃ言語においてはｅｌｓｅ文に変換される。
【００４５】
このように、実施の形態２では、条件文を直接記述せず、条件管理表１８を用いて条件を一括管理する。このため、同じ条件を複数の箇所で記述する必要がなく、記述量を削減でき、保守性も向上させることができる。
【００４６】
以上説明したように、実施の形態２のソースコード生成装置によれば、処理一覧表は、状態に対して与えられる条件成立時の候補を選択するための条件付処理候補選択シンボルを有し、かつ、条件付処理候補選択シンボルの条件を記述する条件記述列を有する条件管理表を備え、表走査部は、条件管理表から条件を取得するための条件取得部を有し、条件取得部で取得した条件に一致する条件付処理候補選択シンボルの処理対象と処理の候補とを取得するようにしたので、条件を条件管理表によって管理することで同じ条件を１つにまとめることができる。これにより記述量を削減でき、仕様変更も容易に行うことができる。
【００４７】
また、実施の形態２のソースコード生成装置によれば、処理一覧表は、条件付処理候補選択シンボルを複数組み合わせて新たな条件を作成する新条件作成シンボルを有し、表走査部は、新条件作成シンボルに一致する処理対象と処理の候補とを取得するようにしたので、管理する必要のある条件の個数を減らすことができる。
【００４８】
実施の形態３．
実施の形態１または実施の形態２に係るソースコード生成装置では、処理対象記述列１０へ処理対象を列挙し、各々の処理対象に対して状態ごとに処理候補選択マス１４を持つ。そのため、アクションに抜けが存在する、即ち、処理候補選択シンボル１５の存在しない処理候補選択マス１４が存在すれば、目視により容易に検出することができた。しかしながら、処理候補選択マス１４の個数は、処理対象の数および処理候補選択列１２の列数に比例して増加する。そのため、処理対象の数および処理候補選択列１２の列数が多いとき、即ち、処理候補選択マス１４の個数が多いときは誤りを自動で検出することが望ましい。本実施の形態に係るソースコード生成装置では、表走査部４ａが当該誤り検出機能を備える。尚、ソースコード生成装置としての図面上の構成は実施の形態１または実施の形態２と同様であるため、ここでは実施の形態２の構成を例として説明する。
【００４９】
図１７は誤りを含んだ処理一覧表１の一例を示している。図１７では、処理候補選択マス１４がＡからＦまでの６個存在し、このうち、Ｃにおいて処理候補選択シンボル１５が存在せず、処理に抜けがある。処理候補選択マス１４における誤りには、処理候補選択シンボル１５が１つも存在しない場合に加え、処理候補選択シンボル１５が２つ以上存在する場合も含まれる。そのため、表走査部４ａでは、処理候補選択マス１４における誤りを、処理候補選択シンボル１５の数が１個以外である、と定義し、誤り検出機能ではこれを検出する。
【００５０】
コード生成部２ａの表走査部４ａでは、表の走査を一列ずつ行う。図１７に示した例では、処理候補選択マス１４を、Ａ→Ｂ→Ｃ→Ｄ→Ｅ→Ｆの順に走査する。誤り検出を行わないとき、各列において一行ずつ処理候補選択マス１４の内容を取得する。そして、処理候補選択シンボル１５であれば、同行の処理対象および候補を取得し、条件付処理候補選択シンボル２０であれば、さらに条件管理表１８から条件を取得していた。
【００５１】
誤り検出を行うためには、処理候補選択マス１４内の処理候補選択シンボル１５の個数を算出する必要がある。即ち、表の走査中に処理候補選択マス１４間の境界を検出する必要があり、図１７の例では、ＡとＢ、ＢとＣ、ＤとＥ、ＥとＦの境界を検出する必要がある。処理候補選択列１２を走査するとき、ＡからＢ、ＢからＣなど、次の処理候補選択マスへ移るとき、処理対象選択列１において、処理対象が変化する。そのため、境界を検出するには、処理候補選択列１２を走査するとき、同時に、同じ行に存在する処理対象を取得しておけばよい。例えば、ＡからＢへと走査対象の処理候補選択マス１４が移るとき、処理対象はＶＡＲ１からＶＡＲ２へ移る。処理対象が移ったときに、処理候補選択シンボル１５の個数が１個でなければ、エラー出力する。１個であれば、記憶していた処理候補選択シンボル１５の個数をクリアして、次の処理候補選択マス１４へと移ればよい。
【００５２】
上述した誤り検出のほかに、処理一覧表１から一度も使われていない候補を検出することもできる。任意の候補について、一度もその候補が選択されていないとき、その候補が不要であること、或いは候補の選択ミスが考えられる。一度も使われていない候補を検出する手順を、図１８を用いて説明する。図１８では、６個の処理候補選択マスを一行ずつ、ＡからＧの７個に分割している。各状態における候補の選択では、同じ候補を選択すれば処理候補選択シンボル１５が同じ行へと記述される。そのため、図１８のように一行ずつに分割すれば、記述された内容から、その行に対応する候補が何度選択されているかを取得することができる。例えば図１８では、ＡとＣ、即ちＶＡＲ１の０とＶＡＲ２の０が２回選択されていること、Ｂ、即ちＶＡＲ１の１は一度も選択されていないこと、その他は１回選択されていることがわかる。表走査部４ａにおける誤り検出では、最後の行まで調べた後、一度も選択されていない行、図１８の例ではＢの行数を出力する。
【００５３】
このように実施の形態３では、誤り検出機能を備えることで、処理一覧表１（１ａ）に含まれる誤りを早期に発見することができる。これにより、生成されるプログラムコード９のテストに要する工数や、処理一覧表１（１ａ）のレビューに要する工数を削減できる。
【００５４】
以上説明したように、実施の形態３のソースコード生成装置によれば、表走査部は、１つの処理対象の処理候補選択マス中に存在する処理候補選択シンボルの個数が１以外であった場合は、処理一覧表に誤りがあると判定するようにしたので、仕様の誤りを自動的に検出できるため、ソースコードのテストやデバッグに要する時間を削減することができる。
【００５５】
また、実施の形態３のソースコード生成装置によれば、表走査部は、処理一覧表を走査した結果、一度も選択されていない処理の候補が存在する場合は、処理一覧表に誤りがあると判定するようにしたので、例えば、一度も用いられていない処理候補が存在するとき、設計段階での誤りや記述ミスが考えられるが、これを検出することで、誤りを早期に発見することができる。
【００５６】
実施の形態４．
上記各実施の形態では、何れも処理一覧表１（１ａ）を用いてコード生成部２（２ａ）がプログラムコード９を生成していた。しかしながら、プログラムコード９を直接生成せず、従来の状態遷移表におけるアクション記述を生成してもよく、これを実施の形態４として以下説明する。
【００５７】
図１９は、処理一覧表１ｂから従来の状態遷移表２８におけるアクション記述を生成する手順を説明するための図である。従来の状態遷移表２８は、状態２９とイベント３０とアクション３１とを備える。処理一覧表１ｂは、アクション３１を記述した表であり、１つのアクション３１に対して、処理候補選択列１２が一列対応する。上述した実施の形態１〜３では、アクション３１のプログラムコードを生成していたが、本実施の形態では、プログラムコード９ではなくアクション記述３２を生成し、既存のプログラムコード生成ツール（例えばＺＩＰＣ（登録商標））への入力とする。
【００５８】
図２０は、実施の形態４によるソースコード生成装置のブロック図である。図２０に示すソースコード生成装置は、処理一覧表１ｂとアクション生成部２ｂとソースコード生成ツール（ソースコード生成部）３３を備える。処理一覧表１ｂは、図１９に示したように、処理対象記述列１０と処理候補記述列１１と、各列がアクションに対応した処理候補選択列１２からなる。
アクション生成部２ｂは、処理一覧表１ｂに基づいてアクション記述３２を出力するもので、表情報設定部３ｂと表走査部４ｂとコード出力部８とを備える。表情報設定部３ｂは、処理一覧表１ｂにおけるすべての処理候補選択列１２を走査するために必要な処理一覧表１ｂの情報を設定する。表走査部４ｂは、処理取得部６と候補取得部７とを備えている。即ち、処理取得部６は、表情報設定部３ｂが設定した情報に基づいて走査を行い、処理対象記述列１０からアクションに対応した処理対象を取得し、候補取得部７は、表情報設定部３ｂが設定した情報に基づいて走査を行い、処理候補記述列１１からアクションに対応した処理の候補を取得する。また、コード出力部８は、表走査部４ｂが取得したアクションと処理対象と処理の候補とからアクション記述３２を生成する。
【００５９】
遷移情報３４は、図１９に示した状態遷移表２８における状態２９およびイベント３０とを備える。アクション記述３２は、プログラムコード９から関数情報を取り除いたものに等しい。そのため、アクション生成部２ｂは、コード生成部２から関数名取得部５を除いたものに等しい。ソースコード生成ツール３３は、ＺＩＰＣなど、状態遷移表からプログラムコードを生成するツールを指す。
このようにアクション生成部２ｂが処理一覧表１ｂを入力としてアクション記述３２を生成し、このアクション記述３２と遷移情報３４とをソースコード生成ツール３３への入力とする。
【００６０】
このように、実施の形態４では、アクション生成部２ｂとソースコード生成ツール３３とを組み合わせることで、アクション記述の抜けや誤りを防ぎつつ、遷移情報３４とアクション記述３２とからプログラムコードを得ることができる。さらに、ソースコード生成ツール３３で提供されている、デバッガやシミュレータなどのツールを用いて開発することも可能となる。
【００６１】
以上説明したように、実施の形態４のソースコード生成装置によれば、内部に状態を持ち、イベントの発生によって処理を行い、状態を遷移するシステムにおいて、処理の対象を処理対象として格納する処理対象記述列と、処理対象記述列に記述された処理対象に対する処理の候補を格納する処理候補記述列と、システムのアクションを記述する処理候補選択列とを有する処理一覧表を用いると共に、処理一覧表におけるすべての処理候補選択列を走査するために必要な情報を設定する表情報設定部と、表情報設定部が設定した情報に基づいて走査を行い、処理対象記述列からアクションに対応した処理対象を取得する処理取得部と、表情報設定部が設定した情報に基づいて走査を行い、処理候補記述列からアクションに対応した処理の候補を取得する候補取得部とからなる表走査部と、表走査部が取得したアクションと処理対象と処理の候補とからアクション記述を生成するコード出力部と、アクション記述と、状態およびイベントを記述した遷移情報とからソースコードを生成するソースコード生成部とを備えたので、処理一覧表および条件管理表を用いることで誤りの混入を防止し、かつ状態遷移表のアクション記述を生成することで、シミュレータやデバッガなど従来の開発ツールを利用することができる。
【００６２】
実施の形態５．
実施の形態１では、生成されるプログラムコード９を記述するプログラミング言語は一種類に限定されていた。しかしながら、プログラミング言語ごとに記述方法等の情報をさらに備えることで、プログラミング言語を一種類に限定せず、複数の言語から選択できるようになる。本実施の形態に係るソースコード生成装置は、当該機能を備える。
【００６３】
図２１は、本実施の形態に係るソースコード生成装置の構成を示す図である。図２１に示すソースコード生成装置は、図１に示したソースコード生成装置において、さらに言語データベース（ＤＢ）３５を備えると共に、コード生成部２ｃが言語情報取得部３６を備える。言語ＤＢ３５は、コード生成部２ｃが参照するプログラミング言語ごとの情報を有しており、言語情報取得部３６は、生成するプログラムコードを記述するプログラミング言語を決定し、言語ＤＢ３５を参照してプログラムコードを生成するときに必要となる情報を取得する。コード生成部２ｃにおけるその他の基本的な構成は図１に示した実施の形態１の構成と同様であるため、ここでの説明は省略する。
【００６４】
同等の処理であっても、プログラミング言語が異なればソースコードの記述は異なる。そのため、言語ＤＢ３５では、選択されうるプログラミング言語すべてに対し、ソースコード記述方法を保持しておく。図２２は、Ｃ言語とＶＢＡを例にしたプログラミング言語の違いによるソースコードの記述の違いを示す図である。図２２に示したソースコードは、共に１０行にも満たない。しかしながら両者の間には、コメントの書き方、関数の書き方、変数宣言の仕方、条件文の記述の仕方、比較演算子の記述の仕方、変数への値設定の仕方、関数呼び出しの仕方、計７箇所において記述の差異が存在する。よって、上述したような記述の差異を言語ＤＢ３５へと保持しておくことで、１つの処理一覧表１から複数のプログラミング言語で記述したソースコードを生成することができる。
【００６５】
図２３は、言語ＤＢ３５の構成を示した図である。言語ＤＢ３５は、ＩＤ記述列３７と、意味記述列３８と、言語別変換内容記述列３９とを備える。ＩＤ記述列３７には、コード生成部２ｃから参照するためのＩＤを格納する。意味記述列３８には、各行に記述されたプログラミング言語ごとの記述に対する意味を格納する。言語別変換内容記述列３９は、選択されうるプログラミング言語の数だけ存在し、各プログラミング言語における変換内容を、言語別変換内容記述例４０といったように格納する。例えば図２３では、コメント“ｔｅｓｔ”を記述するとき、コード生成部２ｃからＩＤ“ｃｏｍｍｅｎｔ”、引数“ｔｅｓｔ”で言語ＤＢ３５を参照し、Ｃ言語では“／／ｔｅｓｔ”と、ＶＢＡでは“’ｔｅｓｔ”と変換されることを意味している。
【００６６】
処理一覧表１および言語ＤＢ３５からプログラムコード９を生成する手順について、図２４を用いて説明する。処理一覧表１では、実施の形態１〜３で説明した手順で処理対象と処理候補を取得する。実施の形態１では、用いるプログラミング言語が１つに限定されている、即ち、取得した処理対象と処理候補からプログラムコードが一意に決定されていた。本実施の形態では、言語ＤＢ３５に格納されたプログラミング言語別の変換情報から１つを選択し、プログラムコードを生成する。図２４の例では、処理一覧表１から処理対象ＶＡＲ１および候補０を取得する。次に、言語ＤＢ３５をＩＤ“ａｓｓｉｇｎ”で参照し、選択された言語、この例ではＣ言語を選択し、“＄１＝＄２；”を得る。その後、処理一覧表１および言語ＤＢ３５から得られた情報を用いて“ＶＡＲ１＝０；”を生成する。言語情報取得部３６が、言語ＤＢ３５から用いるプログラミング言語を決定する手段は、これを限定しないが、例えば、処理一覧表１へ用いるプログラミング言語を格納する箇所を用意しておき、言語情報取得部３６がそれを参照することで実現できる。
【００６７】
以上、実施の形態１において複数のプログラミング言語から１つの言語を選択し、選択された言語でプログラムコード９を生成する方法について説明した。次に、実施の形態２において、言語ＤＢ３５と言語情報取得部３６とをさらに備えることで、複数のプログラミング言語から１つの言語を選択し、選択された言語でプログラムコード９を生成する方法について説明する。
【００６８】
実施の形態２を実施の形態１と比較すると、条件管理表１８および条件取得部１９を備えている点において異なる。そして、上記で説明した通り、条件管理表１８では、条件記述列２３において特定のプログラミング言語、図１０の例ではＣ言語にて記述している。そのため、複数のプログラミング言語から１つの言語を選択して用いるには、記述方法を変更する必要がある。
【００６９】
図２５は、中間言語４１を用いて条件管理表１８を記述することで、一つの条件管理表１８から言語ＤＢ３５に格納されたプログラミング言語に対する条件管理表の生成例を示している。中間言語４１は、言語ＤＢ３５におけるＩＤおよび引数から構成される。図２５の例“ｅｑｕａｌ（ａ，ｂ）”では、最初にＩＤ“ｅｑｕａｌ”から言語ＤＢ３５におけるＩＤ記述行３７を走査し、参照する行を決定する。その後、選択されたプログラミング言語に対応した言語別変換内容記述列３９を参照することで、中間言語４１から選択されたプログラミング言語へと変換することができる。
【００７０】
また、システムの設計段階において用いるプログラミング言語は決定されているものと考えられるので、条件管理表１８は決定された言語で記述しても良い。中間言語４１を用いることで、用いるプログラミング言語を容易に変更することができ、プログラミング言語が異なるシステム間において、条件管理表１８を再利用することもできる。
【００７１】
このように、実施の形態５では、生成されるプログラムコード９を記述するプログラミング言語に選択肢を与えることができる。そのため、複数のプログラミング言語でのシステム開発を、１つのソースコード生成装置で実現することができる。
【００７２】
以上説明したように、実施の形態５のソースコード生成装置によれば、プログラミング言語ごとのソースコードの記述方法を保持する言語データベースと、表走査部が取得した情報に対応して生成するソースコードを記述するプログラミング言語を決定し、決定したプログラミング言語でソースコードを記述する際に必要となる情報を言語データベースから取得し、取得した情報をコード出力部の入力として出力する言語情報取得部を備えたので、複数のプログラミング言語での開発要求に、1つのソースコード生成装置で対応することができる。
【００７３】
なお、本願発明はその発明の範囲内において、各実施の形態の自由な組み合わせ、あるいは各実施の形態の任意の構成要素の変形、もしくは各実施の形態において任意の構成要素の省略が可能である。
【符号の説明】
【００７４】
１，１ａ，１ｂ  処理一覧表、２，２ａ，２ｃ  コード生成部、２ｂ  アクション生成部、３，３ａ，３ｂ  表情報設定部、４，４ａ，４ｂ  表走査部、５  関数名取得部、６  処理取得部、７  候補取得部、８  コード出力部、９  プログラムコード、１０  処理対象記述列、１１  処理候補記述列、１２  処理候補選択列、１３  関数情報記述行、１４  処理候補選択マス、１５  処理候補選択シンボル、１６  走査開始位置、１７  走査終了行、１８  条件管理表、１９  条件取得部、２０  条件付処理候補選択シンボル、２１  新条件作成シンボル、２２  条件付処理候補選択シンボル記述列、２３  条件記述列、２４  条件記述例、２５  状態名記述行、２６  関数名記述行、２７  状態内条件記述行、２８  状態遷移表、２９  状態、３０  イベント、３１  アクション、３２  アクション記述、３３  ソースコード生成ツール（ソースコード生成部）、３４  遷移情報、３５  言語データベース（ＤＢ）、３６  言語情報取得部、３７  ＩＤ記述列、３８  意味記述列、３９  言語別変換内容記述列、４０  言語別変換内容記述例、４１  中間言語、１００  ソースコード生成装置、１０１  表示装置、１０２  入力装置、１０３  ＣＰＵ、１０４  主記憶装置、１０５  補助記憶装置。
【図１】
0006037976.tif 000002
【図２】
0006037976.tif 000003
【図３】
0006037976.tif 000004
【図４】
0006037976.tif 000005
【図５】
0006037976.tif 000006
【図６】
0006037976.tif 000007
【図７】
0006037976.tif 000008
【図８】
0006037976.tif 000009
【図９】
0006037976.tif 000010
【図１０】
0006037976.tif 000011
【図１１】
0006037976.tif 000012
【図１２】
0006037976.tif 000013
【図１３】
0006037976.tif 000014
【図１４】
0006037976.tif 000015
【図１５】
0006037976.tif 000016
【図１６】
0006037976.tif 000017
【図１７】
0006037976.tif 000018
【図１８】
0006037976.tif 000019
【図１９】
0006037976.tif 000020
【図２０】
0006037976.tif 000021
【図２１】
0006037976.tif 000022
【図２２】
0006037976.tif 000023
【図２３】
0006037976.tif 000024
【図２４】
0006037976.tif 000025
【図２５】
0006037976.tif 000026
【図２６】
0006037976.tif 000027