# HG changeset patch # User mir3636 # Date 1464351669 -32400 # Node ID 879dc5d1cb6ac4011e73dd1f5c25daec7fd42204 # Parent 672c1be4eec7690e83404f9c79af1e517f49f2f5 fix diff -r 672c1be4eec7 -r 879dc5d1cb6a regexParser/Makefile --- 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) diff -r 672c1be4eec7 -r 879dc5d1cb6a regexParser/generateSequentialSearch.cc --- 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); } diff -r 672c1be4eec7 -r 879dc5d1cb6a regexParser/sequentialSearch.cc --- 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;