open Parser exception VarUndef of string let genv = ref [] let eval_expr = let rec eval_rec env = function Cst x -> x Var x -> begin try List.assoc x env with Not_found -> try List.assoc x !genv with Not_found -> raise (VarUndef x) end Sum(e1,e2) -> (eval_rec env e1) + (eval_rec env e2) Diff(e1,e2) -> (eval_rec env e1) - (eval_rec env e2) Prod(e1,e2) -> (eval_rec env e1) * (eval_rec env e2) Div(e1,e2) -> (eval_rec env e1) / (eval_rec env e2) Letin(x,e1,e2) -> let t = eval_rec env e1 in eval_rec ((x,t)::env) e2 in eval_rec [] let eval_instr = function Set(x,e) -> let t=eval_expr e in genv:=(x,t)::!genv Print e -> print_int (eval_expr e)
This document was generated using caml2html