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