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;