Mercurial > hg > Applications > Grep
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); |