Mercurial > hg > Applications > Grep
comparison c/regexParser/regexParser.cc @ 149:f1880f25fabf pairPro
add insertCharClass images
author | Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp> |
---|---|
date | Wed, 16 Dec 2015 15:37:14 +0900 |
parents | d1ebba6e117a |
children | a4940a8dd263 |
comparison
equal
deleted
inserted
replaced
148:d1ebba6e117a | 149:f1880f25fabf |
---|---|
57 cc->cond.w.length = ri->ptr - ri->tokenValue; | 57 cc->cond.w.length = ri->ptr - ri->tokenValue; |
58 cc->nextState.bitContainer = 0; | 58 cc->nextState.bitContainer = 0; |
59 return cc; | 59 return cc; |
60 } | 60 } |
61 | 61 |
62 /* | |
63 cond.range.begin cond.range.end | |
64 |----------------| | |
65 1.b---e | |
66 2.b------e | |
67 3.b------------e | |
68 4.b-----------------------e | |
69 5.b----------------------------e | |
70 | |
71 |----------------| | |
72 6. b---------e | |
73 7. b----------------e | |
74 8. b---------------------e | |
75 | |
76 |----------------| | |
77 9. b-----e | |
78 10. b--------e | |
79 11. b-------------e | |
80 | |
81 |----------------| | |
82 12. b-----e | |
83 | |
84 |----------------| | |
85 13. b--e | |
86 | |
87 */ | |
62 CharClassPtr insertCharClass(CharClassPtr cc, unsigned char begin, unsigned char end) { | 88 CharClassPtr insertCharClass(CharClassPtr cc, unsigned char begin, unsigned char end) { |
63 if (end < cc->cond.range.begin ) { | 89 |
90 if (end < cc->cond.range.begin ) { // 1 | |
64 CharClassPtr cc1 = createCharClassRange(cc->cond.range.begin,cc->cond.range.end,cc->left,cc->right); | 91 CharClassPtr cc1 = createCharClassRange(cc->cond.range.begin,cc->cond.range.end,cc->left,cc->right); |
65 if (cc->left) { | 92 if (cc->left) { |
66 cc1->left = insertCharClass(cc->left,begin,end); | 93 cc1->left = insertCharClass(cc->left,begin,end); |
67 return cc1; | 94 return cc1; |
68 } else { | 95 } else { |
69 CharClassPtr cc2 = createCharClassRange(begin,end,0,0); | 96 CharClassPtr cc2 = createCharClassRange(begin,end,0,0); |
70 cc1->left = cc2; | 97 cc1->left = cc2; |
71 return cc1; | 98 return cc1; |
72 } | 99 } |
73 } else if (end == cc->cond.range.begin ) { | 100 } else if (end == cc->cond.range.begin ) { // 2 |
101 CharClassPtr cc2 = createCharClassRange(begin,end,0,0); | |
74 cc->cond.range.begin = begin; | 102 cc->cond.range.begin = begin; |
75 } else if (end <= cc->cond.range.end) { | 103 } else if (end <= cc->cond.range.end) { // 3,4,6,7,9,10 |
76 if (begin < cc->cond.range.begin) { | 104 if (begin < cc->cond.range.begin) { // 3,4 |
77 cc->cond.range.begin = begin; | 105 cc->cond.range.begin = begin; |
78 } | 106 } |
79 } else if (begin > cc->cond.range.end ) { | 107 } else if (begin > cc->cond.range.end ) { // 13 |
80 CharClassPtr cc1 = createCharClassRange(cc->cond.range.begin,cc->cond.range.end,cc->left,cc->right); | 108 CharClassPtr cc1 = createCharClassRange(cc->cond.range.begin,cc->cond.range.end,cc->left,cc->right); |
81 if (cc->right) { | 109 if (cc->right) { |
82 cc1->right = insertCharClass(cc->right,begin,end); | 110 cc1->right = insertCharClass(cc->right,begin,end); |
83 return cc1; | 111 return cc1; |
84 } else { | 112 } else { |
85 CharClassPtr cc2 = createCharClassRange(begin,end,0,0); | 113 CharClassPtr cc2 = createCharClassRange(begin,end,0,0); |
86 cc1->right = cc2; | 114 cc1->right = cc2; |
87 return cc1; | 115 return cc1; |
88 } | 116 } |
89 } else if (begin == cc->cond.range.end ) { | 117 } else if (begin == cc->cond.range.end ) { // 12 |
90 cc->cond.range.end = end; | 118 cc->cond.range.end = end; |
91 } else if (begin < cc->cond.range.begin) { | 119 } else if (begin < cc->cond.range.begin) { // 5 |
92 cc->cond.range.begin = begin; | 120 cc->cond.range.begin = begin; |
93 } | 121 } |
94 return cc; | 122 return cc; |
95 } | 123 } |
96 | 124 |
113 rangeList->end = *(ri->ptr + 1); | 141 rangeList->end = *(ri->ptr + 1); |
114 ri->ptr++; | 142 ri->ptr++; |
115 continue; | 143 continue; |
116 } | 144 } |
117 if (ri->ptr[0] == 0 || ri->ptr[0] == ']') break; | 145 if (ri->ptr[0] == 0 || ri->ptr[0] == ']') break; |
118 if (ri->ptr[0] == rangeList->end + 1) { | |
119 rangeList->end = *ri->ptr; | |
120 continue; | |
121 } | |
122 rangeList->next = NEW(RangeList); | 146 rangeList->next = NEW(RangeList); |
123 rangeList = rangeList->next; | 147 rangeList = rangeList->next; |
124 rangeList->begin = *ri->ptr; | 148 rangeList->begin = *ri->ptr; |
125 rangeList->end = *ri->ptr; | 149 rangeList->end = *ri->ptr; |
126 rangeList->next = NULL; | 150 rangeList->next = NULL; |