Mercurial > hg > Applications > Grep
comparison c/regexParser/subsetConstraction.cc @ 163:f0a347cd9c6a pairPro
fix subsetconstraction.cc
author | masa |
---|---|
date | Fri, 18 Dec 2015 19:44:07 +0900 |
parents | dcd751ba7103 |
children | 96854eba17e5 |
comparison
equal
deleted
inserted
replaced
162:d7f762404113 | 163:f0a347cd9c6a |
---|---|
18 } else { | 18 } else { |
19 CharClassPtr cc1 = createCharClassRange(begin,end,NULL,cc); | 19 CharClassPtr cc1 = createCharClassRange(begin,end,NULL,cc); |
20 cc1->nextState = nextState; | 20 cc1->nextState = nextState; |
21 return cc1; | 21 return cc1; |
22 } | 22 } |
23 } else if (end == cc->cond.range.begin ) { // 2 | 23 } else if (end == cc->cond.range.begin && begin != end ) { // 2 |
24 CharClassPtr cc1; | 24 CharClassPtr cc1; |
25 if (cc->left) { | 25 if (cc->left) { |
26 cc1 = charClassMerge(cc->left,begin,end-1,nextState); | 26 cc1 = charClassMerge(cc->left,begin,end-1,nextState); |
27 } else { | 27 } else { |
28 cc1 = createCharClassRange(begin,end-1,NULL,NULL); | 28 cc1 = createCharClassRange(begin,end-1,NULL,NULL); |
36 CharClassPtr cc3 = createCharClassRange(cc->cond.range.begin+1,cc->cond.range.end,cc->left,cc->right); | 36 CharClassPtr cc3 = createCharClassRange(cc->cond.range.begin+1,cc->cond.range.end,cc->left,cc->right); |
37 cc3->nextState = cc->nextState; | 37 cc3->nextState = cc->nextState; |
38 CharClassPtr cc2 = createCharClassRange(cc->cond.range.begin,cc->cond.range.begin,cc1,cc3); | 38 CharClassPtr cc2 = createCharClassRange(cc->cond.range.begin,cc->cond.range.begin,cc1,cc3); |
39 cc2->nextState.bitContainer = cc->nextState.bitContainer | nextState.bitContainer; | 39 cc2->nextState.bitContainer = cc->nextState.bitContainer | nextState.bitContainer; |
40 return cc2; | 40 return cc2; |
41 } else if (end < cc->cond.range.end) { | 41 } else if (end < cc->cond.range.end) { // range.begin < end |
42 if (begin < cc->cond.range.begin) { // 3 | 42 if (begin < cc->cond.range.begin) { // 3 |
43 CharClassPtr cc1; | 43 CharClassPtr cc1; |
44 if (cc->left) { | 44 if (cc->left) { |
45 cc1 = charClassMerge(cc->left,begin,cc->cond.range.begin-1,nextState); | 45 cc1 = charClassMerge(cc->left,begin,cc->cond.range.begin-1,nextState); |
46 } else { | 46 } else { |
52 CharClassPtr cc2 = createCharClassRange(cc->cond.range.begin,end,cc1,cc3); | 52 CharClassPtr cc2 = createCharClassRange(cc->cond.range.begin,end,cc1,cc3); |
53 cc2->nextState.bitContainer = cc->nextState.bitContainer | nextState.bitContainer; | 53 cc2->nextState.bitContainer = cc->nextState.bitContainer | nextState.bitContainer; |
54 return cc2; | 54 return cc2; |
55 } | 55 } |
56 if (begin == cc->cond.range.begin) { // 6 | 56 if (begin == cc->cond.range.begin) { // 6 |
57 CharClassPtr cc2 = createCharClassRange(end,cc->cond.range.end,NULL,cc->right); | 57 CharClassPtr cc2 = createCharClassRange(end+1,cc->cond.range.end,NULL,cc->right); |
58 cc2->nextState = cc->nextState; | 58 cc2->nextState = cc->nextState; |
59 CharClassPtr cc1 = createCharClassRange(begin,end,cc->left,cc2); | 59 CharClassPtr cc1 = createCharClassRange(begin,end,cc->left,cc2); |
60 cc1->nextState.bitContainer = cc->nextState.bitContainer | nextState.bitContainer; | 60 cc1->nextState.bitContainer = cc->nextState.bitContainer | nextState.bitContainer; |
61 return cc1; | 61 return cc1; |
62 } | 62 } |
63 // 9 | 63 // 9 |
64 CharClassPtr cc2 = createCharClassRange(cc->cond.range.begin,begin-1,cc->left,NULL); | 64 CharClassPtr cc2 = createCharClassRange(cc->cond.range.begin,begin-1,cc->left,NULL); |
65 cc2->nextState = cc2->nextState; | 65 cc2->nextState = cc->nextState; |
66 CharClassPtr cc3 = createCharClassRange(end+1,cc->cond.range.end,NULL,cc->right); | 66 CharClassPtr cc3 = createCharClassRange(end+1,cc->cond.range.end,NULL,cc->right); |
67 cc3->nextState = cc->nextState; | 67 cc3->nextState = cc->nextState; |
68 CharClassPtr cc1 = createCharClassRange(begin,end,cc2,cc3); | 68 CharClassPtr cc1 = createCharClassRange(begin,end,cc2,cc3); |
69 cc1->nextState.bitContainer = cc->nextState.bitContainer | nextState.bitContainer; | 69 cc1->nextState.bitContainer = cc->nextState.bitContainer | nextState.bitContainer; |
70 return cc1; | 70 return cc1; |
83 } | 83 } |
84 CharClassPtr cc3 = createCharClassRange(cc->cond.range.begin,end,cc1,cc->right); | 84 CharClassPtr cc3 = createCharClassRange(cc->cond.range.begin,end,cc1,cc->right); |
85 cc3->nextState.bitContainer = cc->nextState.bitContainer | nextState.bitContainer; | 85 cc3->nextState.bitContainer = cc->nextState.bitContainer | nextState.bitContainer; |
86 return cc3; | 86 return cc3; |
87 } | 87 } |
88 // 10 | 88 // 10 cond.range.begin < begin |
89 CharClassPtr cc2 = createCharClassRange(begin,cc->cond.range.end,NULL,cc->right); | 89 CharClassPtr cc2 = createCharClassRange(begin,cc->cond.range.end,NULL,cc->right); |
90 cc2->nextState.bitContainer = cc->nextState.bitContainer | nextState.bitContainer; | 90 cc2->nextState.bitContainer = cc->nextState.bitContainer | nextState.bitContainer; |
91 CharClassPtr cc1 = createCharClassRange(cc->cond.range.begin,begin-1,NULL,NULL); | 91 CharClassPtr cc1 = createCharClassRange(cc->cond.range.begin,begin-1,cc->left,cc2); |
92 cc1->nextState = cc->nextState; | 92 cc1->nextState = cc->nextState; |
93 return cc1; | 93 return cc1; |
94 } | 94 } |
95 if (begin > cc->cond.range.end ) { // 13 | 95 if (begin > cc->cond.range.end ) { // 13 |
96 if (cc->right) { | 96 if (cc->right) { |
100 cc1->nextState = nextState; | 100 cc1->nextState = nextState; |
101 return cc1; | 101 return cc1; |
102 } | 102 } |
103 } | 103 } |
104 if (begin >= cc->cond.range.begin && begin <= cc->cond.range.end) { | 104 if (begin >= cc->cond.range.begin && begin <= cc->cond.range.end) { |
105 if (end > cc->cond.range.end) { | 105 if (end > cc->cond.range.end) { // cond.range.end < end |
106 if (begin == cc->cond.range.begin) { // 8 | 106 if (begin == cc->cond.range.begin) { // 8 |
107 CharClassPtr cc1; | 107 CharClassPtr cc1; |
108 <<<<<<< local | |
109 if (cc->right) { | 108 if (cc->right) { |
110 cc1 = charClassMerge(cc->right,begin,end-1,nextState); | 109 cc1 = charClassMerge(cc->right,cc->cond.range.end+1,end,nextState); |
111 ======= | |
112 if (cc->right) { | |
113 cc1 = charClassMerge(cc->right,begin,cc->cond.range.end,nextState); | |
114 >>>>>>> other | |
115 } else { | 110 } else { |
116 cc1 = createCharClassRange(begin,cc->cond.range.end,NULL,NULL); | 111 cc1 = createCharClassRange(cc->cond.range.end+1,end,NULL,NULL); |
117 cc1->nextState = nextState; | 112 cc1->nextState = nextState; |
118 } | 113 } |
119 CharClassPtr cc3 = createCharClassRange(cc->cond.range.end+1,end,cc->left,cc1); | 114 CharClassPtr cc3 = createCharClassRange(cc->cond.range.begin,cc->cond.range.end,cc->left,cc1); |
120 cc3->nextState.bitContainer = cc->nextState.bitContainer | nextState.bitContainer; | 115 cc3->nextState.bitContainer = cc->nextState.bitContainer | nextState.bitContainer; |
121 return cc3; | 116 return cc3; |
122 } | 117 } |
123 | |
124 if (begin > cc->cond.range.begin) { // 11 | 118 if (begin > cc->cond.range.begin) { // 11 |
125 CharClassPtr cc1; | 119 CharClassPtr cc1; |
126 if (cc->right) { | 120 if (cc->right) { |
127 cc1 = charClassMerge(cc->right,cc->cond.range.end+1,end,nextState); | 121 cc1 = charClassMerge(cc->right,cc->cond.range.end+1,end,nextState); |
128 } else { | 122 } else { |
129 cc1 = createCharClassRange(cc->cond.range.end+1,end,NULL,NULL); | 123 cc1 = createCharClassRange(cc->cond.range.end+1,end,NULL,NULL); |
130 cc1->nextState = nextState; | 124 cc1->nextState = nextState; |
131 } | 125 } |
132 CharClassPtr cc3 = createCharClassRange(cc->cond.range.begin,begin-1,cc->left,cc->right); | 126 CharClassPtr cc3 = createCharClassRange(cc->cond.range.begin,begin-1,cc->left,NULL); |
133 cc3->nextState = cc->nextState; | 127 cc3->nextState = cc->nextState; |
134 CharClassPtr cc2 = createCharClassRange(begin,cc->cond.range.end,cc3,cc1); | 128 CharClassPtr cc2 = createCharClassRange(begin,cc->cond.range.end,cc3,cc1); |
135 cc2->nextState.bitContainer = cc->nextState.bitContainer | nextState.bitContainer; | 129 cc2->nextState.bitContainer = cc->nextState.bitContainer | nextState.bitContainer; |
136 return cc2; | 130 return cc2; |
137 } | 131 } |
138 } | 132 } |
139 // 12 | 133 // begin != end && end != cc->cond.range.end |
140 if (begin == cc->cond.range.end) { | 134 if (begin == cc->cond.range.end) { // 12 |
141 CharClassPtr cc1; | 135 CharClassPtr cc1; |
142 if (cc->right) { | 136 if (cc->right) { |
143 cc1 = charClassMerge(cc->right,begin+1,end,nextState); | 137 cc1 = charClassMerge(cc->right,begin+1,end,nextState); |
144 } else { | 138 } else { |
145 cc1 = createCharClassRange(begin+1,end,NULL,NULL); | 139 cc1 = createCharClassRange(begin+1,end,NULL,NULL); |
148 if (cc->cond.range.begin == cc->cond.range.end) { | 142 if (cc->cond.range.begin == cc->cond.range.end) { |
149 CharClassPtr cc2 = createCharClassRange(cc->cond.range.begin,cc->cond.range.end,cc1,cc->right); | 143 CharClassPtr cc2 = createCharClassRange(cc->cond.range.begin,cc->cond.range.end,cc1,cc->right); |
150 cc2->nextState.bitContainer = cc->nextState.bitContainer | nextState.bitContainer; | 144 cc2->nextState.bitContainer = cc->nextState.bitContainer | nextState.bitContainer; |
151 return cc2; | 145 return cc2; |
152 } | 146 } |
153 CharClassPtr cc3; | 147 CharClassPtr cc3 = createCharClassRange(cc->cond.range.begin,cc->cond.range.end-1,cc->left,NULL); |
154 createCharClassRange(cc->cond.range.begin,cc->cond.range.end-1,cc->left,cc->right); | |
155 cc3->nextState = cc->nextState; | 148 cc3->nextState = cc->nextState; |
156 CharClassPtr cc2 = createCharClassRange(cc->cond.range.end,cc->cond.range.end,cc1,cc3); | 149 CharClassPtr cc2 = createCharClassRange(cc->cond.range.end,cc->cond.range.end,cc1,cc3); |
157 cc2->nextState.bitContainer = cc->nextState.bitContainer | nextState.bitContainer; | 150 cc2->nextState.bitContainer = cc->nextState.bitContainer | nextState.bitContainer; |
158 return cc2; | 151 return cc2; |
159 } | 152 } |
160 | |
161 } else if (begin < cc->cond.range.begin) { // 5 | 153 } else if (begin < cc->cond.range.begin) { // 5 |
162 CharClassPtr cc2 = createCharClassRange(cc->cond.range.begin,begin-1,cc->left,NULL); | 154 CharClassPtr cc1; |
163 cc2->nextState = cc1->nextState; | 155 if (cc->left) { |
164 CharClassPtr cc3 = createCharClassRange(end+1,cc->cond.range.end,NULL,cc->right); | 156 cc1 = charClassMerge(cc->left,begin,cc->cond.range.begin-1,nextState); |
165 cc3->nextState = cc->nextState; | 157 } else { |
166 CharClassPtr cc1 = createCharClassRange(cc->cond.range.begin,cc->cond.range.end,cc2,cc3); | 158 cc1 = createCharClassRange(begin,cc->cond.range.begin-1,NULL,NULL); |
167 cc1->nextState.bitContainer = cc->nextState.bitContainer | nextState.bitContainer; | 159 cc1->nextState = nextState; |
168 return cc1; | 160 } |
161 CharClassPtr cc3; | |
162 if (cc->right) { | |
163 cc3 = charClassMerge(cc->right,cc->cond.range.end+1,end,nextState); | |
164 } else { | |
165 cc3 = createCharClassRange(cc->cond.range.end+1,end,NULL,NULL); | |
166 cc3->nextState = nextState; | |
167 } | |
168 CharClassPtr cc2 = createCharClassRange(cc->cond.range.begin,cc->cond.range.end,cc1,cc3); | |
169 cc2->nextState.bitContainer = cc->nextState.bitContainer | nextState.bitContainer; | |
170 return cc2; | |
169 } else { | 171 } else { |
170 printf("charClassMerge Error : begin %lu end %lu cc->begin %lu cc->end %lu\n", begin,end,cc->cond.range.begin,cc->cond.range.end); | 172 printf("charClassMerge Error : begin %lu end %lu cc->begin %lu cc->end %lu\n", begin,end,cc->cond.range.begin,cc->cond.range.end); |
171 } | 173 } |
172 return cc; | 174 return cc; |
173 } | 175 } |