]> matita.cs.unibo.it Git - helm.git/blobdiff - helm/software/components/grafite_parser/grafiteParser.ml
Tactic reduce got rid of. Use normalize, instead.
[helm.git] / helm / software / components / grafite_parser / grafiteParser.ml
index e2108381200b82ae16626d0a61fd11bafc419ac3..378931c1471829b0a62bd5349b0db4d351458acf 100644 (file)
@@ -30,6 +30,8 @@ let set_callback f = out := f
 
 module Ast = CicNotationPt
 
+exception NoInclusionPerformed of string (* full path *)
+
 type 'a localized_option =
    LSome of 'a
  | LNone of GrafiteAst.loc
@@ -41,6 +43,7 @@ type ast_statement =
     GrafiteAst.statement
 
 type statement =
+  ?never_include:bool -> 
   include_paths:string list ->
   LexiconEngine.status ->
     LexiconEngine.status * ast_statement localized_option
@@ -75,7 +78,6 @@ EXTEND
   ];
   reduction_kind: [
     [ IDENT "normalize" -> `Normalize
-    | IDENT "reduce" -> `Reduce
     | IDENT "simplify" -> `Simpl
     | IDENT "unfold"; t = OPT tactic_term -> `Unfold t
     | IDENT "whd" -> `Whd ]
@@ -170,8 +172,8 @@ EXTEND
        let idents = match idents with None -> [] | Some idents -> idents in
        GrafiteAst.Decompose (loc, idents)
     | IDENT "demodulate" -> GrafiteAst.Demodulate loc
-    | IDENT "destruct"; t = tactic_term ->
-        GrafiteAst.Destruct (loc, t)
+    | IDENT "destruct"; xts = OPT [ ts = tactic_term_list1 -> ts ] ->
+        GrafiteAst.Destruct (loc, xts)
     | IDENT "elim"; what = tactic_term; using = using; 
        pattern = OPT pattern_spec;
        (num, idents) = intros_spec ->
@@ -246,8 +248,6 @@ EXTEND
         GrafiteAst.Ring loc
     | IDENT "split" ->
         GrafiteAst.Split loc
-    | IDENT "subst" ->
-        GrafiteAst.Subst loc    
     | IDENT "symmetry" ->
         GrafiteAst.Symmetry loc
     | IDENT "transitivity"; t = tactic_term ->
@@ -639,9 +639,13 @@ EXTEND
             ind_types
         in
         GrafiteAst.Obj (loc, Ast.Inductive (params, ind_types))
-    | IDENT "coercion" ; suri = URI ; arity = OPT int ->
+    | IDENT "coercion" ; suri = URI ; arity = OPT int ; 
+      saturations = OPT int; composites = OPT (IDENT "nocomposites") ->
         let arity = match arity with None -> 0 | Some x -> x in
-        GrafiteAst.Coercion (loc, UriManager.uri_of_string suri, true, arity)
+        let saturations = match saturations with None -> 0 | Some x -> x in
+        let composites = match composites with None -> true | Some _ -> false in
+        GrafiteAst.Coercion
+         (loc, UriManager.uri_of_string suri, composites, arity, saturations)
     | IDENT "record" ; (params,name,ty,fields) = record_spec ->
         GrafiteAst.Obj (loc, Ast.Record (params,name,ty,fields))
     | IDENT "default" ; what = QSTRING ; uris = LIST1 URI ->
@@ -685,17 +689,18 @@ EXTEND
   ];
   statement: [
     [ ex = executable ->
-       fun ~include_paths status -> status,LSome(GrafiteAst.Executable (loc,ex))
+       fun ?(never_include=false) ~include_paths status -> status,LSome(GrafiteAst.Executable (loc,ex))
     | com = comment ->
-       fun ~include_paths status -> status,LSome (GrafiteAst.Comment (loc, com))
+       fun ?(never_include=false) ~include_paths status -> status,LSome (GrafiteAst.Comment (loc, com))
     | (iloc,fname,mode) = include_command ; SYMBOL "."  ->
-       fun ~include_paths status ->
-       let buri, fullpath = 
-          DependenciesParser.baseuri_of_script ~include_paths fname 
+       fun ?(never_include=false) ~include_paths status ->
+       let _root, buri, fullpath, _rrelpath = 
+          Librarian.baseuri_of_script ~include_paths fname 
         in
         let status =
-         LexiconEngine.eval_command status 
-           (LexiconAst.Include (iloc,buri,mode,fullpath))
+         if never_include then raise (NoInclusionPerformed fullpath)
+         else LexiconEngine.eval_command status 
+                (LexiconAst.Include (iloc,buri,mode,fullpath))
         in
         !out fname;
          status,
@@ -704,7 +709,7 @@ EXTEND
            (loc,GrafiteAst.Command
             (loc,GrafiteAst.Include (iloc,buri))))
     | scom = lexicon_command ; SYMBOL "." ->
-       fun ~include_paths status ->
+       fun ?(never_include=false) ~include_paths status ->
        let status = LexiconEngine.eval_command status scom in
          status,LNone loc
     | EOI -> raise End_of_file
@@ -726,3 +731,4 @@ let exc_located_wrapper f =
 let parse_statement lexbuf =
   exc_located_wrapper
     (fun () -> (Grammar.Entry.parse statement (Obj.magic lexbuf)))
+