SCM Repository
Annotation of /sml/trunk/src/cm/semant/semant.sml
Parent Directory
|
Revision Log
Revision 265 - (view) (download)
1 : | blume | 265 | signature CM_SEMANT = sig |
2 : | |||
3 : | type pathname | ||
4 : | type ml_symbol | ||
5 : | type cm_symbol | ||
6 : | |||
7 : | type group | ||
8 : | |||
9 : | type perm | ||
10 : | type aexp | ||
11 : | type exp | ||
12 : | type members (* still conditional *) | ||
13 : | type exports (* still conditional *) | ||
14 : | |||
15 : | val file_native : string * pathname -> pathname | ||
16 : | val file_standard : string * pathname -> pathname | ||
17 : | val cm_symbol : string -> cm_symbol | ||
18 : | val ml_structure : string -> ml_symbol | ||
19 : | val ml_signature : string -> ml_symbol | ||
20 : | val ml_functor : string -> ml_symbol | ||
21 : | val ml_funsig : string -> ml_symbol | ||
22 : | |||
23 : | val alias : pathname -> group | ||
24 : | val group : perm list * exports * members -> group | ||
25 : | val library : perm list * exports * members -> group | ||
26 : | |||
27 : | val require : cm_symbol -> perm | ||
28 : | val grant : cm_symbol -> perm | ||
29 : | |||
30 : | val emptyMembers : members | ||
31 : | val member : pathname * cm_symbol option -> members | ||
32 : | val members : members * members -> members | ||
33 : | val guarded_members : exp * (members * members) -> members | ||
34 : | |||
35 : | val emptyExports : exports | ||
36 : | val export : ml_symbol -> exports | ||
37 : | val exports : exports * exports -> exports | ||
38 : | val guarded_exports : exp * (exports * exports) -> exports | ||
39 : | |||
40 : | val number : int -> aexp | ||
41 : | val variable : cm_symbol -> aexp | ||
42 : | val plus : aexp * aexp -> aexp | ||
43 : | val minus : aexp * aexp -> aexp | ||
44 : | val times : aexp * aexp -> aexp | ||
45 : | val divide : aexp * aexp -> aexp | ||
46 : | val modulus : aexp * aexp -> aexp | ||
47 : | val negate : aexp -> aexp | ||
48 : | |||
49 : | val ml_defined : ml_symbol -> exp | ||
50 : | val cm_defined : cm_symbol -> exp | ||
51 : | val conj : exp * exp -> exp | ||
52 : | val disj : exp * exp -> exp | ||
53 : | val beq : exp * exp -> exp | ||
54 : | val bne : exp * exp -> exp | ||
55 : | val not : exp -> exp | ||
56 : | val lt : aexp * aexp -> exp | ||
57 : | val le : aexp * aexp -> exp | ||
58 : | val gt : aexp * aexp -> exp | ||
59 : | val ge : aexp * aexp -> exp | ||
60 : | val eq : aexp * aexp -> exp | ||
61 : | val ne : aexp * aexp -> exp | ||
62 : | |||
63 : | end | ||
64 : | |||
65 : | structure CMSemant :> CM_SEMANT = struct | ||
66 : | |||
67 : | type pathname = AbsPath.t | ||
68 : | type ml_symbol = unit | ||
69 : | type cm_symbol = string | ||
70 : | |||
71 : | type group = unit | ||
72 : | |||
73 : | type environment = unit | ||
74 : | fun num_look () _ = 0 | ||
75 : | fun ml_look () _ = false | ||
76 : | fun cm_look () _ = false | ||
77 : | |||
78 : | datatype perm = | ||
79 : | REQUIRE of cm_symbol | ||
80 : | | GRANT of cm_symbol | ||
81 : | |||
82 : | type aexp = environment -> int | ||
83 : | type exp = environment -> bool | ||
84 : | type members = unit | ||
85 : | type exports = unit | ||
86 : | |||
87 : | fun file_native (s, d) = AbsPath.native { context = d, spec = s } | ||
88 : | fun file_standard (s, d) = AbsPath.standard { context = d, spec = s } | ||
89 : | fun cm_symbol s = s | ||
90 : | fun ml_structure (s: string) = () | ||
91 : | fun ml_signature (s: string) = () | ||
92 : | fun ml_functor (s: string) = () | ||
93 : | fun ml_funsig (s: string) = () | ||
94 : | |||
95 : | fun alias (f: pathname) = () | ||
96 : | fun group (p: perm list, e: exports, m: members) = () | ||
97 : | fun library (p: perm list, e: exports, m: members) = () | ||
98 : | |||
99 : | val require = REQUIRE | ||
100 : | val grant = GRANT | ||
101 : | |||
102 : | val emptyMembers = () | ||
103 : | fun member (f: pathname, c: cm_symbol option) = () | ||
104 : | fun members (m1: members, m2: members) = () | ||
105 : | fun guarded_members (c: exp, (m1: members, m2: members)) = () | ||
106 : | |||
107 : | val emptyExports = () | ||
108 : | fun export (s: ml_symbol) = () | ||
109 : | fun exports (e1: exports, e2: exports) = () | ||
110 : | fun guarded_exports (c: exp, (e1: exports, e2: exports)) = () | ||
111 : | |||
112 : | fun number i _ = i | ||
113 : | fun variable v e = num_look e v | ||
114 : | fun plus (e1, e2) e = e1 e + e2 e | ||
115 : | fun minus (e1, e2) e = e1 e - e2 e | ||
116 : | fun times (e1, e2) e = e1 e * e2 e | ||
117 : | fun divide (e1, e2) e = e1 e div e2 e | ||
118 : | fun modulus (e1, e2) e = e1 e mod e2 e | ||
119 : | fun negate ex e = ~(ex e) | ||
120 : | |||
121 : | fun ml_defined s e = ml_look e s | ||
122 : | fun cm_defined s e = cm_look e s | ||
123 : | fun conj (e1, e2) e = e1 e andalso e2 e | ||
124 : | fun disj (e1, e2) e = e1 e orelse e2 e | ||
125 : | fun beq (e1: exp, e2) e = e1 e = e2 e | ||
126 : | fun bne (e1: exp, e2) e = e1 e <> e2 e | ||
127 : | fun not ex e = Bool.not (ex e) | ||
128 : | fun lt (e1, e2) e = e1 e < e2 e | ||
129 : | fun le (e1, e2) e = e1 e <= e2 e | ||
130 : | fun gt (e1, e2) e = e1 e > e2 e | ||
131 : | fun ge (e1, e2) e = e1 e >= e2 e | ||
132 : | fun eq (e1: aexp, e2) e = e1 e = e2 e | ||
133 : | fun ne (e1: aexp, e2) e = e1 e <> e2 e | ||
134 : | end |
root@smlnj-gforge.cs.uchicago.edu | ViewVC Help |
Powered by ViewVC 1.0.0 |