# HG changeset patch # User Masataka Kohagura # Date 1452852695 -32400 # Node ID 8be58af605dad67e3ddc3527501507cfa08f9507 # Parent b4022ba23de54e7647b731c69ea9b5519bba58dc fix getNext() diff -r b4022ba23de5 -r 8be58af605da regexParser/Makefile --- a/regexParser/Makefile Fri Jan 15 17:53:11 2016 +0900 +++ b/regexParser/Makefile Fri Jan 15 19:11:35 2016 +0900 @@ -3,10 +3,12 @@ CC= clang++ SRCS_TMP = $(wildcard *.cc) -SRCS_EXCLUDE = +SRCS_EXCLUDE = sequentialSearch.cc SRCS = $(filter-out $(SRCS_EXCLUDE),$(SRCS_TMP)) OBJS = $(SRCS:.cc=.o) +REGEX = '[A-Z][A-Za-z0-9_]*' + .cc.o: $(CC) $(CFLAGS) -c $< -o $@ @@ -21,6 +23,11 @@ test/ccMerge: test/ccMerge.cc $(CC) $(CFLAGS) -I. $< subsetConstruction.cc regexParser.cc node.cc error.cc bitVector.cc -o $@ +sequentialSearch: sequentialSearch.cc regexParser + ./regexParser -subset -regex $(REGEX) + $(CC) $(CFLAGS) -I. sequentialSearch.cc -o $@ + + gcov: make CFLAGS="-Wall -O0 -g -coverage" make test1 @@ -30,6 +37,7 @@ clean: rm -f $(TARGET) $(OBJS) rm -f *~ \#* *.gcda *.gcno *.gcov state.cc + touch state.cc .SUFFIXES: .cc .o diff -r b4022ba23de5 -r 8be58af605da regexParser/generateSequentialSearch.cc --- a/regexParser/generateSequentialSearch.cc Fri Jan 15 17:53:11 2016 +0900 +++ b/regexParser/generateSequentialSearch.cc Fri Jan 15 19:11:35 2016 +0900 @@ -7,21 +7,8 @@ StatePtr state = tg->stateList; FILE *fp = fopen("state.cc","w"); for (;state;state = state->next) { - fprintf(fp,"void state%lx();\n",state->bitState.bitContainer); + fprintf(fp,"void state%lx(BufferList buff);\n",state->bitState.bitContainer); } - - fputs( -"void stateSkip(BufferList buff) {\n" -" buff.matchBegin = buff.buffptr;\n" -" state1(buff);\n" -"}\n" -"\n" -"void stateMatch(BufferList buff) {\n" -" fwrite(buff.matchBegin,buff.buffptr-buff.matchBegin,1,stdout);\n" -" puts(\"\\n\");\n" -" stateSkip(buff);\n" -"}\n" - ,fp); fputs("\n",fp); for (state = tg->stateList;state;state = state->next) { fprintf(fp,"void state%lx(BufferList buff) {\n",state->bitState.bitContainer); @@ -29,7 +16,7 @@ fputs(" stateMatch(buff);\n",fp); } else { // not Accept fputs(" if (buff.buffptr >= buff.buffend) return;\n",fp); - fputs(" unsigned char c = *buffptr++;\n",fp); + fputs(" unsigned char c = *buff.buffptr++;\n",fp); CharClassWalkerPtr ccw = createCharClassWalker(state->cc); bool flag = true; while (hasNext(ccw)) { @@ -39,13 +26,14 @@ BitVector bi = cc->nextState; if (flag) { flag = false; + fputs(" ",fp); } else { fputs(" else ",fp); } if (begin == end) { - fprintf(fp," if (c=='%c') state%lx(buff);\n",(unsigned char)begin, bi.bitContainer); + fprintf(fp,"if (c=='%c') state%lx(buff);\n",(unsigned char)begin, bi.bitContainer); } else { - fprintf(fp," if (c<'%c') stateSkip(buff);\n",(unsigned char)begin); + fprintf(fp,"if (c<'%c') stateSkip(buff);\n",(unsigned char)begin); fprintf(fp," else if (c<='%c') state%lx(buff);\n",(unsigned char)end, bi.bitContainer); } } diff -r b4022ba23de5 -r 8be58af605da regexParser/sequentialSearch.cc --- a/regexParser/sequentialSearch.cc Fri Jan 15 17:53:11 2016 +0900 +++ b/regexParser/sequentialSearch.cc Fri Jan 15 19:11:35 2016 +0900 @@ -7,10 +7,10 @@ #include typedef struct bufferList { - unsigned char buff; - unsigned char buffptr; - unsigned char buffend; - unsigned char matchBegin; + unsigned char *buff; + unsigned char *buffptr; + unsigned char *buffend; + unsigned char *matchBegin; } BufferList, *BufferListPtr; typedef struct { @@ -18,6 +18,19 @@ off_t size; } st_mmap_t; +void state1(BufferList buff); + +void stateSkip(BufferList buff) { + buff.matchBegin = buff.buffptr; + state1(buff); +} + +void stateMatch(BufferList buff) { + fwrite(buff.matchBegin,buff.buffptr-buff.matchBegin,1,stdout); + puts("\n"); + stateSkip(buff); +} + #include "state.cc" int main(int argc, char **argv) { char *filename; @@ -32,14 +45,20 @@ struct stat sb; int fd; if ((fd=open(filename,O_RDONLY,0666))==0) { + perror(""); fprintf(stderr,"can't open %s\n",filename); } if (fstat(fd,&sb)) { + perror(""); fprintf(stderr,"can't fstat %s\n",filename); } st_mmap.size = sb.st_size; - unsigned char *file_mmap = mmap(NULL,st_mmap.size,PROT_WRITE|PROT_READ,map,fd,(off_t)0); + unsigned char *file_mmap = (unsigned char*)mmap(NULL,st_mmap.size,PROT_WRITE|PROT_READ,map,fd,(off_t)0); + if (file_mmap == NULL) { + perror(""); + fprintf(stderr,"cannot mmap %s\n",filename); + } BufferList buff; buff.buff = buff.buffptr = buff.matchBegin = file_mmap; diff -r b4022ba23de5 -r 8be58af605da regexParser/subsetConstruction.cc --- a/regexParser/subsetConstruction.cc Fri Jan 15 17:53:11 2016 +0900 +++ b/regexParser/subsetConstruction.cc Fri Jan 15 19:11:35 2016 +0900 @@ -159,7 +159,6 @@ return current; } } - walk->next = NULL; return current; }