Mercurial > hg > Applications > Grep
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(); |