Mercurial > hg > Applications > Grep
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; |