Mercurial > hg > Applications > Grep
annotate c/regexParser/subsetConstraction.cc @ 124:c363a66dc1a7 pairPro
fix
author | masa |
---|---|
date | Tue, 01 Dec 2015 17:06:26 +0900 |
parents | 166136236891 |
children | c292c67b3100 |
rev | line source |
---|---|
96
b807383bcc43
add createBitVectorList.cc
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
1 #include <stdio.h> |
b807383bcc43
add createBitVectorList.cc
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
2 #include <stdlib.h> |
101 | 3 #include <ctype.h> |
117
166136236891
add header files
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
116
diff
changeset
|
4 #include "subsetConstraction.h" |
96
b807383bcc43
add createBitVectorList.cc
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
5 |
101 | 6 void printBitVectorList (BitVectorListPtr bvl) { |
105
766fc2476f01
fix indent size
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
104
diff
changeset
|
7 bool isFirstPrint = true; |
766fc2476f01
fix indent size
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
104
diff
changeset
|
8 for (int i = 0; i < 256; i++) { |
766fc2476f01
fix indent size
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
104
diff
changeset
|
9 if (bvl->next[i] != NULL) { |
766fc2476f01
fix indent size
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
104
diff
changeset
|
10 if (isFirstPrint){ |
766fc2476f01
fix indent size
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
104
diff
changeset
|
11 puts("----"); |
766fc2476f01
fix indent size
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
104
diff
changeset
|
12 printf(" state : "); bitPrint(bvl->bi); |
766fc2476f01
fix indent size
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
104
diff
changeset
|
13 isFirstPrint = false; |
766fc2476f01
fix indent size
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
104
diff
changeset
|
14 } |
766fc2476f01
fix indent size
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
104
diff
changeset
|
15 printf("input char : %c\n",i); |
766fc2476f01
fix indent size
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
104
diff
changeset
|
16 printf("next state : ");bitPrint(bvl->next[i]->bi); |
109
6401c708f5dd
fix printBitVectorList (print Loop when include asterisk node)
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
108
diff
changeset
|
17 bvl->isLoop = bvl->isLoopAnker; |
105
766fc2476f01
fix indent size
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
104
diff
changeset
|
18 } |
104
3eb3cb5d581f
implemented 'or' node translator
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
103
diff
changeset
|
19 } |
105
766fc2476f01
fix indent size
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
104
diff
changeset
|
20 |
766fc2476f01
fix indent size
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
104
diff
changeset
|
21 for (int i = 0; i < 256; i++) { |
109
6401c708f5dd
fix printBitVectorList (print Loop when include asterisk node)
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
108
diff
changeset
|
22 if ((bvl->next[i] != NULL) && !(bvl->isLoop && bvl->isLoopAnker)) { |
6401c708f5dd
fix printBitVectorList (print Loop when include asterisk node)
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
108
diff
changeset
|
23 // if ((bvl->next[i] != NULL) ) { |
105
766fc2476f01
fix indent size
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
104
diff
changeset
|
24 printBitVectorList(bvl->next[i]); |
766fc2476f01
fix indent size
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
104
diff
changeset
|
25 } |
104
3eb3cb5d581f
implemented 'or' node translator
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
103
diff
changeset
|
26 } |
3eb3cb5d581f
implemented 'or' node translator
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
103
diff
changeset
|
27 } |
3eb3cb5d581f
implemented 'or' node translator
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
103
diff
changeset
|
28 |
117
166136236891
add header files
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
116
diff
changeset
|
29 const |
109
6401c708f5dd
fix printBitVectorList (print Loop when include asterisk node)
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
108
diff
changeset
|
30 BitVectorListPtr descendTreeNode(NodePtr n,BitVectorListPtr bvl, BitVectorListPtr prev, bool &fromOr, bool &fromAsterisk) { |
105
766fc2476f01
fix indent size
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
104
diff
changeset
|
31 bool leftIsOr, rightIsOr; |
116
66c633575b53
remove error and warning
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
110
diff
changeset
|
32 if (n->cc->cond->character == '*') { |
109
6401c708f5dd
fix printBitVectorList (print Loop when include asterisk node)
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
108
diff
changeset
|
33 bvl = descendTreeNode(n->left, bvl, prev, leftIsOr, fromAsterisk); |
107
c9f5ee891b5e
change variable of setNextBitVectorList()
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
105
diff
changeset
|
34 unsigned char repertChar = 0; |
c9f5ee891b5e
change variable of setNextBitVectorList()
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
105
diff
changeset
|
35 for (int i = 0; i < 256; i++) { |
c9f5ee891b5e
change variable of setNextBitVectorList()
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
105
diff
changeset
|
36 if (prev->next[i] != NULL) repertChar = i; |
c9f5ee891b5e
change variable of setNextBitVectorList()
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
105
diff
changeset
|
37 } |
109
6401c708f5dd
fix printBitVectorList (print Loop when include asterisk node)
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
108
diff
changeset
|
38 setNextBitVectorList(repertChar, bvl, prev->next[repertChar]); // here |
6401c708f5dd
fix printBitVectorList (print Loop when include asterisk node)
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
108
diff
changeset
|
39 bvl->isLoopAnker = true; |
6401c708f5dd
fix printBitVectorList (print Loop when include asterisk node)
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
108
diff
changeset
|
40 fromAsterisk = true; |
6401c708f5dd
fix printBitVectorList (print Loop when include asterisk node)
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
108
diff
changeset
|
41 |
107
c9f5ee891b5e
change variable of setNextBitVectorList()
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
105
diff
changeset
|
42 return prev; |
116
66c633575b53
remove error and warning
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
110
diff
changeset
|
43 } else if (n->cc->cond->character == '|') { |
109
6401c708f5dd
fix printBitVectorList (print Loop when include asterisk node)
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
108
diff
changeset
|
44 bvl = descendTreeNode(n->left, bvl, prev, leftIsOr, fromAsterisk); |
116
66c633575b53
remove error and warning
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
110
diff
changeset
|
45 setNextBitVectorList(n->left->cc->cond->character, prev, bvl); |
109
6401c708f5dd
fix printBitVectorList (print Loop when include asterisk node)
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
108
diff
changeset
|
46 bvl = descendTreeNode(n->right, bvl, prev, rightIsOr, fromAsterisk); |
116
66c633575b53
remove error and warning
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
110
diff
changeset
|
47 setNextBitVectorList(n->right->cc->cond->character, prev, bvl); |
105
766fc2476f01
fix indent size
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
104
diff
changeset
|
48 fromOr = true; |
766fc2476f01
fix indent size
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
104
diff
changeset
|
49 return prev; |
116
66c633575b53
remove error and warning
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
110
diff
changeset
|
50 } else if (n->cc->cond->character == '+') { |
109
6401c708f5dd
fix printBitVectorList (print Loop when include asterisk node)
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
108
diff
changeset
|
51 bvl = descendTreeNode(n->left, bvl, prev, leftIsOr, fromAsterisk); |
116
66c633575b53
remove error and warning
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
110
diff
changeset
|
52 setNextBitVectorList(n->left->cc->cond->character, prev, bvl); |
105
766fc2476f01
fix indent size
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
104
diff
changeset
|
53 prev = bvl; |
109
6401c708f5dd
fix printBitVectorList (print Loop when include asterisk node)
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
108
diff
changeset
|
54 bvl = descendTreeNode(n->right, bvl, prev, rightIsOr, fromAsterisk); |
104
3eb3cb5d581f
implemented 'or' node translator
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
103
diff
changeset
|
55 |
105
766fc2476f01
fix indent size
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
104
diff
changeset
|
56 if (leftIsOr){ |
766fc2476f01
fix indent size
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
104
diff
changeset
|
57 for (int i = 0; i < 256; i++) |
766fc2476f01
fix indent size
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
104
diff
changeset
|
58 if (prev->next[i] != NULL) |
116
66c633575b53
remove error and warning
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
110
diff
changeset
|
59 setNextBitVectorList(n->right->cc->cond->character, prev->next[i], bvl); |
105
766fc2476f01
fix indent size
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
104
diff
changeset
|
60 } |
766fc2476f01
fix indent size
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
104
diff
changeset
|
61 else { |
116
66c633575b53
remove error and warning
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
110
diff
changeset
|
62 setNextBitVectorList(n->right->cc->cond->character, prev, bvl); |
105
766fc2476f01
fix indent size
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
104
diff
changeset
|
63 } |
766fc2476f01
fix indent size
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
104
diff
changeset
|
64 |
766fc2476f01
fix indent size
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
104
diff
changeset
|
65 fromOr = false; |
766fc2476f01
fix indent size
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
104
diff
changeset
|
66 } else if (n->tokenType == 'a') { |
766fc2476f01
fix indent size
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
104
diff
changeset
|
67 bvl = createBitVector(n,bvl); |
766fc2476f01
fix indent size
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
104
diff
changeset
|
68 fromOr = false; |
101 | 69 } |
105
766fc2476f01
fix indent size
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
104
diff
changeset
|
70 return bvl; |
101 | 71 } |
96
b807383bcc43
add createBitVectorList.cc
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
72 |
117
166136236891
add header files
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
116
diff
changeset
|
73 const |
107
c9f5ee891b5e
change variable of setNextBitVectorList()
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
105
diff
changeset
|
74 BitVectorListPtr setNextBitVectorList(unsigned char inputChar, BitVectorListPtr bvl, BitVectorListPtr next){ |
c9f5ee891b5e
change variable of setNextBitVectorList()
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
105
diff
changeset
|
75 if (isalnum((int)inputChar)){ |
c9f5ee891b5e
change variable of setNextBitVectorList()
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
105
diff
changeset
|
76 bvl->next[(int)inputChar] = next; |
105
766fc2476f01
fix indent size
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
104
diff
changeset
|
77 } |
766fc2476f01
fix indent size
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
104
diff
changeset
|
78 return next; |
101 | 79 } |
96
b807383bcc43
add createBitVectorList.cc
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
80 |
b807383bcc43
add createBitVectorList.cc
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
81 BitVectorListPtr createBitVectorList(NodePtr n) { |
105
766fc2476f01
fix indent size
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
104
diff
changeset
|
82 BitVectorListPtr bvl = initBitVector(); |
766fc2476f01
fix indent size
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
104
diff
changeset
|
83 bool fromOr = false; |
109
6401c708f5dd
fix printBitVectorList (print Loop when include asterisk node)
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
108
diff
changeset
|
84 bool fromAsterisk = false; |
6401c708f5dd
fix printBitVectorList (print Loop when include asterisk node)
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
108
diff
changeset
|
85 descendTreeNode(n, bvl, bvl, fromOr, fromAsterisk); |
105
766fc2476f01
fix indent size
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
104
diff
changeset
|
86 printBitVectorList(bvl); |
766fc2476f01
fix indent size
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
104
diff
changeset
|
87 return bvl; |
96
b807383bcc43
add createBitVectorList.cc
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
88 } |