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);
 }