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