diff regexParser/subsetConstruction.cc @ 257:ebb429c2b6a7

fix allocate state in generateTransition
author Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
date Mon, 25 Jan 2016 19:20:32 +0900
parents 72f3673dd7a5
children 2b36dde3ffb7
line wrap: on
line diff
--- a/regexParser/subsetConstruction.cc	Mon Jan 25 18:28:57 2016 +0900
+++ b/regexParser/subsetConstruction.cc	Mon Jan 25 19:20:32 2016 +0900
@@ -236,7 +236,6 @@
     if (n->tokenType == '+') {
         TGValue tgvLeft = tgv;
         tgvLeft.endState = n->right->state;
-        if (pass==2) n->right->state->accept = tgv.endState->accept;
         tgvLeft.asterisk = NULL;
         tgvLeft = generateTransition(n->left,tgvLeft,pass);
         TGValue tgvRight = tgv;
@@ -255,6 +254,7 @@
             tgvRight.tg->stateArray[tgvRight.startState->bitState.bitContainer] = tgvRight.startState ;
         }
         tgvRight = generateTransition(n->right,tgvRight,pass);
+        if (tgv.endState && tgvRight.asterisk) tgvRight.startState->accept = tgv.endState->accept;
         tgvLeft.asterisk = tgvRight.asterisk;
         return tgvLeft;
     } else if (n->tokenType == '|') {
@@ -278,7 +278,7 @@
             n->nextStateNum = nextState;
             n->nextState = tgv.endState;
             BitVector bi = createBitVector(nextState);
-            if (n->nextState->accept && n->nextState->node->tokenType == '*') bi = bitSet(bi,1);
+            if (n->nextState->accept) bi = bitSet(bi,1);
             setState(n->cc,bi);
             tgv1.startState->cc = mergeTransition(tgv1.startState,n->cc);
         }