# HG changeset patch # User Masataka Kohagura # Date 1451027282 -32400 # Node ID 02031fb73af8bd6ecf374a5767bdd6996ff7939d # Parent 3e8e5780ad4a3d3bca266b977601ffeb0e4fd33e remove somefiles and fix header files diff -r 3e8e5780ad4a -r 02031fb73af8 regexParser/Makefile --- a/regexParser/Makefile Fri Dec 25 15:30:52 2015 +0900 +++ b/regexParser/Makefile Fri Dec 25 16:08:02 2015 +0900 @@ -1,31 +1,23 @@ TARGET= regexParser -MERGE= mergeTest CFLAGS= -Wall -O0 -g CC= clang++ SRCS_TMP = $(wildcard *.cc) -SRCS_EXCLUDE = determinize.cc mergeTest.cc +SRCS_EXCLUDE = SRCS = $(filter-out $(SRCS_EXCLUDE),$(SRCS_TMP)) OBJS = $(SRCS:.cc=.o) -SRCS_TMP1_MERGE = $(wildcard *.cc) -SRCS_EXCLUDE1_MERGE = determinize.cc main.cc -SRCS1_MERGE = $(filter-out $(SRCS_EXCLUDE1_MERGE),$(SRCS_TMP1_MERGE)) -OBJS_MERGE = $(SRCS1_MERGE:.cc=.o) - .cc.o: $(CC) $(CFLAGS) -c $< -o $@ -all: $(TARGET) $(MERGE) +all: $(TARGET) $(TARGET):$(OBJS) $(CC) -o $@ $(OBJS) -$(MERGE):$(OBJS_MERGE) - $(CC) -o $@ $(OBJS_MERGE) clean: - rm -f $(TARGET) $(MERGE) $(OBJS) $(OBJS_MERGE) + rm -f $(TARGET) $(OBJS) rm -f *~ \#* .SUFFIXES: .cc .o diff -r 3e8e5780ad4a -r 02031fb73af8 regexParser/bitVector.cc --- a/regexParser/bitVector.cc Fri Dec 25 15:30:52 2015 +0900 +++ b/regexParser/bitVector.cc Fri Dec 25 16:08:02 2015 +0900 @@ -1,7 +1,7 @@ #include #include #include -#include "bitVector.h" +#include "regexParser.h" BitVector createBitVector(int state) { unsigned long tmp = 1 << state; diff -r 3e8e5780ad4a -r 02031fb73af8 regexParser/bitVector.h --- a/regexParser/bitVector.h Fri Dec 25 15:30:52 2015 +0900 +++ b/regexParser/bitVector.h Fri Dec 25 16:08:02 2015 +0900 @@ -1,7 +1,4 @@ -#include "regexParser.h" -#define BITBLOCK 64 - -BitVector createBitVector(int state); -const BitVectorPtr allocateBitVector(); -void bitSet(BitVectorPtr bi, int bitSetPosition); -void bitPrint(BitVectorPtr bi); +extern BitVector createBitVector(int state); +extern const BitVectorPtr allocateBitVector(); +extern void bitSet(BitVectorPtr bi, int bitSetPosition); +extern void bitPrint(BitVectorPtr bi); diff -r 3e8e5780ad4a -r 02031fb73af8 regexParser/determinize.cc --- a/regexParser/determinize.cc Fri Dec 25 15:30:52 2015 +0900 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,16 +0,0 @@ -#include "determinize.h" - -TransitionPtr determinize(TransitionPtr cond, TransitionPtr list) { - TransitionPtr x0 = createTransition(x->condition, x->nextState); - TransitionPtr x1 = x0; - for(;;) { - if (x->next == NULL) { - x1->next = y; - return x0; - } - x = x->next; - x1->next = createTransition(x->condition, x->nextState); - x1 = x1->next; - } - return x0; -} diff -r 3e8e5780ad4a -r 02031fb73af8 regexParser/determinize.h --- a/regexParser/determinize.h Fri Dec 25 15:30:52 2015 +0900 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,3 +0,0 @@ -#include "transition.h" - -TransitionPtr determinize(TransitionPtr, TransitionPtr); diff -r 3e8e5780ad4a -r 02031fb73af8 regexParser/error.cc --- a/regexParser/error.cc Fri Dec 25 15:30:52 2015 +0900 +++ b/regexParser/error.cc Fri Dec 25 16:08:02 2015 +0900 @@ -1,5 +1,5 @@ #include -#include "error.h" +#include void mallocFailedMessage() { fprintf(stderr, "Failed to allocate memory.\n"); diff -r 3e8e5780ad4a -r 02031fb73af8 regexParser/error.h --- a/regexParser/error.h Fri Dec 25 15:30:52 2015 +0900 +++ b/regexParser/error.h Fri Dec 25 16:08:02 2015 +0900 @@ -1,2 +1,1 @@ -#include -void mallocFailedMessage(); +extern void mallocFailedMessage(); diff -r 3e8e5780ad4a -r 02031fb73af8 regexParser/mergeTest.cc --- a/regexParser/mergeTest.cc Fri Dec 25 15:30:52 2015 +0900 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,43 +0,0 @@ -#include -#include -#include -#include "subsetConstraction.h" - -extern NodePtr regex(RegexInfoPtr); -extern void printTree(NodePtr); - -int main(int argc, char **argv) -{ - RegexInfoPtr ri = (RegexInfoPtr)malloc(sizeof(RegexInfo)); - ri->stateNumber = 1; - unsigned char* merge = NULL; - for (int i = 1; i < argc; i++) { - if (strcmp(argv[i],"-regex") == 0) { - ri->ptr = (unsigned char*)argv[i+1]; i++; - } else if (strcmp(argv[i],"-merge") == 0) { - merge = (unsigned char*)argv[i+1]; i++; - } - } - printf("regex : %s\n",ri->ptr); - printf("merge : %s\n",merge); - - unsigned char begin, end; - if (merge[0] == '[') merge++; - begin = *merge; - end = *merge; - for (; *merge && *merge != ']'; merge++) { - if (*merge == '-') { - end = *(merge + 1); - merge++; - continue; - } - if (merge[0] == 0 || merge[0] == ']') break; - begin = *merge; - end = *merge; - } - NodePtr n = regex(ri); - printTree(n); - BitVector nextState; - charClassMerge(n->cc,begin,end,nextState); - return 0; -} diff -r 3e8e5780ad4a -r 02031fb73af8 regexParser/regexParser.h --- a/regexParser/regexParser.h Fri Dec 25 15:30:52 2015 +0900 +++ b/regexParser/regexParser.h Fri Dec 25 16:08:02 2015 +0900 @@ -1,12 +1,12 @@ -#include "error.h" #define NEW(type) (type*)malloc(sizeof(type)) -#define SYNTAX_NODENUMBER 100 #ifndef INCLUDED_STRUCT #define INCLUDED_STRUCT + +#define BITBLOCK 64 typedef struct bitVector { unsigned long bitContainer; -}BitVector,*BitVectorPtr; +} BitVector,*BitVectorPtr; typedef struct word { unsigned char *word; diff -r 3e8e5780ad4a -r 02031fb73af8 regexParser/subsetConstraction.cc --- a/regexParser/subsetConstraction.cc Fri Dec 25 15:30:52 2015 +0900 +++ b/regexParser/subsetConstraction.cc Fri Dec 25 16:08:02 2015 +0900 @@ -1,8 +1,11 @@ #include #include #include + +#include "regexParser.h" #include "subsetConstraction.h" #include "node.h" +#include "BitVector.h" CharClassPtr createCharClassWord(unsigned char *w, CharClassPtr cc1, CharClassPtr cc2) { CharClassPtr cc = NEW(CharClass); @@ -314,6 +317,7 @@ TransitionGeneratorPtr generateTransitionList(NodePtr n) { TransitionGeneratorPtr tg = createTransitionGenerator(); TGValue tgv; + // initiarize tgv tgv.asterisk = false; tgv.tg = tg; tgv.tg->startState = createState(tgv,n); @@ -321,6 +325,7 @@ tgv.tg->endState = createState(tgv,eof); tgv.stateBegin = 0; tgv.stateEnd = 1; + tgv.tgState = NULL; stateAllocate(n,tgv); tgv.tg->stateMax = tg->stateMax; BitVector bi = createBitVector(tg->stateMax); diff -r 3e8e5780ad4a -r 02031fb73af8 regexParser/subsetConstraction.h --- a/regexParser/subsetConstraction.h Fri Dec 25 15:30:52 2015 +0900 +++ b/regexParser/subsetConstraction.h Fri Dec 25 16:08:02 2015 +0900 @@ -1,5 +1,3 @@ -#include "transition.h" -#include "bitVector.h" extern CharClassPtr charClassMerge(CharClassPtr cc,unsigned long begin, unsigned long end, BitVector nextState); extern TransitionGeneratorPtr generateTransitionList(NodePtr n); extern void printState(TransitionGeneratorPtr tg); diff -r 3e8e5780ad4a -r 02031fb73af8 regexParser/transition.cc --- a/regexParser/transition.cc Fri Dec 25 15:30:52 2015 +0900 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,39 +0,0 @@ -#include -#include "transition.h" - -StatePtr searchState(StatePtr stateArray, StatePtr state) { - while(stateArray) { - if (stateArray->bitState.bitContainer == state->bitState.bitContainer) { - return stateArray; - } - if (stateArray->next == NULL) { - StatePtr s = createState(state->bitState); - stateArray = appendState(stateArray,s); - return stateArray; - } - stateArray = stateArray->next; - } - return stateArray; -} - -StatePtr createState(BitVector bi) { - StatePtr state = NEW(State); - state->bitState = bi; - state->node = NEW(Node); - return state; -} - -StatePtr appendState(StatePtr x,StatePtr y) { - StatePtr x0 = createState(x->bitState); - StatePtr x1 = x0; - for(;;) { - if (x->next == NULL) { - x1->next = y; - return x0; - } - x = x->next; - x1->next = createState(x->bitState); - x1 = x1->next; - } - return x0; -} diff -r 3e8e5780ad4a -r 02031fb73af8 regexParser/transition.h --- a/regexParser/transition.h Fri Dec 25 15:30:52 2015 +0900 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,18 +0,0 @@ -#include "bitVector.h" -StatePtr createState(BitVector bi); -StatePtr appendState(StatePtr x,StatePtr y); -/* - 正規表現木を辿って transition のList をつくる - CharClass のかさなりを判定して重なりのない新しいCharClassをつくる - 重なっている状態はbitvectorのorをとる - 重なっている状態はそれぞれの状態について木をたどる - - nextState == 0 は正規表現の末端を表す - nextState == 1 は受理状態を表す - 正規表現のノードの番号 n に対応する 2^n のbitをセットした状態 - - | の場合は両方のListを結合する - + の場合は左のノードに * がある場合は右のリストも結合する - 左のノードに*がない場合は、右のほうだけみる - * は直下のリストを使って、次の状態を自分自身にする - */