diff regexParser/subsetConstruction.cc @ 271:6640b0d5bf13

remove anystate processing in sequential seqrch
author Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
date Fri, 29 Jan 2016 19:37:11 +0900
parents 0e423d9f9647
children 7b4bcc7b5ae6
line wrap: on
line diff
--- a/regexParser/subsetConstruction.cc	Fri Jan 29 18:13:04 2016 +0900
+++ b/regexParser/subsetConstruction.cc	Fri Jan 29 19:37:11 2016 +0900
@@ -336,10 +336,11 @@
 
 TGValue  generateTransitionList(NodePtr n) {
     TGValue tgv = createTGValue();
+    TransitionGeneratorPtr tg = tgv.tg;
     State dummy;
-    tgv.tg->stateEnd = &dummy;
+    tg->stateEnd = &dummy;
     StatePtr startState = tgv.startState = createState(tgv,n);
-    tgv.tg->stateList = startState;
+    tg->stateList = startState;
     NodePtr eof = createNode(NULL,'e',NULL,NULL,NULL);
     StatePtr endState = tgv.endState = createState(tgv,eof);
     endState->accept = true;
@@ -347,22 +348,27 @@
     tgv.endState = endState;
     tgv = generateTransition(n,tgv,1);
     printTree(n);
-    if (tgv.tg->totalStateCount > BITBLOCK) {
+    if (tg->totalStateCount > BITBLOCK) {
         errorMassege("StateMax > BITBLOCK",__LINE__,__FILE__);
     }
-    BitVector bi = createBitVector(tgv.tg->totalStateCount);
-    tgv.tg->stateArray = (StatePtr*)calloc(bi.bitContainer*2,sizeof(StatePtr*));
-    tgv.tg->stateArray[startState->bitState.bitContainer] = startState;
-    tgv.tg->stateArray[endState->bitState.bitContainer] = endState;
-    BitVector anyBi;
-    anyBi.bitContainer = bi.bitContainer * 2 - 1; // all bit 1 state
-    tgv.tg->anyState = createState(tgv.tg,anyBi);
+    BitVector bi = createBitVector(tg->totalStateCount);
+    tg->stateArray = (StatePtr*)calloc(bi.bitContainer*2,sizeof(StatePtr*));
+    tg->stateArray[startState->bitState.bitContainer] = startState;
+    tg->stateArray[endState->bitState.bitContainer] = endState;
+    tg->totalBasicState = tg->totalStateCount;
     tgv.startState = startState;
     tgv.endState = endState;
     tgv = generateTransition(n,tgv,2);
     return tgv;
 }
 
+void createAnyState(TransitionGeneratorPtr tg) {
+    BitVector anyBi = createBitVector(tg->totalBasicState);
+    anyBi.bitContainer = anyBi.bitContainer * 2 - 1; // all bit 1 state
+    tg->anyState = createState(tg,anyBi);
+    tg->stateArray[tg->anyState->bitState.bitContainer] = tg->anyState;
+}
+
 void printState(StatePtr state) {
     printf("state : %lx\n",state->bitState.bitContainer);
     long nodeNumber = 0;