40 #ifndef __EST_WFST_H__
41 #define __EST_WFST_H__
43 #include "EST_simplestats.h"
44 #include "EST_rw_status.h"
45 #include "EST_Option.h"
46 #include "EST_TList.h"
47 #include "EST_TVector.h"
48 #include "EST_THash.h"
50 #define wfst_error_msg(WMESS) (cerr << WMESS << endl,siod_error())
52 #define WFST_ERROR_STATE -1
69 { p_weight=t.p_weight; p_state=t.p_state;
70 p_in_symbol = t.p_in_symbol; p_out_symbol=t.p_out_symbol; }
72 { p_weight=w; p_state=s; p_in_symbol=i; p_out_symbol=o;}
74 float weight()
const {
return p_weight; }
75 int state()
const {
return p_state; }
76 int in_symbol()
const {
return p_in_symbol; }
77 int out_symbol()
const {
return p_out_symbol; }
78 void set_weight(
float f) { p_weight = f; }
79 void set_state(
int s) { p_state = s; }
84 enum wfst_state_type {wfst_final, wfst_nonfinal, wfst_error, wfst_licence};
88 #define WFST_NONFINAL 1
90 #define WFST_LICENCE 3
99 enum wfst_state_type p_type;
112 int name()
const {
return p_name; }
113 int num_transitions()
const {
return transitions.length(); }
114 enum wfst_state_type type()
const {
return p_type; }
115 void set_type(wfst_state_type t) { p_type = t; }
116 void set_tag(
int v) { p_tag = v;}
117 int tag()
const {
return p_tag;}
122 enum wfst_mstate_type {wfst_ms_set, wfst_ms_list};
131 enum wfst_mstate_type p_type;
134 { p_name = -1; p_weight = 0.0; p_type = wfst_ms_set; }
136 { p_name = -1; p_weight = 0.0; p_type = ty; }
137 int name()
const {
return p_name; }
138 void set_name(
int i) { p_name = i; }
139 float weight()
const {
return p_weight; }
140 void set_weight(
float w) { p_weight = w; }
141 void set_type(
enum wfst_mstate_type s) { p_type = s; }
142 enum wfst_mstate_type type()
const {
return p_type; }
160 int operator_and(LISP l);
161 int operator_or(LISP l);
162 int operator_star(LISP l);
163 int operator_plus(LISP l);
164 int operator_optional(LISP l);
165 int operator_not(LISP l);
166 int terminal(LISP l);
170 void extend_alphabets(
const EST_WFST &b);
172 EST_read_status load_transitions_from_lisp(
int s, LISP trans);
173 void more_states(
int new_max);
175 int can_reach_final(
int state);
176 static int traverse_tag;
190 void init(
int init_num_states=10);
192 void init(LISP in, LISP out);
201 int num_states()
const {
return p_num_states; }
202 int start_state()
const {
return p_start_state; }
205 {
return p_in_symbols.
name(s); }
208 {
return p_in_symbols.
name(i); }
211 {
return p_out_symbols.
name(s); }
214 {
return p_out_symbols.
name(i); }
226 int final(
int i)
const
227 {
return ((i != WFST_ERROR_STATE) && (
state(i)->type() == wfst_final));}
240 EST_write_status save_binary(FILE *fd);
244 EST_read_status load_binary(FILE *fd,
253 int transition(
int state,
int in,
int out)
const;
254 int transition(
int state,
int in,
int out,
float &prob)
const;
262 int transduce(
int state,
int in,
int &out)
const;
287 int add_state(
enum wfst_state_type state_type);
292 void build_wfst(
int start,
int end,LISP regex);
299 void build_from_regex(LISP inalpha, LISP outalpha, LISP regex);
301 void kkrule_compile(LISP inalpha, LISP outalpha, LISP fp,
302 LISP rule, LISP sets);
304 void build_from_rg(LISP inalpha, LISP outalpha,
305 LISP distinguished, LISP rewrites,
306 LISP sets, LISP terms,
309 void build_tree_lex(LISP inalpha, LISP outalpha,
356 int in,
int out)
const;
379 void kkcompile(LISP ruleset,
EST_WFST &all_wfst);
381 void ltscompile(LISP lts_rules,
EST_WFST &all_wfst);
383 void rgcompile(LISP rg,
EST_WFST &all_wfst);
385 void tlcompile(LISP rg,
EST_WFST &all_wfst);
393 int recognize_for_perplexity(
const EST_WFST &wfst,
398 int recognize_for_perplexity(
const EST_WFST &wfst,
405 VAL_REGISTER_CLASS_DCLS(wfst,
EST_WFST)