# HG changeset patch # User masa # Date 1449813898 -32400 # Node ID 32977f5a2ed0fcc825c0748dd5964f0599fc4890 # Parent de0f332d560cd29e8cf861f17b10ea20baadfe04 add charClassMerge diff -r de0f332d560c -r 32977f5a2ed0 c/regexParser/regexParser.cc --- a/c/regexParser/regexParser.cc Fri Dec 11 14:54:00 2015 +0900 +++ b/c/regexParser/regexParser.cc Fri Dec 11 15:04:58 2015 +0900 @@ -52,10 +52,7 @@ return n; } -CharClassPtr charClassMerge(CharClassPtr src, CharClassPtr add) { - // 重なっているccの領域を分割する - // 必要ならばnextStateを重ねあわせる - // 変更があった場合は新しくリストを作って返す +CharClassPtr charClassMerge(CharClassPtr cc, unsigned char begin, unsigned char end, CharClassPtr next) { if (src->type == 'a') { if (add->type == 'a') { if (src->cond.w.word[0] > add->cond.w.word[0]) { diff -r de0f332d560c -r 32977f5a2ed0 c/regexParser/subsetConstraction.cc --- a/c/regexParser/subsetConstraction.cc Fri Dec 11 14:54:00 2015 +0900 +++ b/c/regexParser/subsetConstraction.cc Fri Dec 11 15:04:58 2015 +0900 @@ -3,6 +3,29 @@ #include #include "subsetConstraction.h" +CharClassPtr charClassMerge(CharClassPtr src, CharClassPtr add) { + // 重なっているccの領域を分割する + // 必要ならばnextStateを重ねあわせる + // 変更があった場合は新しくリストを作って返す + if (src->type == 'a') { + if (add->type == 'a') { + if (src->cond.w.word[0] > add->cond.w.word[0]) { + // add のほうが小さいので小さい順のccをつくる + CharClassPtr left = charClassMerge(add->left.src); + return createCharClassWord(add->cond->w.word, left, add->right); + } else { + + } + } else if (add->type == 'c') { + // + if (src->cond.w.word[0] < add->cond.range.begin) { + + } else (src->cond->w.word[0] < add->end) { + } else if (src->type == 'c') { + + } +} + void printTransition(TransitionPtr ts) { for (;;) { printf("Input Condition : %c\n",ts->condition->cond->w->word);