00001
00017
00018
00019
00020
00021
00022
00023
00024 #include <sent/stddefs.h>
00025 #include <sent/dfa.h>
00026
00032 DFA_INFO *
00033 dfa_info_new()
00034 {
00035 DFA_INFO *new;
00036
00037 new = (DFA_INFO *)mymalloc(sizeof(DFA_INFO));
00038 init_dfa_cp(new);
00039 new->term.tw = NULL;
00040 new->term.term_num = new->term_num = 0;
00041 new->maxstatenum = 0;
00042 new->is_sp = NULL;
00043 new->sp_id = WORD_INVALID;
00044
00045 return new;
00046 }
00047
00053 void
00054 dfa_info_free(DFA_INFO *dfa)
00055 {
00056 DFA_ARC *arc, *tmparc;
00057 TERM_INFO *tinfo;
00058 int i;
00059
00060
00061 free_dfa_cp(dfa);
00062
00063
00064 if (dfa->term_num != 0) {
00065 tinfo = &(dfa->term);
00066 if (tinfo->tw != NULL) {
00067 for(i=0;i<tinfo->term_num;i++) {
00068 free(tinfo->tw[i]);
00069 }
00070 free(tinfo->tw);
00071 free(tinfo->wnum);
00072 }
00073 }
00074
00075 if (dfa->maxstatenum > 0) {
00076 for(i=0;i<dfa->state_num;i++) {
00077 arc=dfa->st[i].arc;
00078 while(arc != NULL) {
00079 tmparc = arc->next;
00080 free(arc);
00081 arc = tmparc;
00082 }
00083 }
00084
00085 free(dfa->st);
00086 }
00087 if (dfa->is_sp != NULL) free(dfa->is_sp);
00088
00089 free(dfa);
00090 }