42 lines
1.2 KiB
OCaml
42 lines
1.2 KiB
OCaml
|
|
type tok = Parse_info.info
|
|
type 'a wrap = 'a * tok
|
|
|
|
type tree =
|
|
| Braces of tok * trees * tok
|
|
| Parens of tok * (trees, tok (* comma*)) Common.either list * tok
|
|
| Angle of tok * trees * tok
|
|
|
|
(* note that gcc allows $ in identifiers, so using $ for metavariables
|
|
* means we will not be able to match such identifiers (but no big deal)
|
|
*)
|
|
| Metavar of string wrap
|
|
(* note that "..." are allowed in many languages, so using "..."
|
|
* to represent a list of anything means we will not be able to
|
|
* match specifically "...".
|
|
*)
|
|
| Dots of tok
|
|
|
|
| Tok of string wrap
|
|
|
|
and trees = tree list
|
|
|
|
(* see matcher/parse_fuzzy.mli for helpers to build such trees *)
|
|
|
|
val is_metavar: string -> bool
|
|
|
|
(* visitors, dumpers, extractors, abstractors, mappers *)
|
|
|
|
val abstract_position_trees: trees -> trees
|
|
val toks_of_trees: trees -> tok list
|
|
val vof_trees: trees -> Ocaml.v
|
|
|
|
type visitor_out = trees -> unit
|
|
type visitor_in = {
|
|
ktree: (tree -> unit) * visitor_out -> tree -> unit;
|
|
ktrees: (trees -> unit) * visitor_out -> trees -> unit;
|
|
ktok: (tok -> unit) * visitor_out -> tok -> unit;
|
|
}
|
|
|
|
val default_visitor: visitor_in
|
|
val mk_visitor: visitor_in -> visitor_out
|