diff regexParser/generateSequentialSearch.cc @ 227:8be58af605da

fix getNext()
author Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
date Fri, 15 Jan 2016 19:11:35 +0900
parents b4022ba23de5
children 2081b9d6a179
line wrap: on
line diff
--- a/regexParser/generateSequentialSearch.cc	Fri Jan 15 17:53:11 2016 +0900
+++ b/regexParser/generateSequentialSearch.cc	Fri Jan 15 19:11:35 2016 +0900
@@ -7,21 +7,8 @@
     StatePtr state = tg->stateList;
     FILE *fp = fopen("state.cc","w");
     for (;state;state = state->next) {
-        fprintf(fp,"void state%lx();\n",state->bitState.bitContainer);
+        fprintf(fp,"void state%lx(BufferList buff);\n",state->bitState.bitContainer);
     }
-
-    fputs(
-"void stateSkip(BufferList buff) {\n"
-"    buff.matchBegin = buff.buffptr;\n"
-"    state1(buff);\n"
-"}\n"
-"\n"
-"void stateMatch(BufferList buff) {\n"
-"    fwrite(buff.matchBegin,buff.buffptr-buff.matchBegin,1,stdout);\n"
-"    puts(\"\\n\");\n"
-"    stateSkip(buff);\n"
-"}\n"
-        ,fp);
     fputs("\n",fp);
     for (state = tg->stateList;state;state = state->next) {
         fprintf(fp,"void state%lx(BufferList buff) {\n",state->bitState.bitContainer);
@@ -29,7 +16,7 @@
             fputs("    stateMatch(buff);\n",fp);
         } else {  // not Accept
             fputs("    if (buff.buffptr >= buff.buffend) return;\n",fp);
-            fputs("    unsigned char c = *buffptr++;\n",fp);
+            fputs("    unsigned char c = *buff.buffptr++;\n",fp);
             CharClassWalkerPtr ccw = createCharClassWalker(state->cc);
             bool flag = true;
             while (hasNext(ccw)) {
@@ -39,13 +26,14 @@
                 BitVector bi = cc->nextState;
                 if (flag) {
                     flag = false;
+                    fputs("    ",fp);
                 } else {
                     fputs("    else ",fp);
                 }
                 if (begin == end) {
-                    fprintf(fp,"    if (c=='%c') state%lx(buff);\n",(unsigned char)begin, bi.bitContainer);
+                    fprintf(fp,"if (c=='%c') state%lx(buff);\n",(unsigned char)begin, bi.bitContainer);
                 } else {
-                    fprintf(fp,"    if (c<'%c') stateSkip(buff);\n",(unsigned char)begin);
+                    fprintf(fp,"if (c<'%c') stateSkip(buff);\n",(unsigned char)begin);
                     fprintf(fp,"    else if (c<='%c') state%lx(buff);\n",(unsigned char)end, bi.bitContainer);
                 }
             }