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);