コード例 #1
0
ファイル: dynarray.c プロジェクト: StudioEtrange/foma
void fsm_construct_add_arc(struct fsm_construct_handle *handle, int source, int target, char *in, char *out) {
    struct fsm_state_list *sl;
    struct fsm_trans_list *tl;
    int symin, symout;
    fsm_construct_check_size(handle, source);
    fsm_construct_check_size(handle, target);

    if (source > handle->maxstate)
        handle->maxstate = source;
    if (target > handle->maxstate)
        handle->maxstate = target;

    sl = (handle->fsm_state_list)+target;
    sl->used = 1;
    sl = (handle->fsm_state_list)+source;
    sl->used = 1;
    tl = xxmalloc(sizeof(struct fsm_trans_list));
    tl->next = sl->fsm_trans_list;
    sl->fsm_trans_list = tl;
    if ((symin = fsm_construct_check_symbol(handle,in)) == -1)
        symin = fsm_construct_add_symbol(handle,in);
    if ((symout = fsm_construct_check_symbol(handle,out)) == -1)
        symout = fsm_construct_add_symbol(handle,out);
    tl->in = symin;
    tl->out = symout;
    tl->target = target;
}
コード例 #2
0
void fsm_construct_set_initial(struct fsm_construct_handle *handle, int state_no) {
    struct fsm_state_list *sl;
    fsm_construct_check_size(handle, state_no);

    if (state_no > handle->maxstate)
        handle->maxstate = state_no;

    sl = handle->fsm_state_list;
    (sl+state_no)->is_initial = 1;
}
コード例 #3
0
ファイル: dynarray.c プロジェクト: StudioEtrange/foma
void fsm_construct_add_arc_nums(struct fsm_construct_handle *handle, int source, int target, int in, int out) {
    struct fsm_state_list *sl;
    struct fsm_trans_list *tl;
    fsm_construct_check_size(handle, source);
    fsm_construct_check_size(handle, target);

    if (source > handle->maxstate)
        handle->maxstate = source;
    if (target > handle->maxstate)
        handle->maxstate = target;

    sl = (handle->fsm_state_list)+target;
    sl->used = 1;
    sl = (handle->fsm_state_list)+source;
    sl->used = 1;
    tl = xxmalloc(sizeof(struct fsm_trans_list));
    tl->next = sl->fsm_trans_list;
    sl->fsm_trans_list = tl;
    tl->in = in;
    tl->out = out;
    tl->target = target;
}
コード例 #4
0
ファイル: dynarray.c プロジェクト: StudioEtrange/foma
void fsm_construct_set_final(struct fsm_construct_handle *handle, int state_no) {
    struct fsm_state_list *sl;
    fsm_construct_check_size(handle, state_no);

    if (state_no > handle->maxstate)
        handle->maxstate = state_no;

    sl = handle->fsm_state_list;
    if (!(sl+state_no)->is_final) {
        (sl+state_no)->is_final = 1;
        handle->numfinals++;
    }
}