diff regexParser/regexParser.cc @ 308:1188debbef10

separate CharClass
author Shinji KONO <kono@ie.u-ryukyu.ac.jp>
date Mon, 08 Feb 2016 12:45:45 +0900
parents 3e78631a6222
children a4484c02cba5
line wrap: on
line diff
--- a/regexParser/regexParser.cc	Mon Feb 08 12:26:53 2016 +0900
+++ b/regexParser/regexParser.cc	Mon Feb 08 12:45:45 2016 +0900
@@ -3,6 +3,7 @@
 #include <string.h>
 #include <ctype.h>
 #include "regexParser.h"
+#include "CharClass.h"
 
 static NodePtr charClass(RegexInfoPtr);
 static void token(RegexInfoPtr);
@@ -37,90 +38,6 @@
     return n;
 }
 
-CharClassPtr createCharClassWord(RegexInfoPtr ri) {
-    CharClassPtr cc = NEW(CharClass);
-    cc->type = 'a';
-    cc->left = NULL;
-    cc->right = NULL;
-    cc->cond.w.word = ri->tokenValue;
-    cc->cond.w.length = ri->ptr - ri->tokenValue;
-    cc->cond.range.begin = cc->cond.range.end = *ri->tokenValue;
-    return cc;
-}
-
-/*
-    cond.range.begin  cond.range.end
-           |----------------|
-  1.b---e
-  2.b------e
-  3.b------------e
-  4.b-----------------------e
-  5.b----------------------------e
-
-           |----------------|
-  6.       b---------e
-  7.       b----------------e
-  8.       b---------------------e
-
-           |----------------|
-  9.               b-----e
-  10.              b--------e
-  11.              b-------------e
-
-           |----------------|
-  12.                       b-----e
-
-           |----------------|
-  13.                          b--e
-
- */
-CharClassPtr insertCharClass(CharClassPtr cc, unsigned long begin, unsigned long end) {
-    if (begin>end) {
-        unsigned long tmp = begin; begin = end; end = tmp;
-    }
-    if (cc == NULL) {
-        return createCharClassRange(begin,end,0,0,0);
-    }
-    if (end < cc->cond.range.begin ) { // 1
-        if (cc->left) {
-            cc->left = insertCharClass(cc->left,begin,end);
-        } else {
-            cc->left = createCharClassRange(begin,end,0,0,0);
-        }
-        return cc;
-    } else if (end == cc->cond.range.begin ) { // 2
-        cc->cond.range.begin = begin;
-        return cc;
-    } else if (end <= cc->cond.range.end) {  // 3,4,6,7,9,10
-        if (begin < cc->cond.range.begin) {  // 3,4
-            cc->cond.range.begin = begin;
-        }
-        return cc;
-    } else if (begin > cc->cond.range.end ) { // 13
-        if (cc->right) {
-            cc->right = insertCharClass(cc->right,begin,end);
-        } else {
-            cc->right = createCharClassRange(begin,end,0,0,0);
-        }
-        return cc;
-    }
-    if (cc->right) {
-        CharClassPtr right = cc->right;
-        begin = cc->cond.range.begin;
-        free(cc);
-        return insertCharClass(right,begin,end);
-    }
-    if (begin >= cc->cond.range.begin && begin <= cc->cond.range.end) { // 12
-        if (end > cc->cond.range.end) cc->cond.range.end = end; // 11,8
-    } else if (begin < cc->cond.range.begin) { // 5
-        cc->cond.range.begin = begin;
-        cc->cond.range.end = end; 
-    } else {
-        printf("insertCharClass Error : begin %lu end %lu cc->begin %lu cc->end %lu\n", begin,end,cc->cond.range.begin,cc->cond.range.end);
-    }
-    return cc;
-}
-
 // <charClass> ::= '['<literal>'-'<literal>']'
 static
 NodePtr charClass(RegexInfoPtr ri) {