Mercurial > hg > Applications > Grep
annotate c/regexParser/subsetConstraction.cc @ 112:ec485345daf9 pairPro
some function use static
author | Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp> |
---|---|
date | Mon, 23 Nov 2015 15:54:19 +0900 |
parents | a3adc5c24e19 |
children | 66c633575b53 |
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> |
96
b807383bcc43
add createBitVectorList.cc
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
4 #include "bitVector.h" |
b807383bcc43
add createBitVectorList.cc
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
5 #include "regexParser.h" |
b807383bcc43
add createBitVectorList.cc
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
6 |
b807383bcc43
add createBitVectorList.cc
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
7 |
101 | 8 void printBitVectorList (BitVectorListPtr bvl) { |
105
766fc2476f01
fix indent size
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
104
diff
changeset
|
9 bool isFirstPrint = true; |
766fc2476f01
fix indent size
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
104
diff
changeset
|
10 for (int i = 0; i < 256; i++) { |
766fc2476f01
fix indent size
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
104
diff
changeset
|
11 if (bvl->next[i] != NULL) { |
766fc2476f01
fix indent size
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
104
diff
changeset
|
12 if (isFirstPrint){ |
766fc2476f01
fix indent size
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
104
diff
changeset
|
13 puts("----"); |
766fc2476f01
fix indent size
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
104
diff
changeset
|
14 printf(" state : "); bitPrint(bvl->bi); |
766fc2476f01
fix indent size
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
104
diff
changeset
|
15 isFirstPrint = false; |
766fc2476f01
fix indent size
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
104
diff
changeset
|
16 } |
766fc2476f01
fix indent size
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
104
diff
changeset
|
17 printf("input char : %c\n",i); |
766fc2476f01
fix indent size
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
104
diff
changeset
|
18 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
|
19 bvl->isLoop = bvl->isLoopAnker; |
105
766fc2476f01
fix indent size
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
104
diff
changeset
|
20 } |
104
3eb3cb5d581f
implemented 'or' node translator
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
103
diff
changeset
|
21 } |
105
766fc2476f01
fix indent size
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
104
diff
changeset
|
22 |
766fc2476f01
fix indent size
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
104
diff
changeset
|
23 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
|
24 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
|
25 // if ((bvl->next[i] != NULL) ) { |
105
766fc2476f01
fix indent size
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
104
diff
changeset
|
26 printBitVectorList(bvl->next[i]); |
766fc2476f01
fix indent size
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
104
diff
changeset
|
27 } |
104
3eb3cb5d581f
implemented 'or' node translator
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
103
diff
changeset
|
28 } |
3eb3cb5d581f
implemented 'or' node translator
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
103
diff
changeset
|
29 } |
3eb3cb5d581f
implemented 'or' node translator
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
103
diff
changeset
|
30 |
109
6401c708f5dd
fix printBitVectorList (print Loop when include asterisk node)
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
108
diff
changeset
|
31 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
|
32 bool leftIsOr, rightIsOr; |
107
c9f5ee891b5e
change variable of setNextBitVectorList()
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
105
diff
changeset
|
33 if (n->Value.character == '*') { |
109
6401c708f5dd
fix printBitVectorList (print Loop when include asterisk node)
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
108
diff
changeset
|
34 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
|
35 unsigned char repertChar = 0; |
c9f5ee891b5e
change variable of setNextBitVectorList()
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
105
diff
changeset
|
36 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
|
37 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
|
38 } |
109
6401c708f5dd
fix printBitVectorList (print Loop when include asterisk node)
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
108
diff
changeset
|
39 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
|
40 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
|
41 fromAsterisk = true; |
6401c708f5dd
fix printBitVectorList (print Loop when include asterisk node)
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
108
diff
changeset
|
42 |
107
c9f5ee891b5e
change variable of setNextBitVectorList()
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
105
diff
changeset
|
43 return prev; |
105
766fc2476f01
fix indent size
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
104
diff
changeset
|
44 } else if (n->Value.character == '|') { |
109
6401c708f5dd
fix printBitVectorList (print Loop when include asterisk node)
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
108
diff
changeset
|
45 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
|
46 setNextBitVectorList(n->left->Value.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
|
47 bvl = descendTreeNode(n->right, bvl, prev, rightIsOr, fromAsterisk); |
107
c9f5ee891b5e
change variable of setNextBitVectorList()
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
105
diff
changeset
|
48 setNextBitVectorList(n->right->Value.character, prev, bvl); |
105
766fc2476f01
fix indent size
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
104
diff
changeset
|
49 fromOr = true; |
766fc2476f01
fix indent size
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
104
diff
changeset
|
50 return prev; |
766fc2476f01
fix indent size
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
104
diff
changeset
|
51 } else if (n->Value.character == '+') { |
109
6401c708f5dd
fix printBitVectorList (print Loop when include asterisk node)
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
108
diff
changeset
|
52 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
|
53 setNextBitVectorList(n->left->Value.character, prev, bvl); |
105
766fc2476f01
fix indent size
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
104
diff
changeset
|
54 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
|
55 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
|
56 |
105
766fc2476f01
fix indent size
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
104
diff
changeset
|
57 if (leftIsOr){ |
766fc2476f01
fix indent size
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
104
diff
changeset
|
58 for (int i = 0; i < 256; i++) |
766fc2476f01
fix indent size
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
104
diff
changeset
|
59 if (prev->next[i] != NULL) |
107
c9f5ee891b5e
change variable of setNextBitVectorList()
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
105
diff
changeset
|
60 setNextBitVectorList(n->right->Value.character, prev->next[i], bvl); |
105
766fc2476f01
fix indent size
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
104
diff
changeset
|
61 } |
766fc2476f01
fix indent size
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
104
diff
changeset
|
62 else { |
107
c9f5ee891b5e
change variable of setNextBitVectorList()
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
105
diff
changeset
|
63 setNextBitVectorList(n->right->Value.character, prev, bvl); |
105
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 |
766fc2476f01
fix indent size
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
104
diff
changeset
|
66 fromOr = false; |
766fc2476f01
fix indent size
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
104
diff
changeset
|
67 } else if (n->tokenType == 'a') { |
766fc2476f01
fix indent size
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
104
diff
changeset
|
68 bvl = createBitVector(n,bvl); |
766fc2476f01
fix indent size
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
104
diff
changeset
|
69 fromOr = false; |
101 | 70 } |
105
766fc2476f01
fix indent size
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
104
diff
changeset
|
71 return bvl; |
101 | 72 } |
96
b807383bcc43
add createBitVectorList.cc
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
73 |
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 } |