comparison c/regexParser/createBitVectorList.cc @ 100:804e51f19f17 impl-bitvector

implement allocateBitVectorList
author Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
date Tue, 17 Nov 2015 03:17:07 +0900
parents 1e5b56e8263b
children 2cc097419169
comparison
equal deleted inserted replaced
99:1e5b56e8263b 100:804e51f19f17
8 BitVectorListPtr createBitVector(NodePtr); 8 BitVectorListPtr createBitVector(NodePtr);
9 BitVectorListPtr descendTreeNode(NodePtr,BitVectorListPtr); 9 BitVectorListPtr descendTreeNode(NodePtr,BitVectorListPtr);
10 10
11 BitVectorListPtr initBvl; 11 BitVectorListPtr initBvl;
12 12
13 BitVectorListPtr allocateBitVectorList() {
14 BitVectorListPtr bvl = (BitVectorListPtr)malloc(sizeof(BitVectorList));
15 bvl->self = bvl;
16 bvl->bi = (BitVectorPtr)malloc(sizeof(BitVector));
17
18 return bvl;
19 }
20
13 BitVectorListPtr createBitVector(NodePtr n,BitVectorListPtr bvl) { 21 BitVectorListPtr createBitVector(NodePtr n,BitVectorListPtr bvl) {
14 BitVectorListPtr nextBvl = bvl->next[(int)n->Value.character] = (BitVectorListPtr)malloc(sizeof(BitVectorList)); 22 BitVectorListPtr nextBvl = bvl->next[(int)n->Value.character] = allocateBitVectorList();
15 nextBvl->self = bvl->next[(int)n->Value.character]; 23 nextBvl->self = bvl->next[(int)n->Value.character];
16 nextBvl->bi = (BitVectorPtr)malloc(sizeof(BitVector));
17 nextBvl->bi = bitSet(n->nodeNumber); 24 nextBvl->bi = bitSet(n->nodeNumber);
18 nextBvl->initBvl = initBvl; 25 nextBvl->initBvl = initBvl;
19 26
20 puts("-----"); 27 puts("-----");
21 printf(" state : "); bitPrint(bvl->bi); 28 printf(" state : "); bitPrint(bvl->bi);
24 printf("input char : %c\n",i); 31 printf("input char : %c\n",i);
25 } 32 }
26 } 33 }
27 printf("next state : ");bitPrint(bvl->next[(int)n->Value.character]->bi); 34 printf("next state : ");bitPrint(bvl->next[(int)n->Value.character]->bi);
28 puts("-----"); 35 puts("-----");
36
29 return bvl->next[(int)n->Value.character]; 37 return bvl->next[(int)n->Value.character];
30 } 38 }
31 39
40
32 BitVectorListPtr initBitVector() { 41 BitVectorListPtr initBitVector() {
33 BitVectorListPtr bvl = (BitVectorListPtr)malloc(sizeof(BitVectorList)); 42
34 bvl->initBvl = bvl->self = initBvl = bvl; 43 BitVectorListPtr bvl = allocateBitVectorList();
35 bvl->bi = (BitVectorPtr)malloc(sizeof(BitVector)); 44 bvl->initBvl = initBvl = bvl;
36 bvl->bi = bitSet(0); 45 bvl->bi = bitSet(0);
46
47 for (int i = 0; i < 256; i++) {
48 bvl->next[i] = NULL;
49 }
50
37 return bvl; 51 return bvl;
38 } 52 }
39 53
40 54
41 BitVectorListPtr descendTreeNode(NodePtr n,BitVectorListPtr bvl) { 55 BitVectorListPtr descendTreeNode(NodePtr n,BitVectorListPtr bvl) {
42 56
43 if (n->tokenType == '*') { 57 if (n->tokenType == '*') {
44 bvl = descendTreeNode(n->left,bvl); 58 bvl = descendTreeNode(n->left,bvl);
45 } else if (n->tokenType == '|') { 59 } else if (n->tokenType == '|') {
46 60 bvl = descendTreeNode(n->left,bvl);
61 bvl = descendTreeNode(n->parent->right,bvl);
47 } else if (n->Value.character == '+') { 62 } else if (n->Value.character == '+') {
48 bvl = descendTreeNode(n->left,bvl); 63 bvl = descendTreeNode(n->left,bvl);
49 bvl = descendTreeNode(n->right,bvl); 64 bvl = descendTreeNode(n->right,bvl);
50 } else if (n->tokenType == 'a') { 65 } else if (n->tokenType == 'a') {
51 bvl = createBitVector(n,bvl); 66 bvl = createBitVector(n,bvl);