graph         = [ T_strict ] ( T_graph | T_digraph ) [ ID ] '{' stmt_list '}' 
stmt_list     = [ stmt [ ';' ]  [ stmt_list ] ] 
stmt          =  node_stmt |  edge_stmt |  attr_stmt | ID '=' ID |  subgraph
attr_stmt     =  ( T_graph | T_node | T_edge )  attr_list
attr_list     =  '[' [ a_list ] ']' [ attr_list ]
a_list        =  ID [ '=' ID ] [ ',' ] [ a_list ]
edge_stmt     =  ( node_id | subgraph ) edgeRHS [ attr_list ]
edgeRHS       =  edgeop ( node_id | subgraph ) [ edgeRHS ]
node_stmt     =  node_id [ attr_list ]
node_id       =  ID [ port ]
port          =  ':' ID [ ':' compass_pt ] | ':' compass_pt
subgraph      =  [ T_subgraph [ ID ] ] '{' stmt_list '}'
compass_pt    =  ( T_n | T_ne | T_e | T_se | T_s | T_sw | T_w | T_nw | T_c | T__ )
