]> matita.cs.unibo.it Git - helm.git/commitdiff
added syntax for URIs
authorStefano Zacchiroli <zack@upsilon.cc>
Tue, 11 Jan 2005 16:08:24 +0000 (16:08 +0000)
committerStefano Zacchiroli <zack@upsilon.cc>
Tue, 11 Jan 2005 16:08:24 +0000 (16:08 +0000)
helm/ocaml/cic_disambiguation/cicTextualLexer2.ml
helm/ocaml/cic_disambiguation/disambiguate.ml
helm/ocaml/cic_transformations/ast2pres.ml
helm/ocaml/cic_transformations/cicAstPp.ml

index 8a6faa19339fe2979b75b5407ebeca108f551ed6..b62230a335aa84b1da78e8d3eb0687b6c00b534a 100644 (file)
@@ -33,8 +33,10 @@ let regexp blank = [ ' ' '\t' '\n' ]
 let regexp paren = [ '(' '[' '{' ')' ']' '}' ]
 let regexp implicit = '?'
 let regexp symbol_char =
-  [^ 'a' - 'z' 'A' - 'Z' '0' - '9' ' ' '\t' '\n' '\\' '(' '[' '{' ')' ']' '}' ]
-
+  [^ 'a' - 'z' 'A' - 'Z' '0' - '9'
+     ' ' '\t' '\n'
+     '\\' '(' '[' '{' ')' ']' '}' '?'
+  ]
 let regexp blanks = blank+
 let regexp num = digit+
 let regexp tex_token = '\\' alpha+
@@ -46,8 +48,10 @@ let regexp ident' = ((alpha | tex_token) ident_cont'*) | ('_' ident_cont'+)
 let regexp meta = implicit num
 let regexp qstring = '"' [^ '"']* '"'
 let regexp uri =
-  (*      schema      *) (*     path     *) (*  ext   *) (*    xpointer     *)
-  ("cic:/" | "theory:/") ident ('/' ident)* ('.' ident)+ ('#' num ('/' num)*)?
+  ("cic:/" | "theory:/")              (* schema *)
+  ident ('/' ident)*                  (* path *)
+  ('.' ident)+                        (* ext *)
+  ("#xpointer(" num ('/' num)+ ")")?    (* xpointer *)
 (* let regexp catchall = .* *)
 
 let keywords = Hashtbl.create 17
index c384dc59fdbfc3a096996789260c0c4b9aa6261b..2eafc81f309d165ba136f48d61759b76fea5602f 100644 (file)
@@ -195,15 +195,26 @@ let interpretate ~context ~env ast =
                 Cic.LetIn (Cic.Name var, Cic.CoFix (!counter, funs), cic))
         in
         List.fold_right (build_term inductiveFuns) inductiveFuns cic_body
-    | CicAst.Ident (name, subst) ->
+    | CicAst.Ident (name, subst)
+    | CicAst.Uri (name, subst) as ast ->
+        let is_uri = function CicAst.Uri _ -> true | _ -> false in
         (try
+          if is_uri ast then raise Not_found;(* don't search the env for URIs *)
           let index = find_in_environment name context in
           if subst <> None then
             CicTextualParser2.fail loc
               "Explicit substitutions not allowed here";
           Cic.Rel index
         with Not_found ->
-          let cic = resolve env (Id name) () in
+          let cic =
+            if is_uri ast then  (* we have the URI, build the term out of it *)
+              try
+                CicUtil.term_of_uri name
+              with UriManager.IllFormedUri _ ->
+                CicTextualParser2.fail loc "Ill formed URI"
+            else
+              resolve env (Id name) ()
+          in
           let mk_subst uris =
             let ids_to_uris =
               List.map (fun uri -> UriManager.name_of_uri uri, uri) uris
@@ -371,6 +382,7 @@ let domain_of_term ~context ast =
                   let dom' = aux loc context term in
                   dom' @ dom)
                 [Id name] subst))
+    | CicAst.Uri _ -> []
     | CicAst.Implicit -> []
     | CicAst.Num (num, i) -> [ Num i ]
     | CicAst.Meta (index, local_context) ->
index 87944aa34f23a98028573c59c3a445fef78ae1c5..0eba3757fcb5b016846151d19b63ec9742177878 100644 (file)
@@ -77,8 +77,10 @@ and countterm current_size t =
                let size1 = countvar c var in
                countterm size1 s) current_size l in
           countterm size1 t
-    | A.Ident(s,None) -> current_size + (String.length s)
-    | A.Ident(s,Some l) ->
+    | A.Ident (s,None)
+    | A.Uri (s, None) -> current_size + (String.length s)
+    | A.Ident (s,Some l)
+    | A.Uri (s,Some l) ->
         List.fold_left 
           (fun c (v,t) -> countterm (c + (String.length v)) t) 
           (current_size + (String.length s)) l
@@ -278,7 +280,8 @@ let ast2astBox ?(unicode = true) ?(priority = 0) ?(assoc = false) ?(tail = [])
           make_defs "let rec" vars in
         Box.V(make_attributes [Some "helm","xref"] [xref],
               definitions@[ast2box ~tail body])
-    | A.Ident (s, subst) ->
+    | A.Ident (s, subst)
+    | A.Uri (s, subst) ->
         let subst =
           let rec make_substs start_txt = 
             function
@@ -423,7 +426,8 @@ let ast2mpres ?(priority = 0) ?(assoc = false) (ast, ids_to_uris) =
     | A.Symbol (name,_) -> 
         let attr = make_std_attributes xref in
         P.Mi (attr,name)
-    | A.Ident (name,subst) ->
+    | A.Ident (name,subst)
+    | A.Uri (name,subst) ->
         let attr = make_std_attributes xref in
         let rec make_subst =
           (function 
index 4c041294990a52d59d588166d559b5ff4a16b6fc..bb365d73ccf70f14bf38e5c4e166d2bdcfd9396d 100644 (file)
@@ -62,10 +62,12 @@ let rec pp_term = function
               sprintf "%s = %s" (pp_capture_variable var) (pp_term body))
             definitions))
         (pp_term term)
-  | CicAst.Ident (name, Some [])
-  | CicAst.Ident (name, None) ->
+  | CicAst.Ident (name, Some []) | CicAst.Ident (name, None)
+  | CicAst.Uri (name, Some []) | CicAst.Uri (name, None) ->
       name
-  | CicAst.Ident (name, Some substs) -> sprintf "%s \\subst [%s]" name (pp_substs substs)
+  | CicAst.Ident (name, Some substs)
+  | CicAst.Uri (name, Some substs) ->
+      sprintf "%s \\subst [%s]" name (pp_substs substs)
   | CicAst.Implicit -> "?"
   | CicAst.Meta (index, substs) ->
       sprintf "%d[%s]" index