#include #include #include"Automaton.h" #include"set.h" set* automaton_symbol_list (Automaton* a){ set* alphabet = set_alloc (1); int state_id, arc_id; for (state_id=0; state_id < a->num_states; state_id++){ for ( arc_id =0; arc_id < a->states [state_id].num_arcs; arc_id++ ) set_add_elt ( alphabet, a->states[state_id] .arcs[arc_id] .symbol ); } return alphabet; } int delta_deterministe(Automaton *a, int from, int symbol) { int t; for(t = 0; t < a->states[from].num_arcs; t++) if(a->states[from].arcs[t].symbol == symbol) return a->states[from].arcs[t].destination; return -1; } Automaton *complete(Automaton *a) { Automaton *complet; set *alphabet = automaton_symbol_list (a); int e,s; int puits = -1; complet = copy_automaton(a); for(e=0; e < complet->num_states; e++) for(s=1; s<=alphabet->n; s++) if(delta_deterministe(complet, e, s) == -1){ if(puits == -1) puits = add_state(complet); add_arc(complet, e, puits, s); } return complet; }