]> matita.cs.unibo.it Git - helm.git/blobdiff - components/grafite_parser/grafiteDisambiguate.ml
Much ado about nothing:
[helm.git] / components / grafite_parser / grafiteDisambiguate.ml
index cc8360c28f51d0728996cdb37c7851e11cd69965..912abbcc38d0eadb1dc1235d35010309e719d3e8 100644 (file)
@@ -105,7 +105,7 @@ let disambiguate_reduction_kind text prefix_len lexicon_status_ref = function
   | `Whd as kind -> kind
 ;;
 
-let disambiguate_tactic 
+let rec disambiguate_tactic 
   lexicon_status_ref context metasenv (text,prefix_len,tactic) 
 =
   let disambiguate_term = 
@@ -116,7 +116,61 @@ let disambiguate_tactic
     disambiguate_reduction_kind text prefix_len lexicon_status_ref in
   let disambiguate_lazy_term = 
     disambiguate_lazy_term text prefix_len lexicon_status_ref in
+  let disambiguate_tactic metasenv tac =
+   disambiguate_tactic lexicon_status_ref context metasenv (text,prefix_len,tac)
+  in
    match tactic with
+    (* Higher  order tactics *)
+    | GrafiteAst.Progress (loc,tac) ->
+        let metasenv,tac = disambiguate_tactic metasenv tac in
+        metasenv,GrafiteAst.Progress (loc,tac)
+    | GrafiteAst.Solve (loc,tacl) ->
+        let metasenv,tacl =
+         List.fold_right
+          (fun tac (metasenv,tacl) ->
+            let metasenv,tac = disambiguate_tactic metasenv tac in
+             metasenv,tac::tacl
+          ) tacl (metasenv,[])
+        in
+         metasenv,GrafiteAst.Solve (loc,tacl)
+    | GrafiteAst.Try (loc,tac) ->
+        let metasenv,tac = disambiguate_tactic metasenv tac in
+        metasenv,GrafiteAst.Try (loc,tac)
+    | GrafiteAst.First (loc,tacl) ->
+        let metasenv,tacl =
+         List.fold_right
+          (fun tac (metasenv,tacl) ->
+            let metasenv,tac = disambiguate_tactic metasenv tac in
+             metasenv,tac::tacl
+          ) tacl (metasenv,[])
+        in
+         metasenv,GrafiteAst.First (loc,tacl)
+    | GrafiteAst.Seq (loc,tacl) ->
+        let metasenv,tacl =
+         List.fold_right
+          (fun tac (metasenv,tacl) ->
+            let metasenv,tac = disambiguate_tactic metasenv tac in
+             metasenv,tac::tacl
+          ) tacl (metasenv,[])
+        in
+         metasenv,GrafiteAst.Seq (loc,tacl)
+    | GrafiteAst.Repeat (loc,tac) ->
+        let metasenv,tac = disambiguate_tactic metasenv tac in
+        metasenv,GrafiteAst.Repeat (loc,tac)
+    | GrafiteAst.Do (loc,n,tac) ->
+        let metasenv,tac = disambiguate_tactic metasenv tac in
+        metasenv,GrafiteAst.Do (loc,n,tac)
+    | GrafiteAst.Then (loc,tac,tacl) ->
+        let metasenv,tac = disambiguate_tactic metasenv tac in
+        let metasenv,tacl =
+         List.fold_right
+          (fun tac (metasenv,tacl) ->
+            let metasenv,tac = disambiguate_tactic metasenv tac in
+             metasenv,tac::tacl
+          ) tacl (metasenv,[])
+        in
+         metasenv,GrafiteAst.Then (loc,tac,tacl)
+    (* First order tactics *)
     | GrafiteAst.Absurd (loc, term) -> 
         let metasenv,cic = disambiguate_term context metasenv term in
         metasenv,GrafiteAst.Absurd (loc, cic)
@@ -158,13 +212,15 @@ let disambiguate_tactic
     | GrafiteAst.Exact (loc, term) -> 
         let metasenv,cic = disambiguate_term context metasenv term in
         metasenv,GrafiteAst.Exact (loc, cic)
-    | GrafiteAst.Elim (loc, what, Some using, depth, idents) ->
-        let metasenv,what = disambiguate_term context metasenv what in
+    | GrafiteAst.Elim (loc, what, Some using, pattern, depth, idents) ->
+       let metasenv,what = disambiguate_term context metasenv what in
         let metasenv,using = disambiguate_term context metasenv using in
-        metasenv,GrafiteAst.Elim (loc, what, Some using, depth, idents)
-    | GrafiteAst.Elim (loc, what, None, depth, idents) ->
-        let metasenv,what = disambiguate_term context metasenv what in
-        metasenv,GrafiteAst.Elim (loc, what, None, depth, idents)
+       let pattern = disambiguate_pattern pattern in
+        metasenv,GrafiteAst.Elim (loc, what, Some using, pattern, depth, idents)
+    | GrafiteAst.Elim (loc, what, None, pattern, depth, idents) ->
+       let metasenv,what = disambiguate_term context metasenv what in
+       let pattern = disambiguate_pattern pattern in
+        metasenv,GrafiteAst.Elim (loc, what, None, pattern, depth, idents)
     | GrafiteAst.ElimType (loc, what, Some using, depth, idents) ->
         let metasenv,what = disambiguate_term context metasenv what in
         let metasenv,using = disambiguate_term context metasenv using in
@@ -188,8 +244,6 @@ let disambiguate_tactic
     | GrafiteAst.Generalize (loc,pattern,ident) ->
         let pattern = disambiguate_pattern pattern in
         metasenv,GrafiteAst.Generalize (loc,pattern,ident)
-    | GrafiteAst.Goal (loc, g) ->
-        metasenv,GrafiteAst.Goal (loc, g)
     | GrafiteAst.IdTac loc ->
         metasenv,GrafiteAst.IdTac loc
     | GrafiteAst.Intros (loc, num, names) ->