diff options
Diffstat (limited to 'test/littlesemantics/little.ml')
-rw-r--r-- | test/littlesemantics/little.ml | 43 |
1 files changed, 0 insertions, 43 deletions
diff --git a/test/littlesemantics/little.ml b/test/littlesemantics/little.ml deleted file mode 100644 index 1a7a77ec..00000000 --- a/test/littlesemantics/little.ml +++ /dev/null @@ -1,43 +0,0 @@ -type exp = Addition of exp*exp | Numeral of int | Variable of string;; -type b_exp = Greater of exp*exp;; -type inst = Assignment of string * exp | Sequence of inst * inst - | While of b_exp * inst | Skip;; - -type environment = (string * int) list;; - -let rec lookup (env:environment) (var:string) = - match env with - [] -> failwith(var ^ " : no such variable in environment for lookup") - | (a,v)::tl -> if a = var then v else lookup tl var;; - -let rec update (env:environment) (var:string) (n:int) = - match env with - [] -> failwith(var ^ " : no such variable in environment for update") - | ((a,v) as pair)::tl -> - if a = var then (a,n)::tl else pair::(update tl var n);; - -let rec evaluate (env:environment)(e:exp) = - match e with - Numeral n -> n - | Variable s -> lookup env s - | Addition(e1,e2) -> evaluate env e1 + evaluate env e2;; - - -let evaluate_bool (env:environment)(e:b_exp) = - match e with - Greater(e1,e2) -> evaluate env e1 > evaluate env e2;; - -let rec execute (env:environment)(i:inst) = - match i with - Skip -> env - | Assignment(s,e) -> update env s (evaluate env e) - | Sequence(i1,i2) -> execute (execute env i1) i2 - | While(b,i) as it -> - if (evaluate_bool env b) then - execute (execute env i) it - else - env;; - -let print_env = - List.iter - (fun (s,n) -> print_string (s ^ " : " ^ (string_of_int n) ^ "\n"));; |