Mercurial > hg > Applications > Grep
comparison regexParser/subsetConstraction.cc @ 208:2ec95755238e
fix mergetest
author | Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp> |
---|---|
date | Sun, 27 Dec 2015 18:46:08 +0900 |
parents | e6e862e92fdc |
children | 959f8c00da17 |
comparison
equal
deleted
inserted
replaced
207:58d3c01bf421 | 208:2ec95755238e |
---|---|
186 return y; | 186 return y; |
187 } | 187 } |
188 CharClassWalkerPtr walk = createCharClassWalker(x->cc); | 188 CharClassWalkerPtr walk = createCharClassWalker(x->cc); |
189 CharClassPtr ccy = y; | 189 CharClassPtr ccy = y; |
190 BitVector bi; | 190 BitVector bi; |
191 for (CharClassPtr cc = getNext(walk); hasNext(walk); cc=getNext(walk)) { | 191 while (hasNext(walk)) { |
192 CharClassPtr cc = getNext(walk); | |
192 unsigned long begin = cc->cond.range.begin; | 193 unsigned long begin = cc->cond.range.begin; |
193 unsigned long end = cc->cond.range.end; | 194 unsigned long end = cc->cond.range.end; |
194 bi = cc->nextState; | 195 bi = cc->nextState; |
195 ccy = charClassMerge(ccy,begin,end,bi); | 196 ccy = charClassMerge(ccy,begin,end,bi); |
196 } | 197 } |
209 s->next = tgv.tg->stateList; | 210 s->next = tgv.tg->stateList; |
210 tgv.tg->stateList = s; | 211 tgv.tg->stateList = s; |
211 s->node = n; | 212 s->node = n; |
212 BitVector bi = createBitVector(n->stateNum); | 213 BitVector bi = createBitVector(n->stateNum); |
213 s->bitState = bi; | 214 s->bitState = bi; |
214 s->cc = NULL; | 215 s->cc = n->cc; |
215 return s; | 216 return s; |
216 } | 217 } |
217 | 218 |
218 /** | 219 /** |
219 正規表現に必要な状態を探して、それぞれに番号を割り振る | 220 正規表現に必要な状態を探して、それぞれに番号を割り振る |
306 tg->stateArray = NULL; | 307 tg->stateArray = NULL; |
307 tg->stateList = NULL; | 308 tg->stateList = NULL; |
308 return tg; | 309 return tg; |
309 } | 310 } |
310 | 311 |
311 TransitionGeneratorPtr generateTransitionList(NodePtr n) { | 312 TGValue createTGValue() { |
312 TransitionGeneratorPtr tg = createTransitionGenerator(); | 313 TransitionGeneratorPtr tg = createTransitionGenerator(); |
313 TGValue tgv; | 314 TGValue tgv; |
314 // initiarize tgv | |
315 tgv.asterisk = false; | 315 tgv.asterisk = false; |
316 tgv.tg = tg; | 316 tgv.tg = tg; |
317 return tgv; | |
318 } | |
319 | |
320 TransitionGeneratorPtr generateTransitionList(NodePtr n) { | |
321 TGValue tgv = createTGValue(); | |
317 StatePtr startState = tgv.startState = createState(tgv,n); | 322 StatePtr startState = tgv.startState = createState(tgv,n); |
318 NodePtr eof = createNode(NULL,'e',NULL,NULL,NULL); | 323 NodePtr eof = createNode(NULL,'e',NULL,NULL,NULL); |
319 StatePtr endState = tgv.endState = createState(tgv,eof); | 324 StatePtr endState = tgv.endState = createState(tgv,eof); |
320 tgv = stateAllocate(n,tgv); | 325 tgv = stateAllocate(n,tgv); |
321 if (tg->totalStateCount > BITBLOCK) { | 326 if (tgv.tg->totalStateCount > BITBLOCK) { |
322 errorMassege("StateMax > BITBLOCK",__LINE__,__FILE__); | 327 errorMassege("StateMax > BITBLOCK",__LINE__,__FILE__); |
323 } | 328 } |
324 BitVector bi = createBitVector(tg->totalStateCount); | 329 BitVector bi = createBitVector(tgv.tg->totalStateCount); |
325 tgv.tg->stateArray = (StatePtr*)calloc(bi.bitContainer*2,sizeof(StatePtr*)); | 330 tgv.tg->stateArray = (StatePtr*)calloc(bi.bitContainer*2,sizeof(StatePtr*)); |
326 tgv.tg->stateArray[startState->bitState.bitContainer] = startState; | 331 tgv.tg->stateArray[startState->bitState.bitContainer] = startState; |
327 tgv.tg->stateArray[endState->bitState.bitContainer] = endState; | 332 tgv.tg->stateArray[endState->bitState.bitContainer] = endState; |
328 generateTransition(n,tgv); | 333 generateTransition(n,tgv); |
329 return tg; | 334 return tgv.tg; |
330 } | 335 } |
331 | 336 |
332 void printState(StatePtr state) { | 337 void printState(StatePtr state) { |
333 printf("state : %lx\n",state->bitState.bitContainer); | 338 printf("state : %lx\n",state->bitState.bitContainer); |
334 long nodeNumber = 0; | 339 long nodeNumber = 0; |