changeset 324:879dc5d1cb6a default tip

fix
author mir3636
date Fri, 27 May 2016 21:21:09 +0900
parents 672c1be4eec7
children
files regexParser/Makefile regexParser/generateSequentialSearch.cc regexParser/sequentialSearch.cc
diffstat 3 files changed, 29 insertions(+), 6 deletions(-) [+]
line wrap: on
line diff
--- a/regexParser/Makefile	Thu May 26 20:03:07 2016 +0900
+++ b/regexParser/Makefile	Fri May 27 21:21:09 2016 +0900
@@ -1,10 +1,10 @@
 TARGET= regexParser test/ccMerge 
-OPT= -O2 
+OPT= -g # -O2 
 CFLAGS= -Wall $(OPT) -g -I$(CERIUM)/include/TaskManager -I.
 SEQCFLAGS=  -Wall $(OPT) -g -I$(CERIUM)/include/TaskManager -I.
 CC= clang++
 CbC= /usr/local/Cellar/cbc/llvm3.8/bin/clang
-CERIUM= ../../Cerium
+CERIUM= ../../../Game/Cerium
 AR= libCeriumGrep.a
 
 SRCS_TMP = $(wildcard *.cc)
@@ -63,8 +63,8 @@
 tSearch: regexParser $(TESTFILE)
 	./regexParser $(SUBSET) -regex $(REGEX) -ts -file $(TESTFILE) $(WC)
 
-testParallel : parallelSearch $(TESTFILE)
-	./cerium/ceriumGrep $(SUBSET) -regex $(REGEX) -file $(TESTFILE) $(WC)
+testParallel : parallelSearch $(TESTFILE)  
+	./cerium/ceriumGrep $(SUBSET) -regex $(REGEX) -file $(TESTFILE) $(WC) 
 
 test2: regexParser $(TESTFILE)
 	./regexParser $(SUBSET) -regex $(REGEX) -file $(TESTFILE) $(WC)
--- a/regexParser/generateSequentialSearch.cc	Thu May 26 20:03:07 2016 +0900
+++ b/regexParser/generateSequentialSearch.cc	Fri May 27 21:21:09 2016 +0900
@@ -4,6 +4,18 @@
 #include "generateSequentialSearch.h"
 #include "CharClass.h"
 #include "subsetConstruction.h"
+#include "bmSearch.h"
+
+static void
+wordMatch(const char* cond,FILE* fp,unsigned long begin,CharClassPtr cc,BitVector bi) {
+    fprintf(fp,"    else if (c%s'%c') { \n",cond,(unsigned char)begin);
+    WordPtr w;
+    for (w = &cc->cond.w;w;w = w->next) {
+        // match the word.
+        fprintf(fp,"        if (strncmp(\"%s\",(const char *)tsv.buff.buffptr-1,%d)==0) { tsv.buff.buffptr += %d;return state%lx(tsv);}\n",(const char *)w->word,w->length,w->length - 1,bi.bitContainer);
+    }
+    fprintf(fp,"        tsv=tsv.tg->stateSkip(tsv);return state0(tsv);;\n        } \n");
+}
 
 static void
 generateState1(StatePtr state,long stateNum, bool accept, FILE *fp, TransitionGeneratorPtr tg) {
@@ -21,10 +33,18 @@
         unsigned long end = cc->cond.range.end;
         BitVector bi = cc->nextState;
         if (begin == end) {
-            fprintf(fp,"    else if (c=='%c') { return state%lx(tsv);}\n",(unsigned char)begin, bi.bitContainer);
+            if (cc->cond.w.word) {
+                wordMatch("==",fp,begin,cc,bi); 
+            } else {
+                fprintf(fp,"    else if (c=='%c') { return state%lx(tsv);}\n",(unsigned char)begin, bi.bitContainer);
+            }
         } else {
             fprintf(fp,"    else if (c<'%c')  { tsv=tsv.tg->stateSkip(tsv);return state0(tsv);}\n",(unsigned char)begin);
-            fprintf(fp,"    else if (c<='%c') { return state%lx(tsv);} \n",(unsigned char)end,  bi.bitContainer);
+            if (cc->cond.w.word) {
+                wordMatch("<=",fp,begin,cc,bi); 
+            } else {
+                fprintf(fp,"    else if (c<='%c') { return state%lx(tsv);} \n",(unsigned char)end,  bi.bitContainer);
+            }
         }
     }
     free(ccw);
@@ -52,6 +72,8 @@
         if (state->bitState.bitContainer!=1)  // state1 always unused but state0
             generateState1(state,state->bitState.bitContainer,true,fp,tg);
     }
+    checkBMSearch(tg->stateStart->cc);
+    tsv.current = generateTState(tg->stateStart,tg);
     fclose(fp);
 }
 
--- a/regexParser/sequentialSearch.cc	Thu May 26 20:03:07 2016 +0900
+++ b/regexParser/sequentialSearch.cc	Fri May 27 21:21:09 2016 +0900
@@ -21,6 +21,7 @@
     st_mmap_t st_mmap = createSt_mmap(filename,fd);
     Buffer buff = createBuffer(st_mmap);
     TSValue tsv = createTSValue(NULL,buff);
+    tsv.current = initialTstate;
     tsv = state0(tsv);
     close(fd);
     return 0;