method string_of_desc_ele = function
        Leaf l -> l.leaf
      |        Tag t ->
          Printf.sprintf
            "<%s %s>"
            t.tag
            (String.concat " "
               (List.map
                  (fun (n,v) -> Printf.sprintf "%s=%s" n v)
                  t.atts
               )
            )
      | List l -> Printf.sprintf "for %s in %s ()" l.var l.f
      |        Cond c -> Printf.sprintf "if %s ()" c.cond
      |        Sub s -> Printf.sprintf "sub: %s ()" s.sub_code
      |        Mark m -> Printf.sprintf "mark: id=%s name=%s" m.mark_id m.mark_name
      |        Then _ -> "then"
      |        Else _ -> "else"