ウォンツテック

そでやまのーと

NFAからDFAへの変換アルゴリズムを以下のように変更

※「状態」と単体で書いた場合はDFAの状態とする

Dtrans ... nnodeの状態番号のリストを保持させる
Dnode .... 二つの状態を表しそれをe_node, e_transitionとし、それぞれ、「DFAの状態」と「その状態からの遷移」を表す。e_transitionはその状態から移動出来る文字を持ちそれらを連結リストとしてe_nodeを持つDnodeに繋げる。

1.状態0のDtrans, Dnodeを作成する。
  nnode[0]からεで辿れるnnodeの状態番号を全て調べてdtrans[0]のnextに連結させる。また、op=e_nodeであるdnode[0]を作成し、sibling=NULLとしておく

2.状態nのDFAについてのwhileループ
現在調べてようとする状態番号nが調べる必要がある現在の状態数(numOfDnode)より小なりイコール(≦)か調べ、trueであれば続行。

 2.1 dtrans[n]に連結されている全てのnnodeについて
     その一つのnnodeの状態mにおいてnnode[m]が保持する文字が
   ε以外の物を探し、その文字をCHとする。
  2.1.1 
   新しいDtransを作りそれをdtrans_tmpとする
   そのnnode[m]と同じ文字を持つnnodeを探しdtrans_tmpに連結する
   またそれらのnnodeの状態からεで遷移可能な状態もdtrans_tmp
   に連結する。

   IF:
    ここでこのdtrans_tmpと同じnnodeの集合を持つdtrans[x]があかxop = e_node
     dnode[A]->sibling = NULL
     とする。またDnode* newDnodeを作成し、
     op = e_transition
     next = dnode[A]
     とし、dnode[n]のsiblingの先頭にnewDnodeを連結する。

次に調べる状態をn++とする。

新しい状態が作成されなくなると次のwhileループの条件でn>numOfDnodeとなり、処理は終了する。