Mercurial > hg > Applications > Grep
comparison regexParser/subsetConstruction.cc @ 223:e430b7d0b33d
fix exportState (not correct working)
author | Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp> |
---|---|
date | Fri, 15 Jan 2016 15:57:22 +0900 |
parents | c38a7b2dd996 |
children | 474fc9f844db |
comparison
equal
deleted
inserted
replaced
222:c38a7b2dd996 | 223:e430b7d0b33d |
---|---|
316 | 316 |
317 void exportState(TransitionGeneratorPtr tg) { | 317 void exportState(TransitionGeneratorPtr tg) { |
318 StatePtr state = tg->stateList; | 318 StatePtr state = tg->stateList; |
319 FILE *fp = fopen("state.cc","w"); | 319 FILE *fp = fopen("state.cc","w"); |
320 char s[SIZE]; | 320 char s[SIZE]; |
321 | |
322 fputs("unsigned char *buff, *buffptr, buffend;\n",fp); | 321 fputs("unsigned char *buff, *buffptr, buffend;\n",fp); |
323 for (;state;state = state->next) { | 322 for (;state;state = state->next) { |
324 sprintf(s,"void state%lx() {\n",state->bitState.bitContainer); | 323 sprintf(s,"void state%lx() {\n",state->bitState.bitContainer); |
325 fputs(s,fp); | 324 fputs(s,fp); |
326 if (state->cc->cond.range.begin == state->cc->cond.range.end) { | 325 fputs(" unsigned char c = *buffptr++;\n",fp); |
327 if (state->cc) { // not Accept | 326 CharClassWalkerPtr ccw = createCharClassWalker(state->cc); |
328 fputs(" unsigned char c = *buffptr++;\n",fp); | 327 while (hasNext(ccw)) { |
329 sprintf(s," if (c='%c') state%lu();\n",(unsigned char)state->cc->cond.range.begin, state->cc->nextState.bitContainer); | 328 CharClassPtr cc = getNext(ccw); |
330 fputs(s,fp); | 329 unsigned long begin = cc->cond.range.begin; |
331 } else { // Accept | 330 unsigned long end = cc->cond.range.end; |
331 BitVector bi = cc->nextState; | |
332 if (bi.bitContainer == 2) { | |
332 fputs(" // Accept\n",fp); | 333 fputs(" // Accept\n",fp); |
334 } else { | |
335 if (begin == end) { | |
336 sprintf(s," if (c=='%c') state%lu();\n",(unsigned char)begin, bi.bitContainer); | |
337 fputs(s,fp); | |
338 } else { | |
339 sprintf(s," if (c<'%c') state1();\n",(unsigned char)begin); | |
340 fputs(s,fp); | |
341 sprintf(s," else if (c<='%c') state%lu();\n",(unsigned char)end, bi.bitContainer); | |
342 fputs(s,fp); | |
343 } | |
333 } | 344 } |
334 } else { | 345 } |
335 if (state->cc) { // not Accept | 346 sprintf(s," state1();\n"); |
336 fputs(" unsigned char c = *buffptr++;\n",fp); | 347 fputs(s,fp); |
337 sprintf(s," if (c<'%c') state%lu();\n",(unsigned char)state->cc->cond.range.begin, state->cc->nextState.bitContainer); | 348 fputs("}\n\n",fp); |
338 fputs(s,fp); | |
339 sprintf(s," if (c<'%c') state%lu();\n",(unsigned char)state->cc->cond.range.end, state->cc->nextState.bitContainer); | |
340 fputs(s,fp); | |
341 } else { // Accept | |
342 fputs(" // Accept\n",fp); | |
343 } | |
344 } | |
345 fputs("}\n",fp); | |
346 } | 349 } |
347 fclose(fp); | 350 fclose(fp); |
348 } | 351 } |
349 | 352 |
350 void printState(StatePtr state) { | 353 void printState(StatePtr state) { |