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;