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 }