annotate regexParser/generateSequentialSearch.cc @ 226:b4022ba23de5

add sequentialSearch
author Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
date Fri, 15 Jan 2016 17:53:11 +0900
parents 0c28ff35b4f0
children 8be58af605da
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
225
0c28ff35b4f0 add generateSequentialSearch
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1 #include <stdio.h>
0c28ff35b4f0 add generateSequentialSearch
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
2
0c28ff35b4f0 add generateSequentialSearch
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
3 #include "generateSequentialSearch.h"
0c28ff35b4f0 add generateSequentialSearch
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
4 #include "subsetConstruction.h"
0c28ff35b4f0 add generateSequentialSearch
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
5
0c28ff35b4f0 add generateSequentialSearch
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
6 void exportState(TransitionGeneratorPtr tg) {
0c28ff35b4f0 add generateSequentialSearch
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
7 StatePtr state = tg->stateList;
0c28ff35b4f0 add generateSequentialSearch
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
8 FILE *fp = fopen("state.cc","w");
0c28ff35b4f0 add generateSequentialSearch
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
9 for (;state;state = state->next) {
0c28ff35b4f0 add generateSequentialSearch
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
10 fprintf(fp,"void state%lx();\n",state->bitState.bitContainer);
0c28ff35b4f0 add generateSequentialSearch
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
11 }
226
b4022ba23de5 add sequentialSearch
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents: 225
diff changeset
12
b4022ba23de5 add sequentialSearch
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents: 225
diff changeset
13 fputs(
b4022ba23de5 add sequentialSearch
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents: 225
diff changeset
14 "void stateSkip(BufferList buff) {\n"
b4022ba23de5 add sequentialSearch
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents: 225
diff changeset
15 " buff.matchBegin = buff.buffptr;\n"
b4022ba23de5 add sequentialSearch
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents: 225
diff changeset
16 " state1(buff);\n"
b4022ba23de5 add sequentialSearch
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents: 225
diff changeset
17 "}\n"
b4022ba23de5 add sequentialSearch
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents: 225
diff changeset
18 "\n"
b4022ba23de5 add sequentialSearch
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents: 225
diff changeset
19 "void stateMatch(BufferList buff) {\n"
b4022ba23de5 add sequentialSearch
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents: 225
diff changeset
20 " fwrite(buff.matchBegin,buff.buffptr-buff.matchBegin,1,stdout);\n"
b4022ba23de5 add sequentialSearch
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents: 225
diff changeset
21 " puts(\"\\n\");\n"
b4022ba23de5 add sequentialSearch
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents: 225
diff changeset
22 " stateSkip(buff);\n"
b4022ba23de5 add sequentialSearch
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents: 225
diff changeset
23 "}\n"
b4022ba23de5 add sequentialSearch
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents: 225
diff changeset
24 ,fp);
225
0c28ff35b4f0 add generateSequentialSearch
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
25 fputs("\n",fp);
226
b4022ba23de5 add sequentialSearch
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents: 225
diff changeset
26 for (state = tg->stateList;state;state = state->next) {
b4022ba23de5 add sequentialSearch
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents: 225
diff changeset
27 fprintf(fp,"void state%lx(BufferList buff) {\n",state->bitState.bitContainer);
225
0c28ff35b4f0 add generateSequentialSearch
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
28 if (state->bitState.bitContainer == 2) { // Accept
226
b4022ba23de5 add sequentialSearch
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents: 225
diff changeset
29 fputs(" stateMatch(buff);\n",fp);
225
0c28ff35b4f0 add generateSequentialSearch
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
30 } else { // not Accept
226
b4022ba23de5 add sequentialSearch
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents: 225
diff changeset
31 fputs(" if (buff.buffptr >= buff.buffend) return;\n",fp);
225
0c28ff35b4f0 add generateSequentialSearch
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
32 fputs(" unsigned char c = *buffptr++;\n",fp);
0c28ff35b4f0 add generateSequentialSearch
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
33 CharClassWalkerPtr ccw = createCharClassWalker(state->cc);
0c28ff35b4f0 add generateSequentialSearch
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
34 bool flag = true;
0c28ff35b4f0 add generateSequentialSearch
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
35 while (hasNext(ccw)) {
0c28ff35b4f0 add generateSequentialSearch
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
36 CharClassPtr cc = getNext(ccw);
0c28ff35b4f0 add generateSequentialSearch
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
37 unsigned long begin = cc->cond.range.begin;
0c28ff35b4f0 add generateSequentialSearch
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
38 unsigned long end = cc->cond.range.end;
0c28ff35b4f0 add generateSequentialSearch
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
39 BitVector bi = cc->nextState;
0c28ff35b4f0 add generateSequentialSearch
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
40 if (flag) {
0c28ff35b4f0 add generateSequentialSearch
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
41 flag = false;
0c28ff35b4f0 add generateSequentialSearch
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
42 } else {
0c28ff35b4f0 add generateSequentialSearch
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
43 fputs(" else ",fp);
0c28ff35b4f0 add generateSequentialSearch
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
44 }
0c28ff35b4f0 add generateSequentialSearch
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
45 if (begin == end) {
226
b4022ba23de5 add sequentialSearch
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents: 225
diff changeset
46 fprintf(fp," if (c=='%c') state%lx(buff);\n",(unsigned char)begin, bi.bitContainer);
225
0c28ff35b4f0 add generateSequentialSearch
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
47 } else {
226
b4022ba23de5 add sequentialSearch
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents: 225
diff changeset
48 fprintf(fp," if (c<'%c') stateSkip(buff);\n",(unsigned char)begin);
b4022ba23de5 add sequentialSearch
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents: 225
diff changeset
49 fprintf(fp," else if (c<='%c') state%lx(buff);\n",(unsigned char)end, bi.bitContainer);
225
0c28ff35b4f0 add generateSequentialSearch
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
50 }
0c28ff35b4f0 add generateSequentialSearch
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
51 }
0c28ff35b4f0 add generateSequentialSearch
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
52 if (state->bitState.bitContainer == 2) {
226
b4022ba23de5 add sequentialSearch
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents: 225
diff changeset
53 fprintf(fp," else stateMatch(buff);\n");
225
0c28ff35b4f0 add generateSequentialSearch
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
54 } else {
226
b4022ba23de5 add sequentialSearch
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents: 225
diff changeset
55 fprintf(fp," else stateSkip(buff);\n");
225
0c28ff35b4f0 add generateSequentialSearch
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
56 }
0c28ff35b4f0 add generateSequentialSearch
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
57 }
0c28ff35b4f0 add generateSequentialSearch
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
58 fputs("}\n\n",fp);
0c28ff35b4f0 add generateSequentialSearch
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
59 }
0c28ff35b4f0 add generateSequentialSearch
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
60 fclose(fp);
0c28ff35b4f0 add generateSequentialSearch
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
61 }