sig
  type id =
      Ident of string
    | Number of string
    | String of string
    | Html of string
  type attr = (Dot_ast.id * Dot_ast.id option) list
  type compass_pt = N | Ne | E | Se | S | Sw | W | Nw
  type port =
      PortId of Dot_ast.id * Dot_ast.compass_pt option
    | PortC of Dot_ast.compass_pt
  type node_id = Dot_ast.id * Dot_ast.port option
  type subgraph =
      SubgraphId of Dot_ast.id
    | SubgraphDef of Dot_ast.id option * Dot_ast.stmt list
  and node = NodeId of Dot_ast.node_id | NodeSub of Dot_ast.subgraph
  and stmt =
      Node_stmt of Dot_ast.node_id * Dot_ast.attr list
    | Edge_stmt of Dot_ast.node * Dot_ast.node list * Dot_ast.attr list
    | Attr_graph of Dot_ast.attr list
    | Attr_node of Dot_ast.attr list
    | Attr_edge of Dot_ast.attr list
    | Equal of Dot_ast.id * Dot_ast.id
    | Subgraph of Dot_ast.subgraph
  type file = {
    strict : bool;
    digraph : bool;
    id : Dot_ast.id option;
    stmts : Dot_ast.stmt list;
  }
end