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;