on the 44th line it gives me a type error Type automate is not compatible with type formatter
im trying to draw an automaton using graphviz
here is the code :
(*d'abord definissons le type automate*)
type automate = {
etat_initial : int;
ensemble_des_etats : int list;
alphabets : char list;
transitions :(int*char*int) list;
etats_finaux : int list
};;
(*prenons une variable a1 du type automate qu'on a definit precedemment
comme
exemple*)
let a1={
etat_initial=1;
ensemble_des_etats=[1;2];
alphabets=['a';'b'];
transitions=[(1,'b',2);(2,'c',3)];
etats_finaux=[2]
};;
let rec member a l =
match l with
| [] -> false
| x::rl -> x=a || member a rl;;
let fmt_transition auto fmt (inedge,by,outedge)=
if member outedge auto.etats_finaux=true then
Format.fprintf fmt "@[node [shape = doublecircle]%d;@]" outedge;
if inedge=auto.etat_initial then
Format.fprintf fmt "@[node [shape = point]start;node [shape = circle];start
-> %d ;@]" inedge;
Format.fprintf fmt "@[%d -> %d [label=\"%c\"];@]" inedge outedge by;;
let fmt_transitions auto fmt =
Format.fprintf fmt "@[<v 2>digraph output {@,%a@,@]}@,@."
(Format.pp_print_list (fmt_transition auto)) auto.transitions
;;
let call_dot auto =
let cmd = "dot -Tpng | display -" in
let (sout, sin, serr) as channels =
Unix.open_process_full cmd (Unix.environment ()) in
let fmt = Format.formatter_of_out_channel sin in
<b>Format.fprintf fmt "%a@." fmt_transitions auto;</b>
channels
let cleanup channels =
(* missing: flush channels, empty buffers *)
Unix.close_process_full channels;;
call_dot a1 ;;