# HG changeset patch # User Masataka Kohagura # Date 1447921386 -32400 # Node ID c9f5ee891b5ed0da08da4207fdf1b02999a9b9fd # Parent 8e47f16186081ea38eb33aa22c1d78e6009e7266 change variable of setNextBitVectorList() diff -r 8e47f1618608 -r c9f5ee891b5e c/regexParser/createBitVectorList.cc --- a/c/regexParser/createBitVectorList.cc Wed Nov 18 19:36:12 2015 +0900 +++ b/c/regexParser/createBitVectorList.cc Thu Nov 19 17:23:06 2015 +0900 @@ -8,7 +8,7 @@ extern void bitPrint(BitVectorPtr); BitVectorListPtr createBitVector(NodePtr); BitVectorListPtr descendTreeNode(NodePtr, BitVectorListPtr, BitVectorListPtr, bool&); -BitVectorListPtr setNextBitVectorList(NodePtr n, BitVectorListPtr bvl, BitVectorListPtr next); +BitVectorListPtr setNextBitVectorList(unsigned char, BitVectorListPtr, BitVectorListPtr); BitVectorListPtr initBvl; @@ -64,28 +64,34 @@ BitVectorListPtr descendTreeNode(NodePtr n,BitVectorListPtr bvl, BitVectorListPtr prev, bool &fromOr) { bool leftIsOr, rightIsOr; - if (n->tokenType == '*') { - + if (n->Value.character == '*') { + bvl = descendTreeNode(n->left, bvl, prev, leftIsOr); + unsigned char repertChar = 0; + for (int i = 0; i < 256; i++) { + if (prev->next[i] != NULL) repertChar = i; + } + setNextBitVectorList(repertChar, prev->next[repertChar], bvl); // here + return prev; } else if (n->Value.character == '|') { bvl = descendTreeNode(n->left, bvl, prev, leftIsOr); - setNextBitVectorList(n->left, prev, bvl); + setNextBitVectorList(n->left->Value.character, prev, bvl); bvl = descendTreeNode(n->right, bvl, prev, rightIsOr); - setNextBitVectorList(n->right, prev, bvl); + setNextBitVectorList(n->right->Value.character, prev, bvl); fromOr = true; return prev; } else if (n->Value.character == '+') { bvl = descendTreeNode(n->left, bvl, prev, leftIsOr); - setNextBitVectorList(n->left, prev, bvl); + setNextBitVectorList(n->left->Value.character, prev, bvl); prev = bvl; bvl = descendTreeNode(n->right, bvl, prev, rightIsOr); if (leftIsOr){ for (int i = 0; i < 256; i++) if (prev->next[i] != NULL) - setNextBitVectorList(n->right, prev->next[i], bvl); + setNextBitVectorList(n->right->Value.character, prev->next[i], bvl); } else { - setNextBitVectorList(n->right, prev, bvl); + setNextBitVectorList(n->right->Value.character, prev, bvl); } fromOr = false; @@ -96,9 +102,9 @@ return bvl; } -BitVectorListPtr setNextBitVectorList(NodePtr n, BitVectorListPtr bvl, BitVectorListPtr next){ - if (isalnum((int)n->Value.character)){ - bvl->next[(int)n->Value.character] = next; +BitVectorListPtr setNextBitVectorList(unsigned char inputChar, BitVectorListPtr bvl, BitVectorListPtr next){ + if (isalnum((int)inputChar)){ + bvl->next[(int)inputChar] = next; } return next; }