# HG changeset patch # User Masataka Kohagura # Date 1453880262 -32400 # Node ID 292753bb31e475943c8bd0f21ff5b7393490857f # Parent 157f6886ba55c3ec5173c78c0858718fe26dc0b0 fix Makefile diff -r 157f6886ba55 -r 292753bb31e4 regexParser/Makefile --- a/regexParser/Makefile Tue Jan 26 19:32:18 2016 +0900 +++ b/regexParser/Makefile Wed Jan 27 16:37:42 2016 +0900 @@ -42,6 +42,9 @@ .SUFFIXES: .cc .o +tSearch: regexParser + ./regexParser -seq -subset -regex '[A-Z][A-Za-z0-9_]*' -file main.cc -ts + test1: regexParser ./regexParser -regex 'a' ./regexParser -regex 'ab' diff -r 157f6886ba55 -r 292753bb31e4 regexParser/threadedSearch.cc --- a/regexParser/threadedSearch.cc Tue Jan 26 19:32:18 2016 +0900 +++ b/regexParser/threadedSearch.cc Wed Jan 27 16:37:42 2016 +0900 @@ -9,13 +9,11 @@ void stateSkip(TSValue tsv) { tsv.buff.matchBegin = tsv.buff.buffptr; - tSearch(tsv); } void stateMatch(TSValue tsv) { - fwrite(tsv.buff.matchBegin,tsv.buff.buffptr-tsv.buff.matchBegin,1,stdout); + fwrite(tsv.buff.matchBegin,tsv.buff.buffptr-tsv.buff.matchBegin-1,1,stdout); puts("\n"); - stateSkip(tsv); } TStatePtr generateTState(StatePtr state) { @@ -23,8 +21,10 @@ int ccvSize = 0; CharClassWalkerPtr ccw = createCharClassWalker(state->cc); while (hasNext(ccw)) { + getNext(ccw); ccvSize++; } + tState->ccvSize = ccvSize; if (ccvSize == 0) return tState; else tState->ccv = (ccv*)malloc(sizeof(ccv)*ccvSize); ccw = createCharClassWalker(state->cc); @@ -41,6 +41,13 @@ ccv->w = cc->cond.w; } free(ccw); + if (state->accept) { + tState->stateSkip = stateMatch; + tState->stateMatch = stateSkip; + } else { + tState->stateSkip = stateSkip; + tState->stateMatch = stateMatch; + } return tState; } @@ -91,5 +98,5 @@ tsv.buff = buff; tsv.tg = tg; tsv.current = generateTState(tg->stateList); - stateSkip(tsv); + tSearch(tsv); }