comparison regexParser/subsetConstraction.cc @ 172:540fc12871d9 pairPro

remove some warnings and errors (not working)
author Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
date Tue, 22 Dec 2015 15:56:33 +0900
parents 684363c44d6f
children cca8bb5aeded
comparison
equal deleted inserted replaced
171:684363c44d6f 172:540fc12871d9
110 printf("charClassMerge Error : begin %lu end %lu cc->begin %lu cc->end %lu\n", begin,end,cc->cond.range.begin,cc->cond.range.end); 110 printf("charClassMerge Error : begin %lu end %lu cc->begin %lu cc->end %lu\n", begin,end,cc->cond.range.begin,cc->cond.range.end);
111 } 111 }
112 return cc; 112 return cc;
113 } 113 }
114 114
115 CharClassWalkerPtr findLeftMost(CharClassPtr next,CharClassWalker walk) { 115 CharClassWalkerPtr findLeftMost(CharClassPtr next,CharClassWalkerPtr walk) {
116 while (next->left) { 116 while (next->left) {
117 CharClassStackPtr ccs = NEW(CharClassStack); 117 CharClassStackPtr ccs = NEW(CharClassStack);
118 ccs->next = &walk.stack; 118 ccs->next = &walk->stack;
119 ccs->left = false; 119 ccs->left = false;
120 ccs->cc = next; 120 ccs->cc = next;
121 walk.stack = *ccs; 121 walk->stack = *ccs;
122 next = next->left; 122 next = next->left;
123 } 123 }
124 walk.next = next; 124 walk->next = next;
125 return &walk; 125 return walk;
126 } 126 }
127 127
128 CharClassWalkerPtr createCharClassWalker (CharClassPtr next) { 128 CharClassWalkerPtr createCharClassWalker (CharClassPtr next) {
129 CharClassWalkerPtr walk = NEW(CharClassWalker); 129 CharClassWalkerPtr walk = NEW(CharClassWalker);
130 walk->next = NULL; 130 walk->next = NULL;
131 if (!next) return walk; 131 if (!next) return walk;
132 if (!next->left) { 132 if (!next->left) {
133 walk->next = next; 133 walk->next = next;
134 return walk; 134 return walk;
135 } 135 }
136 walk = findLeftMost(next,*walk); 136 walk = findLeftMost(next,walk);
137 return walk; 137 return walk;
138 } 138 }
139 139
140 bool hasNext(CharClassWalkerPtr walk) { 140 bool hasNext(CharClassWalkerPtr walk) {
141 return walk->next != NULL; 141 return walk->next != NULL;
143 143
144 CharClassPtr getNext(CharClassWalkerPtr walk) { 144 CharClassPtr getNext(CharClassWalkerPtr walk) {
145 CharClassPtr current = walk->next; 145 CharClassPtr current = walk->next;
146 if (walk->next->left && current->right) { 146 if (walk->next->left && current->right) {
147 walk->stack.left = true; 147 walk->stack.left = true;
148 CharClassPtr next = findLeftMost(current->right,*walk)->next; 148 CharClassPtr next = findLeftMost(current->right,walk)->next;
149 walk->next = next; 149 walk->next = next;
150 } else { 150 } else {
151 TransitionPtr tsOld = ts; 151 TransitionPtr tsOld = ts;
152 ts = ts->next; 152 ts = ts->next;
153 free(tsOld); 153 free(tsOld);
160 } 160 }
161 161
162 TransitionPtr mergeTransition(TransitionPtr x,TransitionPtr y) { 162 TransitionPtr mergeTransition(TransitionPtr x,TransitionPtr y) {
163 CharClassWalkerPtr walk = createCharClassWalker(x->condition); 163 CharClassWalkerPtr walk = createCharClassWalker(x->condition);
164 CharClassPtr ccy = y->condition; 164 CharClassPtr ccy = y->condition;
165 BitVector bi;
165 for (CharClassPtr cc = getNext(walk); hasNext(walk); cc=getNext(walk)) { 166 for (CharClassPtr cc = getNext(walk); hasNext(walk); cc=getNext(walk)) {
166 unsigned long begin = cc->cond.range.begin; 167 unsigned long begin = cc->cond.range.begin;
167 unsigned long end = cc->cond.range.end; 168 unsigned long end = cc->cond.range.end;
168 BitVector bi = cc->nextState; 169 bi = cc->nextState;
169 ccy = charClassMerge(ccy,begin,end,bi); 170 ccy = charClassMerge(ccy,begin,end,bi);
170 } 171 }
171 TransitionPtr z = createTransition(ccy); 172 TransitionPtr z = createTransition(ccy,&bi);
172 free(walk); 173 free(walk);
173 return z; 174 return z;
174 } 175 }
175 176
176 TGValue generateTransition(NodePtr n,TransitionGenerator tg) { 177 TGValue generateTransition(NodePtr n,TransitionGenerator tg) {
193 } else if (n->tokenType == '*') { 194 } else if (n->tokenType == '*') {
194 TGValue tgv = generateTransition(n->left,tg); 195 TGValue tgv = generateTransition(n->left,tg);
195 tgv.asterisk = true; 196 tgv.asterisk = true;
196 return tgv; 197 return tgv;
197 } else if (n->tokenType == 'c'){ 198 } else if (n->tokenType == 'c'){
198 tgv2.ts = createTransition(n->cc); 199 tgv2.ts = createTransition(n->cc,0);
199 return tgv2; 200 return tgv2;
200 } else if (n->tokenType == 'a'){ 201 } else if (n->tokenType == 'a'){
201 TGValue tgv; 202 TGValue tgv;
202 tgv.ts = (TransitionPtr)malloc(sizeof(Transition)); 203 tgv.ts = (TransitionPtr)malloc(sizeof(Transition));
203 tgv.ts->condition = n->cc; 204 tgv.ts->condition = n->cc;