comparison regexParser/regexParser.cc @ 192:ecf70fb215a5 pairPro

print charclass
author Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
date Fri, 25 Dec 2015 19:31:53 +0900
parents 3e8e5780ad4a
children b0ae5273925c
comparison
equal deleted inserted replaced
191:02031fb73af8 192:ecf70fb215a5
18 NodePtr allocateNode() { 18 NodePtr allocateNode() {
19 NodePtr n = NEW(Node); 19 NodePtr n = NEW(Node);
20 n->cc = NULL; 20 n->cc = NULL;
21 n->left = NULL; 21 n->left = NULL;
22 n->right = NULL; 22 n->right = NULL;
23 n->stateNum = 0;
24 n->nextStateNum = 0;
23 return n; 25 return n;
24 } 26 }
25 27
26 NodePtr createNode(RegexInfoPtr ri,unsigned char type,CharClassPtr cc, NodePtr left, NodePtr right) { 28 NodePtr createNode(RegexInfoPtr ri,unsigned char type,CharClassPtr cc, NodePtr left, NodePtr right) {
27 NodePtr n = allocateNode(); 29 NodePtr n = allocateNode();
34 } 36 }
35 37
36 CharClassPtr createCharClassWord(RegexInfoPtr ri) { 38 CharClassPtr createCharClassWord(RegexInfoPtr ri) {
37 CharClassPtr cc = NEW(CharClass); 39 CharClassPtr cc = NEW(CharClass);
38 cc->type = 'a'; 40 cc->type = 'a';
41 cc->left = NULL;
42 cc->right = NULL;
39 cc->cond.w.word = ri->tokenValue; 43 cc->cond.w.word = ri->tokenValue;
40 cc->cond.w.length = ri->ptr - ri->tokenValue; 44 cc->cond.w.length = ri->ptr - ri->tokenValue;
41 cc->cond.range.begin = cc->cond.range.end = *ri->tokenValue; 45 cc->cond.range.begin = cc->cond.range.end = *ri->tokenValue;
46 cc->cond.range.next = NULL;
42 return cc; 47 return cc;
43 } 48 }
44 49
45 /* 50 /*
46 cond.range.begin cond.range.end 51 cond.range.begin cond.range.end
143 RangeListPtr r = cc->cond.range.next; 148 RangeListPtr r = cc->cond.range.next;
144 cc->cond.range.next = 0; 149 cc->cond.range.next = 0;
145 for (; r; r = r->next) { 150 for (; r; r = r->next) {
146 cc = insertCharClass(cc, r->begin, r->end); 151 cc = insertCharClass(cc, r->begin, r->end);
147 } 152 }
148 153 cc->cond.range.next = 0;
149 // TODO literal support 154 // TODO literal support
150 // merge rangeList here 155 // merge rangeList here
151 if (*ri->ptr) ri->ptr++; 156 if (*ri->ptr) ri->ptr++;
152 token(ri); 157 token(ri);
153 return n; 158 return n;
236 n = createNode(ri,'*',0,n,0); 241 n = createNode(ri,'*',0,n,0);
237 token(ri); 242 token(ri);
238 } 243 }
239 return n; 244 return n;
240 } 245 }
241
242 RegexInfoPtr createRegexInfo (RegexInfoPtr ri) {
243 ri->stateNumber++;
244 return ri;
245 }
246
247 246
248 // <regex> ::= <regexAtom> | <regexAtom>'*'<regex> | <regexAtom>'|'<regex> | <regexAtom><regexAtom>'*' | <regexAtom><regex> 247 // <regex> ::= <regexAtom> | <regexAtom>'*'<regex> | <regexAtom>'|'<regex> | <regexAtom><regexAtom>'*' | <regexAtom><regex>
249 NodePtr regex(RegexInfoPtr ri) { 248 NodePtr regex(RegexInfoPtr ri) {
250 token(ri); 249 token(ri);
251 NodePtr n = regexAtom(ri); 250 NodePtr n = regexAtom(ri);