Mercurial > hg > Applications > Grep
annotate regexParser/generateSequentialSearch.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 | |
children | b4022ba23de5 |
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 fputs("unsigned char *buff, *buffptr, buffend;\n",fp); |
0c28ff35b4f0
add generateSequentialSearch
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
10 fputs( |
0c28ff35b4f0
add generateSequentialSearch
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
11 "void stateSkip() {\n" |
0c28ff35b4f0
add generateSequentialSearch
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
12 " matchBegin = buffptr;\n" |
0c28ff35b4f0
add generateSequentialSearch
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
13 " state1();\n" |
0c28ff35b4f0
add generateSequentialSearch
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
14 "}\n" |
0c28ff35b4f0
add generateSequentialSearch
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
15 "\n" |
0c28ff35b4f0
add generateSequentialSearch
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
16 "void stateMatch() {\n" |
0c28ff35b4f0
add generateSequentialSearch
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
17 " fwrite(matchBegin,buffptr-matchBegin,1,fp);\n" |
0c28ff35b4f0
add generateSequentialSearch
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
18 " fputs(\"\\n\");\n" |
0c28ff35b4f0
add generateSequentialSearch
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
19 " stateSkip();\n" |
0c28ff35b4f0
add generateSequentialSearch
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
20 "}\n" |
0c28ff35b4f0
add generateSequentialSearch
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
21 ,fp); |
0c28ff35b4f0
add generateSequentialSearch
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
22 for (;state;state = state->next) { |
0c28ff35b4f0
add generateSequentialSearch
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
23 fprintf(fp,"void state%lx();\n",state->bitState.bitContainer); |
0c28ff35b4f0
add generateSequentialSearch
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
24 } |
0c28ff35b4f0
add generateSequentialSearch
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
25 fputs("\n",fp); |
0c28ff35b4f0
add generateSequentialSearch
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
26 for (;state;state = state->next) { |
0c28ff35b4f0
add generateSequentialSearch
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
27 fprintf(fp,"void state%lx() {\n",state->bitState.bitContainer); |
0c28ff35b4f0
add generateSequentialSearch
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
28 if (state->bitState.bitContainer == 2) { // Accept |
0c28ff35b4f0
add generateSequentialSearch
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
29 fputs(" // Accept\n",fp); |
0c28ff35b4f0
add generateSequentialSearch
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
30 } else { // not Accept |
0c28ff35b4f0
add generateSequentialSearch
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
31 fputs(" unsigned char c = *buffptr++;\n",fp); |
0c28ff35b4f0
add generateSequentialSearch
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
32 CharClassWalkerPtr ccw = createCharClassWalker(state->cc); |
0c28ff35b4f0
add generateSequentialSearch
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
33 bool flag = true; |
0c28ff35b4f0
add generateSequentialSearch
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
34 while (hasNext(ccw)) { |
0c28ff35b4f0
add generateSequentialSearch
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
35 CharClassPtr cc = getNext(ccw); |
0c28ff35b4f0
add generateSequentialSearch
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
36 unsigned long begin = cc->cond.range.begin; |
0c28ff35b4f0
add generateSequentialSearch
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
37 unsigned long end = cc->cond.range.end; |
0c28ff35b4f0
add generateSequentialSearch
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
38 BitVector bi = cc->nextState; |
0c28ff35b4f0
add generateSequentialSearch
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
39 if (flag) { |
0c28ff35b4f0
add generateSequentialSearch
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
40 flag = false; |
0c28ff35b4f0
add generateSequentialSearch
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
41 } else { |
0c28ff35b4f0
add generateSequentialSearch
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
42 fputs(" else ",fp); |
0c28ff35b4f0
add generateSequentialSearch
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
43 } |
0c28ff35b4f0
add generateSequentialSearch
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
44 if (begin == end) { |
0c28ff35b4f0
add generateSequentialSearch
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
45 fprintf(fp," if (c=='%c') state%lu();\n",(unsigned char)begin, bi.bitContainer); |
0c28ff35b4f0
add generateSequentialSearch
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
46 } else { |
0c28ff35b4f0
add generateSequentialSearch
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
47 fprintf(fp," if (c<'%c') state1();\n",(unsigned char)begin); |
0c28ff35b4f0
add generateSequentialSearch
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
48 fprintf(fp," else if (c<='%c') state%lu();\n",(unsigned char)end, bi.bitContainer); |
0c28ff35b4f0
add generateSequentialSearch
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
49 } |
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 if (state->bitState.bitContainer == 2) { |
0c28ff35b4f0
add generateSequentialSearch
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
52 fprintf(fp," else stateMatch();\n"); |
0c28ff35b4f0
add generateSequentialSearch
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
53 } else { |
0c28ff35b4f0
add generateSequentialSearch
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
54 fprintf(fp," else stateSkip();\n"); |
0c28ff35b4f0
add generateSequentialSearch
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
55 } |
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 fputs("}\n\n",fp); |
0c28ff35b4f0
add generateSequentialSearch
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
58 } |
0c28ff35b4f0
add generateSequentialSearch
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
59 fclose(fp); |
0c28ff35b4f0
add generateSequentialSearch
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
60 } |