changeset 127:b061cd8205cc pairPro

merge
author masa
date Tue, 01 Dec 2015 21:50:09 +0900
parents 639b0b437ebf (current diff) c363a66dc1a7 (diff)
children f827682d4687
files c/regexParser/regexParser.cc
diffstat 1 files changed, 10 insertions(+), 11 deletions(-) [+]
line wrap: on
line diff
--- 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;
 }
 
-// <regexAtom> ::= <literal>|<charClass>|<group>
+// <regexAtom> ::= <literal>|<charClass>
 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> ::= <regexAtom> | <regexAtom>'*' | <regexAtom>'|'<regex> | <regexAtom><regex> | '(' 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);
         }