Mercurial > hg > Applications > Grep
diff regexParser/threadedSearch.cc @ 288:f2491681914e
special state for start search
author | Shinji KONO <kono@ie.u-ryukyu.ac.jp> |
---|---|
date | Mon, 01 Feb 2016 01:35:12 +0900 |
parents | 555ca452f031 |
children | 868f01f1ba8e |
line wrap: on
line diff
--- a/regexParser/threadedSearch.cc Sun Jan 31 22:59:59 2016 +0900 +++ b/regexParser/threadedSearch.cc Mon Feb 01 01:35:12 2016 +0900 @@ -12,7 +12,7 @@ static TSValue stateSkip(TSValue tsv) { - tsv.current = tsv.tg->stateList->tState; + tsv.current = tsv.tg->stateStart->tState; tsv.buff.matchBegin = tsv.buff.buffptr; return tsv; } @@ -21,7 +21,6 @@ TSValue stateMatch(TSValue tsv) { fwrite(tsv.buff.matchBegin,tsv.buff.buffptr-tsv.buff.matchBegin-1,1,stdout); puts(""); - tsv.current = tsv.tg->stateList->tState; tsv.buff.buffptr--; tsv = stateSkip(tsv); return tsv; @@ -37,7 +36,7 @@ ccvSize++; } tState->ccvSize = ccvSize; - if (state->accept) { + if (state->accept && state != tg->stateList ) { tState->stateSkip = tg->stateMatch; tState->stateContinue = tg->stateNothing; } else { @@ -123,5 +122,10 @@ tsv.tg->stateMatch = stateMatch; tsv.tg->stateNothing = stateNothing; tsv.current = generateTState(tg->stateList,tg); + tg->stateStart = NEW(State); + *tg->stateStart = *tg->stateList; + tg->stateStart->accept = false; // Start state never accept + generateTState(tg->stateStart,tg); + tSearch(tsv); }