Files
lci/lib/miniImp.mli
2024-10-04 19:38:34 +02:00

34 lines
1.0 KiB
OCaml

type variable = string
type p_exp =
Main of variable * variable * c_exp (* def main with input x output y as c *)
and c_exp =
Skip
| Assignment of variable * a_exp (* x := a *)
| Sequence of c_exp * c_exp (* c; c *)
| If of b_exp * c_exp * c_exp (* if b then c else c *)
| While of b_exp * c_exp (* while b do c *)
and b_exp =
Boolean of bool (* v *)
| BAnd of b_exp * b_exp (* b and b *)
| BNot of b_exp (* not b *)
| BCmpLess of a_exp * a_exp (* a < a *)
and a_exp =
Variable of variable (* x *)
| Integer of int (* n *)
| Plus of a_exp * a_exp (* a + a *)
| Minus of a_exp * a_exp (* a - a *)
| Times of a_exp * a_exp (* a * a *)
module VariableMap : Map.S with type key = variable
type memory = {
assignments: int VariableMap.t
}
exception AbsentAssignment of string
val reduce : int -> p_exp -> int