stuff (more)
This commit is contained in:
@ -24,9 +24,6 @@ let rec lookup v = function
|
|||||||
| (v', k) :: vtab -> if v = v' then k else lookup v vtab
|
| (v', k) :: vtab -> if v = v' then k else lookup v vtab
|
||||||
| (_ : SymTab) -> failwith ("unbound variable : " + v)
|
| (_ : SymTab) -> failwith ("unbound variable : " + v)
|
||||||
|
|
||||||
(* HELP FUNCTIONS *)
|
|
||||||
let VALUEtoint = function INT x -> x
|
|
||||||
|
|
||||||
(* EVALUATION *)
|
(* EVALUATION *)
|
||||||
|
|
||||||
(*****************************************************
|
(*****************************************************
|
||||||
@ -42,8 +39,8 @@ let rec eval (vtab : SymTab) (e : EXP) : VALUE =
|
|||||||
| VARIABLE v ->
|
| VARIABLE v ->
|
||||||
lookup v vtab
|
lookup v vtab
|
||||||
| OPERATE (op, e1, e2) ->
|
| OPERATE (op, e1, e2) ->
|
||||||
let exp1 = VALUEtoint (eval vtab e1)
|
let (INT exp1) = eval vtab e1
|
||||||
let exp2 = VALUEtoint (eval vtab e2)
|
let (INT exp2) = eval vtab e2
|
||||||
match op with
|
match op with
|
||||||
| BPLUS -> INT (exp1 + exp2)
|
| BPLUS -> INT (exp1 + exp2)
|
||||||
| BMINUS -> INT (exp1 - exp2)
|
| BMINUS -> INT (exp1 - exp2)
|
||||||
@ -53,8 +50,8 @@ let rec eval (vtab : SymTab) (e : EXP) : VALUE =
|
|||||||
let vtab = bind var exp1 vtab
|
let vtab = bind var exp1 vtab
|
||||||
eval vtab e2
|
eval vtab e2
|
||||||
| OVER (rop, var, e1, e2, e3) ->
|
| OVER (rop, var, e1, e2, e3) ->
|
||||||
let exp1 = VALUEtoint (eval vtab e1)
|
let (INT exp1) = eval vtab e1
|
||||||
let exp2 = VALUEtoint (eval vtab e2)
|
let (INT exp2) = eval vtab e2
|
||||||
let results = [
|
let results = [
|
||||||
for i in exp1..exp2 ->
|
for i in exp1..exp2 ->
|
||||||
let vtab = bind var (INT i) vtab
|
let vtab = bind var (INT i) vtab
|
||||||
|
Reference in New Issue
Block a user