view c/regexParser/subsetConstraction.cc @ 148:d1ebba6e117a pairPro

add test routing
author Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
date Tue, 15 Dec 2015 18:09:54 +0900
parents 1c74ac7d56ec
children 1c9e8ba64f6a
line wrap: on
line source

#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
#include "subsetConstraction.h"

static
CharClassPtr createCharClassWord(unsigned char *w, CharClassPtr cc1, CharClassPtr cc2) {
    CharClassPtr cc = NEW(CharClass);
    return cc1;
}

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 if (src->cond.w.word[0] < add->cond.range.end) {

            }
        }
    } else if (src->type == 'c') {

    }
}

void printTransition(TransitionPtr ts) {

}

TGValue generateTransition(NodePtr n,TransitionGenerator tg) {
    if (n->tokenType == '+') {
        TGValue tgv = generateTransition(n->left,tg);
        if (tgv.asterisk) {
            TGValue tgv1 = generateTransition(n->right,tg);
            tgv.ts->state->bitContainer |= tgv1.ts->state->bitContainer;
            return tgv;
        }
        bitSet(tgv.ts->state,n->right->nodeNumber);
        return tgv;
    } else if (n->tokenType == '|') {

    } else if (n->tokenType == '*') {

    } else if (n->tokenType == 'c'){

    } else if (n->tokenType == 'a'){

    } else {
        // error
    }
}

TransitionGenerator generateTransitionList(NodePtr n) {
    TransitionGenerator tg;
    generateTransition(n,tg);
    return tg;
}