Mercurial > hg > Applications > Grep
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); }