# HG changeset patch # User masa # Date 1448974209 -32400 # Node ID b061cd8205ccc577037f29f80eaf85cc15b5fed8 # Parent 639b0b437ebf9df8605ad15835cbf3087e10e4e9# Parent c363a66dc1a7119bb459c6161db9f2876147a78e merge diff -r 639b0b437ebf -r b061cd8205cc c/regexParser/regexParser.cc --- a/c/regexParser/regexParser.cc Tue Dec 01 21:42:05 2015 +0900 +++ b/c/regexParser/regexParser.cc Tue Dec 01 21:50:09 2015 +0900 @@ -90,6 +90,7 @@ rangeList->next = NULL; i++; } + // TODO literal support rangeList->end = ri->ptr + i - 1; @@ -116,9 +117,6 @@ ri->ptr++; ri->tokenType = '('; ri->tokenValue = NULL; - if (ri->ptr[1] == ')') { - ri->ptr++; - } return; } else if (ri->ptr[0] == ')') { ri->ptr++; @@ -129,9 +127,6 @@ ri->ptr++; ri->tokenType = 'c'; ri->tokenValue = ri->ptr; - if (ri->ptr[1] == ']') { - ri->ptr++; - } return; } else if (ri->ptr[0] == '|'){ ri->ptr++; @@ -164,22 +159,20 @@ return; } -// ::= || +// ::= | static NodePtr regexAtom(RegexInfoPtr ri) { token(ri); NodePtr n = NULL; - if (ri->tokenType == 'a') n = literal(ri); - else if (ri->tokenType == 'c') n = charClass(ri); - else if (ri->tokenType == '(') n = group(ri); + if (ri->tokenType == 'c') n = charClass(ri); return n; } // ::= | '*' | '|' | | '(' regex ')' NodePtr regex(RegexInfoPtr ri) { - NodePtr n = regexAtom(ri); + NodePtr n = NULL; while (ri->ptr[0]) { token(ri); if (ri->tokenType == '*') { @@ -189,7 +182,13 @@ n = createNode(ri,'|',n,n1); } else if (ri->tokenType == ')') { return n; + } else if (ri->tokenType == 'a') { + NodePtr n1 = literal(ri); + unsigned char *syntax = (unsigned char*)malloc(sizeof(unsigned char)); + syntax[0] = '+'; + n = createNode(ri,syntax,n,n1); } else { + // return NULL NodePtr n1 = regex(ri); n = createNode(ri,'a',n,n1); }