Mercurial > hg > Applications > Grep
comparison regexParser/subsetConstruction.cc @ 225:0c28ff35b4f0
add generateSequentialSearch
author | Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp> |
---|---|
date | Fri, 15 Jan 2016 16:47:03 +0900 |
parents | 474fc9f844db |
children | 8be58af605da |
comparison
equal
deleted
inserted
replaced
224:474fc9f844db | 225:0c28ff35b4f0 |
---|---|
310 tgv.tg->stateArray[endState->bitState.bitContainer] = endState; | 310 tgv.tg->stateArray[endState->bitState.bitContainer] = endState; |
311 tgv.startState = startState; | 311 tgv.startState = startState; |
312 tgv.endState = endState; | 312 tgv.endState = endState; |
313 tgv = generateTransition(n,tgv,2); | 313 tgv = generateTransition(n,tgv,2); |
314 return tgv; | 314 return tgv; |
315 } | |
316 | |
317 void exportState(TransitionGeneratorPtr tg) { | |
318 StatePtr state = tg->stateList; | |
319 FILE *fp = fopen("state.cc","w"); | |
320 char s[SIZE]; | |
321 fputs("unsigned char *buff, *buffptr, buffend;\n",fp); | |
322 for (;state;state = state->next) { | |
323 sprintf(s,"void state%lx() {\n",state->bitState.bitContainer); | |
324 fputs(s,fp); | |
325 if (state->bitState.bitContainer == 2) { // Accept | |
326 fputs(" // Accept\n",fp); | |
327 } else { // not Accept | |
328 fputs(" unsigned char c = *buffptr++;\n",fp); | |
329 CharClassWalkerPtr ccw = createCharClassWalker(state->cc); | |
330 bool flag = true; | |
331 while (hasNext(ccw)) { | |
332 CharClassPtr cc = getNext(ccw); | |
333 unsigned long begin = cc->cond.range.begin; | |
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 } | |
341 if (begin == end) { | |
342 sprintf(s," if (c=='%c') state%lu();\n",(unsigned char)begin, bi.bitContainer); | |
343 fputs(s,fp); | |
344 } else { | |
345 sprintf(s," if (c<'%c') state1();\n",(unsigned char)begin); | |
346 fputs(s,fp); | |
347 sprintf(s," else if (c<='%c') state%lu();\n",(unsigned char)end, bi.bitContainer); | |
348 fputs(s,fp); | |
349 } | |
350 } | |
351 sprintf(s," else state1();\n"); | |
352 fputs(s,fp); | |
353 } | |
354 fputs("}\n\n",fp); | |
355 } | |
356 fclose(fp); | |
357 } | 315 } |
358 | 316 |
359 void printState(StatePtr state) { | 317 void printState(StatePtr state) { |
360 printf("state : %lx\n",state->bitState.bitContainer); | 318 printf("state : %lx\n",state->bitState.bitContainer); |
361 long nodeNumber = 0; | 319 long nodeNumber = 0; |