# HG changeset patch # User Masataka Kohagura # Date 1452841939 -32400 # Node ID 474fc9f844dbecae0b69a0f251c11a0cf2fe7aa0 # Parent e430b7d0b33db3b80f01668d18462b5aadc56892 fix exportState() diff -r e430b7d0b33d -r 474fc9f844db regexParser/subsetConstruction.cc --- a/regexParser/subsetConstruction.cc Fri Jan 15 15:57:22 2016 +0900 +++ b/regexParser/subsetConstruction.cc Fri Jan 15 16:12:19 2016 +0900 @@ -322,16 +322,22 @@ for (;state;state = state->next) { sprintf(s,"void state%lx() {\n",state->bitState.bitContainer); fputs(s,fp); - fputs(" unsigned char c = *buffptr++;\n",fp); - CharClassWalkerPtr ccw = createCharClassWalker(state->cc); - while (hasNext(ccw)) { - CharClassPtr cc = getNext(ccw); - unsigned long begin = cc->cond.range.begin; - unsigned long end = cc->cond.range.end; - BitVector bi = cc->nextState; - if (bi.bitContainer == 2) { - fputs(" // Accept\n",fp); - } else { + if (state->bitState.bitContainer == 2) { // Accept + fputs(" // Accept\n",fp); + } else { // not Accept + fputs(" unsigned char c = *buffptr++;\n",fp); + CharClassWalkerPtr ccw = createCharClassWalker(state->cc); + bool flag = true; + while (hasNext(ccw)) { + CharClassPtr cc = getNext(ccw); + unsigned long begin = cc->cond.range.begin; + unsigned long end = cc->cond.range.end; + BitVector bi = cc->nextState; + if (flag) { + flag = false; + } else { + fputs(" else ",fp); + } if (begin == end) { sprintf(s," if (c=='%c') state%lu();\n",(unsigned char)begin, bi.bitContainer); fputs(s,fp); @@ -342,9 +348,9 @@ fputs(s,fp); } } + sprintf(s," else state1();\n"); + fputs(s,fp); } - sprintf(s," state1();\n"); - fputs(s,fp); fputs("}\n\n",fp); } fclose(fp);