Mercurial > hg > Applications > Grep
annotate regexParser/grepWalk.cc @ 234:df4d04b3c34a
implement grepWalk (not confirm correct working)
author | Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp> |
---|---|
date | Tue, 19 Jan 2016 14:52:33 +0900 |
parents | 1a34e702776a |
children | 4aab1e93a971 |
rev | line source |
---|---|
231 | 1 #include <stdio.h> |
2 | |
3 #include "grepWalk.h" | |
234
df4d04b3c34a
implement grepWalk (not confirm correct working)
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
232
diff
changeset
|
4 #include "subsetConstruction.h" |
df4d04b3c34a
implement grepWalk (not confirm correct working)
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
232
diff
changeset
|
5 |
df4d04b3c34a
implement grepWalk (not confirm correct working)
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
232
diff
changeset
|
6 void grepMatch(TransitionGeneratorPtr tg,Buffer buff); |
df4d04b3c34a
implement grepWalk (not confirm correct working)
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
232
diff
changeset
|
7 void grep(TransitionGeneratorPtr tg,Buffer buff); |
df4d04b3c34a
implement grepWalk (not confirm correct working)
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
232
diff
changeset
|
8 void grepSkip(TransitionGeneratorPtr tg,Buffer buff); |
df4d04b3c34a
implement grepWalk (not confirm correct working)
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
232
diff
changeset
|
9 |
df4d04b3c34a
implement grepWalk (not confirm correct working)
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
232
diff
changeset
|
10 void grepMatch(TransitionGeneratorPtr tg,Buffer buff) { |
df4d04b3c34a
implement grepWalk (not confirm correct working)
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
232
diff
changeset
|
11 fwrite(buff.matchBegin,buff.buffptr-buff.matchBegin,1,stdout); |
df4d04b3c34a
implement grepWalk (not confirm correct working)
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
232
diff
changeset
|
12 puts("\n"); |
df4d04b3c34a
implement grepWalk (not confirm correct working)
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
232
diff
changeset
|
13 grepSkip(tg,buff); |
df4d04b3c34a
implement grepWalk (not confirm correct working)
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
232
diff
changeset
|
14 } |
df4d04b3c34a
implement grepWalk (not confirm correct working)
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
232
diff
changeset
|
15 |
df4d04b3c34a
implement grepWalk (not confirm correct working)
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
232
diff
changeset
|
16 void grep(TransitionGeneratorPtr tg,Buffer buff,unsigned long d) { |
df4d04b3c34a
implement grepWalk (not confirm correct working)
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
232
diff
changeset
|
17 unsigned char c = *buff.buffptr++; |
df4d04b3c34a
implement grepWalk (not confirm correct working)
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
232
diff
changeset
|
18 StatePtr state = tg->stateList; |
df4d04b3c34a
implement grepWalk (not confirm correct working)
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
232
diff
changeset
|
19 bool found = false; |
df4d04b3c34a
implement grepWalk (not confirm correct working)
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
232
diff
changeset
|
20 |
df4d04b3c34a
implement grepWalk (not confirm correct working)
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
232
diff
changeset
|
21 while (state->bitState.bitContainer != d) state = state->next; |
df4d04b3c34a
implement grepWalk (not confirm correct working)
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
232
diff
changeset
|
22 CharClassWalkerPtr ccw = createCharClassWalker(state->cc); |
df4d04b3c34a
implement grepWalk (not confirm correct working)
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
232
diff
changeset
|
23 CharClassPtr cc = NULL; |
df4d04b3c34a
implement grepWalk (not confirm correct working)
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
232
diff
changeset
|
24 while (hasNext(ccw)) { |
df4d04b3c34a
implement grepWalk (not confirm correct working)
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
232
diff
changeset
|
25 cc = getNext(ccw); |
df4d04b3c34a
implement grepWalk (not confirm correct working)
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
232
diff
changeset
|
26 unsigned long begin = cc->cond.range.begin; |
df4d04b3c34a
implement grepWalk (not confirm correct working)
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
232
diff
changeset
|
27 unsigned long end = cc->cond.range.end; |
df4d04b3c34a
implement grepWalk (not confirm correct working)
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
232
diff
changeset
|
28 if (c < begin) found = false; |
df4d04b3c34a
implement grepWalk (not confirm correct working)
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
232
diff
changeset
|
29 else if (c < end) found = true; |
df4d04b3c34a
implement grepWalk (not confirm correct working)
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
232
diff
changeset
|
30 if (found == true) break; |
df4d04b3c34a
implement grepWalk (not confirm correct working)
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
232
diff
changeset
|
31 } |
df4d04b3c34a
implement grepWalk (not confirm correct working)
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
232
diff
changeset
|
32 |
df4d04b3c34a
implement grepWalk (not confirm correct working)
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
232
diff
changeset
|
33 if (found == false) { |
df4d04b3c34a
implement grepWalk (not confirm correct working)
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
232
diff
changeset
|
34 grepSkip(tg,buff); |
df4d04b3c34a
implement grepWalk (not confirm correct working)
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
232
diff
changeset
|
35 } else if (found == true && (cc->nextState.bitContainer == 2)) { // Accept |
df4d04b3c34a
implement grepWalk (not confirm correct working)
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
232
diff
changeset
|
36 grepMatch(tg,buff); |
df4d04b3c34a
implement grepWalk (not confirm correct working)
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
232
diff
changeset
|
37 } else { |
df4d04b3c34a
implement grepWalk (not confirm correct working)
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
232
diff
changeset
|
38 grep(tg,buff,cc->nextState.bitContainer); |
df4d04b3c34a
implement grepWalk (not confirm correct working)
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
232
diff
changeset
|
39 } |
df4d04b3c34a
implement grepWalk (not confirm correct working)
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
232
diff
changeset
|
40 } |
df4d04b3c34a
implement grepWalk (not confirm correct working)
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
232
diff
changeset
|
41 |
df4d04b3c34a
implement grepWalk (not confirm correct working)
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
232
diff
changeset
|
42 void grepSkip(TransitionGeneratorPtr tg,Buffer buff) { |
df4d04b3c34a
implement grepWalk (not confirm correct working)
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
232
diff
changeset
|
43 buff.matchBegin = buff.buffptr; |
df4d04b3c34a
implement grepWalk (not confirm correct working)
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
232
diff
changeset
|
44 grep(tg,buff,1); // 1 is initState |
df4d04b3c34a
implement grepWalk (not confirm correct working)
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
232
diff
changeset
|
45 } |
231 | 46 |
232
1a34e702776a
add fileread.cc
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
231
diff
changeset
|
47 void grepWalk(TransitionGeneratorPtr tg, Buffer buff) { |
234
df4d04b3c34a
implement grepWalk (not confirm correct working)
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
232
diff
changeset
|
48 grepSkip(tg,buff); |
231 | 49 } |