comparison regexParser/subsetConstraction.cc @ 204:e6e862e92fdc

remove warning and error
author Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
date Sun, 27 Dec 2015 13:21:18 +0900
parents e809a2dd0731
children 2ec95755238e
comparison
equal deleted inserted replaced
203:e809a2dd0731 204:e6e862e92fdc
203 bitvector を index とした配列に BitVectorPtr を格納 203 bitvector を index とした配列に BitVectorPtr を格納
204 state に対応する NodePtr を 204 state に対応する NodePtr を
205 */ 205 */
206 StatePtr createState(TGValue tgv,NodePtr n) { 206 StatePtr createState(TGValue tgv,NodePtr n) {
207 StatePtr s = NEW(State); 207 StatePtr s = NEW(State);
208 s->stateNum = n->stateNum = ++tgv.tg->stateMax; 208 s->stateNum = n->stateNum = ++tgv.tg->totalStateCount;
209 s->next = tgv.tg->stateList; 209 s->next = tgv.tg->stateList;
210 tgv.tg->stateList = s; 210 tgv.tg->stateList = s;
211 s->node = n; 211 s->node = n;
212 BitVector bi = createBitVector(n->stateNum); 212 BitVector bi = createBitVector(n->stateNum);
213 s->bitState = bi; 213 s->bitState = bi;
299 } 299 }
300 } 300 }
301 301
302 TransitionGeneratorPtr createTransitionGenerator() { 302 TransitionGeneratorPtr createTransitionGenerator() {
303 TransitionGeneratorPtr tg = NEW(TransitionGenerator); 303 TransitionGeneratorPtr tg = NEW(TransitionGenerator);
304 tg->stateMax = -1; 304 tg->totalStateCount = -1;
305 tg->stack = NULL; 305 tg->stack = NULL;
306 tg->stateArray = NULL; 306 tg->stateArray = NULL;
307 tg->stateList = NULL; 307 tg->stateList = NULL;
308 return tg; 308 return tg;
309 } 309 }
316 tgv.tg = tg; 316 tgv.tg = tg;
317 StatePtr startState = tgv.startState = createState(tgv,n); 317 StatePtr startState = tgv.startState = createState(tgv,n);
318 NodePtr eof = createNode(NULL,'e',NULL,NULL,NULL); 318 NodePtr eof = createNode(NULL,'e',NULL,NULL,NULL);
319 StatePtr endState = tgv.endState = createState(tgv,eof); 319 StatePtr endState = tgv.endState = createState(tgv,eof);
320 tgv = stateAllocate(n,tgv); 320 tgv = stateAllocate(n,tgv);
321 if (tg->stateMax > BITBLOCK) { 321 if (tg->totalStateCount > BITBLOCK) {
322 errorMassege("StateMax > BITBLOCK",__LINE__,__FILE__); 322 errorMassege("StateMax > BITBLOCK",__LINE__,__FILE__);
323 } 323 }
324 BitVector bi = createBitVector(tg->stateMax); 324 BitVector bi = createBitVector(tg->totalStateCount);
325 tgv.tg->stateArray = (StatePtr*)calloc(bi.bitContainer*2,sizeof(StatePtr*)); 325 tgv.tg->stateArray = (StatePtr*)calloc(bi.bitContainer*2,sizeof(StatePtr*));
326 tgv.tg->stateArray[startState->bitState.bitContainer] = startState; 326 tgv.tg->stateArray[startState->bitState.bitContainer] = startState;
327 tgv.tg->stateArray[endState->bitState.bitContainer] = endState; 327 tgv.tg->stateArray[endState->bitState.bitContainer] = endState;
328 generateTransition(n,tgv); 328 generateTransition(n,tgv);
329 return tg; 329 return tg;
379 379
380 charClassMerge の段階で新しい状態をリストに登録したら、charclasswalk をする必要がなくなる 380 charClassMerge の段階で新しい状態をリストに登録したら、charclasswalk をする必要がなくなる
381 */ 381 */
382 SCValue subsetConstraction(SCValue scv) { 382 SCValue subsetConstraction(SCValue scv) {
383 for (;scv.stateTop;scv.stateTop = scv.stateTop->next) { 383 for (;scv.stateTop;scv.stateTop = scv.stateTop->next) {
384 CharClassWalker cw = createCharClassWalker(scv.stateTop->cc); 384 CharClassWalkerPtr cw = createCharClassWalker(scv.stateTop->cc);
385 while (hasNext(cw)) { 385 while (hasNext(cw)) {
386 CharClassPtr cc = getNext(cw); 386 CharClassPtr cc = getNext(cw);
387 unsigned long bi = cc->nextState.bitContainer; 387 BitVector bi = cc->nextState;
388 if (scv.stateArray[bi]) continue; 388 if (scv.stateArray[bi.bitContainer]) continue;
389 scv = createState(scv,bi); 389 scv = createState(scv,bi);
390 StatePtr s = scv.stateEnd; 390 StatePtr s = scv.stateEnd;
391 for (;bi.bitContainer;) { 391 for (;bi.bitContainer;) {
392 int bitPosition = searchBit(bi); 392 int bitPosition = searchBit(bi);
393 unsigned long baseNum = 1 << bitPosition; 393 unsigned long baseNum = 1 << bitPosition;
397 continue; 397 continue;
398 } 398 }
399 CharClassPtr merge = mergeTransition(s,base->cc); 399 CharClassPtr merge = mergeTransition(s,base->cc);
400 s->cc = merge; 400 s->cc = merge;
401 } 401 }
402 scv.stateArray[bi] = s; 402 scv.stateArray[bi.bitContainer] = s;
403 } 403 }
404 } 404 }
405 return; 405 return scv;
406 } 406 }