The graphviz vocabulary alone already follows the general structure of the DOT language: graphs and subgraphs consist of an ordered sequence of statements; each statement will add either a node, an edge, or some attribute declaration (graph-attributes, node-attributes, edge-attributes); and attributes may be set on individual nodes and edges. Even some DOT niceties are already supported, like being able to have an edge between anonymous subgraphs. For instance, compare