sig
  type graph_kind = Graph | Digraph
  type id =
      Simple_id of string
    | Html_id of string
    | Double_quoted_id of string
  type attr = Odot_types.id * Odot_types.id option
  type compass_pt = N | NE | E | SE | S | SW | W | NW
  type port = Odot_types.id * Odot_types.compass_pt option
  type node_id = Odot_types.id * Odot_types.port option
  type edge_stmt_point =
      Edge_node_id of Odot_types.node_id
    | Edge_subgraph of Odot_types.subgraph
  and edge_stmt =
      Odot_types.edge_stmt_point * Odot_types.edge_stmt_point list *
      Odot_types.attr list
  and attr_stmt =
      Attr_graph of Odot_types.attr list
    | Attr_node of Odot_types.attr list
    | Attr_edge of Odot_types.attr list
  and stmt =
      Stmt_node of Odot_types.node_id * Odot_types.attr list
    | Stmt_equals of Odot_types.id * Odot_types.id
    | Stmt_edge of Odot_types.edge_stmt
    | Stmt_attr of Odot_types.attr_stmt
    | Stmt_subgraph of Odot_types.subgraph
  and subgraph = {
    mutable sub_id : Odot_types.id option;
    mutable sub_stmt_list : Odot_types.stmt list;
  }
  and graph = {
    mutable strict : bool;
    mutable kind : Odot_types.graph_kind;
    mutable id : Odot_types.id option;
    mutable stmt_list : Odot_types.stmt list;
  }
end