Commit 032c4286 authored by Pietro Abate's avatar Pietro Abate

Fix few parsing problems

All problems related to the introduction of the new syntax for
constructed types
parent 3f21e819
......@@ -94,19 +94,12 @@ let is_fun_decl =
(fun strm ->
match Stream.npeek 3 strm with
| [ KEYWORD "fun", _; IDENT _, _; KEYWORD "(", _ ]
| [ KEYWORD "fun", _; IDENTPAR _, _; _ ]
| [ IDENTPAR _, _; _ ; _ ]
| [ IDENT _, _; KEYWORD "(", _; _ ] -> ()
| _ -> raise Stream.Failure
)
let is_capture =
Gram.Entry.of_parser "[is_capture]"
(fun strm ->
match Stream.npeek 2 strm with
| [ IDENT _, _; KEYWORD "::", _; _ ] -> ()
| _ -> raise Stream.Failure
)
let if_then_else cond e1 e2 =
Match (cond, [(mk (0,0) (Cst (Atom (ident "true")))),e1;
(mk (0,0) (Cst (Atom (ident "false")))),e2])
......@@ -270,14 +263,10 @@ EXTEND Gram
(match n with
| `Prefix (name,ns) -> exp _loc (NamespaceIn (name, ns, e2))
| `Keep f -> exp _loc (KeepNsIn (f,e2)))
| e = expr; ":"; p = pat ->
exp _loc (Forget (e,p))
| e = expr; ":"; "?"; p = pat ->
exp _loc (Check (e,p))
| e1 = expr; ";"; e2 = expr ->
exp _loc (seq e1 e2)
| "ref"; p = pat; e = expr ->
exp _loc (Ref (e,p))
| e = expr; ":"; p = pat -> exp _loc (Forget (e,p))
| e = expr; ":"; "?"; p = pat -> exp _loc (Check (e,p))
| e1 = expr; ";"; e2 = expr -> exp _loc (seq e1 e2)
| "ref"; p = pat; e = expr -> exp _loc (Ref (e,p))
| "not"; e = expr -> exp _loc (logical_not e)
]
| [ e1 = expr; ":="; e2 = expr -> exp _loc (set_ref e1 e2) ]
......@@ -291,8 +280,7 @@ EXTEND Gram
]
| [ e1 = expr; op = ["+" | "-" | "@" ]; e2 = expr -> apply_op2 _loc op e1 e2
| e1 = expr; ["||" | "or"]; e2 = expr -> exp _loc (logical_or e1 e2)
| e = expr; "\\"; l = ident_or_keyword ->
exp _loc (RemoveField (e, label l))
| e = expr; "\\"; l = ident_or_keyword -> exp _loc (RemoveField (e, label l))
]
| [ e1 = expr; op = ["*"]; e2 = expr -> apply_op2 _loc op e1 e2
| e1 = expr; "&&"; e2 = expr -> exp _loc (logical_and e1 e2)
......@@ -349,7 +337,11 @@ EXTEND Gram
exp _loc body
]
| [
e1 = SELF; IDENT "div"; e2 = expr -> apply_op2 _loc "/" e1 e2
a = IDENTPAR; l = LIST1 expr SEP ","; ")" ->
let e1 = exp _loc (Var (ident a)) in
let e2 = exp _loc (tuple l) in
exp _loc (Apply (e1,e2))
| e1 = SELF; IDENT "div"; e2 = expr -> apply_op2 _loc "/" e1 e2
| e1 = SELF; IDENT "mod"; e2 = expr -> apply_op2 _loc "mod" e1 e2
| e1 = SELF; e2 = expr -> exp _loc (Apply (e1,e2))
]
......
......@@ -29,7 +29,7 @@ module V = struct
end
let pp ppf x = Format.fprintf ppf "'%a" Ident.U.print x.id
let pp ppf x = dump ppf x
(* let pp ppf x = dump ppf x *)
end
include V
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment