Mercurial > hg > Applications > Grep
diff regexParser/subsetConstraction.cc @ 190:3e8e5780ad4a pairPro
change node::State to State
author | Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp> |
---|---|
date | Fri, 25 Dec 2015 15:30:52 +0900 |
parents | fccf7941ecc2 |
children | 02031fb73af8 |
line wrap: on
line diff
--- a/regexParser/subsetConstraction.cc Fri Dec 25 14:42:31 2015 +0900 +++ b/regexParser/subsetConstraction.cc Fri Dec 25 15:30:52 2015 +0900 @@ -2,6 +2,7 @@ #include <stdlib.h> #include <ctype.h> #include "subsetConstraction.h" +#include "node.h" CharClassPtr createCharClassWord(unsigned char *w, CharClassPtr cc1, CharClassPtr cc2) { CharClassPtr cc = NEW(CharClass); @@ -186,7 +187,7 @@ } } -CharClassPtr mergeTransition(node::StatePtr x,CharClassPtr y) { +CharClassPtr mergeTransition(StatePtr x,CharClassPtr y) { if (x->cc == NULL) { return y; } @@ -208,8 +209,8 @@ bitvector を index とした配列に BitVectorPtr を格納 state に対応する NodePtr を */ -node::StatePtr createState(TGValue tg,NodePtr n) { - node::StatePtr s = NEW(node::State); +StatePtr createState(TGValue tg,NodePtr n) { + StatePtr s = NEW(State); s->next = tg.tg->currentState; tg.tg->currentState = s; s->node = n; @@ -273,7 +274,7 @@ tgRight.asterisk = true; return tgRight; } - node::StatePtr left = tg.tgState; + StatePtr left = tg.tgState; tg.tgState = n->left->state; // tg.tg->stateArray[tg.tgState->bitState.bitContainer] = tg.tgState; TGValue tgLeft = generateTransition(n->left,tg); @@ -304,7 +305,7 @@ TransitionGeneratorPtr tg = NEW(TransitionGenerator); tg->stateMax = 0; tg->stack = NULL; - tg->state = NEW(node::State); + tg->state = NEW(State); tg->stateArray = NULL; tg->currentState = NULL; return tg; @@ -322,7 +323,26 @@ tgv.stateEnd = 1; stateAllocate(n,tgv); tgv.tg->stateMax = tg->stateMax; - tgv.tg->stateArray = (node::StatePtr)calloc(tg->stateMax,sizeof(node::StatePtr)); + BitVector bi = createBitVector(tg->stateMax); + tgv.tg->stateArray = (StatePtr)calloc(bi.bitContainer*2,sizeof(StatePtr)); generateTransition(n,tgv); return tg; } + +void printState(StatePtr state) { + printf("state : %lx\n",state->bitState.bitContainer); + long nodeNumber = 0; + if (state->node) { + printf("node : %c %d -> %d\n",state->node->tokenType,state->node->stateNum,state->node->nextStateNum); + nodeNumber = state->node->stateNum; + } + printCharacterClass(state->cc,nodeNumber,4); +} + +void printState(TransitionGeneratorPtr tg) { + StatePtr state = tg->currentState; + for (;state;state = state->next) { + printState(state); + putchar('\n'); + } +}