| 65 |
mk loc (Abstraction { fun_name = f; fun_iface = a; fun_body = b }) |
mk loc (Abstraction { fun_name = f; fun_iface = a; fun_body = b }) |
| 66 |
| (p,e1) = let_binding; "in"; e2 = expr LEVEL "top"-> |
| (p,e1) = let_binding; "in"; e2 = expr LEVEL "top"-> |
| 67 |
mk loc (Match (e1,[p,e2])) |
mk loc (Match (e1,[p,e2])) |
| 68 |
|
| e = expr; ":"; p = pat -> |
| 69 |
|
mk loc (Forget (e,p)) |
| 70 |
] |
] |
| 71 |
|
|
| 72 |
|
|
| 111 |
|
|
| 112 |
let_binding: [ |
let_binding: [ |
| 113 |
[ "let"; p = pat; "="; e = expr -> (p,e) |
[ "let"; p = pat; "="; e = expr -> (p,e) |
| 114 |
|
| "let"; p = pat; ":"; t = pat; "="; e = expr -> (p, mk noloc (Forget (e,t))) |
| 115 |
| "let"; "fun"; (f,a,b) = fun_decl -> |
| "let"; "fun"; (f,a,b) = fun_decl -> |
| 116 |
let p = match f with |
let p = match f with |
| 117 |
| Some x -> mk loc (Capture x) |
| Some x -> mk loc (Capture x) |
| 178 |
-> mk loc (Recurs (x,b)) ] |
-> mk loc (Recurs (x,b)) ] |
| 179 |
| RIGHTA [ x = pat; "->"; y = pat -> mk loc (Arrow (x,y)) ] |
| RIGHTA [ x = pat; "->"; y = pat -> mk loc (Arrow (x,y)) ] |
| 180 |
| "no_arrow" [ x = pat; "|"; y = pat -> mk loc (Or (x,y)) ] |
| "no_arrow" [ x = pat; "|"; y = pat -> mk loc (Or (x,y)) ] |
| 181 |
| "simple" [ x = pat; "&"; y = pat -> mk loc (And (x,y)) |
| "simple" [ x = pat; "&"; y = pat -> mk loc (And (x,y,true)) |
| 182 |
|
(* | x = pat; ":"; y = pat -> mk loc (And (x,y,false)) *) |
| 183 |
| x = pat; "-"; y = pat -> mk loc (Diff (x,y)) ] |
| x = pat; "-"; y = pat -> mk loc (Diff (x,y)) ] |
| 184 |
| |
| |
| 185 |
[ "{"; r = record_spec; "}" -> r |
[ "{"; r = record_spec; "}" -> r |
| 224 |
] SEP ";" -> |
] SEP ";" -> |
| 225 |
match r with |
match r with |
| 226 |
| [] -> mk loc (Internal Types.Record.any) |
| [] -> mk loc (Internal Types.Record.any) |
| 227 |
| h::t -> List.fold_left (fun t1 t2 -> mk loc (And (t1,t2))) h t |
| h::t -> List.fold_left (fun t1 t2 -> mk loc (And (t1,t2,true))) h t |
| 228 |
] ]; |
] ]; |
| 229 |
|
|
| 230 |
char: |
char: |