changeset 301:4cb6eea3ab12

add CbC version
author Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
date Thu, 04 Feb 2016 03:26:18 +0900
parents 3e78631a6222
children 27414e6fb33c
files regexParser/Makefile regexParser/generateSequentialSearchCbC.cc regexParser/sequentialSearchCbC.cc
diffstat 3 files changed, 100 insertions(+), 8 deletions(-) [+]
line wrap: on
line diff
--- 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'
--- /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 <stdio.h>
+#include <stdlib.h>
+
+#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);
+}
--- /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 <stdio.h>
+#include <string.h>
+#include <unistd.h>
+#include <fcntl.h>
+#include <sys/stat.h>
+#include <sys/mman.h>
+
+#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 */