changeset 186:3e8aae8beba9 pairPro

fix createTransitionGenerator()
author Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
date Thu, 24 Dec 2015 20:37:29 +0900
parents d25f4f3b4c34
children ef798db705e9
files regexParser/regexParser.h regexParser/subsetConstraction.cc
diffstat 2 files changed, 18 insertions(+), 29 deletions(-) [+]
line wrap: on
line diff
--- a/regexParser/regexParser.h	Thu Dec 24 20:27:49 2015 +0900
+++ b/regexParser/regexParser.h	Thu Dec 24 20:37:29 2015 +0900
@@ -17,9 +17,7 @@
     StateStack stack;
     StatePtr state;
     StatePtr stateArray;
-    StatePtr stateArrayLast;
     StatePtr currentState;
-    StatePtr nextState;
 } TransitionGenerator, *TransitionGeneratorPtr;
 
 typedef struct tgValue {
--- a/regexParser/subsetConstraction.cc	Thu Dec 24 20:27:49 2015 +0900
+++ b/regexParser/subsetConstraction.cc	Thu Dec 24 20:37:29 2015 +0900
@@ -204,9 +204,9 @@
 }
 
 /**
- 作成する state を linked list
-bitvector を index とした配列に BitVectorPtr を格納
-state に対応する NodePtr を
+    作成する state を linked list
+    bitvector を index とした配列に BitVectorPtr を格納
+    state に対応する NodePtr を
  */
 TGValue createState(TGValue tg,NodePtr n) {
     StatePtr s = NEW(State);
@@ -219,9 +219,9 @@
 }
 
 /**
-正規表現に必要な状態を探して、それぞれに番号を割り振る
-前が * でない + は新しく状態を作る
-* があったら、次の状態はその時の先頭の状態になる
+    正規表現に必要な状態を探して、それぞれに番号を割り振る
+    前が * でない + は新しく状態を作る
+    * があったら、次の状態はその時の先頭の状態になる
  */
 TGValue stateAllocate(NodePtr n,TGValue tg) {
     if (n->tokenType == '+') {
@@ -260,9 +260,9 @@
 }
 
 /**
-割り当てられた状態に沿って charclass の行き先を書き換える
-書き換えた charclass を merge する
-前の部分に * がない + は新しい状態をつくるので、state を切り替えて生成する
+    割り当てられた状態に沿って charclass の行き先を書き換える
+    書き換えた charclass を merge する
+    前の部分に * がない + は新しい状態をつくるので、state を切り替えて生成する
  */
 TGValue generateTransition(NodePtr n,TGValue tg) {
     if (n->tokenType == '+') {
@@ -306,28 +306,18 @@
     }
 }
 
-TransitionGenerator createTransitionGenerator() {
-    TransitionGenerator tg;
-    tg.ts = NEW(Transition);
-    tg.state = NEW(State);
-    tg.transitionList = NEW(Transition);
-    // Init State : 00...00(64bit)
-    BitVectorPtr initStateBi = NEW(BitVector);
-    bitSet(initStateBi,INIT_STATE_BIT);
-    StatePtr initState = createState(*initStateBi);
-    // Last State : 10...00(64bit)
-    BitVectorPtr lastStateBi = NEW(BitVector);
-    bitSet(lastStateBi,END_STATE_BIT);
-    StatePtr lastState = createState(*lastStateBi);
-    tg.stateArray = appendState(initState,lastState);
-    tg.stateArrayLast = lastState;
-    tg.currentState = initState;
-    tg.nextState = NEW(State);
+TransitionGeneratorPtr createTransitionGenerator() {
+    TransitionGeneratorPtr tg = NEW(TransitionGenerator);
+    tg->stateMax = 0;
+    tg->stack = NULL;
+    tg->state = NEW(State);
+    tg->stateArray = NULL;
+    tg->currentState = NULL;
     return tg;
 }
 
 TransitionGenerator generateTransitionList(NodePtr n) {
-    TransitionGenerator tg = createTransitionGenerator();
+    TransitionGeneratorPtr tg = createTransitionGenerator();
     TGValue tgv;
     tgv.asterisk = false;
     tgv.tg = tg;
@@ -337,6 +327,7 @@
     tgv.stateBegin = 0;
     tgv.stateEnd = 1;
     stateAllocate(n,tgv);
+    tgv.tg->stateMax = tg.stateNum;
     tgv.tg.stateArray = (StatePtr)calloc(tg.stateNum,sizeof(StatePtr));
     generateTransition(n,tgv);
     printTransitionList(tg.ts);