Mercurial > hg > Applications > Grep
annotate c/regexParser/transition.cc @ 141:71f36a59cf6a pairPro
add appendState
author | Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp> |
---|---|
date | Fri, 11 Dec 2015 13:12:42 +0900 |
parents | 84a2a5209d3a |
children |
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 | |
141
71f36a59cf6a
add appendState
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
140
diff
changeset
|
4 StatePtr createState(BitVectorPtr bi, TransitionPtr ts, StatePtr next) { |
71f36a59cf6a
add appendState
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
140
diff
changeset
|
5 StatePtr s = (StatePtr)malloc(sizeof(State)); |
71f36a59cf6a
add appendState
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
140
diff
changeset
|
6 s->bitState = bi; |
71f36a59cf6a
add appendState
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
140
diff
changeset
|
7 s->transition = ts; |
71f36a59cf6a
add appendState
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
140
diff
changeset
|
8 s->next = next; |
71f36a59cf6a
add appendState
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
140
diff
changeset
|
9 return s; |
71f36a59cf6a
add appendState
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
140
diff
changeset
|
10 } |
71f36a59cf6a
add appendState
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
140
diff
changeset
|
11 |
71f36a59cf6a
add appendState
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
140
diff
changeset
|
12 StatePtr appendState(StatePtr x, StatePtr y) { |
71f36a59cf6a
add appendState
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
140
diff
changeset
|
13 if (x == NULL) { |
71f36a59cf6a
add appendState
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
140
diff
changeset
|
14 x = createState(y->bitState,y->transition,y->next); |
71f36a59cf6a
add appendState
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
140
diff
changeset
|
15 return x; |
71f36a59cf6a
add appendState
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
140
diff
changeset
|
16 } |
71f36a59cf6a
add appendState
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
140
diff
changeset
|
17 |
71f36a59cf6a
add appendState
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
140
diff
changeset
|
18 StatePtr x0 = createState(x->bitState, x->transition, x->next); |
71f36a59cf6a
add appendState
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
140
diff
changeset
|
19 StatePtr x1 = x0; |
71f36a59cf6a
add appendState
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
140
diff
changeset
|
20 for(;;) { |
71f36a59cf6a
add appendState
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
140
diff
changeset
|
21 if (x->next == NULL) { |
71f36a59cf6a
add appendState
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
140
diff
changeset
|
22 x1->next = y; |
71f36a59cf6a
add appendState
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
140
diff
changeset
|
23 return x0; |
71f36a59cf6a
add appendState
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
140
diff
changeset
|
24 } |
71f36a59cf6a
add appendState
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
140
diff
changeset
|
25 x = x->next; |
71f36a59cf6a
add appendState
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
140
diff
changeset
|
26 x1->next = createState(x->bitState, x->transition, x->next); |
71f36a59cf6a
add appendState
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
140
diff
changeset
|
27 x1 = x1->next; |
71f36a59cf6a
add appendState
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
140
diff
changeset
|
28 } |
71f36a59cf6a
add appendState
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
140
diff
changeset
|
29 return x0; |
71f36a59cf6a
add appendState
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
140
diff
changeset
|
30 } |
71f36a59cf6a
add appendState
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
140
diff
changeset
|
31 |
111 | 32 TransitionPtr createTransition(CharClassPtr cc, BitVectorPtr state) { |
33 TransitionPtr transition = (TransitionPtr)malloc(sizeof(Transition)); | |
34 transition->condition = cc; | |
35 transition->nextState = state; | |
36 return transition; | |
37 } | |
38 | |
39 TransitionPtr appendTransition0(TransitionPtr x, TransitionPtr y) { | |
40 TransitionPtr x0 = x; | |
41 for(;;) { | |
42 if (x->next == NULL) { | |
116
66c633575b53
remove error and warning
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
112
diff
changeset
|
43 x->next = y; |
111 | 44 return x0; |
45 } | |
46 } | |
47 return x; | |
48 } | |
49 | |
50 TransitionPtr appendTransition(TransitionPtr x, TransitionPtr y) { | |
51 TransitionPtr x0 = createTransition(x->condition, x->nextState); | |
52 TransitionPtr x1 = x0; | |
53 for(;;) { | |
54 if (x->next == NULL) { | |
55 x1->next = y; | |
56 return x0; | |
57 } | |
58 x = x->next; | |
59 x1->next = createTransition(x->condition, x->nextState); | |
60 x1 = x1->next; | |
61 } | |
62 return x0; | |
63 } |