JP6077694B1 - デシジョンテーブル生成装置、デシジョンテーブル生成方法およびデシジョンテーブル生成プログラム - Google Patents
デシジョンテーブル生成装置、デシジョンテーブル生成方法およびデシジョンテーブル生成プログラム Download PDFInfo
- Publication number
- JP6077694B1 JP6077694B1 JP2016049918A JP2016049918A JP6077694B1 JP 6077694 B1 JP6077694 B1 JP 6077694B1 JP 2016049918 A JP2016049918 A JP 2016049918A JP 2016049918 A JP2016049918 A JP 2016049918A JP 6077694 B1 JP6077694 B1 JP 6077694B1
- Authority
- JP
- Japan
- Prior art keywords
- condition
- description part
- unit
- description
- decision table
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Expired - Fee Related
Links
Images
Landscapes
- Stored Programmes (AREA)
Abstract
【課題】適切にデシジョンテーブルを生成すること。【解決手段】デシジョンテーブル生成装置は、ソースコード141で指定される文脈に従って、各記述部に文脈番号を割り振り、文脈番号と対応付けて、各記述部を配置する。また、デシジョンテーブル生成装置100は、分岐元の条件記述部の条件指定部と対応付けて、条件記述部の分岐先に配置された各動作記述部の処理を実行する旨の情報を、各動作記述の動作指定部に設定することで、デシジョンテーブル144を生成する。【選択図】図1
Description
本発明は、デシジョンテーブル生成装置等に関する。
プログラムの処理条件やポリシー等をわかりやすく表現するために、デシジョンテーブルが利用されている。図19は、デシジョンテーブルの一例を示す図である。図19に示すように、デシジョンテーブル10は、条件記述領域10a、条件指定領域10b、動作記述領域10c、動作指定領域10dを有する。
条件記述領域10aは、条件を記述する部分である。条件指定領域10bは、条件記述領域10aの条件が満たされているか否かを指定する部分である。条件が満たされていれば、条件記述領域10aに「y」が指定され、条件が満たされていなければ「n」が指定される。
動作記述領域10cは、動作を記述する部分である。動作指定領域10dは、動作を実行するか否かを指定する部分である。動作を実行する場合には、動作指定領域10dに「x」が指定され、動作を実行しない場合には「−」が指定される。
例えば、図19のデシジョンテーブル10において、「商品コード<000」の条件を満たし、「商品コード>999」の条件を満たさない場合には「下限エラー処理」が実行される。「商品コード<000」の条件を満たさず、「商品コード>999」の条件を満たす場合には「上限エラー処理」が実行される。「商品コード<000」および「商品コード>999」の条件を満たさない場合には「マスタファイル登録」が実行される。
ところで、プログラムを解析してプログラム構文解析や、プログラム処理パターンの情報抽出を実行することで、プログラムの仕様情報を生成する従来技術がある。図20は、解析対象となるプログラムの一例を示す図である。図21は、仕様情報の一例を示す図である。例えば、従来技術がプログラム20aを解析して仕様情報を生成すると、仕様情報20bが生成される。例えば、仕様情報20bを参照すると、「SURYO IS NUMERIC」が「Y」となる場合には、「CONTINUE」が実行される旨が定義されている。
しかしながら、上述した従来技術では、適切にデシジョンテーブルを生成することができないという問題がある。
図21に示した、従来技術によって生成された仕様情報20bは、デシジョンテーブルの仕様に従っておらず、デシジョンテーブルとは呼べるものではない。例えば、仕様情報20bは、各列の条件が一意に特定できないため、デシジョンテーブルの書き方として成り立たない。すなわち、「SURYO IS NUMERIC」、「NEBIKI−CODE=’1’」、「SURYO<100」がそれぞれ「Y」、「N」となる組み合わせの条件において、どのような処理を行うのか一意に特定できない。
1つの側面では、本発明は、適切にデシジョンテーブルを生成することができるデシジョンテーブル生成装置、デシジョンテーブル生成方法およびデシジョンテーブル生成プログラムを提供することを目的とする。
第1の案では、デシジョンテーブル生成装置は、解析部と、割当部と、生成部とを有する。解析部は、ソースコードの字句および構文を解析することにより、ソースコードで定義された、分岐の条件を記述した条件記述部と、動作を記述した動作記述部との接続関係および順序を示す抽象構文木データを生成する。割当部は、抽象構文木データに基づいて、条件記述部の分岐先に配置される動作記述部および条件記述部を一意に特定可能な文脈番号を、分岐先に配置される動作記述部および条件記述部に割り当てる。生成部は、条件記述部および動作記述部に割り当てられた文脈番号と対応付けて、条件記述部および動作記述部を配置し、分岐元の条件記述部の条件指定部と対応付けて、条件記述部の分岐先に配置された各動作記述部の処理を実行する旨の情報を、各動作記述の動作指定部に設定することで、デシジョンテーブルを生成する。
適切にデシジョンテーブルを生成することができる。
以下に、本願の開示するデシジョンテーブル生成装置、デシジョンテーブル生成方法およびデシジョンテーブル生成プログラムの実施例を図面に基づいて詳細に説明する。なお、この実施例によりこの発明が限定されるものではない。
図1は、本実施例に係るデシジョンテーブル生成装置の構成を示す機能ブロック図である。図1に示すように、デシジョンテーブル生成装置100は、通信部110と、入力部120と、表示部130と、記憶部140と、制御部150とを有する。
通信部110は、ネットワーク等を介して、他の外部装置と通信を実行する処理部である。通信部110は、通信装置等に対応する。
入力部120は、各種の情報をデシジョンテーブル生成装置100に入力するための入力装置である。例えば、入力部120は、キーボードやマウス、タッチパネル等に対応する。例えば、利用者は、入力部120を操作して、ソースコード141の入力・修正、デシジョンテーブル144の修正などを行う。
表示部130は、各種の情報を表示する表示装置である。例えば、表示部130は、後述するソースコード141、デシジョンテーブル144等を表示する。表示部130は、液晶モニタやタッチパネル等に対応する。
記憶部140は、ソースコード141と、トークンテーブル142と、抽象構文木データ143と、デシジョンテーブル144とを有する。記憶部140は、例えば、RAM(Random Access Memory)、ROM(Read Only Memory)、フラッシュメモリ(Flash Memory)などの半導体メモリ素子、またはハードディスク、光ディスクなどの記憶装置に対応する。
ソースコード141は、所定のプログラミング言語の言語仕様に従って作成された、コンピュータに対する一連の処理内容を示すデータである。図2は、ソースコードの一例を示す図である。例えば、図2に示すソースコード141は、ファイルaとファイルbとを併合してファイルcに出力する手順を定義したソースコードである。
図3は、ソースコードの処理内容を説明するための図である。図3に示すように、ファイルaは、文字「a,b,d,f」を有する。ファイルbは、文字「b,c,e」を有する。コンピュータが、ソースコード141に基づいて処理を行うことで、ファイルcが生成される。ファイルcは、ファイルaとファイルbとが併合されたファイルである。ファイルcに含まれる文字は、昇順「a,b,b,c,d,e,f」に並べられる。
続いて、図2に示したソースコード141に含まれる主要な命令について説明する。ソースコード141の6行目〜8行目に含まれる「fopen」は、ファイルオープンを指示する命令である。ソースコード141の9行目に含まれる「getc(f_a)」は、ファイルa読み込みを指示する命令である。ソースコード141の10行目に含まれる「getc(f_b)」は、ファイルb読み込みを指示する命令である。
ソースコード141の13行目に含まれる「if(f_a==EOF)」は、ファイルaがEOF(ファイルの終わり)である場合に、14行目以降の処理を実行し、ファイルaがEOFでない場合には、20行目「else」以降の処理を実行することを指示する命令である。
ソースコード141の14行目に含まれる「if(f_b==EOF)」は、ファイルbがEOF(ファイルの終わり)である場合に、15行目の処理を実行し、ファイルbがEOFでない場合には、16行目「else」以降の処理を実行することを指示する命令である。
ソースコード141の15行目に含まれる「p=false」は、ループの終了を指示する命令である。ソースコード141の17行目に含まれる「putc(b,f_b)」は、ファイルc書き出しを指示する命令である。ソースコード141の18行目に含まれる「b=getc(f_b)」は、ファイルb読込を指示する命令である。
ソースコード141の21行目に含まれる「if(f_b==EOF)」は、ファイルbがEOF(ファイルの終わり)である場合に、22行目以降の処理を実行し、ファイルbがEOFでない場合には、24行目「else」以降の処理を実行することを指示する命令である。
ソースコード141の22行目に含まれる「putc(a,f_a)」は、ファイルc書き出しを指示する命令である。ソースコード141の23行目に含まれる「a=getc(f_a)」は、ファイルb読込を指示する命令である。
ソースコード141の25行目に含まれる「if(a>b)」は、a>bの条件を満たす場合に、26行目以降の処理を実行し、a>bの条件を満たさない場合には、28行目「else」以降の処理を実行することを指示する命令である。
ソースコード141の26行目に含まれる「putc(b,f_b)」は、ファイルc書き出しを指示する命令である。ソースコード141の27行目に含まれる「b=getc(f_b)」は,ファイルb読込を指示する命令である。
ソースコード141の29行目に含まれる「putc(a,f_a)」は、ファイルc書き出しを指示する命令である。ソースコード141の30行目に含まれる「a=getc(f_a)」は,ファイルa読込を指示する命令である。
ソースコード141の35行目〜37行目に含まれる「fclose」は、ファイルクローズを指示する命令である。ソースコード141の38行目の「return 0」は、処理終了を指示する命令である。
図1の説明に戻る。トークンテーブル142は、ソースコード141を字句解析することで得られる複数のトークンを保持するテーブルである。トークンは、それで一つの意味を持つかたまりであり、それ以上細かくすると意味を持たなくなるものである。図4は、トークンテーブルのデータ構造の一例を示す図である。説明の便宜上、図4に示すトークンテーブル142の各トークンは、縦方向に連続している。また、一番下の行のトークンの次のトークンは、次の列の一番上のトークンに続く。例えば、20行1列目のトークン「;」の次のトークンは、1行2列目のトークン「;」となる。
抽象構文木データ143は、ソースコード141で定義された分岐の条件を示す条件記述部と、動作記述部との接続関係および順序を示すデータである。図5は、抽象構文木データのデータ構造の一例を示す図である。図5に示すように、抽象構文木データ143は、複数のブロック31〜40が含まれている。また、ブロック31〜40に含まれる括弧付きの数字は、該当する番号が格納される位置を示す。例えば、ブロック31に含まれる(32)は、ブロック32が格納される位置を示す。
また、各ブロック31〜40には、条件記述部に対応するものであるか、動作記述部に対応するものであるかの情報が付与される。また、抽象構文木データ143では、ブロックが条件記述部に対応するものである場合には、条件を満たす場合の移行先のブロックと、条件を満たさない場合の移行先のブロックが識別可能に設定される。
ブロック32に含まれる「f_a==EOF」は、if文に続く情報であるため、条件記述部に対応するブロックである。また、ブロック32の「f_a==EOF」の条件を満たす場合には、ブロック33に移行し、「f_a==EOF」の条件を満たさない場合には、ブロック36に移行する旨が設定される。
ブロック33に含まれる「f_b==EOF」は、if文に続く情報であるため、条件記述部に対応するブロックである。また、ブロック33の「f_b==EOF」の条件を満たす場合には、ブロック34に移行し、「f_b==EOF」の条件を満たさない場合には、ブロック35に移行する旨が設定される。ブロック34、35に含まれる文字列は、動作記述部に対応する文字列である。
ブロック36に含まれる「f_b==EOF」は、if文に続く情報であるため、条件記述部に対応するブロックである。また、ブロック36の「f_b==EOF」の条件を満たす場合には、ブロック37に移行し、「f_b==EOF」の条件を満たさない場合には、ブロック38に移行する旨が設定される。ブロック37に含まれる文字列は、動作記述部に対応する文字列である。
ブロック38に含まれる「a>b」は、if文に続く情報であるため、条件記述部に対応するブロックである。また、ブロック38の「a>b」の条件を満たす場合には、ブロック39に移行し、「a>b」の条件を満たさない場合には、ブロック40に移行する旨が設定される。ブロック39、40に含まれる文字列は、動作記述部に対応する文字列である。
デシジョンテーブル144は、ソースコード141に対して、制御部150が後述する処理を実行することで生成される、デシジョンテーブルである。図6は、デシジョンテーブルのデータ構造の一例を示す図である。図6に示すように、デシジョンテーブル144は、デジションテーブル144aと、デシジョンテーブル144bとを含む。デシジョンテーブル144aの動作記述部に含まれる(144a)は、デシジョンテーブル144aが再度呼び出されることを示す。デシジョンテーブル144bの動作記述部に含まれる(144a)は、デシジョンテーブル144aが呼び出されることを示す。
図1の説明に戻る。制御部150は、字句解析部151と、構文解析部152と、割当部153と、生成部154とを有する。制御部150は、例えば、ASIC(Application Specific Integrated Circuit)や、FPGA(Field Programmable Gate Array)などの集積装置に対応する。また、制御部150は、例えば、CPUやMPU(Micro Processing Unit)等の電子回路に対応する。
字句解析部151は、ソースコード141に対して字句解析を実行することで、ソースコード141からトークンを順番に抽出し、抽出した各トークンを抽出した順番に、トークンテーブル142に格納する処理部である。
構文解析部152は、トークンテーブル142を基にして、構文解析を実行し、抽象構文木データ143を生成する処理部である。例えば、構文解析部152は、ソースコード141(トークンテーブル142)の構文解析結果により、条件記述部に対応する文字列と、動作記述部に対応する文字列とを特定する。例えば、if文等の分岐に関わる所定の文字列に関連付けられた文字列を、条件記述部と判定し、その他の文字列を動作記述部と特定する。また、各条件記述部と、動作記述部との接続関係、順番等を特定し、抽象構文木データ143として登録する。
割当部153は、抽象構文木データ143を基にして、条件記述部および動作記述部に、文脈番号を割り当てる処理部である。図7および図8は、割当部が文脈番号を割り当てる処理の一例を説明するための図である。以下の説明において、条件記述部と動作記述部とを特に区別しない場合には、単に、「記述部」と表記する。
図7について説明する。図7では、動作記述部a,b,cが順に接続されている。例えば、図7の動作記述部の配列は、ソースコード「{a();b();c()}」に対応するものである。割当部153は、先頭の記述部については、文脈番号「0」を割り当てる。割当部153は、動作記述部に続く記述部については、文脈番号「0」を割り当てる。そうすると、割当部153は、各動作記述部a,b,cに文脈番号「0」を割り当てる。
図8について説明する。図8では、条件記述部aの分岐先に、動作記述部b,cが接続されている。条件記述部aの条件を満たす場合(thenの場合)に、条件記述部aから動作記述部bに遷移が発生する。条件記述部aの条件を満たさない場合(elseの場合)に、条件記述部aから動作記述部cに遷移が発生する。例えば、図8の条件記述部、動作記述部の配列は、ソースコード「if(a){b();}else{c();}」に対応するものである。
割当部153は、先頭の記述部については、文脈番号「0」を割り当てる。割当部153は、文脈番号nが割り当てられた条件記述部の条件を満たす場合の遷移先となる記述部には、文脈番号2n+1を割り当てる。割当部153は、文脈番号nが割り当てられた条件記述部の条件を満さない場合の遷移先となる記述部には、文脈番号2n+2を割り当てる。そうすると、割当部153は、条件記述部aに文脈番号「0」を割り当て、動作記述部bに文脈番号「1」を割り当て、動作記述部cに文脈番号「2」を割り当てる。
割当部153は、上記に説明した割り当てルールに従って、抽象構文木データ143に含まれる各記述部に文脈番号を割り当てる。割当部153は、文脈番号と記述部との関係を示す情報を、生成部154に出力する。
生成部154は、記述部に割り当てられた文脈番号と対応付けて、各記述部を配置する。生成部154は、どのような順番で、文脈番号を配置しても良いが、図7,図8等で説明した所定のルールに従って、文脈番号が割り当てられているため、文脈番号によって、条件記述部の分岐先が一意に特定可能である。
また、生成部154は、分岐元の条件記述部の条件指定部と対応付けて、条件記述部の分岐先に配置された各動作記述部の処理を実行する旨の情報を、各動作記述の動作指定部に設定する処理を行うことで、デシジョンテーブル144を生成する。以下において、生成部154の処理の一例について説明する。
図9〜図15は、生成部がデシジョンテーブルを生成する過程を説明するための図である。図9のステップS10について説明する。生成部154は、文脈番号と記述部とを対応付けて配置することでテーブル50を生成する。ここで、生成部154は、while文がソースコード141に含まれている場合には、while文による反復を末尾再帰で表現するために、下記の処理を実行する。生成部154は、最上段に文脈番号「0」と記述部「p」とを挿入し、割当部153から取得した各記述部の各文脈番号を更新する。
図22は、各文脈番号を更新する処理の一例を説明するための図である。例えば、図22において、ノード60は、記述部「p」に対応するものであり、文脈番号「0」が設定される。ノード61は記述部「fa==EOF」に対応するものであり、更新前には文脈番号「0」が設定される。ノード62は記述部「fb==EOF」に対応するものであり、更新前には文脈番号「1」が設定されている。ノード63は記述部「p=fase」に対応するものであり、更新前には文脈番号「3」が設定されている。ノード64は記述部「putc(b,f_b)」に対応するものであり、更新前には文脈番号「4」が設定されている。その他の記述部に関する説明は省略する。
ノード65は記述部「fb==EOF」に対応するものであり、更新前には文脈番号「2」が設定されている。ノード66は記述部「putc(a,f_a)」に対応するものであり、更新前には文脈番号「5」が設定されている。ノード67は記述部「a>b」に対応するものであり、更新前には文脈番号「6」が設定されている。
生成部154は、ノード60の配下に接続されたノード61の文脈番号を「1」に更新する。生成部154は、上述した割当部153と同様にして、文脈番号nが割り当てられた条件記述部の条件を満たす場合の遷移先となる記述部には、文脈番号2n+1を割り当てる。生成部154は、文脈番号nが割り当てられた条件記述部の条件を満さない場合の遷移先となる記述部には、文脈番号2n+2を割り当てる。これにより、生成部154は、ノード62,63,64の文脈番号をそれぞれ「3,7,8」に更新し、ノード65,66,67の文脈番号をそれぞれ「4,9,10」に更新する。ここでは一例として、生成部154が、各文脈番号を更新する場合について説明したが、割当部153が、各文脈番号を更新する処理を実行しても良い。
また、生成部154は、最下段に文脈番号「1」と記述部(50)を挿入する。記述部(50)は、反復部分につけたデシジョンテーブルを示すものである。すなわち、テーブル50が繰り返し呼び出されることを意味する。また、「p」は、while(p)文の条件記述部を示すものである。
文脈番号0、1,3,4,10の記述部は、条件記述部であり、その他の文脈番号の記述部は、動作記述部である。
図9のステップS11について説明する。生成部154は、各記述部に対して指定部を設定することで、テーブル50を更新する。条件記述部に対応する指定部は、条件指定部となり、動作記述部に対する指定部は、動作指定部となる。ここでは説明の便宜上、条件指定部と、動作指定部とをまとめて、指定部と表記する。
生成部154は、文脈番号の一番小さい条件記述部「p」の条件指定部を「Y」に設定し、文脈にそって各記述部を遷移する。遷移先の記述部は、文脈番号によって一意に特定可能である。生成部154は、下位の条件記述部を通過する場合には、通過する条件記述部の条件指定部を「Y」に設定し、下位の動作記述部を通過する場合には、通過する動作記述部の動作指定部を「X」に設定する。ここで、条件指定部「Y」は、条件記述部の条件を満たすことを意味する。動作指定部「X」は、動作記述部の動作を実行することを意味する。後述する、条件指定部「N」は、条件記述部の条件を満たさないことを意味する。
上記の処理を実行することで、生成部154は、文脈番号0,1,3の指定部に「Y」を設定し、文脈番号7、1の指定部に「X」を設定する。
図10のステップS12について説明する。生成部154は、テーブル50の指定部の1列目について、下段から上段に向かって走査し、指示部がはじめに「Y」となる行を検出する。生成部154は、検出した「Y」の行を「N」に変えた指定部の2列目を生成する。図10のステップS12に示すように、文脈番号「3」が該当する行となるため、文脈番号「3」の行について、指定部の2列目を「N」に設定する。
図10のステップS13について説明する。生成部154は、ステップS12で「N」に設定した段の一つ上の段から最上段まで、左列の情報を2列目にコピーする。生成部154は、「N」に設定した段から下段に向かって、文脈にそって各記述部を遷移する。生成部154は、下位の条件記述部を通過する場合には、通過する条件記述部の条件指定部を「Y」に設定し、下位の動作記述部を通過する場合には、通過する動作記述部の動作指定部を「X」に設定する。これにより、生成部154は、文脈番号8、1の指定部の2列目に「X」を設定する。
図11のステップS14について説明する。生成部154は、テーブル50の指定部の2列目について、下段から上段に向かって走査し、指示部がはじめに「Y」となる行を検出する。生成部154は、検出した「Y」の行を「N」に変えた指定部の3列目を生成する。図11のステップS14に示すように、文脈番号「1」が該当する行となるため、文脈番号「1」の行について、指定部の3列目を「N」に設定する。
図11のステップS15について説明する。生成部154は、ステップS14で「N」に設定した段の一つ上の段から最上段まで、左列(2列目)の情報を3列目にコピーする。生成部154は、「N」に設定した段から下段に向かって、文脈にそって各記述部を遷移する。生成部154は、下位の条件記述部を通過する場合には、通過する条件記述部の条件指定部を「Y」に設定し、下位の動作記述部を通過する場合には、通過する動作記述部の動作指定部を「X」に設定する。これにより、生成部154は、文脈番号4の指定部の3列目に「Y」を設定する。生成部154は、文脈番号9、1の指定部の3列目に「X」を設定する。
図12のステップS16について説明する。生成部154は、テーブル50の指定部の3列目について、下段から上段に向かって走査し、指定部がはじめに「Y」となる行を検出する。生成部154は、検出した「Y」の行を「N」に変えた指定部の4行目を生成する。図12のステップS16に示すように、文脈番号「4」が該当する行となるため、文脈番号「4」の行について、指定部の4列目を「N」に設定する。
図12のステップS17について説明する。生成部154は、ステップS16で「N」に設定した段の一つ上の段から最上段まで、左列(3列目)の情報を4列目にコピーする。生成部154は、「N」に設定した段から下段に向かって、文脈にそって各記述部を遷移する。生成部154は、下位の条件記述部を通過する場合には、通過する条件記述部の条件指定部を「Y」に設定し、下位の動作記述部を通過する場合には、通過する動作記述部の動作指定部を「X」に設定する。これにより、生成部154は、文脈番号10の指定部の4列目に「Y」を設定する。生成部154は、文脈番号21、1の指定部の4列目に「X」を設定する。
図13のステップS18について説明する。生成部154は、テーブル50の指定部の4列目について、下段から上段に向かって走査し、指定部がはじめに「Y」となる行を検出する。生成部154は、検出した「Y」の行を「N」に変えた指定部の5行目を生成する。図13のステップS18に示すように、文脈番号「10」が該当する行となるため、文脈番号「10」の行について、指定部の5列目を「N」に設定する。
図13のステップS19について説明する。生成部154は、ステップS18で「N」に設定した段の一つ上の段から最上段まで、左列(4列目)の情報を5列目にコピーする。生成部154は、「N」に設定した段から下段に向かって、文脈にそって各記述部を遷移する。生成部154は、下位の条件記述部を通過する場合には、通過する条件記述部の条件指定部を「Y」に設定し、下位の動作記述部を通過する場合には、通過する動作記述部の動作指定部を「X」に設定する。これにより、生成部154は、文脈番号22、1の指定部の5列目に「X」を設定する。
図14のステップS20について説明する。生成部154は、テーブル50の指定部の5列目について、下段から上段に向かって走査し、指定部がはじめに「Y」となる行を検出する。生成部154は、検出した「Y」の行を「N」に変えた指定部の6行目を生成する。図14のステップS20に示すように、文脈番号「0」が該当する行となるため、文脈番号「0」の行について、指定部の6列目を「N」に設定する。
生成部154は、「N」に設定した段から下段に向かって、文脈にそって各記述部を遷移する。生成部154は、下位の条件記述部を通過する場合には、通過する条件記述部の条件指定部を「Y」に設定し、下位の動作記述部を通過する場合には、通過する動作記述部の動作指定部を「X」に設定する。ここでは、いずれの記述部も通過しないので、6行目の指定部には何も設定されない。
生成部154は、テーブル50の指定部の6列目について、下段から上段に向かって走査し、指定部がはじめに「Y」となる行を検出することを試みるが、存在しないため、処理を終了する。
図15に、main()のデシジョンテーブル51の一例を示す。生成部154は、各文脈番号には「0」を設定し、指定部に「X」を設定する。なお、デシジョンテーブル51は、図5のブロック31に対応するものであるが、「while文」は、末尾再帰に置き換えられており(テーブル50に置き換えられており)、main()のデシジョンテーブル51から削除されている。
生成部154は、図9〜図15で説明した処理を実行することで、図16に示すデシジョンテーブル50,51が生成される。図16は、編集前のデシジョンテーブルの一例を示す図である。生成部154は、図16のデシジョンテーブル50に対して編集処理を実行することで、図6に示すデシジョンテーブル144a,144bを生成する。以下において、生成部154が行う編集処理の一例について説明する。
生成部154は、テーブル50の記述部を走査して、条件記述部と、動作記述部とを特定し、条件記述部のレコードをテーブル50の上側に移動させ、動作記述部のレコードを下側に移動させる。また、生成部154は、指定部の各列を比較して、重複する列を単一の列にまとめることで、重複する部分を無くす編集処理を実行する。
続いて、本実施例に係るデシジョンテーブル生成装置100の処理手順の一例について説明する。図17は、本実施例に係るデシジョンテーブル生成装置の処理手順を示すフローチャートである。図17に示すように、デシジョンテーブル生成装置100の字句解析部151は、ソースコード141に対する字句解析を実行してトークンテーブル142を生成する(ステップS101)。デシジョンテーブル生成装置100の構文解析部152は、トークンテーブル142に対して構文解析を実行し、抽象構文木データ143を生成する(ステップS102)。
デシジョンテーブル生成装置100の割当部153は、条件記述部および動作記述部に文脈番号を付与する(ステップS103)。デシジョンテーブル生成装置100の生成部154は、条件記述部、動作記述部を文脈番号と対応付けてテーブルに配置する(ステップS104)。
生成部154は、文脈を辿り、文脈上の各条件指定部に「Y」を設定し、条件指定部が「Y」となる場合に通過する動作記述部の動作指定部に「X」を設定する(ステップS105)。生成部154は、条件指定部について、下段から上段に向かって走査し、はじめに、条件指定部が「Y」となる条件指定部を「N」に変更した列を生成する(ステップS106)。
生成部154は、「N」に変更した条件指定部を開始点として、文脈を辿り、通過する条件指定部を「Y」に設定し、動作記述部の動作指定部に「X」を設定する(ステップS107)。生成部154は、指定部の右端の列に「Y」が存在する場合には(ステップS108,Yes)、ステップS106に移行する。
生成部154は、指定部の右端の列に「Y」が存在しない場合には(ステップS108,No)、デシジョンテーブル144を編集する(ステップS109)。
次に、本実施例に係るデシジョンテーブル生成装置100の効果について説明する。デシジョンテーブル生成装置100は、ソースコード141で指定される文脈に従って、各記述部に文脈番号を割り振り、文脈番号と対応付けて、各記述部を配置する。また、デシジョンテーブル生成装置100は、分岐元の条件記述部の条件指定部と対応付けて、条件記述部の分岐先に配置された各動作記述部の処理を実行する旨の情報を、各動作記述の動作指定部に設定することで、デシジョンテーブルを生成する。これによって、適切なデシジョンテーブルを生成することができる。例えば、図6に示したデシジョンテーブル144は、JIS規格に従ったデシジョンテーブルである。
デシジョンテーブル生成装置100は、文脈番号nが割り当てられた条件記述部の条件を満たす場合の分岐先に配置された直近の動作記述部または条件記述部に文脈番号2n+1を割り当て、条件記述部の条件を満たさない場合の分岐先に配置された直近の動作記述部または条件記述部に文脈番号2n+2を割り当てる。また、デジションテーブル生成装置100は、先頭に位置する条件記述部および動作記述部の配下に接続される直近の条件記述部または動作記述部に、文脈番号の初期値を割り当てる。これによって、簡易的な方法で、テーブルに配置された各記述部の順序および接続関係を一意に特定することが可能となる。
デシジョンテーブル生成装置100は、デシジョンテーブル144に含まれる条件記述部および条件指定部をまとめてデシジョンテーブルの上側に配置し、デシジョンテーブル144に含まれる動作記述部および動作指定部をまとめてデシジョンテーブル144の下側に配置する。また、デシジョンテーブル生成装置100は、デシジョンテーブル144に含まれる重複部分をまとめる。これにより、デシジョンテーブル144を見やすいものにすることができる。
ところで、上記の説明では、繰り返し構造としてwhile文を取り扱う場合につて説明したが、for文、do文等の繰り返し構造を含むソースコードについても、デシジョンテーブルを生成することが可能である。図18は、各繰り返し構造によるデシジョンテーブルの違いを説明するための図である。
for文について説明する。ソースコードに含まれるfor文は、コード60に示すものとなる。for文により生成されるデシジョンテーブルは、テーブル61およびテーブル62に対応するものとなる。
while文について説明する。ソースコードに含まれるwhile文は、コード70に示すものとなる。while文により生成されるデシジョンテーブルは、テーブル71およびテーブル72に対応するものとなる。
do文について説明する。ソースコードに含まれるdo文は、コード80に示すものとなる。do文により生成されるデシジョンテーブルは、テーブル81およびテーブル82に対応するものとなる。
ところで、本実施例において説明した各処理のうち、自動的に行われるものとして説明した処理の全部または一部を手動的に行うこともでき、あるいは、手動的に行われるものとして説明した処理の全部あるいは一部を公知の方法で自動的に行うこともできる。この他、上記文書中や図面中で示した処理手順、制御手順、具体的名称、各種のデータやパラメータを含む情報については、特記する場合を除いて任意に変更することができる。
さらに、各装置にて行われる各処理機能は、その全部または任意の一部がCPUおよび当該CPUにて解析実行されるプログラムにて実現され、あるいは、ワイヤードロジックによるハードウェアとして実現され得る。
100 デシジョンテーブル生成装置
110 通信部
120 入力部
130 表示部
140 記憶部
150 制御部
110 通信部
120 入力部
130 表示部
140 記憶部
150 制御部
Claims (7)
- ソースコードの字句および構文を解析することにより、前記ソースコードで定義された、分岐の条件を記述した条件記述部と、動作を記述した動作記述部との接続関係および順序を示す抽象構文木データを生成する解析部と、
前記抽象構文木データに基づいて、前記条件記述部の分岐先に配置される動作記述部および条件記述部を一意に特定可能な文脈番号を、前記分岐先に配置される動作記述部および条件記述部に割り当てる割当部と、
前記条件記述部および前記動作記述部に割り当てられた文脈番号と対応付けて、条件記述部および動作記述部を配置し、分岐元の条件記述部の条件指定部と対応付けて、前記条件記述部の分岐先に配置された各動作記述部の処理を実行する旨の情報を、各動作記述部の動作指定部に設定することで、デシジョンテーブルを生成する生成部と
を有することを特徴とするデシジョンテーブル生成装置。 - 前記割当部は、文脈番号nが割り当てられた前記条件記述部の条件を満たす場合の分岐先に配置された直近の動作記述部または条件記述部に文脈番号2n+1を割り当て、前記条件記述部の条件を満たさない場合の分岐先に配置された直近の動作記述部または条件記述部に文脈番号2n+2を割り当てることを特徴とする請求項1に記載のデシジョンテーブル生成装置。
- 前記割当部は、先頭に位置する条件記述部および動作記述部の配下に接続される直近の条件記述部または動作記述部に、文脈番号の初期値を割り当てることを特徴とする請求項2に記載のデシジョンテーブル生成装置。
- 前記生成部は、前記デシジョンテーブルに含まれる条件記述部および条件指定部をまとめてデシジョンテーブルの上側に配置し、前記デシジョンテーブルに含まれる動作記述部および動作指定部をまとめて前記デシジョンテーブルの下側に配置することで、前記デシジョンテーブルを更新することを特徴とする請求項1、2または3に記載のデシジョンテーブル生成装置。
- 前記生成部は、前記デシジョンテーブルに含まれる重複部分をまとめることで、前記デシジョンテーブルを更新することを特徴とする請求項1〜4のいずれか一つに記載のデシジョンテーブル生成装置。
- コンピュータが実行するデシジョンテーブル生成方法であって、
ソースコードの字句および構文を解析することにより、前記ソースコードで定義された、分岐の条件を記述した条件記述部と、動作を記述した動作記述部との接続関係および順序を示す抽象構文木データを生成し、
前記抽象構文木データに基づいて、前記条件記述部の分岐先に配置される動作記述部および条件記述部を一意に特定可能な文脈番号を、前記分岐先に配置される動作記述部および条件記述部に割り当て、
前記条件記述部および前記動作記述部に割り当てられた文脈番号と対応付けて、条件記述部および動作記述部を配置し、分岐元の条件記述部の条件指定部と対応付けて、前記条件記述部の分岐先に配置された各動作記述部の処理を実行する旨の情報を、各動作記述部の動作指定部に設定することで、デシジョンテーブルを生成する
処理を実行することを特徴とするデシジョンテーブル生成方法。 - コンピュータに、
ソースコードの字句および構文を解析することにより、前記ソースコードで定義された、分岐の条件を記述した条件記述部と、動作を記述した動作記述部との接続関係および順序を示す抽象構文木データを生成し、
前記抽象構文木データに基づいて、前記条件記述部の分岐先に配置される動作記述部および条件記述部を一意に特定可能な文脈番号を、前記分岐先に配置される動作記述部および条件記述部に割り当て、
前記条件記述部および前記動作記述部に割り当てられた文脈番号と対応付けて、条件記述部および動作記述部を配置し、分岐元の条件記述部の条件指定部と対応付けて、前記条件記述部の分岐先に配置された各動作記述部の処理を実行する旨の情報を、各動作記述部の動作指定部に設定することで、デシジョンテーブルを生成する
処理を実行させることを特徴とするデシジョンテーブル生成プログラム。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2016049918A JP6077694B1 (ja) | 2016-03-14 | 2016-03-14 | デシジョンテーブル生成装置、デシジョンテーブル生成方法およびデシジョンテーブル生成プログラム |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2016049918A JP6077694B1 (ja) | 2016-03-14 | 2016-03-14 | デシジョンテーブル生成装置、デシジョンテーブル生成方法およびデシジョンテーブル生成プログラム |
Publications (2)
Publication Number | Publication Date |
---|---|
JP6077694B1 true JP6077694B1 (ja) | 2017-02-08 |
JP2017167651A JP2017167651A (ja) | 2017-09-21 |
Family
ID=57981601
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2016049918A Expired - Fee Related JP6077694B1 (ja) | 2016-03-14 | 2016-03-14 | デシジョンテーブル生成装置、デシジョンテーブル生成方法およびデシジョンテーブル生成プログラム |
Country Status (1)
Country | Link |
---|---|
JP (1) | JP6077694B1 (ja) |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPH0540616A (ja) * | 1991-08-02 | 1993-02-19 | Hitachi Ltd | プログラム仕様生成方法 |
JP2013148965A (ja) * | 2012-01-17 | 2013-08-01 | Fujitsu Fsas Inc | 編集装置、編集方法および編集プログラム |
JP2015210735A (ja) * | 2014-04-28 | 2015-11-24 | 東芝ソリューション株式会社 | 仕様抽出装置、仕様抽出方法およびプログラム |
-
2016
- 2016-03-14 JP JP2016049918A patent/JP6077694B1/ja not_active Expired - Fee Related
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPH0540616A (ja) * | 1991-08-02 | 1993-02-19 | Hitachi Ltd | プログラム仕様生成方法 |
JP2013148965A (ja) * | 2012-01-17 | 2013-08-01 | Fujitsu Fsas Inc | 編集装置、編集方法および編集プログラム |
JP2015210735A (ja) * | 2014-04-28 | 2015-11-24 | 東芝ソリューション株式会社 | 仕様抽出装置、仕様抽出方法およびプログラム |
Non-Patent Citations (1)
Title |
---|
JPN6016048645; 西川拳太,片山徹郎,喜多義弘,山場久昭,岡崎直宣: '形式仕様を用いたデシジョンテーブル生成手法の提案' ソフトウェアエンジニアリングシンポジウム 2014 [online] , 20140825, pp.39-44, 情報処理学会 * |
Also Published As
Publication number | Publication date |
---|---|
JP2017167651A (ja) | 2017-09-21 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US8745556B2 (en) | Layout method and system for multi-patterning integrated circuits | |
KR101597780B1 (ko) | 소프트웨어 코드의 시각적 구현 방법 및 장치 | |
TW201730797A (zh) | 用於多重樣式化的方法 | |
EP1879106A2 (en) | Source code generation method, apparatus and program | |
JP5769900B2 (ja) | シーケンスプログラム部品作成プログラムおよびシーケンスプログラム部品作成装置 | |
JP5005510B2 (ja) | ソフトウェアの設計支援方法、設計支援装置及び設計支援プログラム | |
JP2017041171A (ja) | テストシナリオ生成支援装置およびテストシナリオ生成支援方法 | |
CN111124479A (zh) | 配置文件的解析方法、系统及电子设备 | |
JP6077694B1 (ja) | デシジョンテーブル生成装置、デシジョンテーブル生成方法およびデシジョンテーブル生成プログラム | |
KR101827119B1 (ko) | 레이아웃 체킹 시스템 및 방법 | |
JP6451417B2 (ja) | デバッグ支援装置、デバッグ支援システム、デバッグ支援方法、および、デバッグ支援プログラム | |
JP6702072B2 (ja) | 制御プログラム、装置、及び方法 | |
EP3926465A1 (en) | Method and system for creating an app by merging source code | |
JP6111150B2 (ja) | ソースコード解析装置、ソースコード解析方法、及びプログラム | |
JP5578625B2 (ja) | プログラム分析装置、プログラム分析方法、及びプログラム | |
JP2016051367A (ja) | データ解析装置、データ解析方法、および、プログラム。 | |
JP7260150B2 (ja) | Webサイト設計支援装置、Webサイト設計支援方法、及びプログラム | |
JP6748357B2 (ja) | 解析装置、解析プログラムおよび解析方法 | |
JP6175306B2 (ja) | 制御プログラム分割装置、制御プログラム分割方法及びその記録媒体 | |
JP2013145443A (ja) | テストコード生成装置、テストコード生成方法、テストコード生成プログラム | |
JP2012173745A (ja) | データベース解析装置及びデータベース解析プログラム | |
JP2013097567A (ja) | ヘルプ作成支援装置、ヘルプ作成支援プログラムおよびヘルプ作成支援方法 | |
US11416246B2 (en) | Information processing apparatus, analysis system, analysis method, and non-transitory computer readable medium storing analysis program | |
JP6649584B2 (ja) | パラメータ化方法、情報処理装置およびパラメータ化プログラム | |
JP2002288004A (ja) | プログラムソース処理装置、プログラムソース処理方法、およびプログラムソース処理プログラム |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
TRDD | Decision of grant or rejection written | ||
A01 | Written decision to grant a patent or to grant a registration (utility model) |
Free format text: JAPANESE INTERMEDIATE CODE: A01 Effective date: 20161220 |
|
A61 | First payment of annual fees (during grant procedure) |
Free format text: JAPANESE INTERMEDIATE CODE: A61 Effective date: 20170112 |
|
R150 | Certificate of patent or registration of utility model |
Ref document number: 6077694 Country of ref document: JP Free format text: JAPANESE INTERMEDIATE CODE: R150 |
|
LAPS | Cancellation because of no payment of annual fees |