# HG changeset patch # User Masataka Kohagura # Date 1453280719 -32400 # Node ID f5931151d70c5c31d031933689dbb68108e7ab90 # Parent 5d66672e502990d81cd63d715997cf3095c61a6f add accept flag diff -r 5d66672e5029 -r f5931151d70c regexParser/regexParser.h --- a/regexParser/regexParser.h Wed Jan 20 08:58:35 2016 +0900 +++ b/regexParser/regexParser.h Wed Jan 20 18:05:19 2016 +0900 @@ -39,6 +39,7 @@ int stateNum; BitVector bitState; CharClassPtr cc; + bool accept; struct node *node; struct state *next; } State, *StatePtr; diff -r 5d66672e5029 -r f5931151d70c regexParser/subsetConstruction.cc --- a/regexParser/subsetConstruction.cc Wed Jan 20 08:58:35 2016 +0900 +++ b/regexParser/subsetConstruction.cc Wed Jan 20 18:05:19 2016 +0900 @@ -204,6 +204,7 @@ s->node = n; BitVector bi = createBitVector(n->stateNum); s->bitState = bi; + s->accept = false; tgv.tg->totalStateCount++; s->cc = n->cc; return s; @@ -251,6 +252,7 @@ } else if (n->tokenType == '*') { TGValue tgvAstah = tgv; tgvAstah.endState = tgvAstah.startState; + if (pass==2) tgvAstah.endState->accept = tgv.endState->accept; tgvAstah = generateTransition(n->left,tgvAstah,pass); tgvAstah.asterisk = tgvAstah.startState; return tgvAstah; @@ -264,6 +266,7 @@ n->nextStateNum = nextState; n->nextState = tgv.endState; BitVector bi = createBitVector(nextState); + if (n->nextState->accept) bi = bitSet(bi,1); setState(n->cc,bi); tgv1.startState->cc = mergeTransition(tgv1.startState,n->cc); } @@ -296,6 +299,7 @@ StatePtr startState = tgv.startState = createState(tgv,n); NodePtr eof = createNode(NULL,'e',NULL,NULL,NULL); StatePtr endState = tgv.endState = createState(tgv,eof); + endState->accept = true; tgv.startState = startState; tgv.endState = endState; tgv = generateTransition(n,tgv,1);