view regexParser/transition.cc @ 175:3be0fbcd4b52 pairPro

implement createTransitionGenerator
author Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
date Tue, 22 Dec 2015 20:27:26 +0900
parents 540fc12871d9
children c092dd0e1ae0
line wrap: on
line source

#include <stdlib.h>
#include "transition.h"

StatePtr createState(StatePtr state,BitVector bi) {
    StatePtr s = state;
    if (state != NULL) {
        while (state->next) {
            state = state->next;
        }
    }
    state = NEW(State);
    state->bitState = bi;
    state->transition = NEW(Transition);
    state->nextNode = NEW(Node);
    return s;
}

TransitionPtr createTransition(CharClassPtr cc, BitVectorPtr state) {
    TransitionPtr transition = NEW(Transition);
    transition->condition = cc;
    transition->condition->nextState = *state;
    return transition;
}

TransitionPtr appendTransition0(TransitionPtr x, TransitionPtr y) {
    TransitionPtr x0 = x;
    for(;;) {
        if (x->next == NULL) {
            x->next = y;
            return x0;
        }
    }
    return x;
}

TransitionPtr appendTransition(TransitionPtr x, TransitionPtr y) {
    TransitionPtr x0 = createTransition(x->condition, &x->condition->nextState);
    TransitionPtr x1 = x0;
    for(;;) {
        if (x->next == NULL) {
            x1->next = y;
            return x0;
        }
        x = x->next;
        x1->next = createTransition(x->condition, &x->condition->nextState);
        x1 = x1->next;
    }
    return x0;
}