(58)【調査した分野】(Int.Cl.,DB名)
表走査部は、1つの処理対象の処理候補選択マス中に存在する処理候補選択シンボルの個数が1以外であった場合は、処理一覧表に誤りがあると判定することを特徴とする請求項1から請求項3のうちのいずれか1項記載のソースコード生成装置。
表走査部は、処理一覧表を走査した結果、一度も選択されていない処理の候補が存在する場合は、処理一覧表に誤りがあると判定することを特徴とする請求項1から請求項3のうちのいずれか1項記載のソースコード生成装置。
【発明を実施するための形態】
【0011】
実施の形態1.
図1は、この発明の実施の形態1によるソースコード生成装置を示す構成図である。
図1に示すソースコード生成装置は、処理一覧表1とコード生成部2を備えている。
また、
図2は、この発明のソースコード生成装置100を実現するためのハードウェア構成図であり、表示装置101と、入力装置102と、CPU103と、主記憶装置104と、補助記憶装置105とを備える。
【0012】
開発者は、ソースコード生成装置100におけるマウスやキーボードなどの入力装置102を用いて処理一覧表1を作成する。作成された処理一覧表1は、HDD(Hard Disk Drive)やSSD(Solid State Drive)などの補助記憶装置105に保存される。コード生成部2を実現するためのコード生成プログラムは、補助記憶装置105に保存されており、CPU103と主記憶装置104などにより実行される。コード生成部2は、処理一覧表1を入力とし、プログラムコード9を生成して補助記憶装置105に保存する。また、完了やエラー等の結果を表示装置101へ出力し、開発者へと通知する。
【0013】
なお、以下では処理一覧表1はExcel(登録商標)を用いて作成・管理し、コード生成部2を実現するコード生成プログラムは、VBA(Visual Basic(登録商標) for Application)で実装し、プログラムコード9はC言語で記述されることを想定するが、本発明をこれらに限定するものではなく、他の表作成手段および他のプログラミング言語において適用することも可能である。
【0014】
本発明は、開発するシステムの対象を限定しないが、システムが内部に状態を持ち、事象の発生によって処理を行い、状態を遷移する、従来、状態遷移図や状態遷移表を用いて開発していた組込みシステムの開発に適している。特に、エレベータやHMI(Human Machine Interface)のように、状態数が非常に多く、状態ごとの処理量も多いシステムの開発において効果的である。
【0015】
処理一覧表1は、開発するシステムの仕様を記述するための表である。処理一覧表1の具体的な例を
図3に示す。処理一覧表1は、処理対象記述列10と、処理候補記述列11と、処理候補選択列12とを備える。
処理対象記述列10は、各状態において行われうる処理について、処理対象の一覧を格納する列である。
図3の例では、処理対象記述列10にVAR1、VAR2、VAR3の3つが格納されている。これは、3つの変数VAR1、VAR2、VAR3が処理の対象であることを示している。
処理候補記述列11は、処理対象記述列10に記述された各々の処理対象に対して、処理の候補を格納する列である。
図3の例では、VAR1およびVAR2には候補0と1が、VAR3には候補0と1と2が格納されている。これは、2つの変数VAR1、VAR2のとり得る値が0或いは1の2値であり、VAR3は0と1と2の3値をとり得ることを示している。
【0016】
処理候補選択列12は、関数情報記述行13と、処理候補選択マス14とを備える。関数情報記述行13は、状態ごとの情報を格納する。ここで、状態ごとの情報とは、状態名や関数名、状態に対する補足説明などを指し、プログラムコード9を生成するために必要な関数名を含むことを除き、関数情報記述行13に格納する情報を制限しない。
図3の例では、状態1および状態2の2つの状態が存在し、それぞれの関数名が“state1”、“state2”であることを示している。
【0017】
処理候補選択マス14とは、一つの処理対象に対する行と一つの状態に対する列との交差領域のことを指す。処理候補選択マス14は、1つの状態に対して処理対象記述列10に格納された処理対象の数に等しい数だけ存在する。
図3の例では、状態数が2、処理対象記述列10に格納された処理対象の数が3であるため、処理候補選択マス14は6個存在する。処理候補選択マス14は、関数情報記述行13に格納された各状態において、処理対象記述列10に格納された各々の処理対象に対し、処理候補記述列11に格納された候補から1つ選択して処理を決定する。候補の選択は、処理候補選択マス14において、選択する候補に等しい行のセルへ処理候補選択シンボル15を記述することで行う。ここでセルとは、行と列との交差領域を指す。即ち、処理候補選択マス14は、対応する処理対象の候補の数に等しい数のセルから構成される。ここで
図3の例では、状態1において処理候補選択シンボル15は、VAR1の0、VAR2の0、VAR3の1と等しい行に、計3つ記述されている。これは、状態1において、VAR1およびVAR2の値は0、VAR3の値は1となることを示している。
【0018】
処理候補選択シンボル15は、本発明において、“●”を用いているが、これは処理候補選択シンボル15に成りうる文字の一例であり、任意の文字で代用することができる。また、処理候補選択シンボル15は処理候補を選択するための一手段である。即ち、例えば、ラジオボタンやチェックボックス、プルダウンリストなど、他の手段で代用しても良い。
処理候補選択シンボル15は、各処理対象の状態ごとの処理候補を決定する。このため、処理候補選択マス14において、2つ以上の処理候補選択シンボル15を記述してはならない。
【0019】
処理候補選択マス14には、処理候補記述列11に格納された候補から1つ選択し、処理候補選択シンボル15を記述するが、例えば、変数の値を以前のまま保持する場合など、候補を選択せず、処理を行わないことも起こりうる。このため、処理候補選択マス14において1つも処理候補選択シンボル15が存在しないとき、処理候補の選択が必要であるのに選択されておらず抜けがあるのか、或いは、選択する必要がないから選択されていないのか、を区別することができない。抜けがあるのか、意図的に記述されていないのか、両者を区別する手段は、これを限定しないが、例えば、意図的に記述しない場合は処理候補選択マス14に斜線を引くなど、開発者およびコード生成部2が共に判別できる手段であれば良い。
【0020】
コード生成部2は、処理一覧表1から情報を取得し、プログラムコード9を生成する。コード生成部2は、表情報設定部3と、表走査部4と、コード出力部8とを備える。
表情報設定部3は、表走査部4が処理一覧表1を走査するために必要な情報を設定する。
図4は、表走査部4が処理一覧表1を走査するときの順序を矢印で示した図である。処理一覧表1の走査は、走査開始位置16から開始して一列ずつ走査していき、走査終端行17に到達すると、次の列へと移り、これをすべての列の走査が完了するまで繰り返す。
処理一覧表1の行数および列数は、開発するシステムに依存する。このため、処理一覧表1を走査するには、以下に示す情報を取得する必要がある。ここで、括弧内の値は、
図4の例における行或いは列の値である。
・関数情報記述行13の存在する行 (1、2行)
・走査開始位置16の位置 (3行3列)
・処理対象記述列10の存在する列 (1列)
・処理候補記述列11の存在する列 (2列)
・処理候補選択列12の存在する列の範囲 (3−5列)
・走査終端行17の行 (9行)
【0021】
以上の情報を取得する手段の一つとして、処理一覧表1において、上記に示した行或いは列の値を格納するためのセルを定め、表情報設定部3が記述された値を参照することが挙げられる。また、処理対象記述列10や処理候補記述列11は1列であるため、予め記述する列を固定すれば、コード生成部2において値を取得しなくても良い。
【0022】
表走査部4は、関数名取得部5と、処理取得部6と、候補取得部7とを備える。関数名取得部5は、処理一覧表1の走査時に、関数情報記述行13に記述された関数名を取得する。一方、処理取得部6と候補取得部7は、処理候補選択マス14の走査時に、処理対象を処理対象記述列10から、候補を処理候補記述列11から取得する。
処理候補選択列12を一列ずつ走査するとき、処理対象記述列10の存在する列および処理候補記述列11の存在する列の情報から、現在走査中の行における処理対象および候補を取得することができる。一列ずつ走査していき、処理候補選択シンボル15が得られれば、処理候補選択マス14における処理が決定し、処理候補選択シンボル15が得られなければ、走査の対象を次の行へと移す。
【0023】
コード出力部8は、表走査部4が取得した情報からコードを生成し、走査終了時にプログラムコード9を出力する。プログラムコード9は、関数情報記述行13に記述された関数名の個数に等しい個数の関数で構成される。
図3にプログラムコード9の一例を示す。プログラムコード9は、関数の集合であり、関数は、関数名および代入文から構成される。関数名は、関数名取得部5が取得した情報から、代入文は、処理取得部6および候補取得部7が取得した情報から、それぞれ生成する。
図3の例では、状態1において処理候補選択シンボル15が3つ存在する。一つ目の処理候補選択シンボルに等しい行に存在する処理対象はVAR1であり、候補は0であることから、生成される代入文は“VAR1=0;”となる。同様に、“VAR2=0;”、“VAR3=1;”の2つの代入文が生成される。
【0024】
次に、実施の形態1のソースコード生成装置の動作を
図5に示すフローチャートを用いて説明する。
ソースコード生成装置では、最初に表情報設定部3がステップST1で処理一覧表1の情報を設定する。ステップST2では、表走査部4が、処理一覧表1において走査していない列が存在するか否か判断し、存在すれば列の走査に移り、存在しなければステップST8で生成されたコードをコード出力部8から出力した後、処理を完了する。ステップST3では、関数名取得部5が上記で示した方法により関数名を取得する。ステップST4では、処理取得部6および候補取得部7が、現在走査中の行が列の最終行であるか否かを判断する。最終行であれば、ステップST7で現在走査中の列に対応する関数の生成を完了し、次の列へ移る。最終行でなければ、ステップST5で処理取得部6および候補取得部7によって処理対象および処理候補を取得して、上記で示した方法により代入文を生成し、ステップST6で次の行へと移る。
なお、これまで処理対象および候補の例として変数への値設定を扱ったが、これは、処理を変数への値設定に限定するものではない。想定される処理には、変数への値設定の他に、関数呼び出しや算術・論理演算が挙げられる。
【0025】
図6は、処理として、関数呼び出しおよび算術演算を処理一覧表1に記述した例を示す。関数内で実行される処理は、変数への値の代入が発生する処理(以下、代入型と呼ぶ)、および変数への値の代入が発生しない処理(以下、非代入型と呼ぶ)の2つに大別することができる。代入型の例としては変数への値設定が、非代入型の例としては関数呼び出しが挙げられる。
【0026】
代入型の処理では、左辺と右辺が存在する。左辺には、変数、配列、構造体などが、右辺には定数、変数、演算処理などが考えられるが、左辺を処理対象記述列10へ、右辺となりうる処理を処理候補記述列11へと格納すれることで、上記で示した変数の値設定と同様に処理することができる。代入型では、左辺と右辺の型を合わせる必要があるため、処理対象記述列10に格納された各処理対象の型と、処理対象ごとの候補の型を合わせなければならない。
【0027】
一方、非代入型の処理では、左辺と右辺は存在しない。そのため、処理対象記述列10を空欄に、候補を処理候補記述列に格納すればよい。
図6の例では、funcA()、funcB()、funcC()の3つの関数が候補として存在し、状態1ではfuncB()が呼び出される。なお、非代入型において、処理対象記述列10を空欄にすると、処理対象を記述する必要がないのか、或いは、処理対象の記述が抜けているのか区別しづらいため、上記で示したように、斜線を引くなどしても良い。
なお、生成する関数について、局所変数の宣言や引数の指定などの処理が必要であれば、関数情報記述行13へ情報を記述しておき、コード生成部2が参照できるようにすれば良い。
【0028】
これまで説明した処理一覧表1では、処理候補選択列12の各列がそれぞれ状態遷移表におけるアクションに対応する。そのため本実施の形態では、アクションを処理一覧表1で管理し、状態の遷移先は状態遷移表など、別の手段を用いて管理する。また、処理一覧表1へ状態の遷移先やイベントを追加しても良い。
図7は、処理一覧表1へ状態の遷移先とイベントを追加した例を示す。
図7の例は、
図26に示した従来の状態遷移表に対応しており、関数情報記述行13において、上から順に状態、イベント、状態の遷移先を記述している。
【0029】
このように、実施の形態1のソースコード生成装置では、起こりうる処理を列挙し、各々に対して処理候補選択マス14が存在するため、処理の抜けを防ぐことができる。また、処理を状態ごとに別々に記述せず、処理候補から選択することで、記述へ誤りが混入することによる想定外の処理を防止し、同時に記述量も削減することができる。
【0030】
以上説明したように、実施の形態1のソースコード生成装置によれば、内部に状態を持ち、イベントの発生によって処理を行い、状態を遷移するシステムにおいて、処理の対象を処理対象として格納する処理対象記述列と、処理対象に対する処理の候補を格納する処理候補記述列と、状態を記述する関数情報記述行と、関数情報記述行に記述された状態に対し処理対象記述列に記述された処理の候補を処理候補記述列から選択するための処理候補選択マスと、処理候補選択マスにおいて処理候補記述列から選択した候補を示す処理候補選択シンボルからなる処理候補選択列とを有する処理一覧表を用いると共に、処理一覧表の処理候補選択列におけるすべての処理候補選択マスを走査するために必要な情報を設定する表情報設定部と、処理一覧表における関数情報記述行から生成するソースコードの状態情報を取得する関数名取得部と、表情報設定部3が設定した情報に基づいて走査を行い、処理一覧表における処理対象記述列から処理候補選択シンボルで示す処理対象を取得する処理取得部と、表情報設定部が設定した情報に基づいて走査を行い、処理一覧表における処理候補記述列から処理候補選択シンボルで示す処理の候補を取得する候補取得部とからなる表走査部と、表走査部が取得したソースコードの状態情報と処理対象と処理の候補とからソースコードを生成するコード出力部とを備えたので、処理および各処理の候補をすべて記述しておき選択式にすることで、記述ミスによる想定外の処理を防止し、記述量も削減することができる。また、各処理に対して記述する処理候補選択マスが存在するため、処理の抜けを防ぐことができる。
【0031】
実施の形態2.
実施の形態1に係るソースコード生成装置では、処理候補選択マス14において処理候補選択シンボル15を1つのみ選択していた。即ち、処理対象1つに対して、1つの状態で選択できる処理候補は1つに限定されていた。これに対し、条件に応じて複数の処理候補を選択して処理することができるようにしてもよく、これを実施の形態2として以下説明する。
【0032】
図8は、本発明の実施の形態2によるソースコード生成装置のブロック図である。
図8に示すソースコード生成装置は、
図1に示すソースコード生成装置の構成に加えて、条件管理表18と、コード生成部2aの表走査部4aに条件取得部19を追加した構成である。この条件管理表18は、条件に応じて複数の処理候補の選択を実現するために、条件を管理する表であり、条件取得部19は、コード生成部2が処理一覧表1における条件分岐を検出し、条件管理表18を参照することを実現する機能部である。
【0033】
次に、実施の形態2に係るソースコード生成装置の動作について説明する。
図9は、実施の形態2に係る処理一覧表1aの例である。
図3に示す実施の形態1における処理一覧表1と比較して、条件付処理候補選択シンボル20と、新条件作成シンボル21とをさらに備える。条件付処理候補選択シンボル20は条件成立時の候補を選択するためのシンボルで、新条件作成シンボル21は既存の条件を組み合わせて新たな条件を作成するためのシンボルである。
【0034】
次に、
図9を例に実施の形態2に係る処理一覧表1aの記述方法について説明する。
図9における状態1での処理については、実施の形態1の
図3で示したものと同様であるため省略する。処理対象VAR3に対する処理候補は0、1、2の3つ存在するが、状態2ではすべての候補に対して処理候補選択シンボル15或いは条件付処理候補選択シンボル20が記述されている。条件付処理候補選択シンボル20は、条件が条件管理表18にて管理されており、一つの条件に対し1つの番号が付与される。条件管理表18へ条件を追加するとき、既に等しい条件が存在すれば、新たに条件を追加せず、既に追加されている条件を用いる。条件付処理候補選択シンボル20は、処理候補選択シンボル15に優先し、条件付処理候補選択シンボル20が処理候補選択マス14に複数存在するときは、上に記述された条件付処理候補選択シンボル20が優先される。即ち、
図9の例では、優先度は“#1”、“#2”、“●”の順となり、条件“#1”が成立すれば0が、条件“#1”が成立せず“#2”が成立すれば1が、“#1”と“#2”が共に成立しなければ2が、VAR3に代入される。
【0035】
図10は、条件管理表18の一例を示した図である。条件管理表18は、条件付処理候補選択シンボル記述列22と、条件記述列23とを備える。条件付処理候補選択シンボル記述列22には、処理一覧表1aにおいて用いられた条件付処理候補選択シンボル20を昇順に格納する。条件記述列23の各行には、同じ行に記述された条件付処理候補選択シンボル20に対応する条件を記述する。例えば、C言語での条件記述例24の“X==1”は、同じ行に存在する“#1”に対応する条件となる。以上より、
図9における状態2でのVAR3の値は、条件“X==1”が成立すれば0、条件“X==1”が成立せず“X==2”が成立すれば1、“X==1”と“X==2”が共に成立しなければ2となる。
【0036】
次に、新条件作成シンボル21について説明する。新条件作成シンボル21は、条件付処理候補選択シンボル20を複数組み合わせて、新しい条件を作成する。
図9の例では、処理候補選択シンボル“#1”と“#2”を新条件作成シンボル“or”を用いて、新たな条件“#1or#2”を作成している。ここで“or”は、論理和を表し、“#1or#2”は“#1”或いは“#2”のいずれかの成立時に真となる。
【0037】
図11は、新条件作成シンボル21とC言語での展開例を示している。
図11では新条件作成シンボルとして“and”、“or”、“not”の3つの例を示しており、それぞれ論理積、論理和、否定を表している。演算子には優先度が定められているため、優先度の逆転を防止する目的で展開後の条件付処理候補選択シンボル20には括弧が付与されている。
図11に示した例は一例であり、新条件作成シンボル21をこれらに限定するものではない。また、新条件作成シンボル21とシンボルの表す意味は、1対1に対応していれば良く、命名規則は、これを限定しない。
【0038】
図12は、条件付処理候補選択シンボル20と、新条件作成シンボル21との組み合わせ“#1and(#2or#3)”から構成される条件を作成する例を示している。条件の作成では、最初に新条件作成シンボル21を展開する。その後、条件付処理候補選択シンボル20に対応する条件を条件管理表18から取得する。条件を作成するためには、条件付処理候補選択シンボル20と、新条件作成シンボル21とを分離する必要がある。分離の手段として、処理一覧表1aを記述するとき、条件付処理候補選択シンボル20と新条件作成シンボル21の間に空白を挿入するよう定めることで、挿入された空白から両者を分離することができる。
【0039】
以上説明した、実施の形態2に係るソースコード生成装置の動作の流れを、
図13に示すフローチャートを用いて説明する。なお、関数名の取得や処理一覧表1aの走査手順は実施の形態1と同様であるため省略し、
図13では、処理候補選択マス14から情報を取得し、ソースコードを生成する部分のみの動作を示している。
最初にステップST11で、表走査部4aは処理候補選択マス14から1行読み取り、条件が存在するか否か判断する。条件が存在しなければ、ステップST15へ移り、存在すれば、ステップST12へ移る。ステップST12では、条件取得部19が、条件の組み合わせ、即ち新条件作成シンボル21が存在するか否か判断する。存在すればステップST13へ移り、存在しなければ、新条件作成シンボル21を展開する必要がないためステップST14へ移る。ステップST13およびステップST14では、上記で示した方法により、条件の組み合わせを展開し、条件管理表18から条件を取得する。ステップST15では、処理候補選択マス14の最後まで走査したか否かを判断し、最後でなければ、ステップST11へと遷移し、最後であればステップST16で、コード出力部8がプログラムを生成し、表走査部4aは現在走査中の処理候補選択マス14の走査を完了する。
【0040】
上述した実施の形態1では、ひとつの処理対象に対して候補が一意に決定する、即ち処理候補選択マス14内には1つの処理候補選択シンボル15のみ存在した。一方で、実施の形態2では、処理候補選択シンボル15に加え条件付処理候補選択シンボル20も存在し、かつ処理候補選択マス14を最後まで走査しないと条件付処理候補選択シンボル20の数を決定できない。このため、
図13に示すフローチャートでは、ステップS15で処理候補選択マス14の最後まで走査したか否かを判断した後、プログラムを生成する。
【0041】
図14は、
図9に示した処理一覧表1aおよび
図10に示した条件管理表18から作成したプログラムコード9のうち、状態2に対する関数を示したものである。処理候補選択マス14に条件付処理候補選択シンボル20が含まれるVAR2およびVAR3において、条件文が生成されており、条件に応じて異なる候補を選択している。上述した、処理候補選択シンボル15および条件付処理候補選択シンボル20との優先度から、処理候補選択シンボル15に対応する候補はelse文に、条件付処理候補選択シンボル20に対応する候補は、上から順に、if文に格納する。
図14の例ではif文を用いて条件分岐を実現しているが、これは条件分岐の手段をif文に限定するものではなく、例えばcase文など、他の手段を用いても良い。
【0042】
これまで、処理対象ごとに条件を設定し、条件に応じて候補を選択することのできるソースコード生成装置について説明した。しかしながら、例外発生時と通常時の処理など、1つの条件の下、すべての処理対象において別々の処理を行うシステムも存在しうる。以下、このような条件のことを状態内条件と呼ぶ。
図15は、状態内条件を用いて分岐する関数の一例である。1つの条件“条件1”によって、アクション2、或いはアクション3の一方を選択し処理する。アクション1は“条件1”に依存せずに処理される。以下では、このような状態内条件を用いた処理の分岐を処理一覧表1に記述する手法について示す。
【0043】
図16は、処理一覧表1aへ状態内条件を記述した例を示す。
図16へ示した処理一覧表1aは、関数情報記述行13において、状態名記述行25と関数名記述行26に加え、さらに状態内条件記述行27を備える。状態内条件記述行27へ状態内条件を記述することで、その処理候補選択列におけるアクションは、条件成立時にのみ実行される。
図15に示す関数を一例とする、状態内条件を用いて分岐する関数を生成するには、1つの関数に対して、複数の処理候補選択列12を持たせ、同じ関数であることを示すために関数情報記述列13の内容を等しくする必要がある。コード生成部2aでは、予め表情報設定部3aにおいて状態内条件記述行27に対応する行を設定しておく必要がある。また、表走査部4a内の関数名取得部5においては、前回取得した関数名を保持しておき、新たに取得した関数名と比較する。関数名が前回の関数名と等しければ、1つの関数に対して、複数のアクションが定義されていると判断することができ、状態内条件記述行27から状態内条件を取得し、条件文を生成する。
【0044】
1つの関数が複数の処理候補選択列12を持つとき、処理候補選択列12は、デフォルトのアクションを記述する列(
図16内、アクション1の記述された列、以下開始列と呼ぶ)、条件付のアクションを記述する列(
図16内、アクション2の記述された列、以下条件列と呼ぶ)、条件を満たさない場合のアクションを記述する列(
図16内、アクション3の記述された列、以下終了列と呼ぶ)の3種類に分類することができる。開始列および終了列は、0列或いは1列であり、条件列は何列でもよい。開始列では、状態内条件は存在せず条件文は生成されない。条件列では状態内条件からif文を生成する。条件の優先度は最初に定義されるほど高く、条件列の内、多くとも1つのアクションのみが選択され実行される。即ち、C言語においては、最初の状態内条件のみif文に、残りの状態内条件はelse if文に変換する。終了列は条件列内のすべての条件が満たされない場合に実行されるアクションで、状態内条件は存在せず、C言語においてはelse文に変換される。
【0045】
このように、実施の形態2では、条件文を直接記述せず、条件管理表18を用いて条件を一括管理する。このため、同じ条件を複数の箇所で記述する必要がなく、記述量を削減でき、保守性も向上させることができる。
【0046】
以上説明したように、実施の形態2のソースコード生成装置によれば、処理一覧表は、状態に対して与えられる条件成立時の候補を選択するための条件付処理候補選択シンボルを有し、かつ、条件付処理候補選択シンボルの条件を記述する条件記述列を有する条件管理表を備え、表走査部は、条件管理表から条件を取得するための条件取得部を有し、条件取得部で取得した条件に一致する条件付処理候補選択シンボルの処理対象と処理の候補とを取得するようにしたので、条件を条件管理表によって管理することで同じ条件を1つにまとめることができる。これにより記述量を削減でき、仕様変更も容易に行うことができる。
【0047】
また、実施の形態2のソースコード生成装置によれば、処理一覧表は、条件付処理候補選択シンボルを複数組み合わせて新たな条件を作成する新条件作成シンボルを有し、表走査部は、新条件作成シンボルに一致する処理対象と処理の候補とを取得するようにしたので、管理する必要のある条件の個数を減らすことができる。
【0048】
実施の形態3.
実施の形態1または実施の形態2に係るソースコード生成装置では、処理対象記述列10へ処理対象を列挙し、各々の処理対象に対して状態ごとに処理候補選択マス14を持つ。そのため、アクションに抜けが存在する、即ち、処理候補選択シンボル15の存在しない処理候補選択マス14が存在すれば、目視により容易に検出することができた。しかしながら、処理候補選択マス14の個数は、処理対象の数および処理候補選択列12の列数に比例して増加する。そのため、処理対象の数および処理候補選択列12の列数が多いとき、即ち、処理候補選択マス14の個数が多いときは誤りを自動で検出することが望ましい。本実施の形態に係るソースコード生成装置では、表走査部4aが当該誤り検出機能を備える。尚、ソースコード生成装置としての図面上の構成は実施の形態1または実施の形態2と同様であるため、ここでは実施の形態2の構成を例として説明する。
【0049】
図17は誤りを含んだ処理一覧表1の一例を示している。
図17では、処理候補選択マス14がAからFまでの6個存在し、このうち、Cにおいて処理候補選択シンボル15が存在せず、処理に抜けがある。処理候補選択マス14における誤りには、処理候補選択シンボル15が1つも存在しない場合に加え、処理候補選択シンボル15が2つ以上存在する場合も含まれる。そのため、表走査部4aでは、処理候補選択マス14における誤りを、処理候補選択シンボル15の数が1個以外である、と定義し、誤り検出機能ではこれを検出する。
【0050】
コード生成部2aの表走査部4aでは、表の走査を一列ずつ行う。
図17に示した例では、処理候補選択マス14を、A→B→C→D→E→Fの順に走査する。誤り検出を行わないとき、各列において一行ずつ処理候補選択マス14の内容を取得する。そして、処理候補選択シンボル15であれば、同行の処理対象および候補を取得し、条件付処理候補選択シンボル20であれば、さらに条件管理表18から条件を取得していた。
【0051】
誤り検出を行うためには、処理候補選択マス14内の処理候補選択シンボル15の個数を算出する必要がある。即ち、表の走査中に処理候補選択マス14間の境界を検出する必要があり、
図17の例では、AとB、BとC、DとE、EとFの境界を検出する必要がある。処理候補選択列12を走査するとき、AからB、BからCなど、次の処理候補選択マスへ移るとき、処理対象選択列1において、処理対象が変化する。そのため、境界を検出するには、処理候補選択列12を走査するとき、同時に、同じ行に存在する処理対象を取得しておけばよい。例えば、AからBへと走査対象の処理候補選択マス14が移るとき、処理対象はVAR1からVAR2へ移る。処理対象が移ったときに、処理候補選択シンボル15の個数が1個でなければ、エラー出力する。1個であれば、記憶していた処理候補選択シンボル15の個数をクリアして、次の処理候補選択マス14へと移ればよい。
【0052】
上述した誤り検出のほかに、処理一覧表1から一度も使われていない候補を検出することもできる。任意の候補について、一度もその候補が選択されていないとき、その候補が不要であること、或いは候補の選択ミスが考えられる。一度も使われていない候補を検出する手順を、
図18を用いて説明する。
図18では、6個の処理候補選択マスを一行ずつ、AからGの7個に分割している。各状態における候補の選択では、同じ候補を選択すれば処理候補選択シンボル15が同じ行へと記述される。そのため、
図18のように一行ずつに分割すれば、記述された内容から、その行に対応する候補が何度選択されているかを取得することができる。例えば
図18では、AとC、即ちVAR1の0とVAR2の0が2回選択されていること、B、即ちVAR1の1は一度も選択されていないこと、その他は1回選択されていることがわかる。表走査部4aにおける誤り検出では、最後の行まで調べた後、一度も選択されていない行、
図18の例ではBの行数を出力する。
【0053】
このように実施の形態3では、誤り検出機能を備えることで、処理一覧表1(1a)に含まれる誤りを早期に発見することができる。これにより、生成されるプログラムコード9のテストに要する工数や、処理一覧表1(1a)のレビューに要する工数を削減できる。
【0054】
以上説明したように、実施の形態3のソースコード生成装置によれば、表走査部は、1つの処理対象の処理候補選択マス中に存在する処理候補選択シンボルの個数が1以外であった場合は、処理一覧表に誤りがあると判定するようにしたので、仕様の誤りを自動的に検出できるため、ソースコードのテストやデバッグに要する時間を削減することができる。
【0055】
また、実施の形態3のソースコード生成装置によれば、表走査部は、処理一覧表を走査した結果、一度も選択されていない処理の候補が存在する場合は、処理一覧表に誤りがあると判定するようにしたので、例えば、一度も用いられていない処理候補が存在するとき、設計段階での誤りや記述ミスが考えられるが、これを検出することで、誤りを早期に発見することができる。
【0056】
実施の形態4.
上記各実施の形態では、何れも処理一覧表1(1a)を用いてコード生成部2(2a)がプログラムコード9を生成していた。しかしながら、プログラムコード9を直接生成せず、従来の状態遷移表におけるアクション記述を生成してもよく、これを実施の形態4として以下説明する。
【0057】
図19は、処理一覧表1bから従来の状態遷移表28におけるアクション記述を生成する手順を説明するための図である。従来の状態遷移表28は、状態29とイベント30とアクション31とを備える。処理一覧表1bは、アクション31を記述した表であり、1つのアクション31に対して、処理候補選択列12が一列対応する。上述した実施の形態1〜3では、アクション31のプログラムコードを生成していたが、本実施の形態では、プログラムコード9ではなくアクション記述32を生成し、既存のプログラムコード生成ツール(例えばZIPC(登録商標))への入力とする。
【0058】
図20は、実施の形態4によるソースコード生成装置のブロック図である。
図20に示すソースコード生成装置は、処理一覧表1bとアクション生成部2bとソースコード生成ツール(ソースコード生成部)33を備える。処理一覧表1bは、
図19に示したように、処理対象記述列10と処理候補記述列11と、各列がアクションに対応した処理候補選択列12からなる。
アクション生成部2bは、処理一覧表1bに基づいてアクション記述32を出力するもので、表情報設定部3bと表走査部4bとコード出力部8とを備える。表情報設定部3bは、処理一覧表1bにおけるすべての処理候補選択列12を走査するために必要な処理一覧表1bの情報を設定する。表走査部4bは、処理取得部6と候補取得部7とを備えている。即ち、処理取得部6は、表情報設定部3bが設定した情報に基づいて走査を行い、処理対象記述列10からアクションに対応した処理対象を取得し、候補取得部7は、表情報設定部3bが設定した情報に基づいて走査を行い、処理候補記述列11からアクションに対応した処理の候補を取得する。また、コード出力部8は、表走査部4bが取得したアクションと処理対象と処理の候補とからアクション記述32を生成する。
【0059】
遷移情報34は、
図19に示した状態遷移表28における状態29およびイベント30とを備える。アクション記述32は、プログラムコード9から関数情報を取り除いたものに等しい。そのため、アクション生成部2bは、コード生成部2から関数名取得部5を除いたものに等しい。ソースコード生成ツール33は、ZIPCなど、状態遷移表からプログラムコードを生成するツールを指す。
このようにアクション生成部2bが処理一覧表1bを入力としてアクション記述32を生成し、このアクション記述32と遷移情報34とをソースコード生成ツール33への入力とする。
【0060】
このように、実施の形態4では、アクション生成部2bとソースコード生成ツール33とを組み合わせることで、アクション記述の抜けや誤りを防ぎつつ、遷移情報34とアクション記述32とからプログラムコードを得ることができる。さらに、ソースコード生成ツール33で提供されている、デバッガやシミュレータなどのツールを用いて開発することも可能となる。
【0061】
以上説明したように、実施の形態4のソースコード生成装置によれば、内部に状態を持ち、イベントの発生によって処理を行い、状態を遷移するシステムにおいて、処理の対象を処理対象として格納する処理対象記述列と、処理対象記述列に記述された処理対象に対する処理の候補を格納する処理候補記述列と、システムのアクションを記述する処理候補選択列とを有する処理一覧表を用いると共に、処理一覧表におけるすべての処理候補選択列を走査するために必要な情報を設定する表情報設定部と、表情報設定部が設定した情報に基づいて走査を行い、処理対象記述列からアクションに対応した処理対象を取得する処理取得部と、表情報設定部が設定した情報に基づいて走査を行い、処理候補記述列からアクションに対応した処理の候補を取得する候補取得部とからなる表走査部と、表走査部が取得したアクションと処理対象と処理の候補とからアクション記述を生成するコード出力部と、アクション記述と、状態およびイベントを記述した遷移情報とからソースコードを生成するソースコード生成部とを備えたので、処理一覧表および条件管理表を用いることで誤りの混入を防止し、かつ状態遷移表のアクション記述を生成することで、シミュレータやデバッガなど従来の開発ツールを利用することができる。
【0062】
実施の形態5.
実施の形態1では、生成されるプログラムコード9を記述するプログラミング言語は一種類に限定されていた。しかしながら、プログラミング言語ごとに記述方法等の情報をさらに備えることで、プログラミング言語を一種類に限定せず、複数の言語から選択できるようになる。本実施の形態に係るソースコード生成装置は、当該機能を備える。
【0063】
図21は、本実施の形態に係るソースコード生成装置の構成を示す図である。
図21に示すソースコード生成装置は、
図1に示したソースコード生成装置において、さらに言語データベース(DB)35を備えると共に、コード生成部2cが言語情報取得部36を備える。言語DB35は、コード生成部2cが参照するプログラミング言語ごとの情報を有しており、言語情報取得部36は、生成するプログラムコードを記述するプログラミング言語を決定し、言語DB35を参照してプログラムコードを生成するときに必要となる情報を取得する。コード生成部2cにおけるその他の基本的な構成は
図1に示した実施の形態1の構成と同様であるため、ここでの説明は省略する。
【0064】
同等の処理であっても、プログラミング言語が異なればソースコードの記述は異なる。そのため、言語DB35では、選択されうるプログラミング言語すべてに対し、ソースコード記述方法を保持しておく。
図22は、C言語とVBAを例にしたプログラミング言語の違いによるソースコードの記述の違いを示す図である。
図22に示したソースコードは、共に10行にも満たない。しかしながら両者の間には、コメントの書き方、関数の書き方、変数宣言の仕方、条件文の記述の仕方、比較演算子の記述の仕方、変数への値設定の仕方、関数呼び出しの仕方、計7箇所において記述の差異が存在する。よって、上述したような記述の差異を言語DB35へと保持しておくことで、1つの処理一覧表1から複数のプログラミング言語で記述したソースコードを生成することができる。
【0065】
図23は、言語DB35の構成を示した図である。言語DB35は、ID記述列37と、意味記述列38と、言語別変換内容記述列39とを備える。ID記述列37には、コード生成部2cから参照するためのIDを格納する。意味記述列38には、各行に記述されたプログラミング言語ごとの記述に対する意味を格納する。言語別変換内容記述列39は、選択されうるプログラミング言語の数だけ存在し、各プログラミング言語における変換内容を、言語別変換内容記述例40といったように格納する。例えば
図23では、コメント“test”を記述するとき、コード生成部2cからID“comment”、引数“test”で言語DB35を参照し、C言語では“//test”と、VBAでは“’test”と変換されることを意味している。
【0066】
処理一覧表1および言語DB35からプログラムコード9を生成する手順について、
図24を用いて説明する。処理一覧表1では、実施の形態1〜3で説明した手順で処理対象と処理候補を取得する。実施の形態1では、用いるプログラミング言語が1つに限定されている、即ち、取得した処理対象と処理候補からプログラムコードが一意に決定されていた。本実施の形態では、言語DB35に格納されたプログラミング言語別の変換情報から1つを選択し、プログラムコードを生成する。
図24の例では、処理一覧表1から処理対象VAR1および候補0を取得する。次に、言語DB35をID“assign”で参照し、選択された言語、この例ではC言語を選択し、“$1=$2;”を得る。その後、処理一覧表1および言語DB35から得られた情報を用いて“VAR1=0;”を生成する。言語情報取得部36が、言語DB35から用いるプログラミング言語を決定する手段は、これを限定しないが、例えば、処理一覧表1へ用いるプログラミング言語を格納する箇所を用意しておき、言語情報取得部36がそれを参照することで実現できる。
【0067】
以上、実施の形態1において複数のプログラミング言語から1つの言語を選択し、選択された言語でプログラムコード9を生成する方法について説明した。次に、実施の形態2において、言語DB35と言語情報取得部36とをさらに備えることで、複数のプログラミング言語から1つの言語を選択し、選択された言語でプログラムコード9を生成する方法について説明する。
【0068】
実施の形態2を実施の形態1と比較すると、条件管理表18および条件取得部19を備えている点において異なる。そして、上記で説明した通り、条件管理表18では、条件記述列23において特定のプログラミング言語、
図10の例ではC言語にて記述している。そのため、複数のプログラミング言語から1つの言語を選択して用いるには、記述方法を変更する必要がある。
【0069】
図25は、中間言語41を用いて条件管理表18を記述することで、一つの条件管理表18から言語DB35に格納されたプログラミング言語に対する条件管理表の生成例を示している。中間言語41は、言語DB35におけるIDおよび引数から構成される。
図25の例“equal(a,b)”では、最初にID“equal”から言語DB35におけるID記述行37を走査し、参照する行を決定する。その後、選択されたプログラミング言語に対応した言語別変換内容記述列39を参照することで、中間言語41から選択されたプログラミング言語へと変換することができる。
【0070】
また、システムの設計段階において用いるプログラミング言語は決定されているものと考えられるので、条件管理表18は決定された言語で記述しても良い。中間言語41を用いることで、用いるプログラミング言語を容易に変更することができ、プログラミング言語が異なるシステム間において、条件管理表18を再利用することもできる。
【0071】
このように、実施の形態5では、生成されるプログラムコード9を記述するプログラミング言語に選択肢を与えることができる。そのため、複数のプログラミング言語でのシステム開発を、1つのソースコード生成装置で実現することができる。
【0072】
以上説明したように、実施の形態5のソースコード生成装置によれば、プログラミング言語ごとのソースコードの記述方法を保持する言語データベースと、表走査部が取得した情報に対応して生成するソースコードを記述するプログラミング言語を決定し、決定したプログラミング言語でソースコードを記述する際に必要となる情報を言語データベースから取得し、取得した情報をコード出力部の入力として出力する言語情報取得部を備えたので、複数のプログラミング言語での開発要求に、1つのソースコード生成装置で対応することができる。
【0073】
なお、本願発明はその発明の範囲内において、各実施の形態の自由な組み合わせ、あるいは各実施の形態の任意の構成要素の変形、もしくは各実施の形態において任意の構成要素の省略が可能である。