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