Mercurial > hg > Applications > Grep
comparison regexParser/subsetConstraction.cc @ 212:b0ae5273925c
implement allocateCCState()
author | Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp> |
---|---|
date | Mon, 28 Dec 2015 16:42:02 +0900 |
parents | bc596e357a52 |
children | 11b6332f0a42 |
comparison
equal
deleted
inserted
replaced
211:bc596e357a52 | 212:b0ae5273925c |
---|---|
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 != NULL) { | |
211 allocateCCState(cc->left,tgv); | |
212 } | |
213 cc->state = createCCState(cc,tgv); | |
214 if (cc->right != NULL) { | |
215 allocateCCState(cc->right,tgv); | |
216 } | |
217 return cc; | |
218 } | |
219 | |
198 StatePtr createState(TGValue tgv,NodePtr n) { | 220 StatePtr createState(TGValue tgv,NodePtr n) { |
199 StatePtr s = NEW(State); | 221 StatePtr s = NEW(State); |
200 s->stateNum = n->stateNum = ++tgv.tg->totalStateCount; | 222 s->stateNum = n->stateNum = ++tgv.tg->totalStateCount; |
201 s->next = tgv.tg->stateList; | 223 s->next = tgv.tg->stateList; |
202 tgv.tg->stateList = s; | 224 tgv.tg->stateList = s; |
203 s->node = n; | 225 s->node = n; |
204 BitVector bi = createBitVector(n->stateNum); | 226 BitVector bi = createBitVector(n->stateNum); |
205 s->bitState = bi; | 227 s->bitState = bi; |
228 if (n->cc) { | |
229 CharClassPtr cc = allocateCCState(n->cc,tgv); | |
230 } | |
206 s->cc = n->cc; | 231 s->cc = n->cc; |
207 return s; | 232 return s; |
208 } | 233 } |
209 | 234 |
210 /** | 235 /** |