Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- let rec evalLogicExpr expr =
- match expr with
- | Prim ("=", oper1, oper2) -> (evalLogicExpr oper1) = (evalLogicExpr oper2)
- | Prim ("<>", oper1, oper2) -> (evalLogicExpr oper1) <> (evalLogicExpr oper2)
- | Prim (">", oper1, oper2) -> (evalLogicExpr oper1) > (evalLogicExpr oper2)
- | Prim ("<", oper1, oper2) -> (evalLogicExpr oper1) < (evalLogicExpr oper2)
- | Prim (">=", oper1, oper2) -> (evalLogicExpr oper1) >= (evalLogicExpr oper2)
- | Prim ("<=", oper1, oper2) -> (evalLogicExpr oper1) <= (evalLogicExpr oper2)
- | _ -> failwithf "Syntax error"
- let rec evalNumExpr expr =
- match expr with
- | Prim ("-", oper1, oper2) -> (evalNumExpr oper1) - (evalNumExpr oper2)
- | Prim ("+", oper1, oper2) -> (evalNumExpr oper1) + (evalNumExpr oper2)
- | Prim ("*", oper1, oper2) -> (evalNumExpr oper1) * (evalNumExpr oper2)
- | Prim ("/", oper1, oper2) -> (evalNumExpr oper1) / (evalNumExpr oper2)
- | Prim ("%", oper1, oper2) -> (evalNumExpr oper1) % (evalNumExpr oper2)
- | _ -> failwithf "Error in syntax"
- let evalPrim expr =
- match expr with
- | Prim ("-", _, _) -> evalNumExpr expr
- | Prim ("+", _, _) -> evalNumExpr expr
- | Prim ("*", _, _) -> evalNumExpr expr
- | Prim ("/", _, _) -> evalNumExpr expr
- | Prim ("%", _, _) -> evalNumExpr expr
- | Prim ("=", _, _) -> evalLogicExpr expr
- | Prim ("<>", _, _) -> evalLogicExpr expr
- | Prim (">", _, _) -> evalLogicExpr expr
- | Prim ("<", _, _) -> evalLogicExpr expr
- | Prim (">=", _, _) -> evalLogicExpr expr
- | Prim ("<=", _, _) -> evalLogicExpr expr
- | _ -> failwithf "%A" "Incorrect syntax"
- let rec eval (expr : expr) =
- match expr with
- | Prim (_, _, _) -> evalPrim expr
- | _ -> failwithf "Syntax error"
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement