Mercurial > hg > Applications > Grep
comparison 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 |
comparison
equal
deleted
inserted
replaced
287:2f3e7bba038e | 288:f2491681914e |
---|---|
10 return tsv; | 10 return tsv; |
11 } | 11 } |
12 | 12 |
13 static | 13 static |
14 TSValue stateSkip(TSValue tsv) { | 14 TSValue stateSkip(TSValue tsv) { |
15 tsv.current = tsv.tg->stateList->tState; | 15 tsv.current = tsv.tg->stateStart->tState; |
16 tsv.buff.matchBegin = tsv.buff.buffptr; | 16 tsv.buff.matchBegin = tsv.buff.buffptr; |
17 return tsv; | 17 return tsv; |
18 } | 18 } |
19 | 19 |
20 static | 20 static |
21 TSValue stateMatch(TSValue tsv) { | 21 TSValue stateMatch(TSValue tsv) { |
22 fwrite(tsv.buff.matchBegin,tsv.buff.buffptr-tsv.buff.matchBegin-1,1,stdout); | 22 fwrite(tsv.buff.matchBegin,tsv.buff.buffptr-tsv.buff.matchBegin-1,1,stdout); |
23 puts(""); | 23 puts(""); |
24 tsv.current = tsv.tg->stateList->tState; | |
25 tsv.buff.buffptr--; | 24 tsv.buff.buffptr--; |
26 tsv = stateSkip(tsv); | 25 tsv = stateSkip(tsv); |
27 return tsv; | 26 return tsv; |
28 } | 27 } |
29 | 28 |
35 while (hasNext(ccw)) { | 34 while (hasNext(ccw)) { |
36 getNext(ccw); | 35 getNext(ccw); |
37 ccvSize++; | 36 ccvSize++; |
38 } | 37 } |
39 tState->ccvSize = ccvSize; | 38 tState->ccvSize = ccvSize; |
40 if (state->accept) { | 39 if (state->accept && state != tg->stateList ) { |
41 tState->stateSkip = tg->stateMatch; | 40 tState->stateSkip = tg->stateMatch; |
42 tState->stateContinue = tg->stateNothing; | 41 tState->stateContinue = tg->stateNothing; |
43 } else { | 42 } else { |
44 tState->stateSkip = tg->stateSkip; | 43 tState->stateSkip = tg->stateSkip; |
45 tState->stateContinue = tg->stateNothing; | 44 tState->stateContinue = tg->stateNothing; |
121 tsv.result = NULL; | 120 tsv.result = NULL; |
122 tsv.tg->stateSkip = stateSkip; | 121 tsv.tg->stateSkip = stateSkip; |
123 tsv.tg->stateMatch = stateMatch; | 122 tsv.tg->stateMatch = stateMatch; |
124 tsv.tg->stateNothing = stateNothing; | 123 tsv.tg->stateNothing = stateNothing; |
125 tsv.current = generateTState(tg->stateList,tg); | 124 tsv.current = generateTState(tg->stateList,tg); |
125 tg->stateStart = NEW(State); | |
126 *tg->stateStart = *tg->stateList; | |
127 tg->stateStart->accept = false; // Start state never accept | |
128 generateTState(tg->stateStart,tg); | |
129 | |
126 tSearch(tsv); | 130 tSearch(tsv); |
127 } | 131 } |