00001
00035
00036
00037
00038
00039
00040
00041
00042 #ifndef __SENT_DFA_H__
00043 #define __SENT_DFA_H__
00044
00045 #include <sent/stddefs.h>
00046
00047 #define DFA_STATESTEP 1000
00048
00049 #define DFA_CP_MINSTEP 20
00050
00051 #define INITIAL_S 0x10000000
00052 #define ACCEPT_S 0x00000001
00053
00055 typedef struct _dfa_arc {
00056 short label;
00057 int to_state;
00058 struct _dfa_arc *next;
00059 } DFA_ARC;
00060
00062 typedef struct {
00063 int number;
00064 unsigned int status;
00065 DFA_ARC *arc;
00066 } DFA_STATE;
00067
00069 typedef struct {
00070 int term_num;
00071 WORD_ID **tw;
00072 int *wnum;
00073 } TERM_INFO;
00074
00076 typedef struct {
00077 DFA_STATE *st;
00078 int maxstatenum;
00079 int state_num;
00080 int arc_num;
00081 int term_num;
00082 int **cp;
00083 int *cplen;
00084 int *cpalloclen;
00085 int *cp_begin;
00086 int cp_begin_len;
00087 int cp_begin_alloclen;
00088 int *cp_end;
00089 int cp_end_len;
00090 int cp_end_alloclen;
00091 TERM_INFO term;
00092 boolean *is_sp;
00093 WORD_ID sp_id;
00094 } DFA_INFO;
00095
00096 DFA_INFO *dfa_info_new();
00097 void dfa_info_free(DFA_INFO *dfa);
00098 void dfa_state_init(DFA_INFO *dinfo);
00099 void dfa_state_expand(DFA_INFO *dinfo, int needed);
00100 boolean rddfa(FILE *fp, DFA_INFO *dinfo);
00101 boolean rddfa_fp(FILE *fp, DFA_INFO *dinfo);
00102 boolean rddfa_line(char *line, DFA_INFO *dinfo, int *state_max, int *arc_num, int *terminal_max);
00103 void dfa_append(DFA_INFO *dst, DFA_INFO *src, int soffset, int coffset);
00104
00105 boolean init_dfa(DFA_INFO *dinfo, char *filename);
00106 WORD_ID dfa_symbol_lookup(DFA_INFO *dinfo, char *terminalname);
00107 boolean extract_cpair(DFA_INFO *dinfo);
00108 boolean cpair_append(DFA_INFO *dst, DFA_INFO *src, int coffset);
00109 void print_dfa_info(FILE *fp, DFA_INFO *dinfo);
00110 void print_dfa_cp(FILE *fp, DFA_INFO *dinfo);
00111 boolean dfa_cp(DFA_INFO *dfa, int i, int j);
00112 boolean dfa_cp_begin(DFA_INFO *dfa, int i);
00113 boolean dfa_cp_end(DFA_INFO *dfa, int i);
00114 void set_dfa_cp(DFA_INFO *dfa, int i, int j, boolean value);
00115 void set_dfa_cp_begin(DFA_INFO *dfa, int i, boolean value);
00116 void set_dfa_cp_end(DFA_INFO *dfa, int i, boolean value);
00117 void init_dfa_cp(DFA_INFO *dfa);
00118 void malloc_dfa_cp(DFA_INFO *dfa, int term_num, int size);
00119 void realloc_dfa_cp(DFA_INFO *dfa, int old_term_num, int new_term_num);
00120 void free_dfa_cp(DFA_INFO *dfa);
00121 void dfa_cp_output_rawdata(FILE *fp, DFA_INFO *dfa);
00122 void dfa_cp_count_size(DFA_INFO *dfa, unsigned long *size_ret, unsigned long *allocsize_ret);
00123 boolean dfa_cp_append(DFA_INFO *dfa, DFA_INFO *src, int offset);
00124
00125 #include <sent/vocabulary.h>
00126 boolean make_dfa_voca_ref(DFA_INFO *dinfo, WORD_INFO *winfo);
00127 void make_terminfo(TERM_INFO *tinfo, DFA_INFO *dinfo, WORD_INFO *winfo);
00128 void free_terminfo(TERM_INFO *tinfo);
00129 void terminfo_append(TERM_INFO *dst, TERM_INFO *src, int coffset, int woffset);
00130 #include <sent/htk_hmm.h>
00131 void dfa_find_pause_word(DFA_INFO *dfa, WORD_INFO *winfo, HTK_HMM_INFO *hmminfo);
00132 boolean dfa_pause_word_append(DFA_INFO *dst, DFA_INFO *src, int coffset);
00133
00134 #endif