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