Mercurial > hg > Applications > Grep
diff regexParser/cerium/CeriumMain.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/cerium/CeriumMain.cc Sun Jan 31 22:59:59 2016 +0900 +++ b/regexParser/cerium/CeriumMain.cc Mon Feb 01 01:35:12 2016 +0900 @@ -29,7 +29,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; } @@ -43,7 +43,6 @@ *tsv.resultEnd = r; r->next = NULL; tsv.resultEnd = &r->next; - tsv.current = tsv.tg->stateList->tState; tsv.buff.buffptr--; tsv = stateSkip(tsv); return tsv; @@ -63,7 +62,8 @@ return prev; } -void ceriumCreateAnyState(TransitionGeneratorPtr tg) { +void +ceriumCreateAnyState(TransitionGeneratorPtr tg) { tg->stateSkip = stateSkip; tg->stateMatch = stateMatch; tg->stateNothing = stateNothing; @@ -71,6 +71,10 @@ generateTState(tg->anyState,tg); // generateTState for startState. It is used in stateMatch. generateTState(tg->stateList,tg); + tg->stateStart = NEW(State); + *tg->stateStart = *tg->stateList; + tg->stateStart->accept = false; // Start state never accept + generateTState(tg->stateStart,tg); } int