Mercurial > hg > Applications > Grep
comparison c/regexParser/createBitVectorList.cc @ 105:766fc2476f01 bitVec-Kaito
fix indent size
author | Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp> |
---|---|
date | Wed, 18 Nov 2015 19:33:07 +0900 |
parents | 3eb3cb5d581f |
children | c9f5ee891b5e |
comparison
equal
deleted
inserted
replaced
104:3eb3cb5d581f | 105:766fc2476f01 |
---|---|
11 BitVectorListPtr setNextBitVectorList(NodePtr n, BitVectorListPtr bvl, BitVectorListPtr next); | 11 BitVectorListPtr setNextBitVectorList(NodePtr n, BitVectorListPtr bvl, BitVectorListPtr next); |
12 | 12 |
13 BitVectorListPtr initBvl; | 13 BitVectorListPtr initBvl; |
14 | 14 |
15 BitVectorListPtr allocateBitVectorList() { | 15 BitVectorListPtr allocateBitVectorList() { |
16 BitVectorListPtr bvl = (BitVectorListPtr)malloc(sizeof(BitVectorList)); | 16 BitVectorListPtr bvl = (BitVectorListPtr)malloc(sizeof(BitVectorList)); |
17 bvl->self = bvl; | 17 bvl->self = bvl; |
18 bvl->bi = (BitVectorPtr)malloc(sizeof(BitVector)); | 18 bvl->bi = (BitVectorPtr)malloc(sizeof(BitVector)); |
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 = allocateBitVectorList(); | 24 BitVectorListPtr nextBvl = allocateBitVectorList(); |
25 nextBvl->bi = bitSet(n->nodeNumber); | 25 nextBvl->bi = bitSet(n->nodeNumber); |
26 nextBvl->initBvl = initBvl; | 26 nextBvl->initBvl = initBvl; |
27 return nextBvl; | 27 return nextBvl; |
28 } | 28 } |
29 | 29 |
30 | 30 |
31 BitVectorListPtr initBitVector() { | 31 BitVectorListPtr initBitVector() { |
32 | |
33 BitVectorListPtr bvl = allocateBitVectorList(); | |
34 bvl->initBvl = initBvl = bvl; | |
35 bvl->bi = bitSet(0); | |
36 | 32 |
37 for (int i = 0; i < 256; i++) { | 33 BitVectorListPtr bvl = allocateBitVectorList(); |
38 bvl->next[i] = NULL; | 34 bvl->initBvl = initBvl = bvl; |
39 } | 35 bvl->bi = bitSet(0); |
40 | 36 |
41 return bvl; | 37 for (int i = 0; i < 256; i++) { |
38 bvl->next[i] = NULL; | |
39 } | |
40 | |
41 return bvl; | |
42 } | 42 } |
43 | 43 |
44 void printBitVectorList (BitVectorListPtr bvl) { | 44 void printBitVectorList (BitVectorListPtr bvl) { |
45 bool isFirstPrint = true; | 45 bool isFirstPrint = true; |
46 for (int i = 0; i < 256; i++) { | 46 for (int i = 0; i < 256; i++) { |
47 if (bvl->next[i] != NULL) { | 47 if (bvl->next[i] != NULL) { |
48 if (isFirstPrint){ | 48 if (isFirstPrint){ |
49 puts("----"); | 49 puts("----"); |
50 printf(" state : "); bitPrint(bvl->bi); | 50 printf(" state : "); bitPrint(bvl->bi); |
51 isFirstPrint = false; | 51 isFirstPrint = false; |
52 } | 52 } |
53 printf("input char : %c\n",i); | 53 printf("input char : %c\n",i); |
54 printf("next state : ");bitPrint(bvl->next[i]->bi); | 54 printf("next state : ");bitPrint(bvl->next[i]->bi); |
55 } | |
55 } | 56 } |
56 } | 57 |
57 | 58 for (int i = 0; i < 256; i++) { |
58 for (int i = 0; i < 256; i++) { | 59 if (bvl->next[i] != NULL) { |
59 if (bvl->next[i] != NULL) { | 60 printBitVectorList(bvl->next[i]); |
60 printBitVectorList(bvl->next[i]); | 61 } |
61 } | 62 } |
62 } | |
63 } | 63 } |
64 | 64 |
65 BitVectorListPtr descendTreeNode(NodePtr n,BitVectorListPtr bvl, BitVectorListPtr prev, bool &fromOr) { | 65 BitVectorListPtr descendTreeNode(NodePtr n,BitVectorListPtr bvl, BitVectorListPtr prev, bool &fromOr) { |
66 bool leftIsOr, rightIsOr; | 66 bool leftIsOr, rightIsOr; |
67 if (n->tokenType == '*') { | 67 if (n->tokenType == '*') { |
68 | |
69 } else if (n->Value.character == '|') { | |
70 bvl = descendTreeNode(n->left, bvl, prev, leftIsOr); | |
71 setNextBitVectorList(n->left, prev, bvl); | |
72 bvl = descendTreeNode(n->right, bvl, prev, rightIsOr); | |
73 setNextBitVectorList(n->right, prev, bvl); | |
74 fromOr = true; | |
75 return prev; | |
76 } else if (n->Value.character == '+') { | |
77 bvl = descendTreeNode(n->left, bvl, prev, leftIsOr); | |
78 setNextBitVectorList(n->left, prev, bvl); | |
79 prev = bvl; | |
80 bvl = descendTreeNode(n->right, bvl, prev, rightIsOr); | |
81 | 68 |
82 if (leftIsOr){ | 69 } else if (n->Value.character == '|') { |
83 for (int i = 0; i < 256; i++) | 70 bvl = descendTreeNode(n->left, bvl, prev, leftIsOr); |
84 if (prev->next[i] != NULL) | 71 setNextBitVectorList(n->left, prev, bvl); |
85 setNextBitVectorList(n->right, prev->next[i], bvl); | 72 bvl = descendTreeNode(n->right, bvl, prev, rightIsOr); |
73 setNextBitVectorList(n->right, prev, bvl); | |
74 fromOr = true; | |
75 return prev; | |
76 } else if (n->Value.character == '+') { | |
77 bvl = descendTreeNode(n->left, bvl, prev, leftIsOr); | |
78 setNextBitVectorList(n->left, prev, bvl); | |
79 prev = bvl; | |
80 bvl = descendTreeNode(n->right, bvl, prev, rightIsOr); | |
81 | |
82 if (leftIsOr){ | |
83 for (int i = 0; i < 256; i++) | |
84 if (prev->next[i] != NULL) | |
85 setNextBitVectorList(n->right, prev->next[i], bvl); | |
86 } | |
87 else { | |
88 setNextBitVectorList(n->right, prev, bvl); | |
89 } | |
90 | |
91 fromOr = false; | |
92 } else if (n->tokenType == 'a') { | |
93 bvl = createBitVector(n,bvl); | |
94 fromOr = false; | |
86 } | 95 } |
87 else { | 96 return bvl; |
88 setNextBitVectorList(n->right, prev, bvl); | |
89 } | |
90 | |
91 fromOr = false; | |
92 } else if (n->tokenType == 'a') { | |
93 bvl = createBitVector(n,bvl); | |
94 fromOr = false; | |
95 } | |
96 return bvl; | |
97 } | 97 } |
98 | 98 |
99 BitVectorListPtr setNextBitVectorList(NodePtr n, BitVectorListPtr bvl, BitVectorListPtr next){ | 99 BitVectorListPtr setNextBitVectorList(NodePtr n, BitVectorListPtr bvl, BitVectorListPtr next){ |
100 if (isalnum((int)n->Value.character)){ | 100 if (isalnum((int)n->Value.character)){ |
101 bvl->next[(int)n->Value.character] = next; | 101 bvl->next[(int)n->Value.character] = next; |
102 } | 102 } |
103 return next; | 103 return next; |
104 } | 104 } |
105 | 105 |
106 BitVectorListPtr createBitVectorList(NodePtr n) { | 106 BitVectorListPtr createBitVectorList(NodePtr n) { |
107 BitVectorListPtr bvl = initBitVector(); | 107 BitVectorListPtr bvl = initBitVector(); |
108 bool fromOr = false; | 108 bool fromOr = false; |
109 descendTreeNode(n, bvl, bvl, fromOr); | 109 descendTreeNode(n, bvl, bvl, fromOr); |
110 printBitVectorList(bvl); | 110 printBitVectorList(bvl); |
111 return bvl; | 111 return bvl; |
112 } | 112 } |