X-Git-Url: http://matita.cs.unibo.it/gitweb/?a=blobdiff_plain;f=helm%2Focaml%2Fcic_notation%2FcicNotationUtil.ml;h=1f9d9f5ccee6ad17203c5f0d0fb761ccc31d3c88;hb=ba2dfe6409e95bf9e558dc0d4be382b068671409;hp=24b4af1d98cf0aa0177605d4d2b06b0c923b9e1f;hpb=7aa0e7901b71a660c6d6f55d96a38a3a9d1d3c7d;p=helm.git diff --git a/helm/ocaml/cic_notation/cicNotationUtil.ml b/helm/ocaml/cic_notation/cicNotationUtil.ml index 24b4af1d9..1f9d9f5cc 100644 --- a/helm/ocaml/cic_notation/cicNotationUtil.ml +++ b/helm/ocaml/cic_notation/cicNotationUtil.ml @@ -100,7 +100,6 @@ let fresh_name = let visit_ast ?(special_k = fun _ -> assert false) k = let rec aux = function - | Appl terms -> Appl (List.map k terms) | Binder (kind, var, body) -> Binder (kind, aux_capture_variable var, k body) @@ -117,13 +116,11 @@ let visit_ast ?(special_k = fun _ -> assert false) k = | Ident (name, Some substs) -> Ident (name, Some (aux_substs substs)) | Uri (name, Some substs) -> Uri (name, Some (aux_substs substs)) | Meta (index, substs) -> Meta (index, List.map aux_opt substs) - | (AttributedTerm _ | Layout _ | Literal _ | Magic _ | Variable _) as t -> special_k t - | (Ident _ | Implicit | Num _ @@ -131,24 +128,16 @@ let visit_ast ?(special_k = fun _ -> assert false) k = | Symbol _ | Uri _ | UserInput) as t -> t - and aux_opt = function | None -> None | Some term -> Some (k term) - and aux_capture_variable (term, typ_opt) = k term, aux_opt typ_opt - and aux_patterns patterns = List.map aux_pattern patterns - and aux_pattern ((head, vars), term) = ((head, List.map aux_capture_variable vars), k term) - and aux_subst (name, term) = (name, k term) - and aux_substs substs = List.map aux_subst substs - in - aux let visit_layout k = function @@ -207,6 +196,23 @@ let names_of_term t = in List.map aux (variables_of_term t) +let keywords_of_term t = + let rec keywords = ref [] in + let add_keyword k = keywords := k :: !keywords in + let rec aux = function + | AttributedTerm (_, t) -> aux t + | Layout l -> Layout (visit_layout aux l) + | Literal (`Keyword k) as t -> + add_keyword k; + t + | Literal _ as t -> t + | Magic m -> Magic (visit_magic aux m) + | Variable _ as v -> v + | t -> visit_ast aux t + in + ignore (aux t) ; + !keywords + let rec strip_attributes t = let special_k = function | AttributedTerm (_, term) -> strip_attributes term