(57)【特許請求の範囲】
【請求項１】
複数の条件を各行に分けて記述する条件記述領域と、前記条件記述領域の条件が満たされているか否かの情報を行および列により決まるセルに指定する条件指定領域と、複数の動作を各行に分けて記述する動作記述領域と、前記条件記述領域の条件を満たしているか否かに応じて前記動作を実行するか否かの情報を各行および各列により決まるセルに指定する動作指定領域とを有するデシジョンテーブルを記憶する記憶部と、
無限ループのコードを出力し、前記動作記述領域にｂｒｅａｋ文を設定し、該ｂｒｅａｋ文が設定された行に対応する動作指定領域の各セルに、前記ｂｒｅａｋ文の動作を実行する旨の情報を設定する設定部と、
前記デシジョンテーブルのセルを順次走査して、該デシジョンテーブルの末尾の行で再帰の動作を行う情報が指定されたセルを検出する再帰検出部と、
前記再帰検出部の検出結果を基にして、前記ｂｒｅａｋ文が設定された行に対応する動作指定領域のセルの情報を、前記ｂｒｅａｋ文の動作を実行しない旨の情報に変更する変更部と、
前記再帰検出部の検出結果を基にして、繰り返しを実行するコードを出力し、前記デシジョンテーブルのセルを順次走査し、前記動作記述領域の動作を実行する旨の情報がセルに含まれている場合には、該セルの行に対応する動作を出力する出力部と
を有することを特徴とするソースコード生成装置。
【請求項２】
前記出力部は、前記再帰検出部の検出結果を基にして、ソースコードの先頭に移行するｇｏｔｏ文を出力することを特徴とする請求項１に記載のソースコード生成装置。
【請求項３】
コンピュータが実行するソースコード生成方法であって、
複数の条件を各行に分けて記述する条件記述領域と、前記条件記述領域の条件が満たされているか否かの情報を行および列により決まるセルに指定する条件指定領域と、複数の動作を各行に分けて記述する動作記述領域と、前記条件記述領域の条件を満たしているか否かに応じて前記動作を実行するか否かの情報を各行および各列により決まるセルに指定する動作指定領域とを有するデシジョンテーブルを記憶装置から読み出し、
無限ループのコードを出力し、前記動作記述領域にｂｒｅａｋ文を設定し、該ｂｒｅａｋ文が設定された行に対応する動作指定領域の各セルに、前記ｂｒｅａｋ文の動作を実行する旨の情報を設定し、
前記デシジョンテーブルのセルを順次走査して、該デシジョンテーブルの末尾の行で再帰の動作を行う情報が指定されたセルを検出し、
検出結果を基にして、前記ｂｒｅａｋ文が設定された行に対応する動作指定領域のセルの情報を、前記ｂｒｅａｋ文の動作を実行しない旨の情報に変更し、
検出結果を基にして、繰り返しを実行するコードを出力し、
前記デシジョンテーブルのセルを順次走査し、前記動作記述領域の動作を実行する旨の情報がセルに含まれている場合には、該セルの行に対応する動作を出力する
各処理を実行することを特徴とするソースコード生成方法。
【請求項４】
前記出力する処理は、前記末尾の行で再帰の動作を検出する処理の検出結果を基にして、ソースコードの先頭に移行するｇｏｔｏ文を出力することを特徴とする請求項３に記載のソースコード生成方法。
【請求項５】
コンピュータに、
複数の条件を各行に分けて記述する条件記述領域と、前記条件記述領域の条件が満たされているか否かの情報を行および列により決まるセルに指定する条件指定領域と、複数の動作を各行に分けて記述する動作記述領域と、前記条件記述領域の条件を満たしているか否かに応じて前記動作を実行するか否かの情報を各行および各列により決まるセルに指定する動作指定領域とを有するデシジョンテーブルを記憶装置から読み出し、
無限ループのコードを出力し、前記動作記述領域にｂｒｅａｋ文を設定し、該ｂｒｅａｋ文が設定された行に対応する動作指定領域の各セルに、前記ｂｒｅａｋ文の動作を実行する旨の情報を設定し、
前記デシジョンテーブルのセルを順次走査して、該デシジョンテーブルの末尾の行で再帰の動作を行う情報が指定されたセルを検出し、
検出結果を基にして、前記ｂｒｅａｋ文が設定された行に対応する動作指定領域のセルの情報を、前記ｂｒｅａｋ文の動作を実行しない旨の情報に変更し、
検出結果を基にして、繰り返しを実行するコードを出力し、
前記デシジョンテーブルのセルを順次走査し、前記動作記述領域の動作を実行する旨の情報がセルに含まれている場合には、該セルの行に対応する動作を出力する
各処理を実行させることを特徴とするソースコード生成プログラム。
【請求項６】
前記出力する処理は、前記末尾の行で再帰の動作を検出する処理の検出結果を基にして、ソースコードの先頭に移行するｇｏｔｏ文を出力することを特徴とする請求項５に記載のソースコード生成プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ソースコード生成装置等に関する。
【背景技術】
【０００２】
近年、プログラムの処理条件やポリシーなどを分かりやすく表現するためにデシジョンテーブルが利用されている。図１６は、デシジョンテーブルの一例を示す図である。図１６に示すように、デシジョンテーブル１０は、条件記述領域１０ａ、条件指定領域１０ｂ、動作記述領域１０ｃ、動作指定領域１０ｄを有する。
【０００３】
条件記述領域１０ａは、条件を記述する部分である。条件指定領域１０ｂは、条件記述領域１０ａの条件が満たされているか否かを指定する部分である。条件が満たされていれば、条件記述領域１０ａに「ｙ」が指定され、条件が満たされていなければ「ｎ」が指定される。
【０００４】
動作記述領域１０ｃは、動作を記述する部分である。動作指定領域１０ｄは、動作を実行するか否かを指定する部分である。動作を実行する場合には、動作指定領域１０ｄに「ｘ」が指定され、動作を実行しない場合には「−」が指定される。
【０００５】
例えば、図１６のデシジョンテーブル１０において、「商品コード＜０００」の条件を満たし、「商品コード＞９９９」の条件を満たさない場合には「下限エラー処理」が実行される。「商品コード＜０００」の条件を満たさず、「商品コード＞９９９」の条件を満たす場合には「上限エラー処理」が実行される。「商品コード＜０００」および「商品コード＞９９９」の条件を満たさない場合には「マスタファイル登録」が実行される。
【０００６】
利用者は、デシジョンテーブル１０を作成して、処理条件やポリシーなどを整理したのちに、デシジョンテーブル１０に定義した条件による動作をコンピュータに実行させるソースコードを、エディタを利用して作成する。
【０００７】
ここで、ソースコードを作成する利用者の負担を軽減するべく、デシジョンテーブルで定義した情報を、任意の処理言語に変換する従来技術が開示されている。この従来技術は、条件記述領域、条件指定領域、動作記述領域、動作指定領域に設定された情報の関係から、ＩＦ文を生成する。図１７は、従来技術により生成されたソースコードの一例を示す図である。図１７に示すように、図１６に示したデシジョンテーブル１０は、ＩＦ文を含むソースコード２０に変換されている。
【先行技術文献】
【特許文献】
【０００８】
【特許文献１】特開平７−１５２５４３号公報
【発明の概要】
【発明が解決しようとする課題】
【０００９】
しかしながら、上述した従来技術では、繰り返しの動作を含むデシジョンテーブルをソースコードに変換することができないという問題があった。
【００１０】
一般のデシジョンテーブルは、図１６に示した単純なものだけではなく、繰り返しの動作を含むデシジョンテーブルが用いられる場合がある。従来技術では、このような繰り返しの動作を含むデシジョンテーブルを、ソースコードに変換することができない。このため、デシジョンテーブルに繰り返しの動作が含まれる場合には、利用者自身が、エディタでソースコードを作成することになる。
【００１１】
開示の技術は、上記に鑑みてなされたものであって、繰り返しの動作を含むデシジョンテーブルをソースコードに変換することができるソースコード生成装置、ソースコード生成方法およびソースコード生成プログラムを提供することを目的とする。
【課題を解決するための手段】
【００１２】
開示のソースコード生成装置は、記憶部と、再帰検出部と、出力部とを有する。記憶部は、複数の条件を各行に分けて記述する条件記述領域と、条件記述領域の条件が満たされているか否かの情報を行および列により決まるセルに指定する条件指定領域と、複数の動作を各行に分けて記述する動作記述領域と、条件記述領域の条件を満たしているか否かに応じて動作を実行するか否かの情報を各行および各列により決まるセルに指定する動作指定領域とを有するデシジョンテーブルを記憶する。再帰検出部は、デシジョンテーブルのセルを順次走査して、該デシジョンテーブルの末尾の行で再帰の動作を行う情報が指定されたセルを検出する。出力部は、再帰検出部の検出結果を基にして、繰り返しを実行するコードを出力する。
【発明の効果】
【００１３】
開示のソースコード生成装置によれば、繰り返しの動作を含むデシジョンテーブル１３０ａをソースコード１３０ｂに変換することができるという効果を奏する。
【図面の簡単な説明】
【００１４】
【図１】図１は、本実施例１に係るソースコード生成装置の構成を示す機能ブロック図である。
【図２】図２は、デシジョンテーブルのデータ構造の一例を示す図である。
【図３】図３は、「put("｝")」の動作を定義するデシジョンテーブルを示す図である。
【図４】図４は、本実施例１に係るソースコードのデータ構造の一例を示す図（１）である。
【図５】図５は、本実施例１に係るソースコードのデータ構造の一例を示す図（２）である。
【図６】図６は、本実施例１に係るソースコード生成部の処理手順を示すフローチャート（１）である。
【図７】図７は、本実施例１に係るソースコード生成部の処理手順を示すフローチャート（２）である。
【図８】図８は、閉じ括弧出力処理の処理手順を示すフローチャートである。
【図９】図９は、本実施例１に係る末尾再帰判定処理の処理手順を示すフローチャートである。
【図１０】図１０は、本実施例２に係るソースコード生成装置の構成を示す機能ブロック図である。
【図１１】図１１は、本実施例２に係るソースコードのデータ構造の一例を示す図である。
【図１２】図１２は、ｂｒｅａｋ文の行を追加したデシジョンテーブルのデータ構造の一例を示す図である。
【図１３】図１３は、本実施例２に係るソースコード生成部の処理手順を示すフローチャート（１）である。
【図１４】図１４は、本実施例２に係るソースコード生成部の処理手順を示すフローチャート（２）である。
【図１５】図１５は、本実施例２に係る末尾再帰判定処理の処理手順を示すフローチャートである。
【図１６】図１６は、デシジョンテーブルの一例を示す図である。
【図１７】図１７は、従来技術により生成されたソースコードの一例を示す図である。
【発明を実施するための形態】
【００１５】
以下に、本願の開示するソースコード生成装置、ソースコード生成方法およびソースコード生成プログラムの実施例を図面に基づいて詳細に説明する。なお、この実施例によりこの発明が限定されるものではない。
【実施例１】
【００１６】
本実施例１に係るソースコード生成装置の構成について説明する。図１は、本実施例１に係るソースコード生成装置の構成を示す機能ブロック図である。図１に示すように、このソースコード生成装置１００は、入力部１１０、表示部１２０、記憶部１３０、制御部１４０を有する。
【００１７】
入力部１１０は、各種の情報をソースコード生成装置１００に入力するための入力装置である。例えば、入力部１１０は、キーボードやマウス、タッチパネル等に対応する。例えば、利用者は、入力部１１０を操作して、デシジョンテーブル１３０ａの生成や、ソースコード１３０ｂの修正などを行う。
【００１８】
表示部１２０は、各種の情報を表示する表示装置である。例えば、表示部１２０は、後述するデシジョンテーブル１３０ａ、ソースコード１３０ｂ等を表示する。表示部１２０は、液晶モニタやタッチパネル等に対応する。
【００１９】
記憶部１３０は、デシジョンテーブル１３０ａおよびソースコード１３０ｂを記憶する。記憶部１３０は、例えば、ＲＡＭ（Random  Access  Memory）、ＲＯＭ（Read  Only  Memory）、フラッシュメモリ（Flash  Memory）などの半導体メモリ素子、またはハードディスク、光ディスクなどの記憶装置に対応する。
【００２０】
デシジョンテーブル１３０ａは、どのような条件の場合に、どのような動作を行うのかを定義するテーブルである。図２は、デシジョンテーブルのデータ構造の一例を示す図である。図２に示すように、このデシジョンテーブル１３０ａは、条件記述領域１３１、条件指定領域１３２、動作記述領域１３３、動作指定領域１３４を有する。以下において、条件記述領域１３１、条件指定領域１３２、動作記述領域１３３、動作指定領域１３４について順に説明する。
【００２１】
条件記述領域１３１について説明する。条件記述領域１３１は、複数の条件を各行に分けて記述する領域である。図２に示す例では、デシジョンテーブル１３０ａの０行目から６行目まで、条件が記述されている。０行目から６行目までに記述された条件の意味について説明する。
【００２２】
０行目の条件「t[-1][j]==""」について説明する。条件「t[-1][j]==""」は、デシジョンテーブル１３０ａの−１行目、ｊ列目のセルに情報が含まれていないという条件である。ｊは変数であり、所定の初期値が設定される。以下に示すｊも同様である。なお、−１行目は、０行目の１つ上の行に対応する。
【００２３】
１行目の条件「t[i][-1]==""」について説明する。条件「t[i][-1]==""」は、デシジョンテーブル１３０ａのｉ行目、−１列目のセルに情報が含まれていないという条件である。ｉは変数であり、所定の初期値が設定される。以下に示すｉも同様である。なお、−１列目は、０列目の一つ左の列に対応する。
【００２４】
２行目の条件「j=0」について説明する。条件「j=0」は、変数ｊの値が０であるという条件である。
【００２５】
３行目の条件「t[i][j-1]==t[i][j]」について説明する。条件「t[i][j-1]==t[i][j]」は、デシジョンテーブル１３０ａのｉ行目、ｊ−１列目のセルの情報と、ｉ行目、ｊ列目のセルの情報とが等しいという条件である。
【００２６】
４行目の条件「t[i][j]=="y"」について説明する。条件「t[i][j]=="y"」は、デシジョンテーブル１３０ａのｉ行目、ｊ列目のセルの情報が「ｙ」であるという条件である。
【００２７】
５行目の条件「t[i][j]=="n"」について説明する。条件「t[i][j]=="n"」は、デシジョンテーブル１３０ａのｉ行目、ｊ列目のセルの情報が「ｎ」であるという条件である。
【００２８】
６行目の条件「t[i][j]=="x"」について説明する。条件「t[i][j]=="x"」は、デシジョンテーブル１３０ａのｉ行目、ｊ列目のセルの情報が「ｘ」であるという条件である。
【００２９】
条件指定領域１３２について説明する。条件指定領域１３２は、条件記述領域１３１の各条件が満たされているか否かの情報を記述する領域である。該当する行の条件を満たしていれば、セルに「ｙ」が記述される。該当する行の条件を満たさない場合にはセルに「ｎ」が記述される。
【００３０】
動作記述領域１３３について説明する。動作記述領域１３３は、動作を各行に分けて記述する領域である。図２に示す例では、デシジョンテーブル１３０ａの７行目から１７行目まで、動作が記述されている。７行目から１７行目までに記載された動作の一例について説明する。
【００３１】
７行目の動作「put("if")」について説明する。動作「put("if")」は、「ｉｆ」を出力する動作である。
【００３２】
８行目の動作「put("else")」について説明する。動作「put("else")」は、「ｅｌｓｅ」を出力する動作である。
【００３３】
９行目の動作「put(x)」について説明する。動作「put(x)」は、「ｘ」を出力する動作である。
【００３４】
１０行目の動作「l++」について説明する。動作「l++」は、変数ｌの値に１を加算した値によって、ｌの値を更新する動作である。
【００３５】
１１行目の動作「i++」について説明する。動作「i++」は、変数ｉの値に１を加算した値によって、ｉの値を更新する動作である。
【００３６】
１２行目の動作「i--」について説明する。動作「i--」は、変数ｉの値から１を減算した値によって、ｉの値を更新する動作である。
【００３７】
１３行目の動作「put("｝")」について説明する。動作「put("｝")」は、図３に示すデシジョンテーブルに対応する処理を行う。図３は、「put("｝")」の動作を定義するデシジョンテーブルを示す図である。
【００３８】
図３の０列目に示すように、ｉの値が０未満の場合には、動作「put("｝")」は何も動作しない。また、図３の１列目に示すように、ｉの値が０以上であり、デシジョンテーブル１３０ａのｉ行目、ｊ列目が「ｙ」である場合には、動作「put("｝")」は何も動作しない。
【００３９】
図３の２列目に示すように、ｉの値が０以上であり、デシジョンテーブル１３０ａのｉ行目、ｊ列目が「ｎ」の場合には、動作「put("｝")」は、ｌの値から１を減算した値によって、ｌの値を更新する。また、動作「put("｝")」は、「｝」を出力する。また、動作「put("｝")」は、ｉの値から１を減算した値によって、ｉの値を更新する。
【００４０】
図３の３列目に示すように、ｉの値が０以上であり、デシジョンテーブル１３０ａのｉ行目、ｊ列目が「ｙ」でも「ｎ」でもない場合には、動作「put("｝")」は、ｉの値から１を減算した値によって、ｉの値を更新する。
【００４１】
図２に戻り、１４行目の動作「j++」について説明する。動作「j++」は、変数ｊの値に１を加算した値によって、ｊの値を更新する動作である。
【００４２】
１５行目の動作「i=0」について説明する。動作「i=0」は、変数ｉの値に０を設定する動作である。
【００４３】
１６行目の動作「l=0」について説明する。動作「l=0」は、変数ｌの値に０を設定する動作である。
【００４４】
１７行目の動作「dt()」について説明する。動作「dt()」は、再帰の動作である。動作「dt()」は、デシジョンテーブル１３０ａを再度呼び出し、デシジョンテーブル１３０ａと同じ処理を再度行う。図２では一例として、動作「dt()」としたが、動作「call  dt()」としても良い。
【００４５】
動作指定領域１３４について説明する。動作指定領域１３４は、該当する行の動作を実行するか否かの情報を記述する領域である。該当する行の動作を実行する場合には、「ｘ」が記述される。以下において、デシジョンテーブル１３０ａに定義された、条件と動作について列毎に説明する。
【００４６】
デシジョンテーブル１３０ａの０列目について説明する。０行目の条件を満たす場合には、デシジョンテーブル１３０ａにより定義された処理は終了となる。
【００４７】
デジションテーブル１３０ａの１列目について説明する。０行目の条件を満たさず、１行目の条件を満たす場合には、１２行目から１７行目までの動作が行われる。
【００４８】
デジションテーブル１３０ａの２列目について説明する。０行目および１行目の条件を満たさず、２行目および４行目の条件を満たす場合には、７、１０、１１、１７行目の動作が行われる。
【００４９】
デシジョンテーブル１３０ａの３列目について説明する。０、１、４行目の条件を満たさず、２行目および５行目の条件を満たす場合には、８、１０、１１、１７行目の動作が行われる。
【００５０】
デシジョンテーブル１３０ａの４列目について説明する。０、１、４、５行目の条件を満たさず、２、６行目の条件を満たす場合には、９、１１、１７行目の動作が行われる。
【００５１】
デシジョンテーブル１３０ａの５列目について説明する。０、１、４、５、６行目の条件を満たさず、２行目の条件を満たす場合には、１１、１７行目の動作が行われる。
【００５２】
デシジョンテーブル１３０ａの６列目について説明する。０、１、２行目の条件を満たさず、３、４行目の条件を満たす場合には、１０、１１、１７行目の動作が行われる。
【００５３】
デシジョンテーブル１３０ａの７行目について説明する。０、１、２、４行目の条件を満たさず、３、５行目の条件を満たす場合には、１０、１１、１７行目の動作が行われる。
【００５４】
デシジョンテーブル１３０ａの８行目について説明する。０、１、２、４、５行目の条件を満たさず、３、６行目の条件を満たす場合には、９、１１、１７行目の動作が行われる。
【００５５】
デシジョンテーブル１３０ａの９行目について説明する。０、１、２、４、５、６行目の条件を満たさず、３行目の条件を満たす場合には、１１、１７行目の動作が行われる。
【００５６】
デシジョンテーブル１３０ａの１０行目について説明する。０、１、２、３行目の条件を満たさず、４行目の条件を満たす場合には、７、１０、１１、１７行目の動作が行われる。
【００５７】
デシジョンテーブル１３０ａの１１行目について説明する。０、１、２、３、４行目の条件を満たさず、５行目の条件を満たす場合には、８、１０、１１、１７行目の動作が行われる。
【００５８】
デシジョンテーブル１３０ａの１２行目について説明する。０、１、２、３、４、５行目の条件を満たさず、６行目の条件を満たす場合には、９、１１、１７行目の動作が行われる。
【００５９】
デシジョンテーブル１３０ａの１３行目について説明する。０、１、２、３、４、５、６行目の条件を満たさない場合には、１１、１７行目の動作が行われる。
【００６０】
ソースコード１３０ｂは、デシジョンテーブル１３０ａに定義された各条件による動作をコンピュータに実行させるためのソースコードである。図４および図５は、本実施例１に係るソースコードのデータ構造の一例を示す図である。デシジョンテーブル１３０ａから、図４の１行目から図５の８３行目に示すソースコードが生成される。
【００６１】
制御部１４０は、管理部１４０ａ、ソースコード生成部１４０ｂを有する。制御部１４０は、例えば、ＡＳＩＣ（Application  Specific  Integrated  Circuit）や、ＦＰＧＡ（Field  Programmable  Gate  Array）などの集積装置に対応する。また、制御部１４０は、例えば、ＣＰＵやＭＰＵ（Micro  Processing  Unit）等の電子回路に対応する。
【００６２】
管理部１４０ａは、記憶部１３０に記憶された情報を管理する処理部である。例えば、管理部１４０ａは、利用者が入力部１１０を操作して入力したデシジョンテーブル１３０ａを、記憶部１３０に記憶させる。また、管理部１４０ａは、各種の要求に応じて、デシジョンテーブル１３０ａ及びソースコード１３０ｂを、表示部１２０に表示させる。
【００６３】
ソースコード生成部１４０ｂは、デシジョンテーブル１３０ａを基にして、ソースコード１３０ｂを生成する処理部である。ソースコード生成部１４０ｂは、再帰検出部１４１、出力部１４２を有する。
【００６４】
再帰検出部１４１は、デシジョンテーブル１３０ａのセルを０行目０列目から順次走査して、デシジョンテーブル１３０ａの末尾の行で再帰の動作を行う情報が指定されたセルを検出する処理部である。
【００６５】
出力部１４２は、再帰検出部１４１の検出結果を基にして、繰り返しを実行するコードを出力する処理部である。
【００６６】
ここで、ソースコード生成部１４０ｂに含まれる再帰検出部１４１と出力部１４２とが協働してデシジョンテーブル１３０ａからソースコード１３０ｂを生成する処理手順について具体的に説明する。図６及び図７は、本実施例１に係るソースコード生成部の処理手順を示すフローチャートである。ソースコード生成部１４０ｂは、デシジョンテーブル１３０ａの０行目０列目のセルから、走査を開始する。
【００６７】
図６に示すように、ソースコード生成部１４０ｂは、末尾再帰の移動先となるコードを出力する（ステップＳ１０１）。ステップＳ１０１において、例えば、ソースコード生成部１４０ｂは、図４に示すソースコード１３０ｂの１行目に示すコード「ｄｔ：」を出力する。かかるコードは、図２に示すデシジョンテーブル１３０ａの−１行目、−１列目のコードに対応する。
【００６８】
ソースコード生成部１４０ｂは、列の終わりであるか否かを判定する（ステップＳ１０２）。図２に示すデシジョンテーブル１３０ａを例にすると、列の終わりは、１４行目に対応する。
【００６９】
ソースコード生成部１４０ｂは、列の終わりである場合には（ステップＳ１０２，Ｙｅｓ）、処理を終了する。一方、列の終わりではない場合には（ステップＳ１０２，Ｎｏ）、行の終わりか否かを判定する（ステップＳ１０３）。図２に示すデシジョンテーブル１３０ａを例にすると、行の終わりは、１８行目に対応する。
【００７０】
ソースコード生成部１４０ｂは、行の終わりである場合には（ステップＳ１０３，Ｙｅｓ）、行を１つ戻す（ステップＳ１０４）。ソースコード生成部１４０ｂは、閉じ括弧出力処理を実行する（ステップＳ１０５）。
【００７１】
ソースコード生成部１４０ｂは、列を１つ進め（ステップＳ１０６）、行を０行目に戻す（ステップＳ１０７）。ソースコード生成部１４０ｂは、インデントを０に戻し（ステップＳ１０８）、ステップＳ１０２に移行する。ここで、インデントは、ソースコード１３０ｂ上の位置を示すものである。インデントを０に戻すとは、ソースコード１３０ｂのインデントの位置を、左端によせることを意味する。
【００７２】
ソースコード生成部１４０ｂは、行の終わりでない場合に（ステップＳ１０３，Ｎｏ）、左端の列であるか否かを判定する（ステップＳ１０９）。デシジョンテーブル１３０ａの左端の列は、０列目に対応する。
【００７３】
ソースコード生成部１４０ｂは、左端の列ではない場合には（ステップＳ１０９，Ｎｏ）、図７のステップＳ１１８に移行する。一方、ソースコード生成部１４０ｂは、左端の列である場合には（ステップＳ１０９，Ｙｅｓ）、セルがｙであるか否かを判定する（ステップＳ１１０）。
【００７４】
ソースコード生成部１４０ｂは、セルがｙである場合には（ステップＳ１１０，Ｙｅｓ）、”ｉｆ”と、現在のセルの行に対応する条件記述領域の文字とを出力する（ステップＳ１１１）。例えば、図２のデシジョンテーブ１３０ａの０行目、０列目のセルはｙである。現在のセルが０行目、０列目のセルである場合には、ソースコード生成部１４０ｂは、図４の２行目に示すように「if(t[-1][i]=="")｛」を出力する。
【００７５】
ソースコード生成部１４０ｂは、インデントを１つ進める（ステップＳ１１２）。インデントを１つ進めることは、ソースコード上のインデントを右側に１つ進めることを意味する。ソースコード生成部１４０ｂは、行を１つ進め（ステップＳ１１３）、ステップＳ１０２に移行する。
【００７６】
ソースコード生成部１４０ｂは、セルがｙではない場合には（ステップＳ１１０，Ｎｏ）、セルがｎであるか否かを判定する（ステップＳ１１４）。ソースコード生成部１４０ｂは、セルがｎである場合には（ステップＳ１１４，Ｙｅｓ）、”ｅｌｓｅ”を出力し（ステップＳ１１５）、ステップＳ１１２に移行する。例えば、図２のデジションテーブル１３０ａの０行目、１列目のセルはｎである。現在のセルが０行目、１列目のセルである場合には、ソースコード生成部１４０ｂは、図４の２行目に示す「｝else｛」を出力する。
【００７７】
ソースコード生成部１４０ｂは、セルがｎではない場合には（ステップＳ１１４，Ｎｏ）、セルがｘであるか否かを判定する（ステップＳ１１６）。ソースコード生成部１４０ｂは、セルがｘである場合には（ステップＳ１１６，Ｙｅｓ）、末尾再帰判定処理を実行し（ステップＳ１１７）、ステップＳ１１３に移行する。一方、ソースコード生成部１４０ｂは、セルがｘではない場合には（ステップＳ１１６，Ｎｏ）、ステップＳ１１３に移行する。
【００７８】
図７の説明に移行する。ソースコード生成部１４０ｂは、現在のセルの情報が、左隣のセルの情報と同じか否かを判定する（ステップＳ１１８）。例えば、図２のデシジョンテーブル１３０ａの０行目、２列目のセルの情報は、左隣のセルの情報と同じである。
【００７９】
ソースコード生成部１４０ｂは、左隣のセルの情報と同じ場合には（ステップＳ１１８，Ｙｅｓ）、セルがｙであるか否かを判定する（ステップＳ１１９）。ソースコード生成部１４０ｂは、セルがｙである場合には（ステップＳ１１９，Ｙｅｓ）、インデントを１つ進める（ステップＳ１２０）。ソースコード生成部１４０ｂは、行を１つ進め（ステップＳ１２１）、図６のステップＳ１０２に移行する。
【００８０】
一方、ソースコード生成部１４０ｂは、セルがｙではない場合には（ステップＳ１１９，Ｎｏ）、セルがｎであるか否かを判定する（ステップＳ１２２）。ソースコード生成部１４０ｂは、セルがｎである場合には（ステップＳ１２２，Ｙｅｓ）、ステップＳ１２０に移行する。
【００８１】
一方、ソースコード生成部１４０ｂは、セルがｎではない場合には（ステップＳ１２２，Ｎｏ）、セルがｘであるか否かを判定する（ステップＳ１２３）。ソースコード生成部１４０ｂは、セルがｘではない場合には（ステップＳ１２３，Ｎｏ）、ステップＳ１２１に移行する。
【００８２】
一方、ソースコード生成部１４０ｂは、セルがｘである場合には（ステップＳ１２３，Ｙｅｓ）、末尾再帰判定処理を実行し（ステップＳ１２４）、ステップＳ１２１に移行する。
【００８３】
図７のステップＳ１１８の説明に戻る。ソースコード生成部１４０ｂは、左隣のセルの情報と異なる場合には（ステップＳ１１８，Ｎｏ）、セルがｙであるか否かを判定する（ステップＳ１２５）。
【００８４】
ソースコード生成部１４０ｂは、セルがｙである場合には（ステップＳ１２５，Ｙｅｓ）、”ｉｆ”と、現在のセルの行に対応する条件記述領域の文字とを出力する（ステップＳ１２６）。ソースコード生成部１４０ｂは、インデントを１つ進め（ステップＳ１２７）、ステップＳ１２１に移行する。
【００８５】
一方、ソースコード生成部１４０ｂは、セルがｙではない場合には（ステップＳ１２５，Ｎｏ）、セルがｎであるか否かを判定する（ステップＳ１２８）。ソースコード生成部１４０ｂは、セルがｎである場合には（ステップＳ１２８，Ｙｅｓ）、”ｅｌｓｅ”を出力し（ステップＳ１２９）、ステップＳ１２７に移行する。
【００８６】
一方、ソースコード生成部１４０ｂは、セルがｎではない場合には（ステップＳ１２８，Ｎｏ）、セルがｘであるか否かを判定する（ステップＳ１３０）。ソースコード生成部１４０ｂは、セルがｘではない場合には（ステップＳ１３０，Ｎｏ）、ステップＳ１２１に移行する。
【００８７】
一方、ソースコード生成部１４０ｂは、セルがｘである場合は（ステップＳ１３０，Ｙｅｓ）、現在のセルの行に対応する動作記述領域の文字を出力し（ステップＳ１３１）、ステップＳ１２１に移行する。例えば、図２のデシジョンテーブル１３０ａの１２行目、１列目のセルはｎである。現在のセルが１２行目、１列目のセルである場合には、図４の５行目に示すように、「i--;」を出力する。
【００８８】
次に、図６のステップＳ１０５に示した閉じ括弧出力処理について説明する。閉じ括弧出力処理は、「｝」を条件に応じて出力する処理である。図８は、閉じ括弧出力処理の処理手順を示すフローチャートである。
【００８９】
図８に示すように、ソースコード生成部１４０ｂは、行が先頭であるか否かを判定する（ステップＳ１５１）。図２のデシジョンテーブル１３０ａを例にすると、行の先頭は、０行目に対応する。
【００９０】
ソースコード生成部１４０ｂは、行が先頭ではない場合には（ステップＳ１５１，Ｎｏ）、閉じ括弧出力処理を終了する。
【００９１】
ソースコード生成部１４０ｂは、行が先頭である場合には（ステップＳ１５１，Ｙｅｓ）、セルがｙであるか否かを判定する（ステップＳ１５２）。ソースコード生成部１４０ｂは、セルがｙである場合には（ステップＳ１５２，Ｙｅｓ）、閉じ括弧出力処理を終了する。
【００９２】
ソースコード生成部１４０ｂは、セルがｙでない場合には（ステップＳ１５２，Ｎｏ）、セルがｎであるか否かを判定する（ステップＳ１５３）。ソースコード生成部１４０ｂは、セルがｎである場合には（ステップＳ１５３，Ｙｅｓ）、インデントを１つ戻す（ステップＳ１５４）。インデントを１つ戻すことは、ソースコード上のインデントを左側に１つ戻すことを意味する。
【００９３】
ソースコード生成部１４０ｂは、”｝”を出力し（ステップＳ１５５）、行を１つ進め（ステップＳ１５６）、ステップＳ１５１に移行する。
【００９４】
一方、ソースコード生成部１４０ｂは、セルがｎでない場合には（ステップＳ１５３，Ｎｏ）、行を１つ戻し（ステップＳ１５７）、ステップＳ１５１に移行する。
【００９５】
次に、図６および図７のステップＳ１１７、Ｓ１２４に示した末尾再帰判定処理について説明する。実施例１の末尾再帰判定処理は、デシジョンテーブル１３０ａの末尾の行で再帰の動作を行う情報が指定されたセルを検出した場合に、繰り返しを実行するコード「ｇｏｔｏ文」を出力する処理である。図９は、本実施例１に係る末尾再帰判定処理の処理手順を示すフローチャートである。
【００９６】
図９に示すように、ソースコード生成部１４０ｂは、現在のセルの行が末尾であるか否かを判定する（ステップＳ１８１）。図２に示すデシジョンテーブル１３０ａを例にすると、末尾となる行は、１７行目となる。
【００９７】
ソースコード生成部１４０ｂは、現在のセルの行が末尾である場合には（ステップＳ１８１，Ｙｅｓ）、現在のセルの行に対応する動作記述領域の動作が再帰であるか否かを判定する（ステップＳ１８２）。
【００９８】
ステップＳ１８２において、ソースコード生成部１４０ｂが再帰であるか否かを判定する処理の一例について説明する。ソースコード生成部１４０ｂは、現在のセルの行に対応する動作記述領域の動作を示す文字列に対して構文解析を実行する。ソースコード生成部１４０ｂは、構文解析した文字列と、デシジョンテーブル１３０ａの−１行目−１列目の文字列とが等しい場合に、再帰の動作であると判定する。
【００９９】
例えば、デシジョンテーブル１３０ａの１７行目の文字列「ｄｔ（）」と、デシジョンテーブル１３０ａの−１行目−列の文字列「ｄｔ（）」とは等しい文字である。このため、デシジョンテーブル１３０ａの１７行目の文字列「ｄｔ（）」の動作は、再帰を示す。
【０１００】
なお、ソースコード生成部１４０ｂは、その他の如何なる従来技術を利用して、動作が再帰であるか否かを判定しても良い。例えば、該当する動作にｃａｌｌ文などが付与され、デシジョンテーブルを呼び出している場合にも、再帰の動作であると判定しても良い。
【０１０１】
図９のステップＳ１８２の説明に戻る。ソースコード生成部１４０ｂは、再帰である場合には（ステップＳ１８２，Ｙｅｓ）、ｇｏｔｏ文を出力し（ステップＳ１８３）、末尾再帰判定処理を終了する。
【０１０２】
例えば、図２のデシジョンテーブル１３０ａにおいて、１７行目１列目のセルは、該当する行が末尾であり、行に対応する動作が再帰「dt()」である。このため、ソースコード生成部１４０ｂは、現在のセルがデシジョンテーブル１３０ａの１７行目１列目の場合には、図４の１０行目に示すように「goto  dt;」を出力する。
【０１０３】
ところで、ソースコード生成部１４０ｂは、ステップＳ１８１において、現在のセルの行が末尾ではない場合には（ステップＳ１８１，Ｎｏ）、動作記述領域の文字を出力し（ステップＳ１８４）、末尾再帰判定処理を終了する。
【０１０４】
また、ソースコード生成部１４０ｂは、ステップＳ１８２において、再帰でない場合には（ステップＳ１８２，Ｎｏ）、ステップＳ１８４に移行する。
【０１０５】
次に、本実施例１に係るソースコード生成装置１００の効果について説明する。ソースコード生成装置１００は、デシジョンテーブル１３０ａからソースコード１３０ｂを生成する場合において、デシジョンテーブル１３０ａのセルを順次走査して、デシジョンテーブル１３０ａの末尾の行で再帰の動作を行う情報が指定されたセルを検出する。ソースコード生成装置１００は、再帰の検出結果を基にして、繰り返しを実行するコードを出力する。このような処理を、ソースコード生成装置１００が実行することで、繰り返しの動作を含むデシジョンテーブル１３０ａをソースコード１３０ｂに変換することができる。
【実施例２】
【０１０６】
上記の実施例１のソースコード生成装置１００は、デシジョンテーブル１３０ａからＣ、Ｃ＋＋等に対応するソースコード１３０ｂを生成した。実施例２のソースコード生成装置２００は、Ｊａｖａ（登録商標）等に対応するソースコードを生成する。
【０１０７】
本実施例２に係るソースコード生成装置について説明する。図１０は、本実施例２に係るソースコード生成装置の構成を示す機能ブロック図である。図１０に示すように、ソースコード生成装置２００は、入力部２１０、表示部２２０、記憶部２３０、制御部２４０を有する。入力部２１０、表示部２２０に関する説明は、図１に示した入力部１１０、表示部１２０に関する説明と同様である。
【０１０８】
記憶部２３０は、デシジョンテーブル２３０ａおよびソースコード２３０ｂを記憶する。記憶部２３０は、例えば、ＲＡＭ、ＲＯＭ、フラッシュメモリなどの半導体メモリ素子、またはハードディスク、光ディスクなどの記憶装置に対応する。
【０１０９】
デシジョンテーブル２３０ａは、どのような条件の場合に、どのような動作を行うのかを定義するテーブルである。デシジョンテーブル２３０ａのデータ構造は、図２に示すものと同様である。
【０１１０】
ソースコード２３０ｂは、デシジョンテーブル２３０ａに定義された各条件による動作をコンピュータに実行させるためのソースコードである。図１１は、本実施例２に係るソースコードのデータ構造の一例を示す図である。デシジョンテーブル２３０ａから図１１の１行目から７２行目までのソースコードが生成される。
【０１１１】
制御部２４０は、管理部２４０ａ、ソースコード生成部２４０ｂを有する。制御部２４０は、例えば、ＡＳＩＣや、ＦＰＧＡなどの集積装置に対応する。また、制御部２４０は、例えば、ＣＰＵやＭＰＵ等の電子回路に対応する。
【０１１２】
管理部２４０ａに関する説明は、実施例１に示した管理部１４０ａに関する説明と同様である。
【０１１３】
ソースコード生成部２４０ｂは、デシジョンテーブル２３０ａを基にして、ソースコード２３０ｂを生成する処理部である。ソースコード生成部２４０ｂは、設定部２４１、再帰検出部２４２、変更部２４３、出力部２４４を有する。
【０１１４】
設定部２４１は、デジションテーブル２３０ａからソースコード２３０ｂを生成する段階で、初期設定を行う処理部である。設定部２４１は、デシジョンテーブル２３０ａにｂｒｅａｋ文の行を追加する処理と、ソースコード２３０ｂに無限ループのコードを出力する処理を実行する。
【０１１５】
設定部２４１が、デシジョンテーブル２３０ａにｂｒｅａｋ文の行を追加する処理について説明する。設定部２４１は、デシジョンテーブル２３０ａの行の終わりに対応する動作記述領域に「break」を設定する。ｂｒｅａｋ文は、無限ループを中断するための動作である。また、設定部２４１は、デシジョンテーブル２３０ａの行の終わりに対応する動作指定領域に「ｘ」を設定する。
【０１１６】
図１２は、ｂｒｅａｋ文の行を追加したデシジョンテーブルのデータ構造の一例を示す図である。図１２に示すように、デシジョンテーブル２３０ａの１８行目の動作記述領域に「break」が設定される。また、デシジョンテーブル２３０ａの１８行目の１列目から１４列目まで「ｘ」が設定される。
【０１１７】
再帰検出部２４２は、デシジョンテーブル２３０ａのセルを０行目０列目から順次走査して、デシジョンテーブル２３０ａの末尾の行で再帰の動作を行う情報が指定されたセルを検出する処理部である。なお、本実施例２では、図１２に示すデシジョンテーブル２３０ａの１７行目を、末尾とする。
【０１１８】
変更部２４３は、再帰検出部２４２の検出結果を基にして、ｂｒｅａｋ文が設定された行に対応する動作指定領域のセルの情報を、ｂｒｅａｋの動作を実行しない旨の情報に変更する。例えば、変更部２４３は、再帰検出部２４２の検出結果を基にして、該当するセルから「ｘ」を削除する。
【０１１９】
出力部２４４は、デシジョンテーブルのセルを順次走査し、動作記述領域の動作を実行する旨の情報がセルに含まれている場合には、該セルの行に対応する動作を出力する。
【０１２０】
ここで、ソースコード生成部２４０ｂに含まれる設定部２４１、再帰検出部２４２、変更部２４３、出力部２４４が協働して、デシジョンテーブル２３０ａからソースコード２３０ｂを生成する処理手順について具体的に説明する。図１３および図１４は、本実施例２に係るソースコード生成部の処理手順を示すフローチャートである。ソースコード生成部２４０ｂは、デシジョンテーブル２３０ａの０行０列のセルから、走査を開始する。
【０１２１】
図１３に示すように、ソースコード生成部２４０ｂは、無限ループのコードを出力する（ステップＳ２０１）。ステップＳ２０１において、例えば、ソースコード生成部２４０ｂは、図１１の１行目に示す「for(;;)｛」と、７２行目に示す「｝」を無限ループのコードとして出力する。
【０１２２】
ソースコード生成部２４０ｂは、動作記述領域にｂｒｅａｋを設定し、該当する動作指定領域を全て「ｘ」に設定する（ステップＳ２０２）。ソースコード生成部２４０ｂは、列の終わりであるか否かを判定する（ステップＳ２０３）。図１２に示すデシジョンテーブル２３０ａを例にすると、列の終わりは、１４行目に対応する。
【０１２３】
ソースコード生成部２４０ｂは、列の終わりである場合には（ステップＳ２０３，Ｙｅｓ）、処理を終了する。一方、列の終わりではない場合には（ステップＳ２０３，Ｎｏ）、行の終わりか否かを判定する（ステップＳ２０４）。図１２に示すデシジョンテーブル２３０ａを例にすると、行の終わりは、１９行目に対応する。
【０１２４】
ソースコード生成部２４０ｂは、行の終わりである場合には（ステップＳ２０４，Ｙｅｓ）、行を１つ戻し（ステップＳ２０５）、閉じ括弧出力処理を実行する（ステップＳ２０６）。ソースコード生成部２４０ｂは、列を１つ進め（ステップＳ２０７）、行を０に戻す（ステップＳ２０８）。ソースコード生成部２４０ｂは、インデントを０に戻し（ステップＳ２０９）、ステップＳ２０３に移行する。
【０１２５】
一方、ソースコード生成部２４０ｂは、行の終わりではない場合には（ステップＳ２０４，Ｎｏ）、左端の列であるか否かを判定する（ステップＳ２１０）。ソースコード生成部２４０ｂは、左端の列ではない場合には（ステップＳ２１０，Ｎｏ）、図１４のステップＳ２１９に移行する。
【０１２６】
一方、ソースコード生成部２４０ｂは、左端の列である場合には（ステップＳ２１０，Ｙｅｓ）、セルがｙであるか否かを判定する（ステップＳ２１１）。ソースコード生成部２４０ｂは、セルがｙである場合には（ステップＳ２１１，Ｙｅｓ）、”ｉｆ”と、現在のセルの行に対応する条件記述領域の文字とを出力する（ステップＳ２１２）。
【０１２７】
ソースコード生成部２４０ｂは、インデントを１つ進める（ステップＳ２１３）。インデントを１つ進めることは、ソースコード上のインデントを右側に１つ進めることを意味する。ソースコード生成部２４０ｂは、行を１つ進め（ステップＳ２１４）、ステップＳ２０３に移行する。
【０１２８】
ソースコード生成部２４０ｂは、セルがｙではない場合には（ステップＳ２１１，Ｎｏ）、セルがｎであるか否かを判定する（ステップＳ２１５）。ソースコード生成部２４０ｂは、セルがｎである場合には（ステップＳ２１５，Ｙｅｓ）、”ｅｌｓｅ”を出力し（ステップＳ２１６）、ステップＳ２１３に移行する。
【０１２９】
ソースコード生成部２４０ｂは、セルがｎではない場合には（ステップＳ２１５，Ｎｏ）、セルがｘであるか否かを判定する（ステップＳ２１７）。ソースコード生成部２４０ｂは、セルがｘである場合には（ステップＳ２１７，Ｙｅｓ）、末尾再帰判定処理を実行し（ステップＳ２１８）、ステップＳ２１４に移行する。一方、ソースコード生成部２４０ｂは、セルがｘではない場合には（ステップＳ２１７，Ｎｏ）、ステップＳ２１４に移行する。
【０１３０】
図１４の説明に移行する。ソースコード生成部２４０ｂは、現在のセルの情報が、左隣のセルの情報と同じか否かを判定する（ステップＳ２１９）。例えば、図１２のデシジョンテーブル２３０ａの０行目、２列目のセルの情報は、左隣のセルの情報と同じである。
【０１３１】
ソースコード生成部２４０ｂは、左隣のセルの情報と同じ場合には（ステップＳ２１９，Ｙｅｓ）、セルがｙであるか否かを判定する（ステップＳ２２０）。ソースコード生成部２４０ｂは、セルがｙである場合には（ステップＳ２２０，Ｙｅｓ）、インデントを１つ進める（ステップＳ２２１）。ソースコード生成部２４０ｂは、行を１つ進め（ステップＳ２２２）、図１３のステップＳ２０３に移行する。
【０１３２】
一方、ソースコード生成部２４０ｂは、セルがｙではない場合には（ステップＳ２２０，Ｎｏ）、セルがｎであるか否かを判定する（ステップＳ２２３）。ソースコード生成部２４０ｂは、セルがｎである場合には（ステップＳ２２３，Ｙｅｓ）、ステップＳ２２１に移行する。
【０１３３】
一方、ソースコード生成部２４０ｂは、セルがｎではない場合には（ステップＳ２２３，Ｎｏ）、セルがｘであるか否かを判定する（ステップＳ２２４）。ソースコード生成部２４０ｂは、セルがｘではない場合には（ステップＳ２２４，Ｎｏ）、ステップＳ２２２に移行する。
【０１３４】
一方、ソースコード生成部２４０ｂは、セルがｘである場合には（ステップＳ２２４，Ｙｅｓ）、末尾再帰判定処理を実行し（ステップＳ２２５）、ステップＳ２２２に移行する。
【０１３５】
図１４のステップＳ２１９の説明に戻る。ソースコード生成部２４０ｂは、左隣のセルの情報と異なる場合には（ステップＳ２１９，Ｎｏ）、セルがｙであるか否かを判定する（ステップＳ２２６）。
【０１３６】
ソースコード生成部２４０ｂは、セルがｙである場合には（ステップＳ２２６，Ｙｅｓ）、”ｉｆ”と、現在のセルの行に対応する条件記述領域の文字とを出力する（ステップＳ２２７）。ソースコード生成部２４０ｂは、インデントを１つ進め（ステップＳ２２８）、ステップＳ２２２に移行する。
【０１３７】
一方、ソースコード生成部２４０ｂは、セルがｙではない場合には（ステップＳ２２６，Ｎｏ）、セルがｎであるか否かを判定する（ステップＳ２２９）。ソースコード生成部２４０ｂは、セルがｎである場合には（ステップＳ２２９，Ｙｅｓ）、”ｅｌｓｅ”を出力し（ステップＳ２３０）、ステップＳ２２８に移行する。
【０１３８】
一方、ソースコード生成部２４０ｂは、セルがｎではない場合には（ステップＳ２２９，Ｎｏ）、セルがｘであるか否かを判定する（ステップＳ２３１）。ソースコード生成部２４０ｂは、セルがｘではない場合には（ステップＳ２３１，Ｎｏ）、ステップＳ２２２に移行する。
【０１３９】
一方、ソースコード生成部２４０ｂは、セルがｘである場合は（ステップＳ２３１，Ｙｅｓ）、現在のセルの行に対応する動作記述領域の文字を出力し（ステップＳ２３２）、ステップＳ２２２に移行する。
【０１４０】
ここで、図１３のステップＳ２０６に示した閉じ括弧出力処理は、図８で説明した閉じ括弧出力処理と同様である。
【０１４１】
次に、図１３および図１４のステップＳ２１８、Ｓ２２５に示した末尾再帰判定処理について説明する。図１５は、本実施例２に係る末尾再帰判定処理の処理手順を示すフローチャートである。実施例２の末尾再帰判定処理は、デシジョンテーブル２３０ａの末尾の行で再帰の動作を行う情報が指定されたセルを検出した場合に、ｂｒｅａｋ文が設定された行に対応する動作指定領域のセルの情報を、ｂｒｅａｋの動作を実行しない旨の情報に変更することで、再帰動作を実行可能とする。なお、上記のように、実施例２では、図１２のデシジョンテーブル２３０ａにおいて、末尾の行を１７行目とする。
【０１４２】
図１５に示すように、ソースコード生成部２４０ｂは、現在のセルの行が末尾であるか否かを判定する（ステップＳ２４１）。ソースコード生成部２４０ｂは、現在のセルの行が末尾である場合には（ステップＳ２４１，Ｙｅｓ）、現在のセルの行に対応する動作記述領域の動作が再帰であるか否かを判定する（ステップＳ２４２）。
【０１４３】
ソースコード生成部２４０ｂは、再帰である場合には（ステップＳ２４２，Ｙｅｓ）、ｂｒｅａｋの行の該当するｘを空白に設定し（ステップＳ２４３）、末尾再帰判定処理を終了する。
【０１４４】
例えば、ソースコード生成部２４０ｂは、ステップＳ２４２において、現在のセルが１７行目１列目で、再帰動作と判定された場合には、１８行目１列目のセルに設定された「ｘ」を空白に設定する。また、ソースコード生成部２４０ｂは、現在のセルが１７行目２列目で、再帰動作と判定された場合には、１８行目２列目のセルに設定された「ｘ」を空白に設定する。他の場合も同様にして、ソースコード生成部２４０ｂは、ｘを空白に設定する。このように、再帰を検出した場合に、ｂｒｅａｋの行のｘを空白に設定することで、ソースコードにｂｒｅａｋ文が出力されなくなり、ソースコード上で繰り返しを表現できる。
【０１４５】
図１５の説明に戻る。ソースコード生成部２４０ｂは、ステップＳ２４１において、現在のセルの行が末尾ではない場合には（ステップＳ２４１，Ｎｏ）、動作記述領域の文字を出力し（ステップＳ２４４）、末尾再帰判定処理を終了する。
【０１４６】
また、ソースコード生成部２４０ｂは、ステップＳ２４２において、再帰でない場合には（ステップＳ２４２，Ｎｏ）、ステップＳ２４４に移行する。
【０１４７】
次に、本実施例２に係るソースコード生成部２４０ｂの効果について説明する。ソースコード生成部２４０ｂは、デシジョンテーブル２３０ａからソースコード２３０ｂを生成する場合において、無限ループのコードを出力し、動作記述領域にｂｒｅａｋ文を設定し、該ｂｒｅａｋ文が設定された行に対応する動作指定領域の各セルに、ｂｒｅａｋの動作を実行する旨の情報を設定する。ソースコード生成部２４０ｂは、再帰動作の検出結果を基にして、ｂｒｅａｋ文が設定された行に対応する動作指定領域のセルの情報を、ｂｒｅａｋの動作を実行しない旨の情報に変更する。そして、デシジョンテーブルのセルを順次走査し、動作記述領域の動作を実行する旨の情報がセルに含まれている場合には、該セルの行に対応する動作を出力する。このような処理を、ソースコード生成装置２００が実行することで、繰り返し動作を含むデシジョンテーブル２３０ａを、Ｊａｖａ（登録商標）等に対応したソースコード２３０ｂを生成することができる。
【０１４８】
ところで、本実施例１、２において説明したソースコード生成装置１００、２００の処理は一例である。例えば、ソースコード生成装置１００、２００は、サーバの機能を有していても良い。ソースコード生成装置１００、２００は、ネットワークを介して、端末装置からデシジョンテーブルのデータを受信し、受信したデシジョンテーブルを基にして上記処理を実行し、ソースコードを生成しても良い。ソースコード生成装置２００は、生成したソースコードを、端末装置に送信する。
【０１４９】
本実施例１、２において説明した各処理のうち、自動的におこなわれるものとして説明した処理の全部または一部を手動的におこなうこともでき、あるいは、手動的におこなわれるものとして説明した処理の全部または一部を公知の方法で自動的におこなうこともできる。この他、上記文書中や図面中で示した処理手順、制御手順、具体的名称、各種のデータやパラメータを含む情報については、特記する場合を除いて任意に変更することができる。
【０１５０】
また、図１、１０に示したソースコード生成装置１００、２００の各構成要素は機能概念的なものであり、必ずしも物理的に図示の如く構成されていることを要しない。なお、本実施例で説明した各種の処理手順は、予め用意されたプログラムをパーソナルコンピュータやワークステーションなどのコンピュータで実行することによって実現することができる。また、上記の実施例１、２で説明した各種の処理は、予め用意されたプログラムをコンピュータで実行することによって実現することができる。
【符号の説明】
【０１５１】
１００、２００  ソースコード生成装置
１１０、２１０  入力部
１２０、２２０  表示部
１３０、２３０  記憶部
１４０、２４０  制御部
【図１】
0005812878.tif 000002
【図２】
0005812878.tif 000003
【図３】
0005812878.tif 000004
【図４】
0005812878.tif 000005
【図５】
0005812878.tif 000006
【図６】
0005812878.tif 000007
【図７】
0005812878.tif 000008
【図８】
0005812878.tif 000009
【図９】
0005812878.tif 000010
【図１０】
0005812878.tif 000011
【図１１】
0005812878.tif 000012
【図１２】
0005812878.tif 000013
【図１３】
0005812878.tif 000014
【図１４】
0005812878.tif 000015
【図１５】
0005812878.tif 000016
【図１６】
0005812878.tif 000017
【図１７】
0005812878.tif 000018