Ast_iterator − Ast_iterator.iterator enables AST inspection using open recursion.
Module Ast_iterator
Module
Ast_iterator
: sig end
Ast_iterator.iterator enables AST inspection using open recursion. A typical mapper would be based on Ast_iterator.default_iterator , a trivial iterator, and will fall back on it for handling the syntax it does not modify.
Warning: this module is unstable and part of Compiler_libs .
A generic
Parsetree iterator
type iterator = {
attribute : iterator -> Parsetree.attribute ->
unit ;
attributes : iterator -> Parsetree.attribute list
-> unit ;
binding_op : iterator -> Parsetree.binding_op ->
unit ;
case : iterator -> Parsetree.case -> unit ;
cases : iterator -> Parsetree.case list -> unit
;
class_declaration : iterator ->
Parsetree.class_declaration -> unit ;
class_description : iterator ->
Parsetree.class_description -> unit ;
class_expr : iterator -> Parsetree.class_expr ->
unit ;
class_field : iterator -> Parsetree.class_field ->
unit ;
class_signature : iterator ->
Parsetree.class_signature -> unit ;
class_structure : iterator ->
Parsetree.class_structure -> unit ;
class_type : iterator -> Parsetree.class_type ->
unit ;
class_type_declaration : iterator ->
Parsetree.class_type_declaration -> unit ;
class_type_field : iterator ->
Parsetree.class_type_field -> unit ;
constructor_declaration : iterator ->
Parsetree.constructor_declaration -> unit ;
expr : iterator -> Parsetree.expression -> unit
;
extension : iterator -> Parsetree.extension ->
unit ;
extension_constructor : iterator ->
Parsetree.extension_constructor -> unit ;
include_declaration : iterator ->
Parsetree.include_declaration -> unit ;
include_description : iterator ->
Parsetree.include_description -> unit ;
label_declaration : iterator ->
Parsetree.label_declaration -> unit ;
location : iterator -> Location.t -> unit ;
module_binding : iterator -> Parsetree.module_binding
-> unit ;
module_declaration : iterator ->
Parsetree.module_declaration -> unit ;
module_substitution : iterator ->
Parsetree.module_substitution -> unit ;
module_expr : iterator -> Parsetree.module_expr ->
unit ;
module_type : iterator -> Parsetree.module_type ->
unit ;
module_type_declaration : iterator ->
Parsetree.module_type_declaration -> unit ;
open_declaration : iterator ->
Parsetree.open_declaration -> unit ;
open_description : iterator ->
Parsetree.open_description -> unit ;
pat : iterator -> Parsetree.pattern -> unit ;
payload : iterator -> Parsetree.payload -> unit
;
signature : iterator -> Parsetree.signature ->
unit ;
signature_item : iterator -> Parsetree.signature_item
-> unit ;
structure : iterator -> Parsetree.structure ->
unit ;
structure_item : iterator -> Parsetree.structure_item
-> unit ;
typ : iterator -> Parsetree.core_type -> unit ;
row_field : iterator -> Parsetree.row_field ->
unit ;
object_field : iterator -> Parsetree.object_field
-> unit ;
type_declaration : iterator ->
Parsetree.type_declaration -> unit ;
type_extension : iterator -> Parsetree.type_extension
-> unit ;
type_exception : iterator -> Parsetree.type_exception
-> unit ;
type_kind : iterator -> Parsetree.type_kind ->
unit ;
value_binding : iterator -> Parsetree.value_binding
-> unit ;
value_description : iterator ->
Parsetree.value_description -> unit ;
with_constraint : iterator ->
Parsetree.with_constraint -> unit ;
}
A iterator record implements one "method" per syntactic category, using an open recursion style: each method takes as its first argument the iterator to be applied to children in the syntax tree.
val default_iterator : iterator
A default iterator, which implements a "do not do anything" mapping.