Mercurial > hg > Applications > Grep
annotate c/regexParser/subsetConstraction.cc @ 154:1fad21fd6028 pairPro
remove errors and warnings
author | masa |
---|---|
date | Fri, 18 Dec 2015 14:16:02 +0900 |
parents | e2e717fbeb2f |
children | 6cd0141bed6c |
rev | line source |
---|---|
96
b807383bcc43
add createBitVectorList.cc
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
1 #include <stdio.h> |
b807383bcc43
add createBitVectorList.cc
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
2 #include <stdlib.h> |
101 | 3 #include <ctype.h> |
117
166136236891
add header files
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
116
diff
changeset
|
4 #include "subsetConstraction.h" |
96
b807383bcc43
add createBitVectorList.cc
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
5 |
144
d8a4922eceae
remove some errors (not working)
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
143
diff
changeset
|
6 CharClassPtr createCharClassWord(unsigned char *w, CharClassPtr cc1, CharClassPtr cc2) { |
146 | 7 CharClassPtr cc = NEW(CharClass); |
154 | 8 return cc; |
144
d8a4922eceae
remove some errors (not working)
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
143
diff
changeset
|
9 } |
d8a4922eceae
remove some errors (not working)
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
143
diff
changeset
|
10 |
152 | 11 CharClassPtr charClassMerge(CharClassPtr cc,unsigned long begin, unsigned long end, BitVector nextState) { |
143 | 12 // 重なっているccの領域を分割する |
13 // 必要ならばnextStateを重ねあわせる | |
14 // 変更があった場合は新しくリストを作って返す | |
152 | 15 if (end < cc->cond.range.begin ) { // 1 |
153 | 16 CharClassPtr cc1 = charClassMerge(cc,cc->cond.range.begin,cc->cond.range.end,nextState); |
152 | 17 if (cc->left) { |
18 cc1->left = charClassMerge(cc->left,begin,end,nextState); | |
19 return cc1; | |
20 } else { | |
154 | 21 CharClassPtr cc2 = charClassMerge(cc,begin,end,nextState); |
152 | 22 cc2->nextState = nextState; |
23 cc1->left = cc2; | |
24 return cc1; | |
25 } | |
26 } else if (end == cc->cond.range.begin ) { // 2 | |
27 cc->cond.range.begin = begin; | |
28 return cc; | |
29 } else if (end <= cc->cond.range.end) { // 3,4,6,7,9,10 | |
30 if (begin < cc->cond.range.begin) { // 3,4 | |
31 cc->cond.range.begin = begin; | |
144
d8a4922eceae
remove some errors (not working)
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
143
diff
changeset
|
32 } |
152 | 33 return cc; |
34 } else if (begin > cc->cond.range.end ) { // 13 | |
35 if (cc->right) { | |
154 | 36 cc->right = charClassMerge(cc->right,begin,end,nextState); |
152 | 37 } else { |
154 | 38 cc->right = charClassMerge(cc,begin,end,nextState); |
152 | 39 } |
40 return cc; | |
143 | 41 } |
152 | 42 if (cc->right) { |
43 CharClassPtr right = cc->right; | |
44 begin = cc->cond.range.begin; | |
45 free(cc); | |
154 | 46 return charClassMerge(right,begin,end,nextState); |
152 | 47 } |
48 if (begin >= cc->cond.range.begin && begin <= cc->cond.range.end) { // 12 | |
49 if (end > cc->cond.range.end) cc->cond.range.end = end; // 11,8 | |
153 | 50 } else if (begin < cc->cond.range.begin) { // 5 |
152 | 51 cc->cond.range.begin = begin; |
52 cc->cond.range.end = end; | |
53 } else { | |
54 printf("charClassMerge Error : begin %lu end %lu cc->begin %lu cc->end %lu\n", begin,end,cc->cond.range.begin,cc->cond.range.end); | |
55 } | |
56 return cc; | |
143 | 57 } |
58 | |
142 | 59 TGValue generateTransition(NodePtr n,TransitionGenerator tg) { |
154 | 60 TGValue tgv2; |
141
71f36a59cf6a
add appendState
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
139
diff
changeset
|
61 if (n->tokenType == '+') { |
142 | 62 TGValue tgv = generateTransition(n->left,tg); |
63 if (tgv.asterisk) { | |
64 TGValue tgv1 = generateTransition(n->right,tg); | |
153 | 65 tgv.ts->nextState->bitContainer |= tgv1.ts->nextState->bitContainer; |
142 | 66 return tgv; |
67 } | |
153 | 68 TGValue tgv1 = generateTransition(n->right,tg); |
69 tgv.ts->nextState = tgv1.ts->nextState; | |
142 | 70 return tgv; |
141
71f36a59cf6a
add appendState
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
139
diff
changeset
|
71 } else if (n->tokenType == '|') { |
153 | 72 TGValue tgv = generateTransition(n->left,tg); |
73 TGValue tgv1 = generateTransition(n->right,tg); | |
74 tgv.ts = appendTransition(tgv.ts,tgv1.ts); | |
75 return tgv; | |
141
71f36a59cf6a
add appendState
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
139
diff
changeset
|
76 } else if (n->tokenType == '*') { |
153 | 77 TGValue tgv = generateTransition(n->left,tg); |
78 tgv.asterisk = true; | |
79 return tgv; | |
144
d8a4922eceae
remove some errors (not working)
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
143
diff
changeset
|
80 } else if (n->tokenType == 'c'){ |
154 | 81 return tgv2; |
144
d8a4922eceae
remove some errors (not working)
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
143
diff
changeset
|
82 } else if (n->tokenType == 'a'){ |
153 | 83 TGValue tgv; |
84 tgv.ts = (TransitionPtr)malloc(sizeof(Transition)); | |
85 tgv.ts->condition = n->cc; | |
86 tgv.ts->nextState = (BitVectorPtr)malloc(sizeof(BitVector)); | |
87 bitSet(tgv.ts->nextState,n->nodeNumber); | |
88 tg.ts = appendTransition(tg.ts,tgv.ts); | |
89 return tgv; | |
141
71f36a59cf6a
add appendState
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
139
diff
changeset
|
90 } else { |
144
d8a4922eceae
remove some errors (not working)
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
143
diff
changeset
|
91 // error |
141
71f36a59cf6a
add appendState
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
139
diff
changeset
|
92 } |
154 | 93 return tgv2; |
141
71f36a59cf6a
add appendState
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
139
diff
changeset
|
94 } |
71f36a59cf6a
add appendState
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
139
diff
changeset
|
95 |
153 | 96 void printTransitionList(TransitionPtr ts) { |
97 for (;ts;ts = ts->next) { | |
98 printf("\n"); | |
99 } | |
100 } | |
101 | |
144
d8a4922eceae
remove some errors (not working)
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
143
diff
changeset
|
102 TransitionGenerator generateTransitionList(NodePtr n) { |
d8a4922eceae
remove some errors (not working)
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
143
diff
changeset
|
103 TransitionGenerator tg; |
153 | 104 tg.ts = (TransitionPtr)malloc(sizeof(Transition)); |
141
71f36a59cf6a
add appendState
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
139
diff
changeset
|
105 generateTransition(n,tg); |
153 | 106 printTransitionList(tg.ts); |
141
71f36a59cf6a
add appendState
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
139
diff
changeset
|
107 return tg; |
71f36a59cf6a
add appendState
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
139
diff
changeset
|
108 } |