# HG changeset patch # User Masataka Kohagura # Date 1448352428 -32400 # Node ID 66c633575b5385b09188c72a1d14d2338d649eeb # Parent ca30f83347418db4e57638a060473c1d89f3c551 remove error and warning diff -r ca30f8334741 -r 66c633575b53 c/regexParser/Makefile --- a/c/regexParser/Makefile Tue Nov 24 14:38:26 2015 +0900 +++ b/c/regexParser/Makefile Tue Nov 24 17:07:08 2015 +0900 @@ -3,7 +3,7 @@ CC= clang++ SRCS_TMP = $(wildcard *.cc) -SRCS_EXCLUDE = # 除外するファイルを書く +SRCS_EXCLUDE = determinize.cc SRCS = $(filter-out $(SRCS_EXCLUDE),$(SRCS_TMP)) OBJS = $(SRCS:.cc=.o) diff -r ca30f8334741 -r 66c633575b53 c/regexParser/bitVector.cc --- a/c/regexParser/bitVector.cc Tue Nov 24 14:38:26 2015 +0900 +++ b/c/regexParser/bitVector.cc Tue Nov 24 17:07:08 2015 +0900 @@ -2,13 +2,8 @@ #include #include #include "bitVector.h" -#include "regexParser.h" - extern BitVectorListPtr allocateBitVectorList(); -BitVectorListPtr createBitVector(NodePtr,BitVectorListPtr); const BitVectorPtr allocateBitVector(); -BitVectorPtr bitSet(int); -void bitPrint(BitVectorPtr); int bitBlock = sizeof(unsigned long) * 8; @@ -43,7 +38,7 @@ BitVectorPtr bi = allocateBitVector(); - bi->arrayNum = (bitSetPosition + bitBlock - 1) / bitBlock; + bi->arrayNum = (bitSetPosition + bitBlock) / bitBlock; int arrayPosition = bitSetPosition / bitBlock; diff -r ca30f8334741 -r 66c633575b53 c/regexParser/bitVector.h --- a/c/regexParser/bitVector.h Tue Nov 24 14:38:26 2015 +0900 +++ b/c/regexParser/bitVector.h Tue Nov 24 17:07:08 2015 +0900 @@ -1,5 +1,6 @@ +#include "regexParser.h" + #define BITBLOCK (sizeof(unsigned long) * 8) - typedef struct bitVector { int arrayNum; unsigned long *bitContainer; @@ -13,3 +14,7 @@ bool isLoopAnker; bool isLoop; }BitVectorList, *BitVectorListPtr; + +BitVectorListPtr createBitVector(NodePtr,BitVectorListPtr); +BitVectorPtr bitSet(int); +void bitPrint(BitVectorPtr); diff -r ca30f8334741 -r 66c633575b53 c/regexParser/bitVectorNode.cc --- a/c/regexParser/bitVectorNode.cc Tue Nov 24 14:38:26 2015 +0900 +++ b/c/regexParser/bitVectorNode.cc Tue Nov 24 17:07:08 2015 +0900 @@ -2,7 +2,6 @@ #include #include #include "bitVector.h" -#include "regexParser.h" extern BitVectorPtr bitSet(int); BitVectorListPtr allocateBitVectorList(); diff -r ca30f8334741 -r 66c633575b53 c/regexParser/determinize.cc --- a/c/regexParser/determinize.cc Tue Nov 24 14:38:26 2015 +0900 +++ b/c/regexParser/determinize.cc Tue Nov 24 17:07:08 2015 +0900 @@ -12,5 +12,5 @@ x1->next = createTransition(x->condition, x->nextState); x1 = x1->next; } - return x0; + return x0; } diff -r ca30f8334741 -r 66c633575b53 c/regexParser/error.cc --- a/c/regexParser/error.cc Tue Nov 24 14:38:26 2015 +0900 +++ b/c/regexParser/error.cc Tue Nov 24 17:07:08 2015 +0900 @@ -1,4 +1,5 @@ #include +#include "error.h" void mallocFailedMessage() { fprintf(stderr, "Failed to allocate memory.\n"); diff -r ca30f8334741 -r 66c633575b53 c/regexParser/error.h --- a/c/regexParser/error.h Tue Nov 24 14:38:26 2015 +0900 +++ b/c/regexParser/error.h Tue Nov 24 17:07:08 2015 +0900 @@ -1,1 +1,2 @@ +#include void mallocFailedMessage(); diff -r ca30f8334741 -r 66c633575b53 c/regexParser/main.cc --- a/c/regexParser/main.cc Tue Nov 24 14:38:26 2015 +0900 +++ b/c/regexParser/main.cc Tue Nov 24 17:07:08 2015 +0900 @@ -1,15 +1,6 @@ -/* - * ::= [a-z][A-Z][0-9] - * ::= '[''-'']' - * ::= '('')' - * ::= || - * ::= |'*'|'|'| - */ - #include #include #include -#include "regexParser.h" #include "bitVector.h" extern NodePtr regex(RegexInfoPtr); diff -r ca30f8334741 -r 66c633575b53 c/regexParser/node.cc --- a/c/regexParser/node.cc Tue Nov 24 14:38:26 2015 +0900 +++ b/c/regexParser/node.cc Tue Nov 24 17:07:08 2015 +0900 @@ -6,17 +6,19 @@ static void descendTree(NodePtr n, int d) { if (n->right != NULL) { - descendTree(n->right, d+1); + d++; + descendTree(n->right, d); d--; } if (n->tokenType == 'a') { - printf("%*c%c(%d)\n",d*4, ' ',n->Value.character,n->nodeNumber); + printf("%*c%c(%lu)\n",d*4, ' ',n->cc->cond->character,n->nodeNumber); } else { - printf("%*c%c\n",d*4, ' ',n->Value.character); + printf("%*c%c\n",d*4, ' ',n->cc->cond->character); } if (n->left != NULL) { - descendTree(n->left, d+1); + d++; + descendTree(n->left, d); d--; } } diff -r ca30f8334741 -r 66c633575b53 c/regexParser/regexParser.cc --- a/c/regexParser/regexParser.cc Tue Nov 24 14:38:26 2015 +0900 +++ b/c/regexParser/regexParser.cc Tue Nov 24 17:07:08 2015 +0900 @@ -3,13 +3,6 @@ #include "regexParser.h" #include "error.h" -typedef struct regexInfo { - unsigned char *ptr; - unsigned char tokenType; - int tokenValue; - int nodeNumber; -} RegexInfo, *RegexInfoPtr; - static NodePtr createNode(RegexInfoPtr,unsigned char,NodePtr,NodePtr); static NodePtr charClass(RegexInfoPtr); static NodePtr group(RegexInfoPtr); @@ -24,15 +17,22 @@ * stateTransitionTable */ +NodePtr allocateNode() { + NodePtr n = (NodePtr)malloc(sizeof(node)); + n->cc = (CharClassPtr)malloc(sizeof(CharClass)); + n->cc->cond = (ConditionList)malloc(sizeof(Condition)); + return n; +} + static NodePtr createNode(RegexInfoPtr ri,unsigned char character, NodePtr left, NodePtr right) { - NodePtr n = (NodePtr)malloc(sizeof(Node)); + NodePtr n = allocateNode(); if (n == NULL) { mallocFailedMessage(); } n->tokenType = ri->tokenType; - n->cc->conditionList->character = character; + n->cc->cond->character = character; n->left = left; n->right = right; diff -r ca30f8334741 -r 66c633575b53 c/regexParser/regexParser.h --- a/c/regexParser/regexParser.h Tue Nov 24 14:38:26 2015 +0900 +++ b/c/regexParser/regexParser.h Tue Nov 24 17:07:08 2015 +0900 @@ -3,17 +3,19 @@ long length; } Word, *WordPtr; +typedef union condition { + struct utf8Range { + unsigned char *begin; + unsigned char *end; + struct utf8Range *next; + } rangeList; + unsigned char character; + WordPtr w; +} Condition, *ConditionList; + typedef struct charClass { unsigned char type; - union condition { - struct utf8Range { - unsigned char *begin; - unsigned char *end; - struct utf8Range *next; - } rangeList; - unsigned char character; - WordPtr w; - } *conditionList; + ConditionList cond; struct charClass *left; struct charClass *right; unsigned long *begin; @@ -27,3 +29,10 @@ struct node *left; struct node *right; } Node, *NodePtr; + +typedef struct regexInfo { + unsigned char *ptr; + unsigned char tokenType; + int tokenValue; + int nodeNumber; +} RegexInfo, *RegexInfoPtr; diff -r ca30f8334741 -r 66c633575b53 c/regexParser/subsetConstraction.cc --- a/c/regexParser/subsetConstraction.cc Tue Nov 24 14:38:26 2015 +0900 +++ b/c/regexParser/subsetConstraction.cc Tue Nov 24 17:07:08 2015 +0900 @@ -2,8 +2,9 @@ #include #include #include "bitVector.h" -#include "regexParser.h" +extern BitVectorListPtr initBitVector(); +BitVectorListPtr setNextBitVectorList(unsigned char, BitVectorListPtr, BitVectorListPtr); void printBitVectorList (BitVectorListPtr bvl) { bool isFirstPrint = true; @@ -30,7 +31,7 @@ BitVectorListPtr descendTreeNode(NodePtr n,BitVectorListPtr bvl, BitVectorListPtr prev, bool &fromOr, bool &fromAsterisk) { bool leftIsOr, rightIsOr; - if (n->Value.character == '*') { + if (n->cc->cond->character == '*') { bvl = descendTreeNode(n->left, bvl, prev, leftIsOr, fromAsterisk); unsigned char repertChar = 0; for (int i = 0; i < 256; i++) { @@ -41,26 +42,26 @@ fromAsterisk = true; return prev; - } else if (n->Value.character == '|') { + } else if (n->cc->cond->character == '|') { bvl = descendTreeNode(n->left, bvl, prev, leftIsOr, fromAsterisk); - setNextBitVectorList(n->left->Value.character, prev, bvl); + setNextBitVectorList(n->left->cc->cond->character, prev, bvl); bvl = descendTreeNode(n->right, bvl, prev, rightIsOr, fromAsterisk); - setNextBitVectorList(n->right->Value.character, prev, bvl); + setNextBitVectorList(n->right->cc->cond->character, prev, bvl); fromOr = true; return prev; - } else if (n->Value.character == '+') { + } else if (n->cc->cond->character == '+') { bvl = descendTreeNode(n->left, bvl, prev, leftIsOr, fromAsterisk); - setNextBitVectorList(n->left->Value.character, prev, bvl); + setNextBitVectorList(n->left->cc->cond->character, prev, bvl); prev = bvl; bvl = descendTreeNode(n->right, bvl, prev, rightIsOr, fromAsterisk); if (leftIsOr){ for (int i = 0; i < 256; i++) if (prev->next[i] != NULL) - setNextBitVectorList(n->right->Value.character, prev->next[i], bvl); + setNextBitVectorList(n->right->cc->cond->character, prev->next[i], bvl); } else { - setNextBitVectorList(n->right->Value.character, prev, bvl); + setNextBitVectorList(n->right->cc->cond->character, prev, bvl); } fromOr = false; diff -r ca30f8334741 -r 66c633575b53 c/regexParser/transition.cc --- a/c/regexParser/transition.cc Tue Nov 24 14:38:26 2015 +0900 +++ b/c/regexParser/transition.cc Tue Nov 24 17:07:08 2015 +0900 @@ -1,3 +1,4 @@ +#include #include "transition.h" TransitionPtr createTransition(CharClass,BitVectorPtr); @@ -15,7 +16,7 @@ TransitionPtr x0 = x; for(;;) { if (x->next == NULL) { - x->next = y + x->next = y; return x0; } } diff -r ca30f8334741 -r 66c633575b53 c/regexParser/transition.h --- a/c/regexParser/transition.h Tue Nov 24 14:38:26 2015 +0900 +++ b/c/regexParser/transition.h Tue Nov 24 17:07:08 2015 +0900 @@ -1,14 +1,15 @@ +#include "bitVector.h" + typedef struct transition { CharClassPtr condition; BitVectorPtr nextState; struct transition *next; -} Transition, TransitionPtr; - +} Transition, *TransitionPtr; typedef struct state { TransitionPtr transition; struct state *next; -} State; StatePtr; +} State, *StatePtr; /* 正規表現木を辿って transition のList をつくる CharClass のかさなりを判定して重なりのない新しいCharClassをつくる