open Ast open Util module type INTERPRET = sig exception Bad_datatype type value val int_value : int -> value val bool_value : bool -> value val real_value : float -> value val as_int : value -> int val as_bool : value -> bool val as_real : value -> float val str_repr_of_val : value -> string type state val print_state : Format.formatter -> state -> unit type io = (id * value) list (* Get the constants only *) val consts : prog -> id -> value VarMap.t (* Construct initial state for a program. The id is the root node of the program evaluation. *) val init_state : prog -> id -> state (* Run a step of the program (not necessary to specify the program, it should be encoded in the state). State -> Inputs -> Next state, Outputs *) val step : state -> io -> (state * io) end