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