Mercurial > hg > Applications > Grep
annotate regexParser/generateSequentialSearch.cc @ 251:e22e3475f664
fix
author | Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp> |
---|---|
date | Sat, 23 Jan 2016 14:10:28 +0900 |
parents | 6aebc4d7dd75 |
children | f2491681914e |
rev | line source |
---|---|
225
0c28ff35b4f0
add generateSequentialSearch
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
1 #include <stdio.h> |
241
87ad91af8a15
turn initialization in charclasswalk
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
230
diff
changeset
|
2 #include <stdlib.h> |
225
0c28ff35b4f0
add generateSequentialSearch
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
3 |
0c28ff35b4f0
add generateSequentialSearch
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
4 #include "generateSequentialSearch.h" |
0c28ff35b4f0
add generateSequentialSearch
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
5 #include "subsetConstruction.h" |
0c28ff35b4f0
add generateSequentialSearch
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
6 |
0c28ff35b4f0
add generateSequentialSearch
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
7 void exportState(TransitionGeneratorPtr tg) { |
0c28ff35b4f0
add generateSequentialSearch
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
8 StatePtr state = tg->stateList; |
0c28ff35b4f0
add generateSequentialSearch
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
9 FILE *fp = fopen("state.cc","w"); |
241
87ad91af8a15
turn initialization in charclasswalk
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
230
diff
changeset
|
10 if (fp==NULL) { |
87ad91af8a15
turn initialization in charclasswalk
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
230
diff
changeset
|
11 perror(""); |
87ad91af8a15
turn initialization in charclasswalk
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
230
diff
changeset
|
12 fprintf(stderr,"cannot write state.cc\n"); |
87ad91af8a15
turn initialization in charclasswalk
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
230
diff
changeset
|
13 exit(1); |
87ad91af8a15
turn initialization in charclasswalk
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
230
diff
changeset
|
14 } |
225
0c28ff35b4f0
add generateSequentialSearch
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
15 for (;state;state = state->next) { |
230
2081b9d6a179
change var name BufferList to Buffer.
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
227
diff
changeset
|
16 fprintf(fp,"void state%lx(Buffer buff);\n",state->bitState.bitContainer); |
225
0c28ff35b4f0
add generateSequentialSearch
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
17 } |
0c28ff35b4f0
add generateSequentialSearch
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
18 fputs("\n",fp); |
226
b4022ba23de5
add sequentialSearch
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
225
diff
changeset
|
19 for (state = tg->stateList;state;state = state->next) { |
230
2081b9d6a179
change var name BufferList to Buffer.
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
227
diff
changeset
|
20 fprintf(fp,"void state%lx(Buffer buff) {\n",state->bitState.bitContainer); |
225
0c28ff35b4f0
add generateSequentialSearch
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
21 if (state->bitState.bitContainer == 2) { // Accept |
226
b4022ba23de5
add sequentialSearch
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
225
diff
changeset
|
22 fputs(" stateMatch(buff);\n",fp); |
225
0c28ff35b4f0
add generateSequentialSearch
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
23 } else { // not Accept |
226
b4022ba23de5
add sequentialSearch
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
225
diff
changeset
|
24 fputs(" if (buff.buffptr >= buff.buffend) return;\n",fp); |
227
8be58af605da
fix getNext()
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
226
diff
changeset
|
25 fputs(" unsigned char c = *buff.buffptr++;\n",fp); |
225
0c28ff35b4f0
add generateSequentialSearch
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
26 CharClassWalkerPtr ccw = createCharClassWalker(state->cc); |
0c28ff35b4f0
add generateSequentialSearch
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
27 bool flag = true; |
0c28ff35b4f0
add generateSequentialSearch
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
28 while (hasNext(ccw)) { |
0c28ff35b4f0
add generateSequentialSearch
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
29 CharClassPtr cc = getNext(ccw); |
0c28ff35b4f0
add generateSequentialSearch
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
30 unsigned long begin = cc->cond.range.begin; |
0c28ff35b4f0
add generateSequentialSearch
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
31 unsigned long end = cc->cond.range.end; |
0c28ff35b4f0
add generateSequentialSearch
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
32 BitVector bi = cc->nextState; |
0c28ff35b4f0
add generateSequentialSearch
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
33 if (flag) { |
0c28ff35b4f0
add generateSequentialSearch
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
34 flag = false; |
227
8be58af605da
fix getNext()
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
226
diff
changeset
|
35 fputs(" ",fp); |
225
0c28ff35b4f0
add generateSequentialSearch
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
36 } else { |
0c28ff35b4f0
add generateSequentialSearch
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
37 fputs(" else ",fp); |
0c28ff35b4f0
add generateSequentialSearch
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
38 } |
0c28ff35b4f0
add generateSequentialSearch
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
39 if (begin == end) { |
227
8be58af605da
fix getNext()
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
226
diff
changeset
|
40 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
|
41 } else { |
242
6aebc4d7dd75
fix condition generateSequentialSearch
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
241
diff
changeset
|
42 if (state->bitState.bitContainer & 2) { |
6aebc4d7dd75
fix condition generateSequentialSearch
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
241
diff
changeset
|
43 fprintf(fp,"if (c<'%c') stateMatch(buff);\n",(unsigned char)begin); |
6aebc4d7dd75
fix condition generateSequentialSearch
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
241
diff
changeset
|
44 } else { |
6aebc4d7dd75
fix condition generateSequentialSearch
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
241
diff
changeset
|
45 fprintf(fp,"if (c<'%c') stateSkip(buff);\n",(unsigned char)begin); |
6aebc4d7dd75
fix condition generateSequentialSearch
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
241
diff
changeset
|
46 } |
226
b4022ba23de5
add sequentialSearch
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
225
diff
changeset
|
47 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
|
48 } |
0c28ff35b4f0
add generateSequentialSearch
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
49 } |
241
87ad91af8a15
turn initialization in charclasswalk
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
230
diff
changeset
|
50 free(ccw); |
87ad91af8a15
turn initialization in charclasswalk
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
230
diff
changeset
|
51 if (state->bitState.bitContainer & 2) { |
226
b4022ba23de5
add sequentialSearch
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
225
diff
changeset
|
52 fprintf(fp," else stateMatch(buff);\n"); |
225
0c28ff35b4f0
add generateSequentialSearch
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
53 } else { |
226
b4022ba23de5
add sequentialSearch
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
225
diff
changeset
|
54 fprintf(fp," else stateSkip(buff);\n"); |
225
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 } |