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))