Mercurial > hg > Applications > Grep
annotate regexParser/transition.cc @ 176:c092dd0e1ae0 pairPro
implement appendState() and serchState()
author | Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp> |
---|---|
date | Wed, 23 Dec 2015 15:41:27 +0900 |
parents | 3be0fbcd4b52 |
children | 8de9a33f6ae5 |
rev | line source |
---|---|
116
66c633575b53
remove error and warning
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
112
diff
changeset
|
1 #include <stdlib.h> |
111 | 2 #include "transition.h" |
3 | |
176
c092dd0e1ae0
implement appendState() and serchState()
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
175
diff
changeset
|
4 StatePtr searchState(StatePtr stateArray, StatePtr state) { |
c092dd0e1ae0
implement appendState() and serchState()
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
175
diff
changeset
|
5 while(stateArray) { |
c092dd0e1ae0
implement appendState() and serchState()
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
175
diff
changeset
|
6 if (stateArray->bitState.bitContainer == state->bitState.bitContainer) { |
c092dd0e1ae0
implement appendState() and serchState()
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
175
diff
changeset
|
7 return stateArray; |
c092dd0e1ae0
implement appendState() and serchState()
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
175
diff
changeset
|
8 } |
c092dd0e1ae0
implement appendState() and serchState()
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
175
diff
changeset
|
9 if (stateArray->next == NULL) { |
c092dd0e1ae0
implement appendState() and serchState()
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
175
diff
changeset
|
10 StatePtr s = createState(state,state->bitState); |
c092dd0e1ae0
implement appendState() and serchState()
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
175
diff
changeset
|
11 stateArray = appendState(stateArray,s); |
c092dd0e1ae0
implement appendState() and serchState()
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
175
diff
changeset
|
12 return stateArray; |
c092dd0e1ae0
implement appendState() and serchState()
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
175
diff
changeset
|
13 } |
c092dd0e1ae0
implement appendState() and serchState()
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
175
diff
changeset
|
14 stateArray = stateArray->next; |
c092dd0e1ae0
implement appendState() and serchState()
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
175
diff
changeset
|
15 } |
c092dd0e1ae0
implement appendState() and serchState()
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
175
diff
changeset
|
16 return stateArray; |
c092dd0e1ae0
implement appendState() and serchState()
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
175
diff
changeset
|
17 } |
c092dd0e1ae0
implement appendState() and serchState()
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
175
diff
changeset
|
18 |
175
3be0fbcd4b52
implement createTransitionGenerator
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
172
diff
changeset
|
19 StatePtr createState(StatePtr state,BitVector bi) { |
3be0fbcd4b52
implement createTransitionGenerator
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
172
diff
changeset
|
20 StatePtr s = state; |
3be0fbcd4b52
implement createTransitionGenerator
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
172
diff
changeset
|
21 state = NEW(State); |
3be0fbcd4b52
implement createTransitionGenerator
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
172
diff
changeset
|
22 state->bitState = bi; |
3be0fbcd4b52
implement createTransitionGenerator
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
172
diff
changeset
|
23 state->transition = NEW(Transition); |
3be0fbcd4b52
implement createTransitionGenerator
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
172
diff
changeset
|
24 state->nextNode = NEW(Node); |
3be0fbcd4b52
implement createTransitionGenerator
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
172
diff
changeset
|
25 return s; |
3be0fbcd4b52
implement createTransitionGenerator
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
172
diff
changeset
|
26 } |
3be0fbcd4b52
implement createTransitionGenerator
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
172
diff
changeset
|
27 |
176
c092dd0e1ae0
implement appendState() and serchState()
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
175
diff
changeset
|
28 StatePtr appendState(StatePtr x,StatePtr y) { |
c092dd0e1ae0
implement appendState() and serchState()
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
175
diff
changeset
|
29 StatePtr x0 = createState(x,x->bitState); |
c092dd0e1ae0
implement appendState() and serchState()
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
175
diff
changeset
|
30 StatePtr x1 = x0; |
c092dd0e1ae0
implement appendState() and serchState()
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
175
diff
changeset
|
31 for(;;) { |
c092dd0e1ae0
implement appendState() and serchState()
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
175
diff
changeset
|
32 if (x->next == NULL) { |
c092dd0e1ae0
implement appendState() and serchState()
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
175
diff
changeset
|
33 x1->next = y; |
c092dd0e1ae0
implement appendState() and serchState()
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
175
diff
changeset
|
34 return x0; |
c092dd0e1ae0
implement appendState() and serchState()
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
175
diff
changeset
|
35 } |
c092dd0e1ae0
implement appendState() and serchState()
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
175
diff
changeset
|
36 x = x->next; |
c092dd0e1ae0
implement appendState() and serchState()
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
175
diff
changeset
|
37 x1->next = createState(x,x->bitState); |
c092dd0e1ae0
implement appendState() and serchState()
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
175
diff
changeset
|
38 x1 = x1->next; |
c092dd0e1ae0
implement appendState() and serchState()
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
175
diff
changeset
|
39 } |
c092dd0e1ae0
implement appendState() and serchState()
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
175
diff
changeset
|
40 return x0; |
c092dd0e1ae0
implement appendState() and serchState()
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
175
diff
changeset
|
41 } |
c092dd0e1ae0
implement appendState() and serchState()
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
175
diff
changeset
|
42 |
111 | 43 TransitionPtr createTransition(CharClassPtr cc, BitVectorPtr state) { |
175
3be0fbcd4b52
implement createTransitionGenerator
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
172
diff
changeset
|
44 TransitionPtr transition = NEW(Transition); |
111 | 45 transition->condition = cc; |
172
540fc12871d9
remove some warnings and errors (not working)
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
167
diff
changeset
|
46 transition->condition->nextState = *state; |
111 | 47 return transition; |
48 } | |
49 | |
50 TransitionPtr appendTransition0(TransitionPtr x, TransitionPtr y) { | |
51 TransitionPtr x0 = x; | |
52 for(;;) { | |
53 if (x->next == NULL) { | |
116
66c633575b53
remove error and warning
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
112
diff
changeset
|
54 x->next = y; |
111 | 55 return x0; |
56 } | |
57 } | |
58 return x; | |
59 } | |
60 | |
61 TransitionPtr appendTransition(TransitionPtr x, TransitionPtr y) { | |
172
540fc12871d9
remove some warnings and errors (not working)
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
167
diff
changeset
|
62 TransitionPtr x0 = createTransition(x->condition, &x->condition->nextState); |
111 | 63 TransitionPtr x1 = x0; |
64 for(;;) { | |
65 if (x->next == NULL) { | |
66 x1->next = y; | |
67 return x0; | |
68 } | |
69 x = x->next; | |
172
540fc12871d9
remove some warnings and errors (not working)
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
167
diff
changeset
|
70 x1->next = createTransition(x->condition, &x->condition->nextState); |
111 | 71 x1 = x1->next; |
72 } | |
73 return x0; | |
74 } |