-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathenv.sml
82 lines (77 loc) · 4.47 KB
/
env.sml
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
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
structure Env : ENV =
struct
structure S = Symbol
structure T = Types
structure Trans = Translate
type access = int (* TODO: ??? *)
type ty = T.ty
datatype enventry = VarEntry of {access: Translate.access,
ty: ty}
| FunEntry of {level: Translate.level,
formals: ty list,
result: ty}
val base_tenv = S.empty
val base_tenv = S.enter (base_tenv, S.symbol "int", T.WINT)
val base_tenv = S.enter (base_tenv, S.symbol "string", T.STRING)
val base_venv = S.empty
val base_venv = S.enter (base_venv, S.symbol "print",
FunEntry {formals=[T.STRING], level=Trans.newLevel {
func_name="print",
parent=Trans.liblevel,
formals=[false]}
, result=T.UNIT})
val base_venv = S.enter (base_venv, S.symbol "flush",
FunEntry {formals=[], level=Trans.newLevel {
func_name="flush",
parent=Trans.liblevel,
formals=[]}
, result=T.UNIT})
val base_venv = S.enter (base_venv, S.symbol "getchar",
FunEntry {formals=[], level=Trans.newLevel {
func_name="getchar",
parent=Trans.liblevel,
formals=[]}
, result=T.STRING})
val base_venv = S.enter (base_venv, S.symbol "ord",
FunEntry {formals=[T.STRING], level=Trans.newLevel {
func_name="ord",
parent=Trans.liblevel,
formals=[false]}
, result=T.INT})
val base_venv = S.enter (base_venv, S.symbol "chr",
FunEntry {formals=[T.INT], level=Trans.newLevel {
func_name="chr",
parent=Trans.liblevel,
formals=[false]}
, result=T.STRING})
val base_venv = S.enter (base_venv, S.symbol "size",
FunEntry {formals=[T.STRING], level=Trans.newLevel {
func_name="size",
parent=Trans.liblevel,
formals=[false]}
, result=T.INT})
val base_venv = S.enter (base_venv, S.symbol "substring",
FunEntry {formals=[T.STRING, T.INT, T.INT], level=Trans.newLevel {
func_name="substring",
parent=Trans.liblevel,
formals=[false, false, false]}
, result=T.STRING})
val base_venv = S.enter (base_venv, S.symbol "concat",
FunEntry {formals=[T.STRING, T.STRING], level=Trans.newLevel {
func_name="concat",
parent=Trans.liblevel,
formals=[false, false]}
, result=T.STRING})
val base_venv = S.enter (base_venv, S.symbol "not",
FunEntry {formals=[T.INT], level=Trans.newLevel {
func_name="not",
parent=Trans.liblevel,
formals=[false]}
, result=T.INT})
val base_venv = S.enter (base_venv, S.symbol "exit",
FunEntry {formals=[T.INT], level=Trans.newLevel {
func_name="exit",
parent=Trans.liblevel,
formals=[false]}
, result=T.UNIT})
end