]> matita.cs.unibo.it Git - helm.git/blobdiff - helm/ocaml/cic_disambiguation/cicTextualParser2.ml
Syntax of patterns changed again to make it non-ambiguous:
[helm.git] / helm / ocaml / cic_disambiguation / cicTextualParser2.ml
index 072b8fa03b97bbb83ed38846155259f60eb2b82f..a879ccf94ff1f380d011e71927250df3e3c46f3d 100644 (file)
@@ -327,31 +327,41 @@ EXTEND
     | [ IDENT "whd" ] -> `Whd 
     | [ IDENT "normalize" ] -> `Normalize ]
   ];
+  sequent_pattern_spec : [
+   [ hyp_paths =
+      LIST0
+       [ id = IDENT ;
+         path = OPT [SYMBOL ":" ; path = term -> path ] ->
+         (id,match path with Some p -> p | None -> CicAst.UserInput) ]
+       SEP SYMBOL ";";
+     goal_path = OPT [ SYMBOL <:unicode<vdash>>; term = term -> term ] ->
+      let goal_path =
+       match goal_path with
+          None -> CicAst.UserInput
+        | Some goal_path -> goal_path
+      in
+       hyp_paths,goal_path
+   ]
+  ];
   pattern_spec: [
-    [ wanted = OPT term;
-      hyp_paths_and_goal_path =
-       OPT [
-        "in";
-        hyp_paths =
-         LIST0
-          [ id = IDENT ;
-            path = OPT [SYMBOL ":" ; path = term -> path ] ->
-            (id,match path with Some p -> p | None -> CicAst.UserInput) ]
-          SEP SYMBOL ";";
-        goal_path = OPT [ SYMBOL <:unicode<vdash>>; term = term -> term ] ->
-         let goal_path =
-          match goal_path with
-             None -> CicAst.UserInput
-           | Some goal_path -> goal_path
-         in
-          hyp_paths,goal_path
-       ] ->
-         let hyp_paths,goal_path =
-          match hyp_paths_and_goal_path with
-             None -> [], CicAst.UserInput
-           | Some (hyp_paths,goal_path) -> hyp_paths,goal_path
+    [ res = OPT [
+       "in";
+       wanted_and_sps =
+        [ "match" ; wanted = term ;
+          sps = OPT [ "in"; sps = sequent_pattern_spec -> sps ] ->
+           Some wanted,sps
+        | sps = sequent_pattern_spec ->
+           None,Some sps
+        ] ->
+         let wanted,hyp_paths,goal_path =
+          match wanted_and_sps with
+             wanted,None -> wanted, [], CicAst.UserInput
+           | wanted,Some (hyp_paths,goal_path) -> wanted,hyp_paths,goal_path
          in
-          wanted, hyp_paths, goal_path ]
+          wanted, hyp_paths, goal_path ] ->
+      match res with
+         None -> None,[],CicAst.UserInput
+       | Some ps -> ps]
   ];
   direction: [
     [ SYMBOL ">" -> `LeftToRight