| 259 |
| "simple" [ x = pat; "&"; y = pat -> mk loc (And (x,y)) |
| "simple" [ x = pat; "&"; y = pat -> mk loc (And (x,y)) |
| 260 |
| x = pat; "\\"; y = pat -> mk loc (Diff (x,y)) ] |
| x = pat; "\\"; y = pat -> mk loc (Diff (x,y)) ] |
| 261 |
| |
| |
| 262 |
[ "{"; r = record_spec; "}" -> r |
[ "{"; r = record_spec; "}" -> mk loc (Record (true,r)) |
| 263 |
|
| "{|"; r = record_spec; "|}" -> mk loc (Record (false,r)) |
| 264 |
| LIDENT "_" -> mk loc (Internal Types.any) |
| LIDENT "_" -> mk loc (Internal Types.any) |
| 265 |
| a = LIDENT -> mk loc (Capture a) |
| a = LIDENT -> mk loc (Capture a) |
| 266 |
| "("; a = LIDENT; ":="; c = const; ")" -> mk loc (Constant (a,c)) |
| "("; a = LIDENT; ":="; c = const; ")" -> mk loc (Constant (a,c)) |
| 314 |
record_spec: |
record_spec: |
| 315 |
[ [ r = LIST0 [ l = [LIDENT | UIDENT]; "="; |
[ [ r = LIST0 [ l = [LIDENT | UIDENT]; "="; |
| 316 |
o = [ "?" -> true | -> false]; |
o = [ "?" -> true | -> false]; |
| 317 |
x = pat -> |
x = pat -> (Types.LabelPool.mk l,o,x) |
|
mk loc (Record (Types.LabelPool.mk l,o,x)) |
|
| 318 |
] SEP ";" -> |
] SEP ";" -> |
| 319 |
match r with |
(* TODO: check here uniqueness *) |
| 320 |
| [] -> mk loc (Internal Types.Record.any) |
List.sort (fun (l1,_,_) (l2,_,_) -> compare l1 l2) r |
|
| h::t -> List.fold_left (fun t1 t2 -> mk loc (And (t1,t2))) h t |
|
| 321 |
] ]; |
] ]; |
| 322 |
|
|
| 323 |
char: |
char: |
| 336 |
|
|
| 337 |
|
|
| 338 |
attrib_spec: |
attrib_spec: |
| 339 |
[ [ r = record_spec -> r | "("; t = pat; ")" -> t ] ]; |
[ [ r = record_spec -> mk loc (Record (true,r)) |
| 340 |
|
| "("; t = pat; ")" -> t ] ]; |
| 341 |
|
|
| 342 |
expr_record_spec: |
expr_record_spec: |
| 343 |
[ [ r = LIST1 |
[ [ r = LIST1 |