Mercurial > urweb
comparison src/lacweb.grm @ 156:34ccd7d2bea8
Start of datatype support
author | Adam Chlipala <adamc@hcoop.net> |
---|---|
date | Thu, 24 Jul 2008 15:02:03 -0400 |
parents | 7420fa18d657 |
children | adc4e42e3adc |
comparison
equal
deleted
inserted
replaced
155:4334bb734187 | 156:34ccd7d2bea8 |
---|---|
40 %term | 40 %term |
41 EOF | 41 EOF |
42 | STRING of string | INT of Int64.int | FLOAT of Real64.real | 42 | STRING of string | INT of Int64.int | FLOAT of Real64.real |
43 | SYMBOL of string | CSYMBOL of string | 43 | SYMBOL of string | CSYMBOL of string |
44 | LPAREN | RPAREN | LBRACK | RBRACK | LBRACE | RBRACE | 44 | LPAREN | RPAREN | LBRACK | RBRACK | LBRACE | RBRACE |
45 | EQ | COMMA | COLON | DCOLON | TCOLON | DOT | HASH | UNDER | UNDERUNDER | 45 | EQ | COMMA | COLON | DCOLON | TCOLON | DOT | HASH | UNDER | UNDERUNDER | BAR |
46 | DIVIDE | GT | 46 | DIVIDE | GT |
47 | CON | LTYPE | VAL | REC | AND | FOLD | UNIT | KUNIT | 47 | CON | LTYPE | VAL | REC | AND | FOLD | UNIT | KUNIT |
48 | DATATYPE | OF | |
48 | TYPE | NAME | 49 | TYPE | NAME |
49 | ARROW | LARROW | DARROW | 50 | ARROW | LARROW | DARROW |
50 | FN | PLUSPLUS | MINUSMINUS | DOLLAR | TWIDDLE | 51 | FN | PLUSPLUS | MINUSMINUS | DOLLAR | TWIDDLE |
51 | STRUCTURE | SIGNATURE | STRUCT | SIG | END | FUNCTOR | WHERE | EXTERN | 52 | STRUCTURE | SIGNATURE | STRUCT | SIG | END | FUNCTOR | WHERE | EXTERN |
52 | INCLUDE | OPEN | CONSTRAINT | CONSTRAINTS | EXPORT | 53 | INCLUDE | OPEN | CONSTRAINT | CONSTRAINTS | EXPORT |
60 | decls of decl list | 61 | decls of decl list |
61 | decl of decl | 62 | decl of decl |
62 | vali of string * con option * exp | 63 | vali of string * con option * exp |
63 | valis of (string * con option * exp) list | 64 | valis of (string * con option * exp) list |
64 | 65 |
66 | barOpt of unit | |
67 | dcons of (string * con option) list | |
68 | dcon of string * con option | |
69 | |
65 | sgn of sgn | 70 | sgn of sgn |
66 | sgntm of sgn | 71 | sgntm of sgn |
67 | sgi of sgn_item | 72 | sgi of sgn_item |
68 | sgis of sgn_item list | 73 | sgis of sgn_item list |
69 | 74 |
71 | 76 |
72 | kind of kind | 77 | kind of kind |
73 | kcolon of explicitness | 78 | kcolon of explicitness |
74 | 79 |
75 | path of string list * string | 80 | path of string list * string |
81 | cpath of string list * string | |
76 | spath of str | 82 | spath of str |
77 | mpath of string list | 83 | mpath of string list |
78 | 84 |
79 | cexp of con | 85 | cexp of con |
80 | capps of con | 86 | capps of con |
127 | 133 |
128 decl : CON SYMBOL EQ cexp (DCon (SYMBOL, NONE, cexp), s (CONleft, cexpright)) | 134 decl : CON SYMBOL EQ cexp (DCon (SYMBOL, NONE, cexp), s (CONleft, cexpright)) |
129 | CON SYMBOL DCOLON kind EQ cexp (DCon (SYMBOL, SOME kind, cexp), s (CONleft, cexpright)) | 135 | CON SYMBOL DCOLON kind EQ cexp (DCon (SYMBOL, SOME kind, cexp), s (CONleft, cexpright)) |
130 | LTYPE SYMBOL EQ cexp (DCon (SYMBOL, SOME (KType, s (LTYPEleft, cexpright)), cexp), | 136 | LTYPE SYMBOL EQ cexp (DCon (SYMBOL, SOME (KType, s (LTYPEleft, cexpright)), cexp), |
131 s (LTYPEleft, cexpright)) | 137 s (LTYPEleft, cexpright)) |
138 | DATATYPE SYMBOL EQ barOpt dcons(DDatatype (SYMBOL, dcons), s (DATATYPEleft, dconsright)) | |
139 | DATATYPE SYMBOL EQ DATATYPE path(DDatatypeImp (SYMBOL, #1 path, #2 path), s (DATATYPEleft, pathright)) | |
132 | VAL vali (DVal vali, s (VALleft, valiright)) | 140 | VAL vali (DVal vali, s (VALleft, valiright)) |
133 | VAL REC valis (DValRec valis, s (VALleft, valisright)) | 141 | VAL REC valis (DValRec valis, s (VALleft, valisright)) |
134 | 142 |
135 | SIGNATURE CSYMBOL EQ sgn (DSgn (CSYMBOL, sgn), s (SIGNATUREleft, sgnright)) | 143 | SIGNATURE CSYMBOL EQ sgn (DSgn (CSYMBOL, sgn), s (SIGNATUREleft, sgnright)) |
136 | STRUCTURE CSYMBOL EQ str (DStr (CSYMBOL, NONE, str), s (STRUCTUREleft, strright)) | 144 | STRUCTURE CSYMBOL EQ str (DStr (CSYMBOL, NONE, str), s (STRUCTUREleft, strright)) |
151 [] => raise Fail "Impossible mpath parse [3]" | 159 [] => raise Fail "Impossible mpath parse [3]" |
152 | m :: ms => (DOpenConstraints (m, ms), s (OPENleft, mpathright))) | 160 | m :: ms => (DOpenConstraints (m, ms), s (OPENleft, mpathright))) |
153 | CONSTRAINT cterm TWIDDLE cterm (DConstraint (cterm1, cterm2), s (CONSTRAINTleft, ctermright)) | 161 | CONSTRAINT cterm TWIDDLE cterm (DConstraint (cterm1, cterm2), s (CONSTRAINTleft, ctermright)) |
154 | EXPORT spath (DExport spath, s (EXPORTleft, spathright)) | 162 | EXPORT spath (DExport spath, s (EXPORTleft, spathright)) |
155 | 163 |
164 barOpt : () | |
165 | BAR () | |
166 | |
167 dcons : dcon ([dcon]) | |
168 | dcon BAR dcons (dcon :: dcons) | |
169 | |
170 dcon : CSYMBOL (CSYMBOL, NONE) | |
171 | CSYMBOL OF cexp (CSYMBOL, SOME cexp) | |
172 | |
156 vali : SYMBOL EQ eexp (SYMBOL, NONE, eexp) | 173 vali : SYMBOL EQ eexp (SYMBOL, NONE, eexp) |
157 | SYMBOL COLON cexp EQ eexp (SYMBOL, SOME cexp, eexp) | 174 | SYMBOL COLON cexp EQ eexp (SYMBOL, SOME cexp, eexp) |
158 | 175 |
159 valis : vali ([vali]) | 176 valis : vali ([vali]) |
160 | vali AND valis (vali :: valis) | 177 | vali AND valis (vali :: valis) |
180 s (LTYPEleft, SYMBOLright)) | 197 s (LTYPEleft, SYMBOLright)) |
181 | CON SYMBOL EQ cexp (SgiCon (SYMBOL, NONE, cexp), s (CONleft, cexpright)) | 198 | CON SYMBOL EQ cexp (SgiCon (SYMBOL, NONE, cexp), s (CONleft, cexpright)) |
182 | CON SYMBOL DCOLON kind EQ cexp (SgiCon (SYMBOL, SOME kind, cexp), s (CONleft, cexpright)) | 199 | CON SYMBOL DCOLON kind EQ cexp (SgiCon (SYMBOL, SOME kind, cexp), s (CONleft, cexpright)) |
183 | LTYPE SYMBOL EQ cexp (SgiCon (SYMBOL, SOME (KType, s (LTYPEleft, cexpright)), cexp), | 200 | LTYPE SYMBOL EQ cexp (SgiCon (SYMBOL, SOME (KType, s (LTYPEleft, cexpright)), cexp), |
184 s (LTYPEleft, cexpright)) | 201 s (LTYPEleft, cexpright)) |
202 | DATATYPE SYMBOL EQ barOpt dcons(SgiDatatype (SYMBOL, dcons), s (DATATYPEleft, dconsright)) | |
203 | DATATYPE SYMBOL EQ DATATYPE path(SgiDatatypeImp (SYMBOL, #1 path, #2 path), s (DATATYPEleft, pathright)) | |
185 | VAL SYMBOL COLON cexp (SgiVal (SYMBOL, cexp), s (VALleft, cexpright)) | 204 | VAL SYMBOL COLON cexp (SgiVal (SYMBOL, cexp), s (VALleft, cexpright)) |
186 | 205 |
187 | STRUCTURE CSYMBOL COLON sgn (SgiStr (CSYMBOL, sgn), s (STRUCTUREleft, sgnright)) | 206 | STRUCTURE CSYMBOL COLON sgn (SgiStr (CSYMBOL, sgn), s (STRUCTUREleft, sgnright)) |
188 | SIGNATURE CSYMBOL EQ sgn (SgiSgn (CSYMBOL, sgn), s (SIGNATUREleft, sgnright)) | 207 | SIGNATURE CSYMBOL EQ sgn (SgiSgn (CSYMBOL, sgn), s (SIGNATUREleft, sgnright)) |
189 | FUNCTOR CSYMBOL LPAREN CSYMBOL COLON sgn RPAREN COLON sgn | 208 | FUNCTOR CSYMBOL LPAREN CSYMBOL COLON sgn RPAREN COLON sgn |
237 | TCOLON (Implicit) | 256 | TCOLON (Implicit) |
238 | 257 |
239 path : SYMBOL ([], SYMBOL) | 258 path : SYMBOL ([], SYMBOL) |
240 | CSYMBOL DOT path (let val (ms, x) = path in (CSYMBOL :: ms, x) end) | 259 | CSYMBOL DOT path (let val (ms, x) = path in (CSYMBOL :: ms, x) end) |
241 | 260 |
261 cpath : CSYMBOL ([], CSYMBOL) | |
262 | CSYMBOL DOT cpath (let val (ms, x) = cpath in (CSYMBOL :: ms, x) end) | |
263 | |
242 mpath : CSYMBOL ([CSYMBOL]) | 264 mpath : CSYMBOL ([CSYMBOL]) |
243 | CSYMBOL DOT mpath (CSYMBOL :: mpath) | 265 | CSYMBOL DOT mpath (CSYMBOL :: mpath) |
244 | 266 |
245 cterm : LPAREN cexp RPAREN (#1 cexp, s (LPARENleft, RPARENright)) | 267 cterm : LPAREN cexp RPAREN (#1 cexp, s (LPARENleft, RPARENright)) |
246 | LBRACK rcon RBRACK (CRecord rcon, s (LBRACKleft, RBRACKright)) | 268 | LBRACK rcon RBRACK (CRecord rcon, s (LBRACKleft, RBRACKright)) |
288 | eexp MINUSMINUS cexp (ECut (eexp, cexp), s (eexpleft, cexpright)) | 310 | eexp MINUSMINUS cexp (ECut (eexp, cexp), s (eexpleft, cexpright)) |
289 | 311 |
290 eterm : LPAREN eexp RPAREN (#1 eexp, s (LPARENleft, RPARENright)) | 312 eterm : LPAREN eexp RPAREN (#1 eexp, s (LPARENleft, RPARENright)) |
291 | 313 |
292 | path (EVar path, s (pathleft, pathright)) | 314 | path (EVar path, s (pathleft, pathright)) |
315 | cpath (EVar cpath, s (cpathleft, cpathright)) | |
293 | LBRACE rexp RBRACE (ERecord rexp, s (LBRACEleft, RBRACEright)) | 316 | LBRACE rexp RBRACE (ERecord rexp, s (LBRACEleft, RBRACEright)) |
294 | UNIT (ERecord [], s (UNITleft, UNITright)) | 317 | UNIT (ERecord [], s (UNITleft, UNITright)) |
295 | 318 |
296 | INT (EPrim (Prim.Int INT), s (INTleft, INTright)) | 319 | INT (EPrim (Prim.Int INT), s (INTleft, INTright)) |
297 | FLOAT (EPrim (Prim.Float FLOAT), s (FLOATleft, FLOATright)) | 320 | FLOAT (EPrim (Prim.Float FLOAT), s (FLOATleft, FLOATright)) |