Mercurial > hg > Applications > Grep
comparison regexParser/subsetConstraction.cc @ 187:ef798db705e9 pairPro
remove some warnings and errors(not working)
author | Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp> |
---|---|
date | Thu, 24 Dec 2015 22:38:50 +0900 |
parents | 3e8aae8beba9 |
children | 109d22faf7b5 |
comparison
equal
deleted
inserted
replaced
186:3e8aae8beba9 | 187:ef798db705e9 |
---|---|
184 if (cc->right) { | 184 if (cc->right) { |
185 setState(cc->right,bi); | 185 setState(cc->right,bi); |
186 } | 186 } |
187 } | 187 } |
188 | 188 |
189 CharClassPtr mergeTransition(StatePtr x,CharClassPtr y) { | 189 CharClassPtr mergeTransition(node::StatePtr x,CharClassPtr y) { |
190 if (x->cc == NULL) { | 190 if (x->cc == NULL) { |
191 return y; | 191 return y; |
192 } | 192 } |
193 CharClassWalkerPtr walk = createCharClassWalker(x->cc); | 193 CharClassWalkerPtr walk = createCharClassWalker(x->cc); |
194 CharClassPtr ccy = y; | 194 CharClassPtr ccy = y; |
206 /** | 206 /** |
207 作成する state を linked list | 207 作成する state を linked list |
208 bitvector を index とした配列に BitVectorPtr を格納 | 208 bitvector を index とした配列に BitVectorPtr を格納 |
209 state に対応する NodePtr を | 209 state に対応する NodePtr を |
210 */ | 210 */ |
211 TGValue createState(TGValue tg,NodePtr n) { | 211 node::StatePtr createState(TGValue tg,NodePtr n) { |
212 StatePtr s = NEW(State); | 212 node::StatePtr s = NEW(node::State); |
213 s->next = tg.tg->currentState; | 213 s->next = tg.tg->currentState; |
214 tg.tg->currentState = s; | 214 tg.tg->currentState = s; |
215 s->node = n; | 215 s->node = n; |
216 BitVector bi = createBitVector(tg.stateBegin); | 216 BitVector bi = createBitVector(n->stateNum); |
217 s->bitState = bi; | 217 s->bitState = bi; |
218 s->cc = NULL; | 218 s->cc = NULL; |
219 return s; | |
219 } | 220 } |
220 | 221 |
221 /** | 222 /** |
222 正規表現に必要な状態を探して、それぞれに番号を割り振る | 223 正規表現に必要な状態を探して、それぞれに番号を割り振る |
223 前が * でない + は新しく状態を作る | 224 前が * でない + は新しく状態を作る |
271 tgRight.asterisk = false; | 272 tgRight.asterisk = false; |
272 tgRight = generateTransition(n->right,tgRight); | 273 tgRight = generateTransition(n->right,tgRight); |
273 tgRight.asterisk = true; | 274 tgRight.asterisk = true; |
274 return tgRight; | 275 return tgRight; |
275 } | 276 } |
276 StatePtr left = tg.state; | 277 node::StatePtr left = tg.tgState; |
277 tg.state = n->left->state; | 278 tg.tgState = n->left->state; |
278 tg.tg.stateArray[tg.state->bitState.bitContainer] = tg.state; | 279 // tg.tg->stateArray[tg.tgState->bitState.bitContainer] = tg.tgState; |
279 TGValue tgLeft = generateTransition(n->left,tg); | 280 TGValue tgLeft = generateTransition(n->left,tg); |
280 tg.state = left; | 281 tg.tgState = left; |
281 TGValue tgv1 = generateTransition(n->right,tgLeft); | 282 TGValue tgv1 = generateTransition(n->right,tgLeft); |
282 return tgv1; | 283 return tgv1; |
283 } else if (n->tokenType == '|') { | 284 } else if (n->tokenType == '|') { |
284 TGValue tgv = generateTransition(n->left,tg); | 285 TGValue tgv = generateTransition(n->left,tg); |
285 TGValue tgv1 = generateTransition(n->right,tgv); | 286 TGValue tgv1 = generateTransition(n->right,tgv); |
286 return tgv1; | 287 return tgv1; |
287 } else if (n->tokenType == '*') { | 288 } else if (n->tokenType == '*') { |
288 tgAstah = generateTransition(n->left,tgAstah); | 289 TGValue tgAstah = generateTransition(n->left,tg); |
289 tgAstah.asterisk = true; | 290 tgAstah.asterisk = true; |
290 return tgAstah; | 291 return tgAstah; |
291 } else if (n->tokenType == 'c' || n->tokenType == 'a'){ | 292 } else if (n->tokenType == 'c' || n->tokenType == 'a'){ |
292 TGValue tgv = tg; | 293 TGValue tgv = tg; |
293 tgv.asterisk = false; | 294 tgv.asterisk = false; |
294 BitVector bi = createBitVector(n->nextStateNum); | 295 BitVector bi = createBitVector(n->nextStateNum); |
295 setState(n->cc,bi); | 296 setState(n->cc,bi); |
296 tgv.state->cc = mergeTransition(tgv.state,n->cc); | 297 tgv.tgState->cc = mergeTransition(tgv.tgState,n->cc); |
297 return tgv; | 298 return tgv; |
298 } else { | 299 } else { |
299 return tg; | 300 return tg; |
300 } | |
301 } | |
302 | |
303 void printTransitionList(TransitionPtr ts) { | |
304 for (;ts;ts = ts->next) { | |
305 printf("\n"); | |
306 } | 301 } |
307 } | 302 } |
308 | 303 |
309 TransitionGeneratorPtr createTransitionGenerator() { | 304 TransitionGeneratorPtr createTransitionGenerator() { |
310 TransitionGeneratorPtr tg = NEW(TransitionGenerator); | 305 TransitionGeneratorPtr tg = NEW(TransitionGenerator); |
311 tg->stateMax = 0; | 306 tg->stateMax = 0; |
312 tg->stack = NULL; | 307 tg->stack = NULL; |
313 tg->state = NEW(State); | 308 tg->state = NEW(node::State); |
314 tg->stateArray = NULL; | 309 tg->stateArray = NULL; |
315 tg->currentState = NULL; | 310 tg->currentState = NULL; |
316 return tg; | 311 return tg; |
317 } | 312 } |
318 | 313 |
319 TransitionGenerator generateTransitionList(NodePtr n) { | 314 TransitionGeneratorPtr generateTransitionList(NodePtr n) { |
320 TransitionGeneratorPtr tg = createTransitionGenerator(); | 315 TransitionGeneratorPtr tg = createTransitionGenerator(); |
321 TGValue tgv; | 316 TGValue tgv; |
322 tgv.asterisk = false; | 317 tgv.asterisk = false; |
323 tgv.tg = tg; | 318 tgv.tg = tg; |
324 StatePtr start = createState(tgv,n); | 319 node::StatePtr start = createState(tgv,n); |
325 NodePtr eof = createNode(NULL,'e',NULL,NULL,NULL); | 320 NodePtr eof = createNode(NULL,'e',NULL,NULL,NULL); |
326 StatePtr end = createState(tgv,eof); | 321 node::StatePtr end = createState(tgv,eof); |
327 tgv.stateBegin = 0; | 322 tgv.stateBegin = 0; |
328 tgv.stateEnd = 1; | 323 tgv.stateEnd = 1; |
329 stateAllocate(n,tgv); | 324 stateAllocate(n,tgv); |
330 tgv.tg->stateMax = tg.stateNum; | 325 tgv.tg->stateMax = tg->stateMax; |
331 tgv.tg.stateArray = (StatePtr)calloc(tg.stateNum,sizeof(StatePtr)); | 326 tgv.tg->stateArray = (node::StatePtr)calloc(tg->stateMax,sizeof(node::StatePtr)); |
332 generateTransition(n,tgv); | 327 generateTransition(n,tgv); |
333 printTransitionList(tg.ts); | |
334 return tg; | 328 return tg; |
335 } | 329 } |