模組 Ast_iterator

module Ast_iterator: sig .. end

Ast_iterator.iterator 允許使用開放遞迴來檢查 AST。一個典型的映射器會基於 Ast_iterator.default_iterator,一個簡單的迭代器,並且會回退到它來處理它不修改的語法。

警告: 這個模組是不穩定的,並且是 compiler-libs 的一部分。


一個通用的 Parsetree 迭代器

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;
   directive_argument : iterator -> Parsetree.directive_argument -> 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;
   toplevel_directive : iterator -> Parsetree.toplevel_directive -> unit;
   toplevel_phrase : iterator -> Parsetree.toplevel_phrase -> 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;
}

一個 iterator 記錄為每個語法類別實作一個「方法」,使用開放遞迴樣式:每個方法將要套用到語法樹中子節點的迭代器作為其第一個引數。

val default_iterator : iterator

一個預設的迭代器,實作一個「不做任何事」的映射。