Mercurial > hg > Applications > Grep
comparison regexParser/subsetConstraction.cc @ 214:a94f57af1600
remove allocateCCstate createCCState
author | Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp> |
---|---|
date | Mon, 28 Dec 2015 20:32:36 +0900 |
parents | 11b6332f0a42 |
children | 63e9224c7b2b |
comparison
equal
deleted
inserted
replaced
213:11b6332f0a42 | 214:a94f57af1600 |
---|---|
193 /** | 193 /** |
194 作成する state を linked list | 194 作成する state を linked list |
195 bitvector を index とした配列に BitVectorPtr を格納 | 195 bitvector を index とした配列に BitVectorPtr を格納 |
196 state に対応する NodePtr を | 196 state に対応する NodePtr を |
197 */ | 197 */ |
198 StatePtr createCCState(CharClassPtr cc,TGValue tgv) { | |
199 StatePtr s = NEW(State); | |
200 s->stateNum = cc->stateNum = ++tgv.tg->totalStateCount; | |
201 s->next = tgv.tg->stateList; | |
202 tgv.tg->stateList = s; | |
203 BitVector bi = createBitVector(cc->stateNum); | |
204 s->bitState = bi; | |
205 s->cc = cc; | |
206 return s; | |
207 } | |
208 | |
209 CharClassPtr allocateCCState(CharClassPtr cc, TGValue tgv) { | |
210 if (cc->left) { | |
211 allocateCCState(cc->left,tgv); | |
212 } | |
213 cc->state = createCCState(cc,tgv); | |
214 if (cc->right) { | |
215 allocateCCState(cc->right,tgv); | |
216 } | |
217 return cc; | |
218 } | |
219 | |
220 StatePtr createState(TGValue tgv,NodePtr n) { | 198 StatePtr createState(TGValue tgv,NodePtr n) { |
221 StatePtr s = NEW(State); | 199 StatePtr s = NEW(State); |
222 s->stateNum = n->stateNum = tgv.tg->totalStateCount; | 200 s->stateNum = n->stateNum = tgv.tg->totalStateCount; |
223 s->next = tgv.tg->stateList; | 201 s->next = tgv.tg->stateList; |
224 tgv.tg->stateList = s; | 202 tgv.tg->stateList = s; |
225 s->node = n; | 203 s->node = n; |
226 BitVector bi = createBitVector(n->stateNum); | 204 BitVector bi = createBitVector(n->stateNum); |
227 s->bitState = bi; | 205 s->bitState = bi; |
228 if (n->cc) { | 206 tgv.tg->totalStateCount++; |
229 allocateCCState(n->cc,tgv); | |
230 } else { | |
231 tgv.tg->totalStateCount++; | |
232 } | |
233 s->cc = n->cc; | 207 s->cc = n->cc; |
234 return s; | 208 return s; |
235 } | 209 } |
236 | 210 |
237 /** | 211 /** |
250 return tgvRight; | 224 return tgvRight; |
251 } | 225 } |
252 TGValue tgvRight = tgvLeft; | 226 TGValue tgvRight = tgvLeft; |
253 n->right->state = createState(tgvRight,n->right); | 227 n->right->state = createState(tgvRight,n->right); |
254 tgvRight.startState = n->right->state; | 228 tgvRight.startState = n->right->state; |
255 stateAllocate(n->right,tgvRight); | 229 tgvRight.asterisk = false; |
256 return tgvLeft; | 230 tgvRight = stateAllocate(n->right,tgvRight); |
231 return tgvRight; | |
257 } else if (n->tokenType == '|') { | 232 } else if (n->tokenType == '|') { |
258 TGValue tgv1 = stateAllocate(n->left,tgv); | 233 TGValue tgv1 = stateAllocate(n->left,tgv); |
259 TGValue tgv2 = stateAllocate(n->right,tgv1); | 234 TGValue tgv2 = stateAllocate(n->right,tgv1); |
260 return tgv2; | 235 return tgv2; |
261 } else if (n->tokenType == '*') { | 236 } else if (n->tokenType == '*') { |
290 tgvRight.asterisk = false; | 265 tgvRight.asterisk = false; |
291 tgvRight = generateTransition(n->right,tgvRight); | 266 tgvRight = generateTransition(n->right,tgvRight); |
292 tgvRight.asterisk = true; | 267 tgvRight.asterisk = true; |
293 return tgvRight; | 268 return tgvRight; |
294 } | 269 } |
270 TGValue tgvRight = tgvLeft; | |
295 StatePtr left = tgvLeft.startState; | 271 StatePtr left = tgvLeft.startState; |
296 tgvLeft.startState = n->right->state; | 272 tgvLeft.startState = n->right->state; |
297 tgvLeft.tg->stateArray[tgvLeft.startState->bitState.bitContainer] = left; | 273 tgvLeft.tg->stateArray[tgvLeft.startState->bitState.bitContainer] = left; |
298 TGValue tgv1 = generateTransition(n->right,tgvLeft); | 274 tgvRight.asterisk = false; |
299 tgv1.startState = left; | 275 tgvRight = generateTransition(n->right,tgvRight); |
300 return tgv1; | 276 return tgvRight; |
301 } else if (n->tokenType == '|') { | 277 } else if (n->tokenType == '|') { |
302 TGValue tgv1 = generateTransition(n->left,tgv); | 278 TGValue tgv1 = generateTransition(n->left,tgv); |
303 TGValue tgv2 = generateTransition(n->right,tgv1); | 279 TGValue tgv2 = generateTransition(n->right,tgv1); |
304 return tgv2; | 280 return tgv2; |
305 } else if (n->tokenType == '*') { | 281 } else if (n->tokenType == '*') { |