Mercurial > hg > Applications > Grep
comparison 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 |
comparison
equal
deleted
inserted
replaced
270:c82f7e7f66f7 | 271:6640b0d5bf13 |
---|---|
334 return tgv; | 334 return tgv; |
335 } | 335 } |
336 | 336 |
337 TGValue generateTransitionList(NodePtr n) { | 337 TGValue generateTransitionList(NodePtr n) { |
338 TGValue tgv = createTGValue(); | 338 TGValue tgv = createTGValue(); |
339 TransitionGeneratorPtr tg = tgv.tg; | |
339 State dummy; | 340 State dummy; |
340 tgv.tg->stateEnd = &dummy; | 341 tg->stateEnd = &dummy; |
341 StatePtr startState = tgv.startState = createState(tgv,n); | 342 StatePtr startState = tgv.startState = createState(tgv,n); |
342 tgv.tg->stateList = startState; | 343 tg->stateList = startState; |
343 NodePtr eof = createNode(NULL,'e',NULL,NULL,NULL); | 344 NodePtr eof = createNode(NULL,'e',NULL,NULL,NULL); |
344 StatePtr endState = tgv.endState = createState(tgv,eof); | 345 StatePtr endState = tgv.endState = createState(tgv,eof); |
345 endState->accept = true; | 346 endState->accept = true; |
346 tgv.startState = startState; | 347 tgv.startState = startState; |
347 tgv.endState = endState; | 348 tgv.endState = endState; |
348 tgv = generateTransition(n,tgv,1); | 349 tgv = generateTransition(n,tgv,1); |
349 printTree(n); | 350 printTree(n); |
350 if (tgv.tg->totalStateCount > BITBLOCK) { | 351 if (tg->totalStateCount > BITBLOCK) { |
351 errorMassege("StateMax > BITBLOCK",__LINE__,__FILE__); | 352 errorMassege("StateMax > BITBLOCK",__LINE__,__FILE__); |
352 } | 353 } |
353 BitVector bi = createBitVector(tgv.tg->totalStateCount); | 354 BitVector bi = createBitVector(tg->totalStateCount); |
354 tgv.tg->stateArray = (StatePtr*)calloc(bi.bitContainer*2,sizeof(StatePtr*)); | 355 tg->stateArray = (StatePtr*)calloc(bi.bitContainer*2,sizeof(StatePtr*)); |
355 tgv.tg->stateArray[startState->bitState.bitContainer] = startState; | 356 tg->stateArray[startState->bitState.bitContainer] = startState; |
356 tgv.tg->stateArray[endState->bitState.bitContainer] = endState; | 357 tg->stateArray[endState->bitState.bitContainer] = endState; |
357 BitVector anyBi; | 358 tg->totalBasicState = tg->totalStateCount; |
358 anyBi.bitContainer = bi.bitContainer * 2 - 1; // all bit 1 state | |
359 tgv.tg->anyState = createState(tgv.tg,anyBi); | |
360 tgv.startState = startState; | 359 tgv.startState = startState; |
361 tgv.endState = endState; | 360 tgv.endState = endState; |
362 tgv = generateTransition(n,tgv,2); | 361 tgv = generateTransition(n,tgv,2); |
363 return tgv; | 362 return tgv; |
363 } | |
364 | |
365 void createAnyState(TransitionGeneratorPtr tg) { | |
366 BitVector anyBi = createBitVector(tg->totalBasicState); | |
367 anyBi.bitContainer = anyBi.bitContainer * 2 - 1; // all bit 1 state | |
368 tg->anyState = createState(tg,anyBi); | |
369 tg->stateArray[tg->anyState->bitState.bitContainer] = tg->anyState; | |
364 } | 370 } |
365 | 371 |
366 void printState(StatePtr state) { | 372 void printState(StatePtr state) { |
367 printf("state : %lx\n",state->bitState.bitContainer); | 373 printf("state : %lx\n",state->bitState.bitContainer); |
368 long nodeNumber = 0; | 374 long nodeNumber = 0; |