# 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;
 }
 
-// <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);
         }