# HG changeset patch # User Masataka Kohagura # Date 1450783646 -32400 # Node ID 3be0fbcd4b523dd624b9b700f3f583a508348ba6 # Parent b9e913030a47b1c34c4c97fc36d328744dbb2358 implement createTransitionGenerator diff -r b9e913030a47 -r 3be0fbcd4b52 regexParser/regexParser.cc --- a/regexParser/regexParser.cc Tue Dec 22 18:48:11 2015 +0900 +++ b/regexParser/regexParser.cc Tue Dec 22 20:27:26 2015 +0900 @@ -37,7 +37,7 @@ n->nodeNumber = ri->nodeNumber; ri->nodeNumber++; } else { - n->nodeNumber = 0; + n->nodeNumber = SYNTAX_NODENUMBER; } return n; diff -r b9e913030a47 -r 3be0fbcd4b52 regexParser/regexParser.h --- a/regexParser/regexParser.h Tue Dec 22 18:48:11 2015 +0900 +++ b/regexParser/regexParser.h Tue Dec 22 20:27:26 2015 +0900 @@ -1,6 +1,7 @@ #include "error.h" #define NEW(type) (type*)malloc(sizeof(type)) +#define SYNTAX_NODENUMBER 100 typedef struct bitVector { unsigned long bitContainer; diff -r b9e913030a47 -r 3be0fbcd4b52 regexParser/subsetConstraction.cc --- a/regexParser/subsetConstraction.cc Tue Dec 22 18:48:11 2015 +0900 +++ b/regexParser/subsetConstraction.cc Tue Dec 22 20:27:26 2015 +0900 @@ -200,7 +200,7 @@ return tgv2; } else if (n->tokenType == 'a'){ TGValue tgv; - tgv.ts = (TransitionPtr)malloc(sizeof(Transition)); + tgv.ts = NEW(Transition); tgv.ts->condition = n->cc; bitSet(&tgv.ts->condition->nextState,n->nodeNumber); tg.ts = appendTransition(tg.ts,tgv.ts); @@ -217,9 +217,25 @@ } } -TransitionGenerator generateTransitionList(NodePtr n) { +TransitionGenerator createTransitionGenerator() { TransitionGenerator tg; tg.ts = NEW(Transition); + tg.state = NEW(State); + tg.transitionList = NEW(Transition); + BitVectorPtr initStateBi = NEW(BitVector); + bitSet(initStateBi,INIT_STATE_BIT); + tg.stateArray = createState(tg.stateArray,*initStateBi); + BitVectorPtr lastStateBi = NEW(BitVector); + bitSet(lastStateBi,END_STATE_BIT); + tg.stateArray = createState(tg.stateArray,*lastStateBi); + tg.stateArrayLast = NEW(State); + tg.currentState = NEW(State); + tg.nextState = NEW(State); + return tg; +} + +TransitionGenerator generateTransitionList(NodePtr n) { + TransitionGenerator tg = createTransitionGenerator(); generateTransition(n,tg); printTransitionList(tg.ts); return tg; diff -r b9e913030a47 -r 3be0fbcd4b52 regexParser/subsetConstraction.h --- a/regexParser/subsetConstraction.h Tue Dec 22 18:48:11 2015 +0900 +++ b/regexParser/subsetConstraction.h Tue Dec 22 20:27:26 2015 +0900 @@ -1,5 +1,6 @@ #include "transition.h" - +#define INIT_STATE_BIT 0 +#define END_STATE_BIT 63 typedef struct stateStack { BitVector state; struct stateStack *next; diff -r b9e913030a47 -r 3be0fbcd4b52 regexParser/transition.cc --- a/regexParser/transition.cc Tue Dec 22 18:48:11 2015 +0900 +++ b/regexParser/transition.cc Tue Dec 22 20:27:26 2015 +0900 @@ -1,8 +1,22 @@ #include #include "transition.h" +StatePtr createState(StatePtr state,BitVector bi) { + StatePtr s = state; + if (state != NULL) { + while (state->next) { + state = state->next; + } + } + state = NEW(State); + state->bitState = bi; + state->transition = NEW(Transition); + state->nextNode = NEW(Node); + return s; +} + TransitionPtr createTransition(CharClassPtr cc, BitVectorPtr state) { - TransitionPtr transition = (TransitionPtr)malloc(sizeof(Transition)); + TransitionPtr transition = NEW(Transition); transition->condition = cc; transition->condition->nextState = *state; return transition; diff -r b9e913030a47 -r 3be0fbcd4b52 regexParser/transition.h --- a/regexParser/transition.h Tue Dec 22 18:48:11 2015 +0900 +++ b/regexParser/transition.h Tue Dec 22 20:27:26 2015 +0900 @@ -6,11 +6,13 @@ } Transition, *TransitionPtr; typedef struct state { + BitVector bitState; TransitionPtr transition; NodePtr nextNode; struct state *next; } State, *StatePtr; +StatePtr createState(StatePtr state,BitVector bi); TransitionPtr createTransition(CharClassPtr cc, BitVectorPtr state); TransitionPtr appendTransition0(TransitionPtr curr,TransitionPtr next); TransitionPtr appendTransition(TransitionPtr curr,TransitionPtr next);