annotate c/regexParser/transition.cc @ 164:93d3ad1d20ed pairPro

add mergeTest.cc
author Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
date Sat, 19 Dec 2015 14:22:17 +0900
parents 71f36a59cf6a
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
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
1d30f70702df add determinize.cc and transition.cc
masa
parents:
diff changeset
2 #include "transition.h"
1d30f70702df add determinize.cc and transition.cc
masa
parents:
diff changeset
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
1d30f70702df add determinize.cc and transition.cc
masa
parents:
diff changeset
32 TransitionPtr createTransition(CharClassPtr cc, BitVectorPtr state) {
1d30f70702df add determinize.cc and transition.cc
masa
parents:
diff changeset
33 TransitionPtr transition = (TransitionPtr)malloc(sizeof(Transition));
1d30f70702df add determinize.cc and transition.cc
masa
parents:
diff changeset
34 transition->condition = cc;
1d30f70702df add determinize.cc and transition.cc
masa
parents:
diff changeset
35 transition->nextState = state;
1d30f70702df add determinize.cc and transition.cc
masa
parents:
diff changeset
36 return transition;
1d30f70702df add determinize.cc and transition.cc
masa
parents:
diff changeset
37 }
1d30f70702df add determinize.cc and transition.cc
masa
parents:
diff changeset
38
1d30f70702df add determinize.cc and transition.cc
masa
parents:
diff changeset
39 TransitionPtr appendTransition0(TransitionPtr x, TransitionPtr y) {
1d30f70702df add determinize.cc and transition.cc
masa
parents:
diff changeset
40 TransitionPtr x0 = x;
1d30f70702df add determinize.cc and transition.cc
masa
parents:
diff changeset
41 for(;;) {
1d30f70702df add determinize.cc and transition.cc
masa
parents:
diff changeset
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
1d30f70702df add determinize.cc and transition.cc
masa
parents:
diff changeset
44 return x0;
1d30f70702df add determinize.cc and transition.cc
masa
parents:
diff changeset
45 }
1d30f70702df add determinize.cc and transition.cc
masa
parents:
diff changeset
46 }
1d30f70702df add determinize.cc and transition.cc
masa
parents:
diff changeset
47 return x;
1d30f70702df add determinize.cc and transition.cc
masa
parents:
diff changeset
48 }
1d30f70702df add determinize.cc and transition.cc
masa
parents:
diff changeset
49
1d30f70702df add determinize.cc and transition.cc
masa
parents:
diff changeset
50 TransitionPtr appendTransition(TransitionPtr x, TransitionPtr y) {
1d30f70702df add determinize.cc and transition.cc
masa
parents:
diff changeset
51 TransitionPtr x0 = createTransition(x->condition, x->nextState);
1d30f70702df add determinize.cc and transition.cc
masa
parents:
diff changeset
52 TransitionPtr x1 = x0;
1d30f70702df add determinize.cc and transition.cc
masa
parents:
diff changeset
53 for(;;) {
1d30f70702df add determinize.cc and transition.cc
masa
parents:
diff changeset
54 if (x->next == NULL) {
1d30f70702df add determinize.cc and transition.cc
masa
parents:
diff changeset
55 x1->next = y;
1d30f70702df add determinize.cc and transition.cc
masa
parents:
diff changeset
56 return x0;
1d30f70702df add determinize.cc and transition.cc
masa
parents:
diff changeset
57 }
1d30f70702df add determinize.cc and transition.cc
masa
parents:
diff changeset
58 x = x->next;
1d30f70702df add determinize.cc and transition.cc
masa
parents:
diff changeset
59 x1->next = createTransition(x->condition, x->nextState);
1d30f70702df add determinize.cc and transition.cc
masa
parents:
diff changeset
60 x1 = x1->next;
1d30f70702df add determinize.cc and transition.cc
masa
parents:
diff changeset
61 }
1d30f70702df add determinize.cc and transition.cc
masa
parents:
diff changeset
62 return x0;
1d30f70702df add determinize.cc and transition.cc
masa
parents:
diff changeset
63 }