# HG changeset patch # User Kaito Tokumori # Date 1454523978 -32400 # Node ID 4cb6eea3ab120414acfa02abf78eafdf2fa04b5c # Parent 3e78631a6222324f3cb88dd2c639484574d58195 add CbC version diff -r 3e78631a6222 -r 4cb6eea3ab12 regexParser/Makefile --- a/regexParser/Makefile Wed Feb 03 13:56:01 2016 +0900 +++ b/regexParser/Makefile Thu Feb 04 03:26:18 2016 +0900 @@ -1,12 +1,12 @@ -TARGET= regexParser test/ccMerge +TARGET= regexParser test/ccMerge regexParserCbC CFLAGS= -Wall -O0 -g -I$(CERIUM)/include/TaskManager -I. SEQCFLAGS= CFLAGS= -Wall -O -g -I$(CERIUM)/include/TaskManager -I. -CC= clang++ +CC= /Users/e105711/prog/seminar/CbC/llvmInst/bin/clang++ CERIUM= ../../Cerium AR= libCeriumGrep.a SRCS_TMP = $(wildcard *.cc) -SRCS_EXCLUDE = sequentialSearch.cc state.cc parallelSearch.cc taskInit.cc searchTask.cc main.cc +SRCS_EXCLUDE = sequentialSearch.cc state.cc parallelSearch.cc taskInit.cc searchTask.cc main.cc stateCbC.cc sequentialSearchCbC.cc generateSequentialSearchCbC.cc sequentialSearch.cc generateSequentialSearch.cc SRCS = $(filter-out $(SRCS_EXCLUDE),$(SRCS_TMP)) OBJS = $(SRCS:.cc=.o) @@ -25,8 +25,11 @@ all: $(TARGET) -regexParser: $(OBJS) main.o - $(CC) $(CFLAGS) -o $@ $(OBJS) main.o +regexParser: $(OBJS) main.o sequentialSearch.o generateSequentialSearch.o + $(CC) $(CFLAGS) -o $@ $(OBJS) main.o generateSequentialSearch.o + +regexParserCbC: $(OBJS) main.o sequentialSearchCbC.o generateSequentialSearchCbC.o + $(CC) $(CFLAGS) -o $@ $(OBJS) main.o generateSequentialSearchCbC.o test/searchBit: test/searchBit.cc $(CC) $(CFLAGS) $< bitVector.cc -o $@ @@ -51,10 +54,10 @@ clean: rm -f $(TARGET) $(OBJS) $(AR) - rm -rf *~ \#* *.gcda *.gcno *.gcov state.cc sequentialSearch *.dSYM + rm -rf *~ \#* *.gcda *.gcno *.gcov state.cc sequentialSearch *.dSYM *.o stateCbC.cc sequentialSearchCbC cd test; rm -rf *.o *~ \#* *.gcda *.gcno *.gcov *.dSYM cd cerium; make clean - touch state.cc + touch state.cc stateCbC.cc .SUFFIXES: .cc .o @@ -76,9 +79,14 @@ sequentialSearch: sequentialSearch.cc regexParser fileread.o ./regexParser -seq -subset -regex $(REGEX) $(CC) $(CFLAGS) -c sequentialSearch.cc - $(CC) $(SEQDFLAGS) sequentialSearch.o $(OBJS) -o $@ + $(CC) $(SEQDFLAGS) sequentialSearch.o generateSequentialSearch.o $(OBJS) -o $@ - ./$@ -file $(TESTFILE) +sequentialSearchCbC: sequentialSearchCbC.cc regexParserCbC fileread.o + ./regexParserCbC -seq -subset -regex $(REGEX) + $(CC) $(CFLAGS) -c sequentialSearchCbC.cc + $(CC) $(SEQDFLAGS) sequentialSearchCbC.o generateSequentialSearchCbC.o $(OBJS) -o $@ + - ./$@ -file $(TESTFILE) test1: regexParser ./regexParser -regex 'a' diff -r 3e78631a6222 -r 4cb6eea3ab12 regexParser/generateSequentialSearchCbC.cc --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/regexParser/generateSequentialSearchCbC.cc Thu Feb 04 03:26:18 2016 +0900 @@ -0,0 +1,53 @@ +#include +#include + +#include "generateSequentialSearch.h" +#include "subsetConstruction.h" + +void +generateState1(StatePtr state,long stateNum, bool accept, FILE *fp, TransitionGeneratorPtr tg) { + fprintf(fp,"__code state%lx(TSValue tsv) {\n",stateNum); + if (accept && state->accept) { + fputs(" tsv=tsv.tg->stateMatch(tsv);\n",fp); + } + fputs(" if (tsv.buff.buffptr >= tsv.buff.buffend) _exit(0);\n",fp); + CharClassWalkerPtr ccw = createCharClassWalker(state->cc); + if (hasNext(ccw)) fputs(" unsigned char c = *tsv.buff.buffptr++;\n",fp); + fputs(" if (0) ;\n",fp); + while (hasNext(ccw)) { + CharClassPtr cc = getNext(ccw); + unsigned long begin = cc->cond.range.begin; + unsigned long end = cc->cond.range.end; + BitVector bi = cc->nextState; + if (begin == end) { + fprintf(fp," else if (c=='%c') { goto state%lx(tsv);}\n",(unsigned char)begin, bi.bitContainer); + } else { + fprintf(fp," else if (c<'%c') { tsv=tsv.tg->stateSkip(tsv);goto state0(tsv);}\n",(unsigned char)begin); + fprintf(fp," else if (c<='%c') { goto state%lx(tsv);} \n",(unsigned char)end, bi.bitContainer); + } + } + free(ccw); + fprintf(fp," else { tsv=tsv.tg->stateSkip(tsv); goto state0(tsv);}\n"); + fputs("}\n\n",fp); +} + +void +exportState(TransitionGeneratorPtr tg) { + StatePtr state = tg->stateList; + FILE *fp = fopen("stateCbC.cc","w"); + if (fp==NULL) { + perror(""); + fprintf(stderr,"cannot write stateCbC.cc\n"); + exit(1); + } + for (;state;state = state->next) { + fprintf(fp,"__code state%lx(TSValue tsv);\n",state->bitState.bitContainer); + } + fputs("\n",fp); + // initial state must not accept empty string + generateState1(tg->stateList,0L,false,fp,tg); + for (state = tg->stateList;state;state = state->next) { + generateState1(state,state->bitState.bitContainer,true,fp,tg); + } + fclose(fp); +} diff -r 3e78631a6222 -r 4cb6eea3ab12 regexParser/sequentialSearchCbC.cc --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/regexParser/sequentialSearchCbC.cc Thu Feb 04 03:26:18 2016 +0900 @@ -0,0 +1,31 @@ +#include +#include +#include +#include +#include +#include + +#include "fileread.h" +#include "threadedSearch.h" + +__code state0(TSValue ts); + +#include "stateCbC.cc" +int main(int argc, char **argv) { + char *filename; + for (int i = 1; i < argc; i++) { + if (strcmp(argv[i],"-file") == 0) { + filename = argv[i+1]; i++; + } + } + + int fd = 0; + st_mmap_t st_mmap = createSt_mmap(filename,fd); + Buffer buff = createBuffer(st_mmap); + TSValue tsv = createTSValue(NULL,buff); + close(fd); + goto state0(tsv); + return 0; +} + +/* end */