Mercurial > hg > Applications > Grep
comparison c/regexParser/createBitVectorList.cc @ 102:07f4761c6c58 impl-bitvector
revert descendTreeNode function
author | Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp> |
---|---|
date | Tue, 17 Nov 2015 16:35:54 +0900 |
parents | 2cc097419169 |
children | 4ad2a75dec4a |
comparison
equal
deleted
inserted
replaced
101:2cc097419169 | 102:07f4761c6c58 |
---|---|
19 | 19 |
20 return bvl; | 20 return bvl; |
21 } | 21 } |
22 | 22 |
23 BitVectorListPtr createBitVector(NodePtr n,BitVectorListPtr bvl) { | 23 BitVectorListPtr createBitVector(NodePtr n,BitVectorListPtr bvl) { |
24 // BitVectorListPtr nextBvl = bvl->next[(int)n->Value.character] = allocateBitVectorList(); | 24 BitVectorListPtr nextBvl = bvl->next[(int)n->Value.character] = allocateBitVectorList(); |
25 BitVectorListPtr nextBvl = allocateBitVectorList(); | 25 nextBvl->self = bvl->next[(int)n->Value.character]; |
26 // nextBvl->self = bvl->next[(int)n->Value.character]; | |
27 nextBvl->bi = bitSet(n->nodeNumber); | 26 nextBvl->bi = bitSet(n->nodeNumber); |
28 nextBvl->initBvl = initBvl; | 27 nextBvl->initBvl = initBvl; |
29 | 28 |
30 return nextBvl; | 29 return nextBvl; |
31 } | 30 } |
43 | 42 |
44 return bvl; | 43 return bvl; |
45 } | 44 } |
46 | 45 |
47 void printBitVectorList (BitVectorListPtr bvl) { | 46 void printBitVectorList (BitVectorListPtr bvl) { |
48 bool flag = true; | 47 bool initPrintFlag = true; |
49 for (int i = 0; i < 256; i++) { | 48 for (int i = 0; i < 256; i++) { |
50 if (bvl->next[i] != NULL) { | 49 if (bvl->next[i] != NULL) { |
51 if (flag){ | 50 if (initPrintFlag) { |
52 puts("----"); | 51 puts("----"); |
53 printf(" state : "); bitPrint(bvl->bi); | 52 printf(" state : "); bitPrint(bvl->bi); |
54 flag = false; | 53 initPrintFlag = false; |
55 } | 54 } |
56 printf("input char : %c\n",i); | 55 printf("input char : %c\n",i); |
57 printf("next state : ");bitPrint(bvl->next[i]->bi); | 56 printf("next state : "); bitPrint(bvl->next[i]->bi); |
58 } | 57 } |
59 } | 58 } |
60 | 59 |
61 for (int i = 0; i < 256; i++) { | 60 for (int i = 0; i < 256; i++) { |
62 if (bvl->next[i] != NULL) { | 61 if (bvl->next[i] != NULL) { |
64 } | 63 } |
65 } | 64 } |
66 } | 65 } |
67 | 66 |
68 BitVectorListPtr descendTreeNode(NodePtr n,BitVectorListPtr bvl) { | 67 BitVectorListPtr descendTreeNode(NodePtr n,BitVectorListPtr bvl) { |
69 BitVectorListPtr prev = bvl; | 68 |
70 if (n->tokenType == '*') { | 69 if (n->tokenType == '*') { |
71 | 70 bvl = descendTreeNode(n->left,bvl); |
72 } else if (n->Value.character == '|') { | 71 } else if (n->tokenType == '|') { |
73 setNextBitVectorList(prev,descendTreeNode(n->left,bvl),n->left); | 72 bvl = descendTreeNode(n->left,bvl); |
74 bvl = setNextBitVectorList(bvl,descendTreeNode(n->right,bvl),n->right); | 73 bvl = descendTreeNode(n->parent->right,bvl); |
75 | |
76 } else if (n->Value.character == '+') { | 74 } else if (n->Value.character == '+') { |
77 bvl = setNextBitVectorList(prev,descendTreeNode(n->left,bvl),n->left); | 75 bvl = descendTreeNode(n->left,bvl); |
78 bvl = setNextBitVectorList(bvl,descendTreeNode(n->right,bvl),n->right); | 76 bvl = descendTreeNode(n->right,bvl); |
79 } else if (n->tokenType == 'a') { | 77 } else if (n->tokenType == 'a') { |
80 bvl = createBitVector(n,bvl); | 78 bvl = createBitVector(n,bvl); |
81 } | 79 } |
82 return bvl; | 80 return bvl; |
83 } | |
84 | |
85 BitVectorListPtr setNextBitVectorList(BitVectorListPtr bvl, BitVectorListPtr next, NodePtr n){ | |
86 if (isalnum((int)n->Value.character)){ | |
87 bvl->next[(int)n->Value.character] = next; | |
88 } | |
89 return next; | |
90 } | 81 } |
91 | 82 |
92 BitVectorListPtr createBitVectorList(NodePtr n) { | 83 BitVectorListPtr createBitVectorList(NodePtr n) { |
93 BitVectorListPtr bvl = initBitVector(); | 84 BitVectorListPtr bvl = initBitVector(); |
94 descendTreeNode(n,bvl); | 85 descendTreeNode(n,bvl); |