(57)【要約】【課題】適切にデシジョンテーブルを生成すること。【解決手段】デシジョンテーブル生成装置は、ソースコード１４１で指定される文脈に従って、各記述部に文脈番号を割り振り、文脈番号と対応付けて、各記述部を配置する。また、デシジョンテーブル生成装置１００は、分岐元の条件記述部の条件指定部と対応付けて、条件記述部の分岐先に配置された各動作記述部の処理を実行する旨の情報を、各動作記述の動作指定部に設定することで、デシジョンテーブル１４４を生成する。【選択図】図１
2017167651.tif 000002
【特許請求の範囲】
【請求項１】
ソースコードの字句および構文を解析することにより、前記ソースコードで定義された、分岐の条件を記述した条件記述部と、動作を記述した動作記述部との接続関係および順序を示す抽象構文木データを生成する解析部と、
前記抽象構文木データに基づいて、前記条件記述部の分岐先に配置される動作記述部および条件記述部を一意に特定可能な文脈番号を、前記分岐先に配置される動作記述部および条件記述部に割り当てる割当部と、
前記条件記述部および前記動作記述部に割り当てられた文脈番号と対応付けて、条件記述部および動作記述部を配置し、分岐元の条件記述部の条件指定部と対応付けて、前記条件記述部の分岐先に配置された各動作記述部の処理を実行する旨の情報を、各動作記述部の動作指定部に設定することで、デシジョンテーブルを生成する生成部と
を有することを特徴とするデシジョンテーブル生成装置。
【請求項２】
前記割当部は、文脈番号ｎが割り当てられた前記条件記述部の条件を満たす場合の分岐先に配置された直近の動作記述部または条件記述部に文脈番号２ｎ＋１を割り当て、前記条件記述部の条件を満たさない場合の分岐先に配置された直近の動作記述部または条件記述部に文脈番号２ｎ＋２を割り当てることを特徴とする請求項１に記載のデシジョンテーブル生成装置。
【請求項３】
前記割当部は、先頭に位置する条件記述部および動作記述部の配下に接続される直近の条件記述部または動作記述部に、文脈番号の初期値を割り当てることを特徴とする請求項２に記載のデシジョンテーブル生成装置。
【請求項４】
前記生成部は、前記デシジョンテーブルに含まれる条件記述部および条件指定部をまとめてデシジョンテーブルの上側に配置し、前記デシジョンテーブルに含まれる動作記述部および動作指定部をまとめて前記デシジョンテーブルの下側に配置することで、前記デシジョンテーブルを更新することを特徴とする請求項１、２または３に記載のデシジョンテーブル生成装置。
【請求項５】
前記生成部は、前記デシジョンテーブルに含まれる重複部分をまとめることで、前記デシジョンテーブルを更新することを特徴とする請求項１〜４のいずれか一つに記載のデシジョンテーブル生成装置。
【請求項６】
コンピュータが実行するデシジョンテーブル生成方法であって、
ソースコードの字句および構文を解析することにより、前記ソースコードで定義された、分岐の条件を記述した条件記述部と、動作を記述した動作記述部との接続関係および順序を示す抽象構文木データを生成し、
前記抽象構文木データに基づいて、前記条件記述部の分岐先に配置される動作記述部および条件記述部を一意に特定可能な文脈番号を、前記分岐先に配置される動作記述部および条件記述部に割り当て、
前記条件記述部および前記動作記述部に割り当てられた文脈番号と対応付けて、条件記述部および動作記述部を配置し、分岐元の条件記述部の条件指定部と対応付けて、前記条件記述部の分岐先に配置された各動作記述部の処理を実行する旨の情報を、各動作記述部の動作指定部に設定することで、デシジョンテーブルを生成する
処理を実行することを特徴とするデシジョンテーブル生成方法。
【請求項７】
コンピュータに、
ソースコードの字句および構文を解析することにより、前記ソースコードで定義された、分岐の条件を記述した条件記述部と、動作を記述した動作記述部との接続関係および順序を示す抽象構文木データを生成し、
前記抽象構文木データに基づいて、前記条件記述部の分岐先に配置される動作記述部および条件記述部を一意に特定可能な文脈番号を、前記分岐先に配置される動作記述部および条件記述部に割り当て、
前記条件記述部および前記動作記述部に割り当てられた文脈番号と対応付けて、条件記述部および動作記述部を配置し、分岐元の条件記述部の条件指定部と対応付けて、前記条件記述部の分岐先に配置された各動作記述部の処理を実行する旨の情報を、各動作記述部の動作指定部に設定することで、デシジョンテーブルを生成する
処理を実行させることを特徴とするデシジョンテーブル生成プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、デシジョンテーブル生成装置等に関する。
【背景技術】
【０００２】
プログラムの処理条件やポリシー等をわかりやすく表現するために、デシジョンテーブルが利用されている。図１９は、デシジョンテーブルの一例を示す図である。図１９に示すように、デシジョンテーブル１０は、条件記述領域１０ａ、条件指定領域１０ｂ、動作記述領域１０ｃ、動作指定領域１０ｄを有する。
【０００３】
条件記述領域１０ａは、条件を記述する部分である。条件指定領域１０ｂは、条件記述領域１０ａの条件が満たされているか否かを指定する部分である。条件が満たされていれば、条件記述領域１０ａに「ｙ」が指定され、条件が満たされていなければ「ｎ」が指定される。
【０００４】
動作記述領域１０ｃは、動作を記述する部分である。動作指定領域１０ｄは、動作を実行するか否かを指定する部分である。動作を実行する場合には、動作指定領域１０ｄに「ｘ」が指定され、動作を実行しない場合には「−」が指定される。
【０００５】
例えば、図１９のデシジョンテーブル１０において、「商品コード＜０００」の条件を満たし、「商品コード＞９９９」の条件を満たさない場合には「下限エラー処理」が実行される。「商品コード＜０００」の条件を満たさず、「商品コード＞９９９」の条件を満たす場合には「上限エラー処理」が実行される。「商品コード＜０００」および「商品コード＞９９９」の条件を満たさない場合には「マスタファイル登録」が実行される。
【０００６】
ところで、プログラムを解析してプログラム構文解析や、プログラム処理パターンの情報抽出を実行することで、プログラムの仕様情報を生成する従来技術がある。図２０は、解析対象となるプログラムの一例を示す図である。図２１は、仕様情報の一例を示す図である。例えば、従来技術がプログラム２０ａを解析して仕様情報を生成すると、仕様情報２０ｂが生成される。例えば、仕様情報２０ｂを参照すると、「ＳＵＲＹＯ  ＩＳ  ＮＵＭＥＲＩＣ」が「Ｙ」となる場合には、「ＣＯＮＴＩＮＵＥ」が実行される旨が定義されている。
【先行技術文献】
【特許文献】
【０００７】
【特許文献１】特開平５−４０６１６号公報
【発明の概要】
【発明が解決しようとする課題】
【０００８】
しかしながら、上述した従来技術では、適切にデシジョンテーブルを生成することができないという問題がある。
【０００９】
図２１に示した、従来技術によって生成された仕様情報２０ｂは、デシジョンテーブルの仕様に従っておらず、デシジョンテーブルとは呼べるものではない。例えば、仕様情報２０ｂは、各列の条件が一意に特定できないため、デシジョンテーブルの書き方として成り立たない。すなわち、「ＳＵＲＹＯ  ＩＳ  ＮＵＭＥＲＩＣ」、「ＮＥＢＩＫＩ−ＣＯＤＥ＝’１’」、「ＳＵＲＹＯ＜１００」がそれぞれ「Ｙ」、「Ｎ」となる組み合わせの条件において、どのような処理を行うのか一意に特定できない。
【００１０】
１つの側面では、本発明は、適切にデシジョンテーブルを生成することができるデシジョンテーブル生成装置、デシジョンテーブル生成方法およびデシジョンテーブル生成プログラムを提供することを目的とする。
【課題を解決するための手段】
【００１１】
第１の案では、デシジョンテーブル生成装置は、解析部と、割当部と、生成部とを有する。解析部は、ソースコードの字句および構文を解析することにより、ソースコードで定義された、分岐の条件を記述した条件記述部と、動作を記述した動作記述部との接続関係および順序を示す抽象構文木データを生成する。割当部は、抽象構文木データに基づいて、条件記述部の分岐先に配置される動作記述部および条件記述部を一意に特定可能な文脈番号を、分岐先に配置される動作記述部および条件記述部に割り当てる。生成部は、条件記述部および動作記述部に割り当てられた文脈番号と対応付けて、条件記述部および動作記述部を配置し、分岐元の条件記述部の条件指定部と対応付けて、条件記述部の分岐先に配置された各動作記述部の処理を実行する旨の情報を、各動作記述の動作指定部に設定することで、デシジョンテーブルを生成する。
【発明の効果】
【００１２】
適切にデシジョンテーブルを生成することができる。
【図面の簡単な説明】
【００１３】
【図１】図１は、本実施例に係るデシジョンテーブル生成装置の構成を示す機能ブロック図である。
【図２】図２は、ソースコードの一例を示す図である。
【図３】図３は、ソースコードの処理内容を説明するための図である。
【図４】図４は、トークンテーブルのデータ構造の一例を示す図である。
【図５】図５は、抽象構文木データのデータ構造の一例を示す図である。
【図６】図６は、デシジョンテーブルのデータ構造の一例を示す図である。
【図７】図７は、割当部が文脈番号を割り当てる処理の一例を説明するための図（１）である。
【図８】図８は、割当部が文脈番号を割り当てる処理の一例を説明するための図で（２）ある。
【図９】図９は、生成部がデシジョンテーブルを生成する過程を説明するための図（１）である。
【図１０】図１０は、生成部がデシジョンテーブルを生成する過程を説明するための図（２）である。
【図１１】図１１は、生成部がデシジョンテーブルを生成する過程を説明するための図（３）である。
【図１２】図１２は、生成部がデシジョンテーブルを生成する過程を説明するための図（４）である。
【図１３】図１３は、生成部がデシジョンテーブルを生成する過程を説明するための図（５）である。
【図１４】図１４は、生成部がデシジョンテーブルを生成する過程を説明するための図（６）である。
【図１５】図１５は、生成部がデシジョンテーブルを生成する過程を説明するための図（７）である。
【図１６】図１６は、編集前のデシジョンテーブルの一例を示す図である。
【図１７】図１７は、本実施例に係るデシジョンテーブル生成装置の処理手順を示すフローチャートである。
【図１８】図１８は、各繰り返し構造によるデシジョンテーブルの違いを説明するための図である。
【図１９】図１９は、デシジョンテーブルの一例を示す図である。
【図２０】図２０は、解析対象となるプログラムの一例を示す図である。
【図２１】図２１は、仕様情報の一例を示す図である。
【図２２】図２２は、各文脈番号を更新する処理の一例を説明するための図である。
【発明を実施するための形態】
【００１４】
以下に、本願の開示するデシジョンテーブル生成装置、デシジョンテーブル生成方法およびデシジョンテーブル生成プログラムの実施例を図面に基づいて詳細に説明する。なお、この実施例によりこの発明が限定されるものではない。
【実施例】
【００１５】
図１は、本実施例に係るデシジョンテーブル生成装置の構成を示す機能ブロック図である。図１に示すように、デシジョンテーブル生成装置１００は、通信部１１０と、入力部１２０と、表示部１３０と、記憶部１４０と、制御部１５０とを有する。
【００１６】
通信部１１０は、ネットワーク等を介して、他の外部装置と通信を実行する処理部である。通信部１１０は、通信装置等に対応する。
【００１７】
入力部１２０は、各種の情報をデシジョンテーブル生成装置１００に入力するための入力装置である。例えば、入力部１２０は、キーボードやマウス、タッチパネル等に対応する。例えば、利用者は、入力部１２０を操作して、ソースコード１４１の入力・修正、デシジョンテーブル１４４の修正などを行う。
【００１８】
表示部１３０は、各種の情報を表示する表示装置である。例えば、表示部１３０は、後述するソースコード１４１、デシジョンテーブル１４４等を表示する。表示部１３０は、液晶モニタやタッチパネル等に対応する。
【００１９】
記憶部１４０は、ソースコード１４１と、トークンテーブル１４２と、抽象構文木データ１４３と、デシジョンテーブル１４４とを有する。記憶部１４０は、例えば、ＲＡＭ（Random  Access  Memory）、ＲＯＭ（Read  Only  Memory）、フラッシュメモリ（Flash  Memory）などの半導体メモリ素子、またはハードディスク、光ディスクなどの記憶装置に対応する。
【００２０】
ソースコード１４１は、所定のプログラミング言語の言語仕様に従って作成された、コンピュータに対する一連の処理内容を示すデータである。図２は、ソースコードの一例を示す図である。例えば、図２に示すソースコード１４１は、ファイルａとファイルｂとを併合してファイルｃに出力する手順を定義したソースコードである。
【００２１】
図３は、ソースコードの処理内容を説明するための図である。図３に示すように、ファイルａは、文字「ａ，ｂ，ｄ，ｆ」を有する。ファイルｂは、文字「ｂ，ｃ，ｅ」を有する。コンピュータが、ソースコード１４１に基づいて処理を行うことで、ファイルｃが生成される。ファイルｃは、ファイルａとファイルｂとが併合されたファイルである。ファイルｃに含まれる文字は、昇順「ａ，ｂ，ｂ，ｃ，ｄ，ｅ，ｆ」に並べられる。
【００２２】
続いて、図２に示したソースコード１４１に含まれる主要な命令について説明する。ソースコード１４１の６行目〜８行目に含まれる「fopen」は、ファイルオープンを指示する命令である。ソースコード１４１の９行目に含まれる「getc（f_a）」は、ファイルａ読み込みを指示する命令である。ソースコード１４１の１０行目に含まれる「getc（f_b）」は、ファイルｂ読み込みを指示する命令である。
【００２３】
ソースコード１４１の１３行目に含まれる「if(f_a==EOF)」は、ファイルａがＥＯＦ（ファイルの終わり）である場合に、１４行目以降の処理を実行し、ファイルａがＥＯＦでない場合には、２０行目「else」以降の処理を実行することを指示する命令である。
【００２４】
ソースコード１４１の１４行目に含まれる「if(f_b==EOF)」は、ファイルｂがＥＯＦ（ファイルの終わり）である場合に、１５行目の処理を実行し、ファイルｂがＥＯＦでない場合には、１６行目「else」以降の処理を実行することを指示する命令である。
【００２５】
ソースコード１４１の１５行目に含まれる「p=false」は、ループの終了を指示する命令である。ソースコード１４１の１７行目に含まれる「putc(b,f_ｂ)」は、ファイルｃ書き出しを指示する命令である。ソースコード１４１の１８行目に含まれる「b=getc(f_b)」は、ファイルｂ読込を指示する命令である。
【００２６】
ソースコード１４１の２１行目に含まれる「if(f_b==EOF)」は、ファイルｂがＥＯＦ（ファイルの終わり）である場合に、２２行目以降の処理を実行し、ファイルｂがＥＯＦでない場合には、２４行目「else」以降の処理を実行することを指示する命令である。
【００２７】
ソースコード１４１の２２行目に含まれる「putc(a,f_a)」は、ファイルｃ書き出しを指示する命令である。ソースコード１４１の２３行目に含まれる「a=getc(f_ａ)」は、ファイルｂ読込を指示する命令である。
【００２８】
ソースコード１４１の２５行目に含まれる「if(a＞b)」は、ａ＞ｂの条件を満たす場合に、２６行目以降の処理を実行し、ａ＞ｂの条件を満たさない場合には、２８行目「else」以降の処理を実行することを指示する命令である。
【００２９】
ソースコード１４１の２６行目に含まれる「putc(b,f_ｂ)」は、ファイルｃ書き出しを指示する命令である。ソースコード１４１の２７行目に含まれる「b=getc(f_b)」は，ファイルｂ読込を指示する命令である。
【００３０】
ソースコード１４１の２９行目に含まれる「putc(a,f_a)」は、ファイルｃ書き出しを指示する命令である。ソースコード１４１の３０行目に含まれる「a=getc(f_a)」は，ファイルａ読込を指示する命令である。
【００３１】
ソースコード１４１の３５行目〜３７行目に含まれる「fclose」は、ファイルクローズを指示する命令である。ソースコード１４１の３８行目の「return  0」は、処理終了を指示する命令である。
【００３２】
図１の説明に戻る。トークンテーブル１４２は、ソースコード１４１を字句解析することで得られる複数のトークンを保持するテーブルである。トークンは、それで一つの意味を持つかたまりであり、それ以上細かくすると意味を持たなくなるものである。図４は、トークンテーブルのデータ構造の一例を示す図である。説明の便宜上、図４に示すトークンテーブル１４２の各トークンは、縦方向に連続している。また、一番下の行のトークンの次のトークンは、次の列の一番上のトークンに続く。例えば、２０行１列目のトークン「；」の次のトークンは、１行２列目のトークン「；」となる。
【００３３】
抽象構文木データ１４３は、ソースコード１４１で定義された分岐の条件を示す条件記述部と、動作記述部との接続関係および順序を示すデータである。図５は、抽象構文木データのデータ構造の一例を示す図である。図５に示すように、抽象構文木データ１４３は、複数のブロック３１〜４０が含まれている。また、ブロック３１〜４０に含まれる括弧付きの数字は、該当する番号が格納される位置を示す。例えば、ブロック３１に含まれる（３２）は、ブロック３２が格納される位置を示す。
【００３４】
また、各ブロック３１〜４０には、条件記述部に対応するものであるか、動作記述部に対応するものであるかの情報が付与される。また、抽象構文木データ１４３では、ブロックが条件記述部に対応するものである場合には、条件を満たす場合の移行先のブロックと、条件を満たさない場合の移行先のブロックが識別可能に設定される。
【００３５】
ブロック３２に含まれる「f_a==EOF」は、ｉｆ文に続く情報であるため、条件記述部に対応するブロックである。また、ブロック３２の「f_a==EOF」の条件を満たす場合には、ブロック３３に移行し、「f_a==EOF」の条件を満たさない場合には、ブロック３６に移行する旨が設定される。
【００３６】
ブロック３３に含まれる「f_b==EOF」は、ｉｆ文に続く情報であるため、条件記述部に対応するブロックである。また、ブロック３３の「f_b==EOF」の条件を満たす場合には、ブロック３４に移行し、「f_b==EOF」の条件を満たさない場合には、ブロック３５に移行する旨が設定される。ブロック３４、３５に含まれる文字列は、動作記述部に対応する文字列である。
【００３７】
ブロック３６に含まれる「f_b==EOF」は、ｉｆ文に続く情報であるため、条件記述部に対応するブロックである。また、ブロック３６の「f_b==EOF」の条件を満たす場合には、ブロック３７に移行し、「f_b==EOF」の条件を満たさない場合には、ブロック３８に移行する旨が設定される。ブロック３７に含まれる文字列は、動作記述部に対応する文字列である。
【００３８】
ブロック３８に含まれる「a＞b」は、ｉｆ文に続く情報であるため、条件記述部に対応するブロックである。また、ブロック３８の「a＞b」の条件を満たす場合には、ブロック３９に移行し、「a＞b」の条件を満たさない場合には、ブロック４０に移行する旨が設定される。ブロック３９、４０に含まれる文字列は、動作記述部に対応する文字列である。
【００３９】
デシジョンテーブル１４４は、ソースコード１４１に対して、制御部１５０が後述する処理を実行することで生成される、デシジョンテーブルである。図６は、デシジョンテーブルのデータ構造の一例を示す図である。図６に示すように、デシジョンテーブル１４４は、デジションテーブル１４４ａと、デシジョンテーブル１４４ｂとを含む。デシジョンテーブル１４４ａの動作記述部に含まれる（１４４ａ）は、デシジョンテーブル１４４ａが再度呼び出されることを示す。デシジョンテーブル１４４ｂの動作記述部に含まれる（１４４ａ）は、デシジョンテーブル１４４ａが呼び出されることを示す。
【００４０】
図１の説明に戻る。制御部１５０は、字句解析部１５１と、構文解析部１５２と、割当部１５３と、生成部１５４とを有する。制御部１５０は、例えば、ＡＳＩＣ（Application  Specific  Integrated  Circuit）や、ＦＰＧＡ（Field  Programmable  Gate  Array）などの集積装置に対応する。また、制御部１５０は、例えば、ＣＰＵやＭＰＵ（Micro  Processing  Unit）等の電子回路に対応する。
【００４１】
字句解析部１５１は、ソースコード１４１に対して字句解析を実行することで、ソースコード１４１からトークンを順番に抽出し、抽出した各トークンを抽出した順番に、トークンテーブル１４２に格納する処理部である。
【００４２】
構文解析部１５２は、トークンテーブル１４２を基にして、構文解析を実行し、抽象構文木データ１４３を生成する処理部である。例えば、構文解析部１５２は、ソースコード１４１（トークンテーブル１４２）の構文解析結果により、条件記述部に対応する文字列と、動作記述部に対応する文字列とを特定する。例えば、ｉｆ文等の分岐に関わる所定の文字列に関連付けられた文字列を、条件記述部と判定し、その他の文字列を動作記述部と特定する。また、各条件記述部と、動作記述部との接続関係、順番等を特定し、抽象構文木データ１４３として登録する。
【００４３】
割当部１５３は、抽象構文木データ１４３を基にして、条件記述部および動作記述部に、文脈番号を割り当てる処理部である。図７および図８は、割当部が文脈番号を割り当てる処理の一例を説明するための図である。以下の説明において、条件記述部と動作記述部とを特に区別しない場合には、単に、「記述部」と表記する。
【００４４】
図７について説明する。図７では、動作記述部ａ，ｂ，ｃが順に接続されている。例えば、図７の動作記述部の配列は、ソースコード「｛a();b();c()｝」に対応するものである。割当部１５３は、先頭の記述部については、文脈番号「０」を割り当てる。割当部１５３は、動作記述部に続く記述部については、文脈番号「０」を割り当てる。そうすると、割当部１５３は、各動作記述部ａ，ｂ，ｃに文脈番号「０」を割り当てる。
【００４５】
図８について説明する。図８では、条件記述部ａの分岐先に、動作記述部ｂ，ｃが接続されている。条件記述部ａの条件を満たす場合（thenの場合）に、条件記述部ａから動作記述部ｂに遷移が発生する。条件記述部ａの条件を満たさない場合（elseの場合）に、条件記述部ａから動作記述部ｃに遷移が発生する。例えば、図８の条件記述部、動作記述部の配列は、ソースコード「if(a)｛b();｝else｛c();｝」に対応するものである。
【００４６】
割当部１５３は、先頭の記述部については、文脈番号「０」を割り当てる。割当部１５３は、文脈番号ｎが割り当てられた条件記述部の条件を満たす場合の遷移先となる記述部には、文脈番号２ｎ＋１を割り当てる。割当部１５３は、文脈番号ｎが割り当てられた条件記述部の条件を満さない場合の遷移先となる記述部には、文脈番号２ｎ＋２を割り当てる。そうすると、割当部１５３は、条件記述部ａに文脈番号「０」を割り当て、動作記述部ｂに文脈番号「１」を割り当て、動作記述部ｃに文脈番号「２」を割り当てる。
【００４７】
割当部１５３は、上記に説明した割り当てルールに従って、抽象構文木データ１４３に含まれる各記述部に文脈番号を割り当てる。割当部１５３は、文脈番号と記述部との関係を示す情報を、生成部１５４に出力する。
【００４８】
生成部１５４は、記述部に割り当てられた文脈番号と対応付けて、各記述部を配置する。生成部１５４は、どのような順番で、文脈番号を配置しても良いが、図７，図８等で説明した所定のルールに従って、文脈番号が割り当てられているため、文脈番号によって、条件記述部の分岐先が一意に特定可能である。
【００４９】
また、生成部１５４は、分岐元の条件記述部の条件指定部と対応付けて、条件記述部の分岐先に配置された各動作記述部の処理を実行する旨の情報を、各動作記述の動作指定部に設定する処理を行うことで、デシジョンテーブル１４４を生成する。以下において、生成部１５４の処理の一例について説明する。
【００５０】
図９〜図１５は、生成部がデシジョンテーブルを生成する過程を説明するための図である。図９のステップＳ１０について説明する。生成部１５４は、文脈番号と記述部とを対応付けて配置することでテーブル５０を生成する。ここで、生成部１５４は、while文がソースコード１４１に含まれている場合には、while文による反復を末尾再帰で表現するために、下記の処理を実行する。生成部１５４は、最上段に文脈番号「０」と記述部「p」とを挿入し、割当部１５３から取得した各記述部の各文脈番号を更新する。
【００５１】
図２２は、各文脈番号を更新する処理の一例を説明するための図である。例えば、図２２において、ノード６０は、記述部「p」に対応するものであり、文脈番号「０」が設定される。ノード６１は記述部「fa==EOF」に対応するものであり、更新前には文脈番号「０」が設定される。ノード６２は記述部「fb==EOF」に対応するものであり、更新前には文脈番号「１」が設定されている。ノード６３は記述部「p=fase」に対応するものであり、更新前には文脈番号「３」が設定されている。ノード６４は記述部「putc(b,f_b)」に対応するものであり、更新前には文脈番号「４」が設定されている。その他の記述部に関する説明は省略する。
【００５２】
ノード６５は記述部「fb==EOF」に対応するものであり、更新前には文脈番号「２」が設定されている。ノード６６は記述部「putc(a,f_a)」に対応するものであり、更新前には文脈番号「５」が設定されている。ノード６７は記述部「a＞b」に対応するものであり、更新前には文脈番号「６」が設定されている。
【００５３】
生成部１５４は、ノード６０の配下に接続されたノード６１の文脈番号を「１」に更新する。生成部１５４は、上述した割当部１５３と同様にして、文脈番号ｎが割り当てられた条件記述部の条件を満たす場合の遷移先となる記述部には、文脈番号２ｎ＋１を割り当てる。生成部１５４は、文脈番号ｎが割り当てられた条件記述部の条件を満さない場合の遷移先となる記述部には、文脈番号２ｎ＋２を割り当てる。これにより、生成部１５４は、ノード６２，６３，６４の文脈番号をそれぞれ「３，７，８」に更新し、ノード６５，６６，６７の文脈番号をそれぞれ「４，９，１０」に更新する。ここでは一例として、生成部１５４が、各文脈番号を更新する場合について説明したが、割当部１５３が、各文脈番号を更新する処理を実行しても良い。
【００５４】
また、生成部１５４は、最下段に文脈番号「１」と記述部（５０）を挿入する。記述部（５０）は、反復部分につけたデシジョンテーブルを示すものである。すなわち、テーブル５０が繰り返し呼び出されることを意味する。また、「p」は、while(p)文の条件記述部を示すものである。
【００５５】
文脈番号０、１，３，４，１０の記述部は、条件記述部であり、その他の文脈番号の記述部は、動作記述部である。
【００５６】
図９のステップＳ１１について説明する。生成部１５４は、各記述部に対して指定部を設定することで、テーブル５０を更新する。条件記述部に対応する指定部は、条件指定部となり、動作記述部に対する指定部は、動作指定部となる。ここでは説明の便宜上、条件指定部と、動作指定部とをまとめて、指定部と表記する。
【００５７】
生成部１５４は、文脈番号の一番小さい条件記述部「ｐ」の条件指定部を「Ｙ」に設定し、文脈にそって各記述部を遷移する。遷移先の記述部は、文脈番号によって一意に特定可能である。生成部１５４は、下位の条件記述部を通過する場合には、通過する条件記述部の条件指定部を「Ｙ」に設定し、下位の動作記述部を通過する場合には、通過する動作記述部の動作指定部を「Ｘ」に設定する。ここで、条件指定部「Ｙ」は、条件記述部の条件を満たすことを意味する。動作指定部「Ｘ」は、動作記述部の動作を実行することを意味する。後述する、条件指定部「Ｎ」は、条件記述部の条件を満たさないことを意味する。
【００５８】
上記の処理を実行することで、生成部１５４は、文脈番号０，１，３の指定部に「Ｙ」を設定し、文脈番号７、１の指定部に「Ｘ」を設定する。
【００５９】
図１０のステップＳ１２について説明する。生成部１５４は、テーブル５０の指定部の１列目について、下段から上段に向かって走査し、指示部がはじめに「Ｙ」となる行を検出する。生成部１５４は、検出した「Ｙ」の行を「Ｎ」に変えた指定部の２列目を生成する。図１０のステップＳ１２に示すように、文脈番号「３」が該当する行となるため、文脈番号「３」の行について、指定部の２列目を「Ｎ」に設定する。
【００６０】
図１０のステップＳ１３について説明する。生成部１５４は、ステップＳ１２で「Ｎ」に設定した段の一つ上の段から最上段まで、左列の情報を２列目にコピーする。生成部１５４は、「Ｎ」に設定した段から下段に向かって、文脈にそって各記述部を遷移する。生成部１５４は、下位の条件記述部を通過する場合には、通過する条件記述部の条件指定部を「Ｙ」に設定し、下位の動作記述部を通過する場合には、通過する動作記述部の動作指定部を「Ｘ」に設定する。これにより、生成部１５４は、文脈番号８、１の指定部の２列目に「Ｘ」を設定する。
【００６１】
図１１のステップＳ１４について説明する。生成部１５４は、テーブル５０の指定部の２列目について、下段から上段に向かって走査し、指示部がはじめに「Ｙ」となる行を検出する。生成部１５４は、検出した「Ｙ」の行を「Ｎ」に変えた指定部の３列目を生成する。図１１のステップＳ１４に示すように、文脈番号「１」が該当する行となるため、文脈番号「１」の行について、指定部の３列目を「Ｎ」に設定する。
【００６２】
図１１のステップＳ１５について説明する。生成部１５４は、ステップＳ１４で「Ｎ」に設定した段の一つ上の段から最上段まで、左列（２列目）の情報を３列目にコピーする。生成部１５４は、「Ｎ」に設定した段から下段に向かって、文脈にそって各記述部を遷移する。生成部１５４は、下位の条件記述部を通過する場合には、通過する条件記述部の条件指定部を「Ｙ」に設定し、下位の動作記述部を通過する場合には、通過する動作記述部の動作指定部を「Ｘ」に設定する。これにより、生成部１５４は、文脈番号４の指定部の３列目に「Ｙ」を設定する。生成部１５４は、文脈番号９、１の指定部の３列目に「Ｘ」を設定する。
【００６３】
図１２のステップＳ１６について説明する。生成部１５４は、テーブル５０の指定部の３列目について、下段から上段に向かって走査し、指定部がはじめに「Ｙ」となる行を検出する。生成部１５４は、検出した「Ｙ」の行を「Ｎ」に変えた指定部の４行目を生成する。図１２のステップＳ１６に示すように、文脈番号「４」が該当する行となるため、文脈番号「４」の行について、指定部の４列目を「Ｎ」に設定する。
【００６４】
図１２のステップＳ１７について説明する。生成部１５４は、ステップＳ１６で「Ｎ」に設定した段の一つ上の段から最上段まで、左列（３列目）の情報を４列目にコピーする。生成部１５４は、「Ｎ」に設定した段から下段に向かって、文脈にそって各記述部を遷移する。生成部１５４は、下位の条件記述部を通過する場合には、通過する条件記述部の条件指定部を「Ｙ」に設定し、下位の動作記述部を通過する場合には、通過する動作記述部の動作指定部を「Ｘ」に設定する。これにより、生成部１５４は、文脈番号１０の指定部の４列目に「Ｙ」を設定する。生成部１５４は、文脈番号２１、１の指定部の４列目に「Ｘ」を設定する。
【００６５】
図１３のステップＳ１８について説明する。生成部１５４は、テーブル５０の指定部の４列目について、下段から上段に向かって走査し、指定部がはじめに「Ｙ」となる行を検出する。生成部１５４は、検出した「Ｙ」の行を「Ｎ」に変えた指定部の５行目を生成する。図１３のステップＳ１８に示すように、文脈番号「１０」が該当する行となるため、文脈番号「１０」の行について、指定部の５列目を「Ｎ」に設定する。
【００６６】
図１３のステップＳ１９について説明する。生成部１５４は、ステップＳ１８で「Ｎ」に設定した段の一つ上の段から最上段まで、左列（４列目）の情報を５列目にコピーする。生成部１５４は、「Ｎ」に設定した段から下段に向かって、文脈にそって各記述部を遷移する。生成部１５４は、下位の条件記述部を通過する場合には、通過する条件記述部の条件指定部を「Ｙ」に設定し、下位の動作記述部を通過する場合には、通過する動作記述部の動作指定部を「Ｘ」に設定する。これにより、生成部１５４は、文脈番号２２、１の指定部の５列目に「Ｘ」を設定する。
【００６７】
図１４のステップＳ２０について説明する。生成部１５４は、テーブル５０の指定部の５列目について、下段から上段に向かって走査し、指定部がはじめに「Ｙ」となる行を検出する。生成部１５４は、検出した「Ｙ」の行を「Ｎ」に変えた指定部の６行目を生成する。図１４のステップＳ２０に示すように、文脈番号「０」が該当する行となるため、文脈番号「０」の行について、指定部の６列目を「Ｎ」に設定する。
【００６８】
生成部１５４は、「Ｎ」に設定した段から下段に向かって、文脈にそって各記述部を遷移する。生成部１５４は、下位の条件記述部を通過する場合には、通過する条件記述部の条件指定部を「Ｙ」に設定し、下位の動作記述部を通過する場合には、通過する動作記述部の動作指定部を「Ｘ」に設定する。ここでは、いずれの記述部も通過しないので、６行目の指定部には何も設定されない。
【００６９】
生成部１５４は、テーブル５０の指定部の６列目について、下段から上段に向かって走査し、指定部がはじめに「Ｙ」となる行を検出することを試みるが、存在しないため、処理を終了する。
【００７０】
図１５に、main()のデシジョンテーブル５１の一例を示す。生成部１５４は、各文脈番号には「０」を設定し、指定部に「Ｘ」を設定する。なお、デシジョンテーブル５１は、図５のブロック３１に対応するものであるが、「while文」は、末尾再帰に置き換えられており（テーブル５０に置き換えられており）、main()のデシジョンテーブル５１から削除されている。
【００７１】
生成部１５４は、図９〜図１５で説明した処理を実行することで、図１６に示すデシジョンテーブル５０，５１が生成される。図１６は、編集前のデシジョンテーブルの一例を示す図である。生成部１５４は、図１６のデシジョンテーブル５０に対して編集処理を実行することで、図６に示すデシジョンテーブル１４４ａ，１４４ｂを生成する。以下において、生成部１５４が行う編集処理の一例について説明する。
【００７２】
生成部１５４は、テーブル５０の記述部を走査して、条件記述部と、動作記述部とを特定し、条件記述部のレコードをテーブル５０の上側に移動させ、動作記述部のレコードを下側に移動させる。また、生成部１５４は、指定部の各列を比較して、重複する列を単一の列にまとめることで、重複する部分を無くす編集処理を実行する。
【００７３】
続いて、本実施例に係るデシジョンテーブル生成装置１００の処理手順の一例について説明する。図１７は、本実施例に係るデシジョンテーブル生成装置の処理手順を示すフローチャートである。図１７に示すように、デシジョンテーブル生成装置１００の字句解析部１５１は、ソースコード１４１に対する字句解析を実行してトークンテーブル１４２を生成する（ステップＳ１０１）。デシジョンテーブル生成装置１００の構文解析部１５２は、トークンテーブル１４２に対して構文解析を実行し、抽象構文木データ１４３を生成する（ステップＳ１０２）。
【００７４】
デシジョンテーブル生成装置１００の割当部１５３は、条件記述部および動作記述部に文脈番号を付与する（ステップＳ１０３）。デシジョンテーブル生成装置１００の生成部１５４は、条件記述部、動作記述部を文脈番号と対応付けてテーブルに配置する（ステップＳ１０４）。
【００７５】
生成部１５４は、文脈を辿り、文脈上の各条件指定部に「Ｙ」を設定し、条件指定部が「Ｙ」となる場合に通過する動作記述部の動作指定部に「Ｘ」を設定する（ステップＳ１０５）。生成部１５４は、条件指定部について、下段から上段に向かって走査し、はじめに、条件指定部が「Ｙ」となる条件指定部を「Ｎ」に変更した列を生成する（ステップＳ１０６）。
【００７６】
生成部１５４は、「Ｎ」に変更した条件指定部を開始点として、文脈を辿り、通過する条件指定部を「Ｙ」に設定し、動作記述部の動作指定部に「Ｘ」を設定する（ステップＳ１０７）。生成部１５４は、指定部の右端の列に「Ｙ」が存在する場合には（ステップＳ１０８，Ｙｅｓ）、ステップＳ１０６に移行する。
【００７７】
生成部１５４は、指定部の右端の列に「Ｙ」が存在しない場合には（ステップＳ１０８，Ｎｏ）、デシジョンテーブル１４４を編集する（ステップＳ１０９）。
【００７８】
次に、本実施例に係るデシジョンテーブル生成装置１００の効果について説明する。デシジョンテーブル生成装置１００は、ソースコード１４１で指定される文脈に従って、各記述部に文脈番号を割り振り、文脈番号と対応付けて、各記述部を配置する。また、デシジョンテーブル生成装置１００は、分岐元の条件記述部の条件指定部と対応付けて、条件記述部の分岐先に配置された各動作記述部の処理を実行する旨の情報を、各動作記述の動作指定部に設定することで、デシジョンテーブルを生成する。これによって、適切なデシジョンテーブルを生成することができる。例えば、図６に示したデシジョンテーブル１４４は、ＪＩＳ規格に従ったデシジョンテーブルである。
【００７９】
デシジョンテーブル生成装置１００は、文脈番号ｎが割り当てられた条件記述部の条件を満たす場合の分岐先に配置された直近の動作記述部または条件記述部に文脈番号２ｎ＋１を割り当て、条件記述部の条件を満たさない場合の分岐先に配置された直近の動作記述部または条件記述部に文脈番号２ｎ＋２を割り当てる。また、デジションテーブル生成装置１００は、先頭に位置する条件記述部および動作記述部の配下に接続される直近の条件記述部または動作記述部に、文脈番号の初期値を割り当てる。これによって、簡易的な方法で、テーブルに配置された各記述部の順序および接続関係を一意に特定することが可能となる。
【００８０】
デシジョンテーブル生成装置１００は、デシジョンテーブル１４４に含まれる条件記述部および条件指定部をまとめてデシジョンテーブルの上側に配置し、デシジョンテーブル１４４に含まれる動作記述部および動作指定部をまとめてデシジョンテーブル１４４の下側に配置する。また、デシジョンテーブル生成装置１００は、デシジョンテーブル１４４に含まれる重複部分をまとめる。これにより、デシジョンテーブル１４４を見やすいものにすることができる。
【００８１】
ところで、上記の説明では、繰り返し構造としてwhile文を取り扱う場合につて説明したが、for文、do文等の繰り返し構造を含むソースコードについても、デシジョンテーブルを生成することが可能である。図１８は、各繰り返し構造によるデシジョンテーブルの違いを説明するための図である。
【００８２】
for文について説明する。ソースコードに含まれるfor文は、コード６０に示すものとなる。for文により生成されるデシジョンテーブルは、テーブル６１およびテーブル６２に対応するものとなる。
【００８３】
while文について説明する。ソースコードに含まれるwhile文は、コード７０に示すものとなる。while文により生成されるデシジョンテーブルは、テーブル７１およびテーブル７２に対応するものとなる。
【００８４】
do文について説明する。ソースコードに含まれるdo文は、コード８０に示すものとなる。do文により生成されるデシジョンテーブルは、テーブル８１およびテーブル８２に対応するものとなる。
【００８５】
ところで、本実施例において説明した各処理のうち、自動的に行われるものとして説明した処理の全部または一部を手動的に行うこともでき、あるいは、手動的に行われるものとして説明した処理の全部あるいは一部を公知の方法で自動的に行うこともできる。この他、上記文書中や図面中で示した処理手順、制御手順、具体的名称、各種のデータやパラメータを含む情報については、特記する場合を除いて任意に変更することができる。
【００８６】
さらに、各装置にて行われる各処理機能は、その全部または任意の一部がＣＰＵおよび当該ＣＰＵにて解析実行されるプログラムにて実現され、あるいは、ワイヤードロジックによるハードウェアとして実現され得る。
【符号の説明】
【００８７】
１００  デシジョンテーブル生成装置
１１０  通信部
１２０  入力部
１３０  表示部
１４０  記憶部
１５０  制御部
【図１】
2017167651.tif 000003
【図２】
2017167651.tif 000004
【図３】
2017167651.tif 000005
【図４】
2017167651.tif 000006
【図５】
2017167651.tif 000007
【図６】
2017167651.tif 000008
【図７】
2017167651.tif 000009
【図８】
2017167651.tif 000010
【図９】
2017167651.tif 000011
【図１０】
2017167651.tif 000012
【図１１】
2017167651.tif 000013
【図１２】
2017167651.tif 000014
【図１３】
2017167651.tif 000015
【図１４】
2017167651.tif 000016
【図１５】
2017167651.tif 000017
【図１６】
2017167651.tif 000018
【図１７】
2017167651.tif 000019
【図１８】
2017167651.tif 000020
【図１９】
2017167651.tif 000021
【図２０】
2017167651.tif 000022
【図２１】
2017167651.tif 000023
【図２２】
2017167651.tif 000024