graph:graph ::= 'strict'? ( 'digraph' | 'graph' ) id '{' stmt-list '}'referenced by:attr-stmtstmt-list:stmt-list
::= ( stmt ';'? stmt-list? )?referenced by:graphstmt-listsubgraphstmt:stmt ::= attr-stmt
| node-stmt
| edge-stmt
| subgraph
| id '=' idreferenced by:stmt-listattr-stmt:attr-stmt
::= ( graph | node | edge ) attr-listreferenced by:stmtattr-list:attr-list
::= '[' a-list? ']' attr-list?referenced by:a-listattr-listattr-stmtedge-stmtnode-stmta-list:a-list ::= id '=' id ','? attr-list?referenced by:attr-listnode-stmt:node-stmt
::= node-id attr-list?referenced by:stmtnode-id:node-id ::= id port?referenced by:edge-stmtedgeRHSnode-stmtport:port ::= port-location port-angle?
| port-angle port-location?referenced by:node-idport-location:port-location
::= ':' id
| ':' '(' id ',' id ')'referenced by:portport-angle:port-angle
::= '@' idreferenced by:portedge-stmt:edge-stmt
::= ( node-id | subgraph ) edgeRHS attr-list?referenced by:stmtedgeRHS:edgeRHS ::= edgeop ( node-id | subgraph ) edgeRHS?referenced by:edge-stmtedgeRHSsubgraph:subgraph ::= ( 'subgraph' id )? '{' stmt-list '}'
| 'subgraph' idreferenced by:edge-stmtedgeRHSstmtid:id ::= [a-zA-Z] [0-9a-zA-Z]*referenced by:a-listgraphnode-idport-angleport-locationstmtsubgraphedgeop:edgeop ::= '->'
| '--'referenced by:edgeRHS ... generated by Railroad Diagram Generator