Mercurial > hg > Applications > Grep
comparison c/regexParser/createBitVectorList.cc @ 101:2cc097419169 impl-bitvector
fix print
author | masasann |
---|---|
date | Tue, 17 Nov 2015 06:51:12 +0900 |
parents | 804e51f19f17 |
children | 07f4761c6c58 |
comparison
equal
deleted
inserted
replaced
100:804e51f19f17 | 101:2cc097419169 |
---|---|
1 #include <stdio.h> | 1 #include <stdio.h> |
2 #include <stdlib.h> | 2 #include <stdlib.h> |
3 #include <ctype.h> | |
3 #include "bitVector.h" | 4 #include "bitVector.h" |
4 #include "regexParser.h" | 5 #include "regexParser.h" |
5 | 6 |
6 extern BitVectorPtr bitSet(int); | 7 extern BitVectorPtr bitSet(int); |
7 extern void bitPrint(BitVectorPtr); | 8 extern void bitPrint(BitVectorPtr); |
8 BitVectorListPtr createBitVector(NodePtr); | 9 BitVectorListPtr createBitVector(NodePtr); |
9 BitVectorListPtr descendTreeNode(NodePtr,BitVectorListPtr); | 10 BitVectorListPtr descendTreeNode(NodePtr,BitVectorListPtr); |
11 BitVectorListPtr setNextBitVectorList(BitVectorListPtr bvl, BitVectorListPtr next, NodePtr n); | |
10 | 12 |
11 BitVectorListPtr initBvl; | 13 BitVectorListPtr initBvl; |
12 | 14 |
13 BitVectorListPtr allocateBitVectorList() { | 15 BitVectorListPtr allocateBitVectorList() { |
14 BitVectorListPtr bvl = (BitVectorListPtr)malloc(sizeof(BitVectorList)); | 16 BitVectorListPtr bvl = (BitVectorListPtr)malloc(sizeof(BitVectorList)); |
17 | 19 |
18 return bvl; | 20 return bvl; |
19 } | 21 } |
20 | 22 |
21 BitVectorListPtr createBitVector(NodePtr n,BitVectorListPtr bvl) { | 23 BitVectorListPtr createBitVector(NodePtr n,BitVectorListPtr bvl) { |
22 BitVectorListPtr nextBvl = bvl->next[(int)n->Value.character] = allocateBitVectorList(); | 24 // BitVectorListPtr nextBvl = bvl->next[(int)n->Value.character] = allocateBitVectorList(); |
23 nextBvl->self = bvl->next[(int)n->Value.character]; | 25 BitVectorListPtr nextBvl = allocateBitVectorList(); |
26 // nextBvl->self = bvl->next[(int)n->Value.character]; | |
24 nextBvl->bi = bitSet(n->nodeNumber); | 27 nextBvl->bi = bitSet(n->nodeNumber); |
25 nextBvl->initBvl = initBvl; | 28 nextBvl->initBvl = initBvl; |
26 | 29 |
27 puts("-----"); | 30 return nextBvl; |
28 printf(" state : "); bitPrint(bvl->bi); | |
29 for (int i = 0; i < 256; i++) { | |
30 if (bvl->next[i] != NULL) { | |
31 printf("input char : %c\n",i); | |
32 } | |
33 } | |
34 printf("next state : ");bitPrint(bvl->next[(int)n->Value.character]->bi); | |
35 puts("-----"); | |
36 | |
37 return bvl->next[(int)n->Value.character]; | |
38 } | 31 } |
39 | 32 |
40 | 33 |
41 BitVectorListPtr initBitVector() { | 34 BitVectorListPtr initBitVector() { |
42 | 35 |
49 } | 42 } |
50 | 43 |
51 return bvl; | 44 return bvl; |
52 } | 45 } |
53 | 46 |
47 void printBitVectorList (BitVectorListPtr bvl) { | |
48 bool flag = true; | |
49 for (int i = 0; i < 256; i++) { | |
50 if (bvl->next[i] != NULL) { | |
51 if (flag){ | |
52 puts("----"); | |
53 printf(" state : "); bitPrint(bvl->bi); | |
54 flag = false; | |
55 } | |
56 printf("input char : %c\n",i); | |
57 printf("next state : ");bitPrint(bvl->next[i]->bi); | |
58 } | |
59 } | |
60 | |
61 for (int i = 0; i < 256; i++) { | |
62 if (bvl->next[i] != NULL) { | |
63 printBitVectorList(bvl->next[i]); | |
64 } | |
65 } | |
66 } | |
54 | 67 |
55 BitVectorListPtr descendTreeNode(NodePtr n,BitVectorListPtr bvl) { | 68 BitVectorListPtr descendTreeNode(NodePtr n,BitVectorListPtr bvl) { |
69 BitVectorListPtr prev = bvl; | |
70 if (n->tokenType == '*') { | |
56 | 71 |
57 if (n->tokenType == '*') { | 72 } else if (n->Value.character == '|') { |
58 bvl = descendTreeNode(n->left,bvl); | 73 setNextBitVectorList(prev,descendTreeNode(n->left,bvl),n->left); |
59 } else if (n->tokenType == '|') { | 74 bvl = setNextBitVectorList(bvl,descendTreeNode(n->right,bvl),n->right); |
60 bvl = descendTreeNode(n->left,bvl); | 75 |
61 bvl = descendTreeNode(n->parent->right,bvl); | |
62 } else if (n->Value.character == '+') { | 76 } else if (n->Value.character == '+') { |
63 bvl = descendTreeNode(n->left,bvl); | 77 bvl = setNextBitVectorList(prev,descendTreeNode(n->left,bvl),n->left); |
64 bvl = descendTreeNode(n->right,bvl); | 78 bvl = setNextBitVectorList(bvl,descendTreeNode(n->right,bvl),n->right); |
65 } else if (n->tokenType == 'a') { | 79 } else if (n->tokenType == 'a') { |
66 bvl = createBitVector(n,bvl); | 80 bvl = createBitVector(n,bvl); |
67 } | 81 } |
82 return bvl; | |
83 } | |
68 | 84 |
69 return bvl; | 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; | |
70 } | 90 } |
71 | 91 |
72 BitVectorListPtr createBitVectorList(NodePtr n) { | 92 BitVectorListPtr createBitVectorList(NodePtr n) { |
73 BitVectorListPtr bvl = initBitVector(); | 93 BitVectorListPtr bvl = initBitVector(); |
74 descendTreeNode(n,bvl); | 94 descendTreeNode(n,bvl); |
75 | 95 printBitVectorList(bvl); |
76 return bvl; | 96 return bvl; |
77 } | 97 } |