以下に、本願の開示する編集装置、編集方法および編集プログラムの実施例を図面に基づいて詳細に説明する。なお、この実施例によりこの発明が限定されるものではない。
本実施例に係る編集装置の構成について説明する。図1は、本実施例に係る編集装置の構成を示す機能ブロック図である。図1に示すように、この編集装置100は、入力部110、表示部120、記憶部130、制御部140を有する。
入力部110は、各種の情報を編集装置100に入力するための入力装置である。例えば、入力部110は、キーボードやマウス、タッチパネル等に対応する。例えば、利用者は、入力部110を操作して、デシジョンテーブル130aの生成や、ソースコード130bの修正などを行う。
表示部120は、各種の情報を表示する表示装置である。例えば、表示部120は、後述するデシジョンテーブル130a、ソースコード130b等を表示する。表示部120は、液晶モニタやタッチパネル等に対応する。
記憶部130は、デシジョンテーブル130aおよびソースコード130bを記憶する。記憶部130は、例えば、RAM(Random Access Memory)、ROM(Read Only Memory)、フラッシュメモリ(Flash Memory)などの半導体メモリ素子、またはハードディスク、光ディスクなどの記憶装置に対応する。
デシジョンテーブル130aは、どのような条件の場合に、どのような動作を行うのかを定義するテーブルである。図2は、デシジョンテーブルのデータ構造の一例を示す図である。図2に示すように、このデシジョンテーブル130aは、条件記述領域131、条件指定領域132、動作記述領域133、動作指定領域134を有する。以下において、条件記述領域131、条件指定領域132、動作記述領域133、動作指定領域134について順に説明する。
条件記述領域131について説明する。複数の条件を各行に分けて記述する領域である。図2に示す例では、デシジョンテーブル130aの0行目まで、条件が記述されている。0行目から6行目までに記述された条件の意味について説明する。
0行目の条件「料金3千〜1万」は、買い物の料金が3千円以上、1万円未満であるという条件である。1行目の条件「料金1万〜3万」は、買い物の料金が1万以上、3万未満であるという条件である。2行目の条件「駐車料金3万以上」は、買い物の料金が3万以上であるという条件である。3行目の条件「シネマを視聴」は、利用者がシネマを視聴したという条件である。
条件指定領域132について説明する。条件指定領域132は、条件記述領域131の各条件が満たされているか否かの情報を記述する領域である。該当する行の条件を満たしていれば、セルに「y」が記述される。該当する行の条件を満たさない場合にはセルに「n」が記述される。
動作記述領域133について説明する。動作記述領域133は、動作を各行に分けて記述する領域である。図2に示す例では、デシジョンテーブル130aの4行目から7行目まで、動作が記述されている。4行目から7行目までに記載された動作の一例について説明する。
4行目の動作「30分無料」は、駐車料金を30分間無料にするという動作である。5行目の動作「1時間無料」は、駐車料金を1時間無料にするという動作である。6行目の動作「3時間無料」は、駐車料金を3時間無料にするという動作である。7行目の動作「6時間無料」は、駐車料金を6時間無料にするという動作である。
動作指定領域134について説明する。動作指定領域134は、該当する行の動作を実行するか否かの情報を記述する領域である。該当する行の動作を実行する場合には、「x」が記述される。以下において、デシジョンテーブル130aに定義された、条件と動作について列毎に説明する。
デシジョンテーブル130aの0列目について説明する。「料金3千〜1万」および「シネマを視聴」の条件を満たす場合には、動作は「3時間無料」となる。
デシジョンテーブル130aの1列目について説明する。「料金3千〜1万」の条件を満たす場合には、動作は「1時間無料」となる。
デシジョンテーブル130aの2列目について説明する。「料金1万〜3万」および「シネマを視聴」の条件を満たす場合には、動作は「3時間無料」となる。
デシジョンテーブル130aの3列目について説明する。「料金1万〜3万」の条件を満たす場合には、動作は「3時間無料」となる。
デシジョンテーブル130aの4列目について説明する。「料金3万以上」および「シネマ視聴」の条件を満たす場合には、動作は「6時間無料」となる。
デシジョンテーブル130aの5列目について説明する。「料金3万以上」の条件を満たす場合には、動作は「6時間無料」となる。
デシジョンテーブル130aの6列目について説明する。「シネマ視聴」の条件を満たす場合には、動作は「3時間無料」となる。
デシジョンテーブル130aの7列目について説明する。全ての条件を満たす場合には、動作は「30分無料」となる。
ところで、以下の説明では、便宜的に、デシジョンテーブルの符号として、130a、130A、130Bを利用する。デシジョンテーブル130aは、初期のデシジョンテーブルに対応する。デシジョンテーブル130Aは、最大化されたデシジョンテーブルに対応する。デシジョンテーブル130Bは、最小化されたデシジョンテーブルに対応する。デシジョンテーブル130A、130Bに関する詳しい説明は後述する。
ソースコード130bは、デシジョンテーブル130aに定義された各条件による動作をコンピュータに実行させるためのソースコードである。ソースコード130bに関する説明は後述する。
制御部140は、管理部141、編集部142、従属判定部143、ソースコード生成部144を有する。制御部140は、例えば、ASIC(Application Specific Integrated Circuit)や、FPGA(Field Programmable Gate Array)などの集積装置に対応する。また、制御部140は、例えば、CPUやMPU(Micro Processing Unit)等の電子回路に対応する。
管理部141は、記憶部130に記憶された情報を管理する処理部である。例えば、管理部141は、利用者が入力部110を操作して入力したデシジョンテーブル130aを、記憶部130に記憶させる。また、管理部141は、各種の要求に応じて、デシジョンテーブル130a及びソースコード130bを、表示部120に表示させる。
編集部142は、デシジョンテーブル130aの各列の情報を基にして、デシジョンテーブル130aを最小化する処理部である。
編集部142が、デシジョンテーブル130aを最小化する場合の概念について説明する。編集部142は、デシジョンテーブル130aのある列とその他の列とを比較する。ここでは説明の便宜上、ある列を第1の列とし、その他の列を第2の列とする。編集部142は、第1の列の動作指定領域の情報と、第2の列の動作指定領域の情報とが等しい場合には、第1の列の情報と、第2の列の情報とを統合する。
なお、編集部142は、第1の列と第2の列とを統合する場合に、統合する第1の列の条件指定領域の情報と、第2の条件指定領域の情報とを比較する。編集部142は、統合する第1の列の条件指定領域の情報と、第2の条件指定領域の情報とが異なる場合には、統合後の列の条件指定領域の情報に、条件記述領域の条件が満たされていても満たされていなくてもよい旨の情報「−」を設定する。
以下において、編集部142の処理を具体的に説明する。図3は、本実施例に係る編集部の処理手順を示すフローチャートである。図3に示すように、編集部142は、デシジョンテーブル130aを取得し(ステップS101)、デシジョンテーブル130を最大化する(ステップS102)。そして、編集部142は、最小化処理を実行する(ステップS103)。
ここで、図3のステップS102に示したデシジョンテーブル130aを最大化する処理について説明する。編集部142は、条件記述領域を満たす場合「y」と満たさない場合「n」との全ての組み合わせを、条件指定領域に展開する。例えば、条件記述領域に条件が4種類存在する場合には、18種類の「y」、「n」の組み合わせが存在する。
図4は、最大化したデシジョンテーブルのデータ構造の一例を示す図である。最大化したデシジョンテーブル130Aの6列目、7列目、10列目から15列目の条件指定領域の情報は、図2に示したデシジョンテーブル130aの1列目から7列目の条件指定領域の情報に対応する。編集部142は、デシジョンテーブル130aの1列目から7列目の動作指定領域の情報を、デシジョンテーブル130Aの6列目、7列目、10列目から15列目の動作指定領域の情報に設定する。
最大化したデシジョンテーブル130Aの0列目から5列目、8列目、9列目に対する条件指定領域の情報は、デシジョンテーブル130aに存在しない。このため、編集部142は、デシジョンテーブル130Aの0列目から5列目、8列目、9列目に対する動作指定領域の情報を不明「?」に設定する。
次に、図3のステップS103に示した最小化処理について説明する。図5A、図5Bは、最小化処理を説明するための図である。図5A、図5Bに示すように、編集部142は、デシジョンテーブル130Aを分割し、表10aおよび表10bを生成する。表10aは、デシジョンテーブル130Aの0列目から7列目までの情報に対応する。表10bは、デシジョンテーブル130Aの8列目から17列目に対応する。
表10aに対する処理について説明する。編集部142は、表10aを分割し、表30aおよび表30bを生成する。表30aは、表10aの1行目以降の、0列目から3列目の情報に対応する。表30bは、表10aの1行目以降の、4列目から7列目の情報に対応する。
表30aに対する処理について説明する。編集部142は、表30aの動作指定領域の情報が全て不明「?」となっている。編集部142は、動作指定領域の情報が全て不明となっている場合には、条件指定領域および動作指定領域の情報を削除する。編集部142は、表30aの0列目から3列目までの情報を削除することで、表30cを生成する。
表30bに対する処理について説明する。編集部142は、表30bを分割し、表40aおよび表40bを生成する。表40aは、表30bの1行目以降の、0列目および1列目の情報に対応する。表40bは、表30bの1行目以降の、2列目から3列目の情報に対応する。
表40aに対する処理について説明する。編集部142は、表40aの動作指定領域の情報が全て不明「?」となっている。編集部142は、表40aの0列目および1列目の情報を削除することで、表40cを生成する。
表40bに対する処理について説明する。編集部142は、表40bのように、列の数が2つになった場合に、0列目と1列目の動作指定領域の情報が等しいか否かを判定する。編集部142は、0列目と1列目の動作指定領域の情報が異なる場合には、0列目と1列目との統合を行わず、表40bをそのままとする。
表30dを生成する処理について説明する。編集部142は、表40cと表40bとを結合することで、表30dを生成する。ここで、表40cには、条件指定領域および動作指定領域の情報が含まれていないため、表30dの1列目と2列目の情報は、表40bの情報となる。
また、表30dを生成する場合には、表30bに合わせて、条件記述領域「駐車料金3万以上」と、該当する条件指定領域に情報を設定する。ここで、表30dの「駐車料金3万以上」の情報は、表30bの「駐車料金3万以上」の行の0列目から3列目を統合したものに対応する。表30bの「駐車料金3万以上」の行の0列目から3列目には「y」と「n」とが混在しているため、表30dの「駐車料金3万以上」の情報を「−」に設定する。「−」は、「y」でも「n」でもよいことを示す。
表10cを生成する処理について説明する。編集部142は、表30cと表30dとを結合することで、表10cを生成する。ここで、表30cには、条件指定領域および動作指定領域の情報が含まれていないため、表10cの1列目と2列目の情報は、表30dの情報となる。
また、表10cを生成する場合には、表10aに合わせて、条件記述領域「駐車料金1万〜3万」と、該当する条件指定領域に情報を設定する。ここで、表10dの「駐車料金1万〜3万」の情報は、表10aの「駐車料金1万〜3万」の行の0列目から7列目を統合したものに対応する。表10aの「駐車料金1万〜3万」の行の0列目から7列目には「y」と「n」とが混在しているため、表10cの「駐車料金1万〜3万」の情報を「−」に設定する。
続いて、表10bに対する処理について説明する。編集部142は、表10bを分割し、表20aおよび表20bを生成する。表20aは、表10bの1行目以降の、0列目から3列目の情報に対応する。表20bは、表10bの1行目以降の、4列目から7列目に対応する。
表20aに対する処理について説明する。編集部142は、表20aを分割し、表50aおよび表50bを生成する。表50aは、表20aの1行目以降の、0列目および1列目の情報に対応する。表50bは、表20aの1行目以降の、2列目および3列目に対応する。
表50aに対する処理について説明する。編集部142は、表50aの動作指定領域の情報が全て不明「?」となっている。編集部142は、表50aの0列目および1列目の情報を削除することで、表50cを生成する。
表50bに対する処理について説明する。編集部142は、表50bのように、列の数が2つになった場合に、0列目と1列目の動作指定領域の情報が等しいか否かを判定する。編集部142は、0列目と1列目の動作指定領域の情報が等しい場合には、0列目と1列目との統合を行うことで、表50dを生成する。なお、表50bに対する「シネマを視聴」の条件指定領域の情報には「y」と「n」が含まれている。このように、編集部142は、条件指定領域の情報が異なっている情報を1つの列に統合する場合には、統合後の表の条件指定領域を「−」に設定する。
表20cを生成する処理について説明する。編集部142は、表50cと表50dとを結合することで、表20cを生成する。表50cには、条件指定領域および動作指定領域の情報が含まれていないため、表20cの1行目以降の、1列目の情報は、表50dの情報となる。ここで、表20cの「駐車料金3万以上」の情報は、表20aの「駐車料金3万以上」の行の0列目から3列目を統合したものに対応する。表20aの「駐車料金3万以上」の行の0列目から3列目には「y」と「n」とが混在しているため、編集部142は、表20cの「駐車料金3万以上」の情報を「−」に設定する。
表20bに対する処理について説明する。編集部142は、表20bを分割し、表60aおよび表60bを生成する。表60aは、表20bの1行目以降の、0列目および1列目の情報に対応する。表60bは、表20bの1行目以降の、2列目および3列目の情報に対応する。
表60aに対する処理について説明する。編集部142は、表60aのように、列の数が2つになった場合に、0列目と1列目の動作指定領域の情報が等しいか否かを判定する。編集部142は、0列目と1列目の動作指定領域の情報が等しい場合には、0列目と1列目との統合を行うことで、表60cを生成する。表60aの「シネマを視聴」の条件指定領域の情報には「y」と「n」が含まれている。このように、編集部142は、条件指定領域の情報が異なっている情報を1つの列に統合する場合には、統合後の表60cの条件指定領域を「−」に設定する。
表60bに対する処理について説明する。編集部142は、表60bのように、列の数が2つになった場合に、0列目と1列目の動作指定領域の情報が等しいか否かを判定する。編集部142は、0列目と1列目の動作指定領域の情報が異なる場合には、0列目と1列目との統合を行わず、表60bをそのままとする。
表20dを生成する処理について説明する。編集部142は、表60bと表60cとを結合することで、表20dを生成する。表20dの1行目以降の、0列目は、表60cの0列目の情報に対応する。表20dの1行目以降の、1列目、2列目は、表60bの0列目、1列目に対応する。
ここで、表20dの「駐車料金3万以上」の行の0列目は、表20bの「駐車料金3万以上」の行の0列目1列目を統合したものに対応する。表20bの「駐車料金3万以上」の行の0列目1列目の情報は全て「y」であるため、編集部142は、表20dの「駐車料金3万以上」の行の0列目を「y」に設定する。
また、表20dの「駐車料金3万以上」の行の1列目、2列目は、表20bの「駐車料金3万以上」の行の2列目、3列目を統合したものに対応する。表20bの「駐車料金3万以上」の行の2列目、3列目の情報は全て「n」であるため、編集部142は、表20dの「駐車料金3万以上」の行の1列目、2列目を「n」に設定する。
表10dを生成する処理について説明する。編集部142は、表20cと表20dとを結合することで、表10dを生成する。表10dの1行目以降において、1列目の情報は、表20cの1列目の情報に対応する。表10dの1行目以降において、1列目から3列目の情報は、表20dの1列目から3列目の情報に対応する。
また、表10dを生成する場合には、表10bに合わせて、記述領域「駐車料金1万〜3万」と、該当する条件指定領域の情報を設定する。ここで、表10dの「駐車料金1万〜3万」の行の0列目は、表10bの「駐車料金1万〜3万以上」の行の0列目から3列目を統合したものに対応する。表10bの「駐車料金1万〜3万以上」の行の0列目から3列目の情報は全て「y」であるため、編集部142は、表10dの「駐車料金1万〜3万」の行の0列目を「y」に設定する。
また、表10dの「駐車料金1万〜3万」の行の1列目から3列目は、表10bの「駐車料金1万〜3万以上」の行の4列目から7列目を統合したものに対応する。表10bの「駐車料金1万〜3万以上」の行の4列目から7列目の情報は全て「n」であるため、編集部142は、表10dの「駐車料金1万〜3万」の行の0列目を「n」に設定する。
デシジョンテーブル130Bを生成する処理について説明する。編集部142は、表10cと表10dとを結合することで、デシジョンテーブル130Bを生成する。ここで、デシジョンテーブル130Bの「駐車料金3千〜1万」の行の0列目、1列目は、デシジョンテーブル130Aの「駐車料金3千〜1万」の0列目から7列目を統合したものに対応する。このため、編集部142は、デシジョンテーブル130Bの「駐車料金3千〜1万」の0列目、1列目の情報を、デシジョンテーブル130Aの0列目から7列目に合わせて「y」に設定する。
デシジョンテーブル130Bの「駐車料金3千〜1万」の2列目から5列目は、デシジョンテーブル130Aの8列目から17列目を統合したものに対応する。このため、編集部142は、デシジョンテーブル130Bの「駐車料金3千〜1万」の行の2列目から5列目の情報を、デシジョンテーブル130Aの8列目から17列目に合わせて「n」に設定する。
図5Aおよび図5Bに示す処理を編集部142が実行することにより、最大化されたデシジョンテーブル130Aは、デシジョンテーブル130Bに最小化される。
次に、図3のステップS103に示した最小化処理の処理手順について説明する。図6は、最小化処理の処理手順を示すフローチャートである。編集部142は、図6に示す処理を繰り返し実行することで、デシジョンテーブル130Aからデシジョンテーブル130Bを生成する。
図6に示すように、編集部142は、列数が2未満であるか否かを判定する(ステップS110)。編集部142は、列数が2未満の場合には(ステップS110,Yes)、入力された表を戻り値に設定する(ステップS111)。
編集部142は、列数が2以上である場合には(ステップS110,No)、表を左右に分割する(ステップS112)。編集部142は、左側の表の動作指定領域が全て「?」であるか否かを判定する(ステップS113)。
編集部142は、左側の表の動作指定領域が全て「?」である場合には(ステップS113,Yes)、左側の表を削除し、右側の表を残す(ステップS114)。編集部142は、統合可能な場合に、表を統合し、戻り値に設定する(ステップS115)。ここで、統合可能であるとは、表の各列の動作指定領域の情報が等しいことを意味する。
編集部142は、左側の表の動作指定領域が全て「?」ではない場合には(ステップS113,No)、右側の表の動作指定領域が全て「?」であるか否かを判定する(ステップS116)。
編集部142は、右側の表の動作指定領域が全て「?」である場合には(ステップS116,Yes)、右側の表を削除し、左側の表を残す(ステップS117)。編集部142は、統合可能な場合に、表を統合し、戻り値に設定する(ステップS118)。
編集部142は、右側の表の動作指定領域が全て「?」ではない場合には(ステップS116,No)、左右の表は等しいか否かを判定する(ステップS119)。
編集部142は、左右の表が等しい場合には(ステップS119,Yes)、左側の表を削除し、右側の表を残す(ステップS120)。編集部142は、統合可能な場合に、表を統合し、戻り値に設定する(ステップS121)。
編集部142は、左右の表が異なる場合には(ステップS119,No)、左右の表を合成したものを戻り値に設定する(ステップS122)。
例えば、デシジョンテーブル130Aに対して、図6の処理を実行すると、図5A、図5Bに示したp0からp5の処理が実行された後に、デシジョンテーブル130Bが戻り値として生成される。
図5Aおよび図5Bの処理p0について説明する。表10aに対して、図6の処理を実行すると、戻り値として、表10cが生成される。また、表10bに対して、図6の処理を実行すると、戻り値として、表10dが生成される。そして、表10cと表10dとが結合されて、デシジョンテーブル130Bが生成される。
図5Aの処理p1について説明する。表30bに対して、図6の処理を実行すると、戻り値として、表30dが生成される。そして、表30cと表30dとが結合されて、表10cが生成される。
図5Bの処理p2について説明する。表20aに対して、図6の処理を実行すると、戻り値として表20cが生成される。また、表20bに対して、図6の処理を実行すると、戻り値として表20dが生成される。そして、表20cと表20dとが結合されて、表10dが生成される。
図1の説明に戻る。従属判定部143は、デシジョンテーブル130aの条件記述領域に記載された各条件を走査し、所定の条件に従属する条件が存在する場合には、従属関係をデシジョンテーブル130aに設定する。例えば、従属判定部143は、従属関係を設定したデシジョンテーブル130aを、表示部120に表示させる。
図7は、従属判定部の処理を説明するための図である。ここでは、説明の便宜上、デシジョンテーブル130aのデータ構造を、図7に示すものとする。デシジョンテーブル130aは、AファイルとBファイルとマージして昇順に出力する処理を定義したデシジョンテーブルである。
デシジョンテーブルでは、上の条件から順に、条件に対応する情報が「y」であるか「n」であるかを判定する。ここで、所定の条件に従属する条件が存在している場合には、従属先の条件が、従属する条件よりも上の行に存在しないと、エラーとなる。図7に示す例では、条件「A>B」が、条件「A終了」、条件「B終了」に従属する条件となっている。このため、条件「A終了」、条件「B終了」が、条件「A>B」よりも上に設定されないと、エラーとなる。このため、従属判定部143は、条件「A>B」の従属先となる条件「A終了」、「B終了」を、条件「A>B」に対応付けて設定し、表示部120に表示させる。また、従属判定部143は、従属先の条件が、従属する条件よりも下の行に設定されないように制御する。例えば、従属判定部143は、従属先の条件が、従属する条件よりも下の行に設定された場合には、従属先の条件の行を、従属する条件の行よりも上に移動させる。このように、従属関係に基づいて、従属先の条件と、従属する条件の位置を制御することで、デシジョンテーブル130aの条件記述領域に発生し得るエラーを未然に防止することができる。
従属判定部143は、従属関係をどのように判定しても良い。例えば、所定の値を利用する条件式や、数式を含む条件を、構文解析などを用いて検出する。従属判定部143は、検出した条件に含まれる値に関連する条件を、他の行の条件から検出することで、従属関係を判定する。従属判定部143は、かかる処理を実行して、従属する条件に対応付けて、従属先の条件を設定する。
図1の説明に戻る。ソースコード生成部144は、デシジョンテーブル130aを基にして、ソースコード130bを生成する処理部である。
ソースコード生成部144は、デシジョンテーブル130aのセルを0行目0列目から順次走査して、デシジョンテーブル130aの末尾の行で再帰の動作を行う情報が指定されたセルを検出する。また、ソースコード生成部144は、末尾再帰動作の検出結果を基にして、繰り返しを実行するコードを生成する。図8〜図11を用いて、ソースコード生成部144の処理の一例について説明する。
図8〜図11は、ソースコード生成部の処理を説明するための図である。ここでは、説明の便宜上、デシジョンテーブル130aのデータ構造を、図8に示すものとする。デシジョンテーブル130aは、条件記述領域131、条件指定領域132、動作記述領域133、動作指定領域134を有する。各領域131〜134に関する説明は、図2の説明で行った説明と同様である。
図8に示したデシジョンテーブル130aの条件記述領域131に含まれる各条件について説明する。
0行目の条件「t[-1][j]==""」について説明する。条件「t[-1][j]==""」は、デシジョンテーブル130aの−1行目、j列目のセルに情報が含まれていないという条件である。jは変数であり、所定の初期値が設定される。以下に示すjも同様である。なお、−1行目は、0行目の1つ上の行に対応する。
1行目の条件「t[i][-1]==""」について説明する。条件「t[i][-1]==""」は、デシジョンテーブル130aのi行目、−1列目のセルに情報が含まれていないという条件である。iは変数であり、所定の初期値が設定される。以下に示すiも同様である。なお、−1列目は、0列目の一つ左の列に対応する。
2行目の条件「j=0」について説明する。条件「j=0」は、変数jの値が0であるという条件である。
3行目の条件「t[i][j-1]==t[i][j]」について説明する。条件「t[i][j-1]==t[i][j]」は、デシジョンテーブル130aのi行目、j−1列目のセルの情報と、i行目、j列目のセルの情報とが等しいという条件である。
4行目の条件「t[i][j]=="y"」について説明する。条件「t[i][j]=="y"」は、デシジョンテーブル130aのi行目、j列目のセルの情報が「y」であるという条件である。
5行目の条件「t[i][j]=="n"」について説明する。条件「t[i][j]=="n"」は、デシジョンテーブル130aのi行目、j列目のセルの情報が「n」であるという条件である。
6行目の条件「t[i][j]=="x"」について説明する。条件「t[i][j]=="x"」は、デシジョンテーブル130aのi行目、j列目のセルの情報が「x」であるという条件である。
図8に示したデシジョンテーブル130aの動作記述領域133に含まれる各条件について説明する。
7行目の動作「put("if")」について説明する。動作「put("if")」は、「if」を出力する動作である。
8行目の動作「put("else")」について説明する。動作「put("else")」は、「else」を出力する動作である。
9行目の動作「put(x)」について説明する。動作「put(x)」は、「x」を出力する動作である。
10行目の動作「l++」について説明する。動作「l++」は、変数lの値に1を加算した値によって、lの値を更新する動作である。
11行目の動作「i++」について説明する。動作「i++」は、変数iの値に1を加算した値によって、iの値を更新する動作である。
12行目の動作「i--」について説明する。動作「i--」は、変数iの値から1を減算した値によって、iの値を更新する動作である。
13行目の動作「put("}")」について説明する。動作「put("}")」は、図9に示すデシジョンテーブルに対応する処理を行う。
図9の0列目に示すように、iの値が0未満の場合には、動作「put("}")」は何も動作しない。また、図9の1列目に示すように、iの値が0以上であり、デシジョンテーブル130aのi行目、j列目が「y」である場合には、動作「put("}")」は何も動作しない。
図9の2列目に示すように、iの値が0以上であり、デシジョンテーブル130aのi行目、j列目が「n」の場合には、動作「put("}")」は、lの値から1を減算した値によって、lの値を更新する。また、動作「put("}")」は、「}」を出力する。また、動作「put("}")」は、iの値から1を減算した値によって、iの値を更新する。
図9の3列目に示すように、iの値が0以上であり、デシジョンテーブル130aのi行目、j列目が「y」でも「n」でもない場合には、動作「put("}")」は、iの値から1を減算した値によって、iの値を更新する。
図8に戻り、14行目の動作「j++」について説明する。動作「j++」は、変数jの値に1を加算した値によって、jの値を更新する動作である。
15行目の動作「i=0」について説明する。動作「i=0」は、変数iの値に0を設定する動作である。
16行目の動作「l=0」について説明する。動作「l=0」は、変数lの値に0を設定する動作である。
17行目の動作「dt()」について説明する。動作「dt()」は、再帰の動作である。動作「dt()」は、デシジョンテーブル130aを再度呼び出し、デシジョンテーブル130aと同じ処理を再度行う。図8では一例として、動作「dt()」としたが、動作「call dt()」としても良い。
ソースコード生成部144が、図8に示したデジションテーブル130aからソースコードを生成すると、図10の1行目から図11の83行目に示すソースコード130bが生成される。
ここで、ソースコード生成部144の処理手順について説明する。図12および図13は、ソースコード生成部の処理手順を示すフローチャートである。ソースコード生成部144は、デシジョンテーブル130aの0行目0列目のセルから、走査を開始する。
図12に示すように、ソースコード生成部144は、末尾再帰の移動先となるコードを出力する(ステップS201)。ステップS201において、例えば、ソースコード生成部144は、図10に示すソースコード130bの1行目に示すコード「dt:」を出力する。かかるコードは、図8に示すデシジョンテーブル130aの−1行目、−1列目のコードに対応する。
ソースコード生成部144は、列の終わりであるか否かを判定する(ステップS202)。図8に示すデシジョンテーブル130aを例にすると、列の終わりは、14行目に対応する。
ソースコード生成部144は、列の終わりである場合には(ステップS202,Yes)、処理を終了する。一方、列の終わりではない場合には(ステップS202,No)、行の終わりか否かを判定する(ステップS203)。図8に示すデシジョンテーブル130aを例にすると、行の終わりは、18行目に対応する。
ソースコード生成部144は、行の終わりである場合には(ステップS203,Yes)、行を1つ戻す(ステップS204)。ソースコード生成部144は、閉じ括弧出力処理を実行する(ステップS205)。
ソースコード生成部144は、列を1つ進め(ステップS206)、行を0行目に戻す(ステップS207)。ソースコード生成部144は、インデントを0に戻し(ステップS208)、ステップS202に移行する。ここで、インデントは、ソースコード130b上の位置を示すものである。インデントを0に戻すとは、ソースコード130bのインデントの位置を、左端によせることを意味する。
ソースコード生成部144は、行の終わりでない場合に(ステップS203,No)、左端の列であるか否かを判定する(ステップS209)。デシジョンテーブル130aの左端の列は、0列目に対応する。
ソースコード生成部144は、左端の列ではない場合には(ステップS209)、図13のステップS218に移行する。一方、ソースコード生成部144は、左端の列である場合には(ステップS209,Yes)、セルがyであるか否かを判定する(ステップS210)。
ソースコード生成部144は、セルがyである場合には(ステップS210,Yes)、”if”と、現在のセルの行に対応する条件記述領域の文字とを出力する(ステップS211)。例えば、図8のデシジョンテーブル130aの0行目、0列目のセルはyである。現在のセルが0行目、0列目のセルである場合には、ソースコード生成部144は、図10の2行目に示すように「if(t[-1][i]==""){」を出力する。
ソースコード生成部144は、インデントを1つ進める(ステップS212)。インデントを1つ進めることは、ソースコード上のインデントを右側に1つ進めることを意味する。ソースコード生成部144は、行を1つ進め(ステップS213)、ステップS202に移行する。
ソースコード生成部144は、セルがyではない場合には(ステップS210,No)、セルがnであるか否かを判定する(ステップS214)。ソースコード生成部144は、セルがnである場合には(ステップS214,Yes)、”else”を出力し(ステップS215)、ステップS212に移行する。例えば、図8のデジションテーブル130aの0行目、1列目のセルはnである。現在のセルが0行目、1列目のセルである場合には、ソースコード生成部144は、図10の2行目に示す「}else{」を出力する。
ソースコード生成部144は、セルがnではない場合には(ステップS214,No)、セルがxであるか否かを判定する(ステップS216)。ソースコード生成部144は、セルがxである場合には(ステップS216,Yes)、末尾再帰判定処理を実行し(ステップS217)、ステップS213に移行する。一方、ソースコード生成部144は、セルがxではない場合には(ステップS216,No)、ステップS213に移行する。
図13の説明に移行する。ソースコード生成部144は、現在のセルの情報が、左隣のセルの情報と同じか否かを判定する(ステップS218)。例えば、図8のデシジョンテーブル130aの0行目、2列目のセルの情報は、左隣のセルの情報と同じである。
ソースコード生成部144は、左隣のセルの情報と同じの場合には(ステップS218,Yes)、セルがyであるか否かを判定する(ステップS219)。ソースコード生成部144は、セルがyである場合には(ステップS219,Yes)、インデントを1つ進める(ステップS220)。ソースコード生成部144は、行を1つ進め(ステップS221)、図12のステップS202に移行する。
一方、ソースコード生成部144は、セルがyではない場合には(ステップS219,No)、セルがnであるか否かを判定する(ステップS222)。ソースコード生成部144は、セルがnである場合には(ステップS222,Yes)、ステップS220に移行する。
一方、ソースコード生成部144は、セルがnではない場合には(ステップS222,No)、セルがxであるか否かを判定する(ステップS223)。ソースコード生成部144は、セルがxではない場合には(ステップS223,No)、ステップS221に移行する。
一方、ソースコード生成部144は、セルがxである場合には(ステップS223,Yes)、末尾再帰判定処理を実行し(ステップS224)、ステップS221に移行する。
図13のステップS218の説明に戻る。ソースコード生成部144は、左隣のセルの情報と異なる場合には(ステップS218,No)、セルがyであるか否かを判定する(ステップS225)。
ソースコード生成部144は、セルがyである場合には(ステップS225,Yes)、”if”と、現在のセルの行に対応する条件記述領域の文字とを出力する(ステップS226)。ソースコード生成部144は、インデントを1つ進め(ステップS227)、ステップS221に移行する。
一方、ソースコード生成部144は、セルがyではない場合には(ステップS225,No)、セルがnであるか否かを判定する(ステップS228)。ソースコード生成部144は、セルがnである場合には(ステップS228,Yes)、”else”を出力し(ステップS229)、ステップS227に移行する。
一方、ソースコード生成部144は、セルがnではない場合には(ステップS228,No)、セルがxであるか否かを判定する(ステップS230)。ソースコード生成部144は、セルがxではない場合には(ステップS230,No)、ステップS221に移行する。
一方、ソースコード生成部144は、セルがxである場合は(ステップS230,Yes)、現在のセルの行に対応する動作記述領域の文字を出力し(ステップS231)、ステップS221に移行する。例えば、図8のデシジョンテーブル130aの12行目、1列目のセルはnである。現在のセルが12行目、1列目のセルである場合には、図10の5行目に示すように、「i--;」を出力する。
次に、図12のステップS205に示した閉じ括弧出力処理について説明する。閉じ括弧出力処理は、「}」を条件に応じて出力する処理である。図14は、閉じ括弧出力処理の処理手順を示すフローチャートである。
図14に示すように、ソースコード生成部144は、行が先頭であるか否かを判定する(ステップS251)。図8のデシジョンテーブル130aを例にすると、行の先頭は、0行目に対応する。
ソースコード生成部144は、行が先頭ではない場合には(ステップS251,No)、閉じ括弧出力処理を終了する。
ソースコード生成部144は、行が先頭では場合には(ステップS251,Yes)、セルがyであるか否かを判定する(ステップS252)。ソースコード生成部144は、セルがyである場合には(ステップS252,Yes)、閉じ括弧出力処理を終了する。
ソースコード生成部144は、セルがyでない場合には(ステップS252,No)、セルがnであるか否かを判定する(ステップS253)。ソースコード生成部144は、セルがnである場合には(ステップS253,Yes)、インデントを1つ戻す(ステップS254)。インデントを1つ戻すことは、ソースコード上のインデントを左側に1つ戻すことを意味する。
ソースコード生成部144は、”}”を出力し(ステップS255)、行を1つ進め(ステップS256)、ステップS251に移行する。
一方、ソースコード生成部144は、セルがnでない場合には(ステップS253,No)行を1つ戻し(ステップS257)、ステップS251に移行する。
次に、図12および図13のステップS217、S224に示した末尾再帰判定処理について説明する。実施例の末尾再帰判定処理は、デシジョンテーブル130aの末尾の行で再帰の動作を行う情報が指定されたセルを検出した場合に、繰り返しを実行するコード「goto文」を出力する処理である。図15は、本実施例に係る末尾再帰判定処理の処理手順を示すフローチャートである。
図15に示すように、ソースコード生成部144は、現在のセルの行が末尾であるか否かを判定する(ステップS281)。図8に示すデシジョンテーブル130aを例にすると、末尾となる行は、17行目となる。
ソースコード生成部144は、現在のセルの行が末尾である場合には(ステップS281,Yes)、現在のセルの行に対応する動作記述領域の動作が再帰であるか否かを判定する(ステップS282)。
ステップS282において、ソースコード生成部144が再帰であるか否かを判定する処理の一例について説明する。ソースコード生成部144は、現在のセルの行に対応する動作記述領域の動作を示す文字列に対して構文解析を実行する。ソースコード生成部144は、構文解析した文字列と、デシジョンテーブル130aの−1行目−1列目の文字列とが等しい場合に、再帰の動作であると判定する。
例えば、デシジョンテーブル130aの17行目の文字列「dt()」と、デシジョンテーブル130aの−1行目−列の文字列「dt()」とは等しい文字である。このため、デシジョンテーブル130aの17行目の文字列「dt()」の動作は、再帰を示す。
なお、ソースコード生成部144は、その他の如何なる従来技術を利用して、動作が再帰であるか否かを判定しても良い。例えば、該当する動作にcall文などが付与され、デシジョンテーブルを呼び出している場合にも、再帰の動作であると判定しても良い。
図15のステップS282の説明に戻る。ソースコード生成部144は、再帰である場合には(ステップS282,Yes)、goto文を出力し(ステップS283)、末尾再帰判定処理を終了する。
例えば、図8のデシジョンテーブル130aにおいて、17行目1列目のセルは、該当する行が末尾であり、行に対応する動作が再帰「dt()」である。このため、ソースコード生成部144は、現在のセルがデシジョンテーブル130aの17行目1列目の場合には、図10の10行目に示すように「goto dt;」を出力する。
ところで、ソースコード生成部144は、ステップS281において、現在のセルの行が末尾ではない場合には(ステップS281,No)、動作記述領域の文字を出力し(ステップS284)、末尾再帰判定処理を終了する。
また、ソースコード生成部144は、ステップS182において、再帰でない場合には(ステップS282,No)、ステップS284に移行する。
次に、本実施例にかかる編集装置100の効果について説明する。編集装置100は、デシジョンテーブル130aの動作指定領域の各列の情報を比較し、統合可能である場合には、各列を統合することで、最小化したデシジョンテーブル130Bを生成する。このため、最小化したデシジョンテーブル130Bからソースコード130bを生成することで、ソースコードの量を削減することができる。
また、編集装置100は、デシジョンテーブル130aの各列を統合する場合に、統合対象の条件指定領域の情報に、「y」と「n」とが混在する場合には、条件指定領域の情報を、yでもnでもよい「−」に設定する。このため、デシジョンテーブル130aを適切に最小化することができる。
また、編集装置100は、デシジョンテーブル130aの条件記述領域に記載された各条件を走査し、所定の条件に従属する条件が存在する場合には、従属先の条件の行が従属する条件の行よりも上となるようにデシジョンテーブル130bを設定する。このように、編集装置100が、デシジョンテーブル130aに設定することで、デシジョンテーブルの条件記述領域に発生し得るエラーを未然に防止することができる。
ところで、本実施例において説明した編集装置100の処理は一例である。例えば、編集装置100は、サーバの機能を有していても良い。編集装置100は、ネットワークを介して、端末装置からデシジョンテーブルのデータを受信し、受信したデシジョンテーブルを基にして上記処理を実行し、デジションテーブルの最小化し、ソースコードを生成しても良い。ソースコード生成装置200は、最小化したデシジョンテーブルを端末装置に送信しても良いし、ソースコードを送信しても良い。
本実施例において説明した各処理のうち、自動的におこなわれるものとして説明した処理の全部または一部を手動的におこなうこともでき、あるいは、手動的におこなわれるものとして説明した処理の全部または一部を公知の方法で自動的におこなうこともできる。この他、上記文書中や図面中で示した処理手順、制御手順、具体的名称、各種のデータやパラメータを含む情報については、特記する場合を除いて任意に変更することができる。
また、図1に示した編集装置100の各構成要素は機能概念的なものであり、必ずしも物理的に図示の如く構成されていることを要しない。なお、本実施例で説明した各種の処理手順は、予め用意されたプログラムをパーソナルコンピュータやワークステーションなどのコンピュータで実行することによって実現することができる。また、上記の実施例1、2で説明した各種の処理は、予め用意されたプログラムをコンピュータで実行することによって実現することができる。