Mercurial > hg > Members > masakoha > testcode
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;