Mercurial > hg > Applications > Grep
diff 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 |
line wrap: on
line diff
--- a/regexParser/subsetConstraction.cc Mon Dec 28 15:43:27 2015 +0900 +++ b/regexParser/subsetConstraction.cc Mon Dec 28 16:42:02 2015 +0900 @@ -195,6 +195,28 @@ bitvector を index とした配列に BitVectorPtr を格納 state に対応する NodePtr を */ +StatePtr createCCState(CharClassPtr cc,TGValue tgv) { + StatePtr s = NEW(State); + s->stateNum = cc->stateNum = ++tgv.tg->totalStateCount; + s->next = tgv.tg->stateList; + tgv.tg->stateList = s; + BitVector bi = createBitVector(cc->stateNum); + s->bitState = bi; + s->cc = cc; + return s; +} + +CharClassPtr allocateCCState(CharClassPtr cc, TGValue tgv) { + if (cc->left != NULL) { + allocateCCState(cc->left,tgv); + } + cc->state = createCCState(cc,tgv); + if (cc->right != NULL) { + allocateCCState(cc->right,tgv); + } + return cc; +} + StatePtr createState(TGValue tgv,NodePtr n) { StatePtr s = NEW(State); s->stateNum = n->stateNum = ++tgv.tg->totalStateCount; @@ -203,6 +225,9 @@ s->node = n; BitVector bi = createBitVector(n->stateNum); s->bitState = bi; + if (n->cc) { + CharClassPtr cc = allocateCCState(n->cc,tgv); + } s->cc = n->cc; return s; }