comparison regexParser/subsetConstruction.cc @ 224:474fc9f844db

fix exportState()
author Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
date Fri, 15 Jan 2016 16:12:19 +0900
parents e430b7d0b33d
children 0c28ff35b4f0
comparison
equal deleted inserted replaced
223:e430b7d0b33d 224:474fc9f844db
320 char s[SIZE]; 320 char s[SIZE];
321 fputs("unsigned char *buff, *buffptr, buffend;\n",fp); 321 fputs("unsigned char *buff, *buffptr, buffend;\n",fp);
322 for (;state;state = state->next) { 322 for (;state;state = state->next) {
323 sprintf(s,"void state%lx() {\n",state->bitState.bitContainer); 323 sprintf(s,"void state%lx() {\n",state->bitState.bitContainer);
324 fputs(s,fp); 324 fputs(s,fp);
325 fputs(" unsigned char c = *buffptr++;\n",fp); 325 if (state->bitState.bitContainer == 2) { // Accept
326 CharClassWalkerPtr ccw = createCharClassWalker(state->cc); 326 fputs(" // Accept\n",fp);
327 while (hasNext(ccw)) { 327 } else { // not Accept
328 CharClassPtr cc = getNext(ccw); 328 fputs(" unsigned char c = *buffptr++;\n",fp);
329 unsigned long begin = cc->cond.range.begin; 329 CharClassWalkerPtr ccw = createCharClassWalker(state->cc);
330 unsigned long end = cc->cond.range.end; 330 bool flag = true;
331 BitVector bi = cc->nextState; 331 while (hasNext(ccw)) {
332 if (bi.bitContainer == 2) { 332 CharClassPtr cc = getNext(ccw);
333 fputs(" // Accept\n",fp); 333 unsigned long begin = cc->cond.range.begin;
334 } else { 334 unsigned long end = cc->cond.range.end;
335 BitVector bi = cc->nextState;
336 if (flag) {
337 flag = false;
338 } else {
339 fputs(" else ",fp);
340 }
335 if (begin == end) { 341 if (begin == end) {
336 sprintf(s," if (c=='%c') state%lu();\n",(unsigned char)begin, bi.bitContainer); 342 sprintf(s," if (c=='%c') state%lu();\n",(unsigned char)begin, bi.bitContainer);
337 fputs(s,fp); 343 fputs(s,fp);
338 } else { 344 } else {
339 sprintf(s," if (c<'%c') state1();\n",(unsigned char)begin); 345 sprintf(s," if (c<'%c') state1();\n",(unsigned char)begin);
340 fputs(s,fp); 346 fputs(s,fp);
341 sprintf(s," else if (c<='%c') state%lu();\n",(unsigned char)end, bi.bitContainer); 347 sprintf(s," else if (c<='%c') state%lu();\n",(unsigned char)end, bi.bitContainer);
342 fputs(s,fp); 348 fputs(s,fp);
343 } 349 }
344 } 350 }
345 } 351 sprintf(s," else state1();\n");
346 sprintf(s," state1();\n"); 352 fputs(s,fp);
347 fputs(s,fp); 353 }
348 fputs("}\n\n",fp); 354 fputs("}\n\n",fp);
349 } 355 }
350 fclose(fp); 356 fclose(fp);
351 } 357 }
352 358