annotate regexParser/generateSequentialSearch.cc @ 296:28c695dac305

Todo
author Shinji KONO <kono@ie.u-ryukyu.ac.jp>
date Tue, 02 Feb 2016 11:50:33 +0900
parents f2491681914e
children 63213964502a
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>
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 {
288
f2491681914e special state for start search
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 242
diff changeset
42 if (state->accept) {
242
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 }