-
Notifications
You must be signed in to change notification settings - Fork 0
/
syntax.ml
33 lines (27 loc) · 903 Bytes
/
syntax.ml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
type expression =
| E_int of int
| E_bool of bool
let print (e: expression) : unit =
match e with
| E_int i -> print_int i
| E_bool b -> if b then print_string "TRUE" else print_string "FALSE"
let plus (e0: expression) (e1: expression) : expression =
match e0, e1 with
| E_int i0, E_int i1 -> E_int (i0 + i1)
| _ -> failwith "todo"
let minus (e0: expression) (e1: expression) : expression =
match e0, e1 with
| E_int i0, E_int i1 -> E_int (i0 - i1)
| _ -> failwith "todo"
let times (e0: expression) (e1: expression) : expression =
match e0, e1 with
| E_int i0, E_int i1 -> E_int (i0 * i1)
| _ -> failwith "todo"
let div (e0: expression) (e1: expression) : expression =
match e0, e1 with
| E_int i0, E_int i1 -> E_int (i0 / i1)
| _ -> failwith "todo"
let uminus (e: expression) : expression =
match e with
| E_int i -> E_int (-i)
| _ -> failwith "todo"