comparison regexParser/subsetConstraction.cc @ 213:11b6332f0a42

fix tgv.tg->totalStateCount increment
author Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
date Mon, 28 Dec 2015 19:02:14 +0900
parents b0ae5273925c
children a94f57af1600
comparison
equal deleted inserted replaced
212:b0ae5273925c 213:11b6332f0a42
205 s->cc = cc; 205 s->cc = cc;
206 return s; 206 return s;
207 } 207 }
208 208
209 CharClassPtr allocateCCState(CharClassPtr cc, TGValue tgv) { 209 CharClassPtr allocateCCState(CharClassPtr cc, TGValue tgv) {
210 if (cc->left != NULL) { 210 if (cc->left) {
211 allocateCCState(cc->left,tgv); 211 allocateCCState(cc->left,tgv);
212 } 212 }
213 cc->state = createCCState(cc,tgv); 213 cc->state = createCCState(cc,tgv);
214 if (cc->right != NULL) { 214 if (cc->right) {
215 allocateCCState(cc->right,tgv); 215 allocateCCState(cc->right,tgv);
216 } 216 }
217 return cc; 217 return cc;
218 } 218 }
219 219
220 StatePtr createState(TGValue tgv,NodePtr n) { 220 StatePtr createState(TGValue tgv,NodePtr n) {
221 StatePtr s = NEW(State); 221 StatePtr s = NEW(State);
222 s->stateNum = n->stateNum = ++tgv.tg->totalStateCount; 222 s->stateNum = n->stateNum = tgv.tg->totalStateCount;
223 s->next = tgv.tg->stateList; 223 s->next = tgv.tg->stateList;
224 tgv.tg->stateList = s; 224 tgv.tg->stateList = s;
225 s->node = n; 225 s->node = n;
226 BitVector bi = createBitVector(n->stateNum); 226 BitVector bi = createBitVector(n->stateNum);
227 s->bitState = bi; 227 s->bitState = bi;
228 if (n->cc) { 228 if (n->cc) {
229 CharClassPtr cc = allocateCCState(n->cc,tgv); 229 allocateCCState(n->cc,tgv);
230 } else {
231 tgv.tg->totalStateCount++;
230 } 232 }
231 s->cc = n->cc; 233 s->cc = n->cc;
232 return s; 234 return s;
233 } 235 }
234 236
265 } else if (n->tokenType == 'c' || n->tokenType == 'a'){ 267 } else if (n->tokenType == 'c' || n->tokenType == 'a'){
266 TGValue tgv1 = tgv; 268 TGValue tgv1 = tgv;
267 tgv1.asterisk = false; 269 tgv1.asterisk = false;
268 n->stateNum = tgv.startState->stateNum; 270 n->stateNum = tgv.startState->stateNum;
269 n->nextStateNum = tgv.endState->stateNum; 271 n->nextStateNum = tgv.endState->stateNum;
270 n->state = tgv.startState; 272 n->state = tgv.startState;;
271 n->nextState = tgv.endState; 273 n->nextState = tgv.endState;
272 return tgv1; 274 return tgv1;
273 } else { 275 } else {
274 return tgv; 276 return tgv;
275 } 277 }
316 } 318 }
317 } 319 }
318 320
319 TransitionGeneratorPtr createTransitionGenerator() { 321 TransitionGeneratorPtr createTransitionGenerator() {
320 TransitionGeneratorPtr tg = NEW(TransitionGenerator); 322 TransitionGeneratorPtr tg = NEW(TransitionGenerator);
321 tg->totalStateCount = -1; 323 tg->totalStateCount = 0;
322 tg->stack = NULL; 324 tg->stack = NULL;
323 tg->stateArray = NULL; 325 tg->stateArray = NULL;
324 tg->stateList = NULL; 326 tg->stateList = NULL;
325 return tg; 327 return tg;
326 } 328 }
327 329
328 TGValue createTGValue() { 330 TGValue createTGValue() {
329 TransitionGeneratorPtr tg = createTransitionGenerator();
330 TGValue tgv; 331 TGValue tgv;
332 tgv.startState = NULL;
333 tgv.endState = NULL;
331 tgv.asterisk = false; 334 tgv.asterisk = false;
332 tgv.tg = tg; 335 tgv.tg = createTransitionGenerator();
333 return tgv; 336 return tgv;
334 } 337 }
335 338
336 TransitionGeneratorPtr generateTransitionList(NodePtr n) { 339 TransitionGeneratorPtr generateTransitionList(NodePtr n) {
337 TGValue tgv = createTGValue(); 340 TGValue tgv = createTGValue();