+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
+