Julius 4.2
|
00001 00035 /* 00036 * Copyright (c) 1991-2011 Kawahara Lab., Kyoto University 00037 * Copyright (c) 2000-2005 Shikano Lab., Nara Institute of Science and Technology 00038 * Copyright (c) 2005-2011 Julius project team, Nagoya Institute of Technology 00039 * All rights reserved 00040 */ 00041 00042 #ifndef __SENT_DFA_H__ 00043 #define __SENT_DFA_H__ 00044 00045 #include <sent/stddefs.h> 00046 00047 #define DFA_STATESTEP 1000 ///< Allocation step of DFA state 00048 00049 #define DFA_CP_MINSTEP 20 ///< Minimum initial CP data size per category 00050 00051 #define INITIAL_S 0x10000000 ///< Status flag mask specifying an initial state 00052 #define ACCEPT_S 0x00000001 ///< Status flag mask specifying an accept state 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 #ifdef __cplusplus 00097 extern "C" { 00098 #endif 00099 00100 DFA_INFO *dfa_info_new(); 00101 void dfa_info_free(DFA_INFO *dfa); 00102 void dfa_state_init(DFA_INFO *dinfo); 00103 void dfa_state_expand(DFA_INFO *dinfo, int needed); 00104 boolean rddfa(FILE *fp, DFA_INFO *dinfo); 00105 boolean rddfa_fp(FILE *fp, DFA_INFO *dinfo); 00106 boolean rddfa_line(char *line, DFA_INFO *dinfo, int *state_max, int *arc_num, int *terminal_max); 00107 void dfa_append(DFA_INFO *dst, DFA_INFO *src, int soffset, int coffset); 00108 00109 boolean init_dfa(DFA_INFO *dinfo, char *filename); 00110 WORD_ID dfa_symbol_lookup(DFA_INFO *dinfo, char *terminalname); 00111 boolean extract_cpair(DFA_INFO *dinfo); 00112 boolean cpair_append(DFA_INFO *dst, DFA_INFO *src, int coffset); 00113 void print_dfa_info(FILE *fp, DFA_INFO *dinfo); 00114 void print_dfa_cp(FILE *fp, DFA_INFO *dinfo); 00115 boolean dfa_cp(DFA_INFO *dfa, int i, int j); 00116 boolean dfa_cp_begin(DFA_INFO *dfa, int i); 00117 boolean dfa_cp_end(DFA_INFO *dfa, int i); 00118 void set_dfa_cp(DFA_INFO *dfa, int i, int j, boolean value); 00119 void set_dfa_cp_begin(DFA_INFO *dfa, int i, boolean value); 00120 void set_dfa_cp_end(DFA_INFO *dfa, int i, boolean value); 00121 void init_dfa_cp(DFA_INFO *dfa); 00122 void malloc_dfa_cp(DFA_INFO *dfa, int term_num, int size); 00123 void realloc_dfa_cp(DFA_INFO *dfa, int old_term_num, int new_term_num); 00124 void free_dfa_cp(DFA_INFO *dfa); 00125 void dfa_cp_output_rawdata(FILE *fp, DFA_INFO *dfa); 00126 void dfa_cp_count_size(DFA_INFO *dfa, unsigned long *size_ret, unsigned long *allocsize_ret); 00127 boolean dfa_cp_append(DFA_INFO *dfa, DFA_INFO *src, int offset); 00128 00129 #include <sent/vocabulary.h> 00130 boolean make_dfa_voca_ref(DFA_INFO *dinfo, WORD_INFO *winfo); 00131 void make_terminfo(TERM_INFO *tinfo, DFA_INFO *dinfo, WORD_INFO *winfo); 00132 void free_terminfo(TERM_INFO *tinfo); 00133 void terminfo_append(TERM_INFO *dst, TERM_INFO *src, int coffset, int woffset); 00134 #include <sent/htk_hmm.h> 00135 void dfa_find_pause_word(DFA_INFO *dfa, WORD_INFO *winfo, HTK_HMM_INFO *hmminfo); 00136 boolean dfa_pause_word_append(DFA_INFO *dst, DFA_INFO *src, int coffset); 00137 00138 #ifdef __cplusplus 00139 } 00140 #endif 00141 00142 #endif /* __SENT_DFA_H__ */