Mercurial > hg > Applications > Grep
comparison c/regexParser/regexParser.cc @ 148:d1ebba6e117a pairPro
add test routing
author | Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp> |
---|---|
date | Tue, 15 Dec 2015 18:09:54 +0900 |
parents | 84d32375383a |
children | f1880f25fabf |
comparison
equal
deleted
inserted
replaced
147:84d32375383a | 148:d1ebba6e117a |
---|---|
59 return cc; | 59 return cc; |
60 } | 60 } |
61 | 61 |
62 CharClassPtr insertCharClass(CharClassPtr cc, unsigned char begin, unsigned char end) { | 62 CharClassPtr insertCharClass(CharClassPtr cc, unsigned char begin, unsigned char end) { |
63 if (end < cc->cond.range.begin ) { | 63 if (end < cc->cond.range.begin ) { |
64 CharClassPtr cc1 = createCharClassRange(cc->begin,cc->end,cc->left,cc->right); | 64 CharClassPtr cc1 = createCharClassRange(cc->cond.range.begin,cc->cond.range.end,cc->left,cc->right); |
65 if (cc->left) { | 65 if (cc->left) { |
66 cc1->left = insertCharClass(cc->left,begin,end); | 66 cc1->left = insertCharClass(cc->left,begin,end); |
67 return cc1; | 67 return cc1; |
68 } else { | 68 } else { |
69 CharClassPtr cc2 = createCharClassRange(begin,end,0,0); | 69 CharClassPtr cc2 = createCharClassRange(begin,end,0,0); |
75 } else if (end <= cc->cond.range.end) { | 75 } else if (end <= cc->cond.range.end) { |
76 if (begin < cc->cond.range.begin) { | 76 if (begin < cc->cond.range.begin) { |
77 cc->cond.range.begin = begin; | 77 cc->cond.range.begin = begin; |
78 } | 78 } |
79 } else if (begin > cc->cond.range.end ) { | 79 } else if (begin > cc->cond.range.end ) { |
80 CharClassPtr cc1 = createCharClassRange(cc->begin,cc->end,cc->left,cc->right); | 80 CharClassPtr cc1 = createCharClassRange(cc->cond.range.begin,cc->cond.range.end,cc->left,cc->right); |
81 if (cc->right) { | 81 if (cc->right) { |
82 cc1->rigt = insertCharClass(cc->right,begin,end); | 82 cc1->right = insertCharClass(cc->right,begin,end); |
83 return cc1; | 83 return cc1; |
84 } else { | 84 } else { |
85 CharClassPtr cc2 = createCharClassRange(begin,end,0,0); | 85 CharClassPtr cc2 = createCharClassRange(begin,end,0,0); |
86 cc1->right = cc2; | 86 cc1->right = cc2; |
87 return cc1; | 87 return cc1; |
99 NodePtr charClass(RegexInfoPtr ri) { | 99 NodePtr charClass(RegexInfoPtr ri) { |
100 CharClassPtr cc = NEW(CharClass); | 100 CharClassPtr cc = NEW(CharClass); |
101 NodePtr n = createNode(ri,'c',cc,0,0); | 101 NodePtr n = createNode(ri,'c',cc,0,0); |
102 cc->type = 'r'; | 102 cc->type = 'r'; |
103 cc->nextState.bitContainer = 0; | 103 cc->nextState.bitContainer = 0; |
104 cc->left = NULL; | |
105 cc->right = NULL; | |
104 RangeListPtr rangeList = &cc->cond.range; | 106 RangeListPtr rangeList = &cc->cond.range; |
105 rangeList->begin = *ri->ptr; | 107 rangeList->begin = *ri->ptr; |
106 rangeList->end = *ri->ptr; | 108 rangeList->end = *ri->ptr; |
107 rangeList->next = NULL; | 109 rangeList->next = NULL; |
108 | 110 |