原文参考:https://graphviz.gitlab.io/_pages/doc/info/lang.html
学习神器:http://magjac.com/graphviz-visual-editor/
有些地方若翻译得不够好,请多多赐教啊,谢谢啦!
目录
1、DOT语法
The following is an abstract grammar defining the DOT language. Terminals are shown in bold font and nonterminals in italics. Literal characters are given in single quotes. Parentheses ( and ) indicate grouping when needed. Square brackets [ and ] enclose optional items. Vertical bars | separate alternatives.
下面是一个抽象的DOT语言语法定义。语法要素用粗体表示,而语法要素的组织方式则用斜体表示。元字符放在单引号对中。括号“(”和“)”表示需要的分组。中括号“[”“]”括入可选项。垂直线“|”分隔可替代选项。
译注:语法解析
语法要素是指DOT语言最终定义的对象,包括(严格)(有向、无向)图、边、节点、子图,以及节点间连接方向。非语法要素是指语法要素的组织、构成规则。在语法定义中,这二者实际就如同数据结构中数据与结构的关系。
1.1 DOT代码结构
graph:[ strict ] (graph | digraph) [ ID ] '{' stmt_list '}'
定义整个图,以graph(无向图)或digraph(有向图)开始,前面可以有strict(严格),后面可接图ID。具体定义放在一对大括号中。如:
digraph {
A -> B
A -> B
}
strict digraph {
A -> B
A -> B
}
1.2 语句(体)类型
stmt_list:[ stmt [ ';' ] stmt_list ]
在大括号中的是实际定义图的语句体。由若干条语句组成,语句之间用“;”(可选)隔开。
stmt:node_stmt|edge_stmt|attr_stmt|ID '=' ID|subgraph
语句体中每条语句所属的语句类型:节点语句node_stmt,边语句edge_stmt,属性声明语句attr_stmt,“=”号语句ID’=’ID和子图定义语句subgraph。
1.3 属性声明语句
attr_stmt:(graph | node | edge) attr_list
属性声明语句以graph、node、edge开始,指明声明的是图、节点、边的属性,后必须接属性声明列表attr_list,如(符号“//”“/**/”表示注释,后同):
digraph action {
node [shape = record,color=green,height=.1]; //node属性声明
edge[color=red]//edge属性声明,可以不用分号结尾
node0/*node语句,定义一个节点,可省略属性声明(此时整个node语句可省略),使用默认或最近的一个node语句声明的属性。*/
node2
node0->node2/*edge语句,定义一条边,没有属性声明时,使用默认或最近的一个edge声明语句声明的属性。*/
}
上面这个例子等同于:
digraph action {
node [shape = record,color=green,height=.1];
edge[color=red]
node0->node2
}
1.4 属性列表
attr_list:'[' [ a_list ] ']' [ attr_list ]
属性声明列表,用中括号“[”“]”将具体的属性声明a_list括起来。注意此时的中括号是元字符,不表示语法结构中的可选项。属性列表后可以再接属性列表(可选)。后面的attr_list意义同此。
1.5 属性列表项
a_list:ID '=' ID [ (';' | ',') ] [ a_list ]
属性列表中括号中具体的属性声明。形式上由一个或多个“属性名ID=值ID”组成,多个属性声明间用分号“;”或逗号“,”隔开(可选),如。
digraph action {
node [shape = record,color=green;height=.1];
edge[color=red]
node0->node2
}
属性列表和声明可分开写:
digraph action {
node [shape = record;color=green][height=.1];
edge[color=red]
node0->node2
}
1.6 边语句
edge_stmt:(node_id | subgraph) edgeRHS [ attr_list ]
边语句,定义一条边,以一个节点ID或一个子图(非语法要素,满足subgraph定义即可,后同)开始,后接edgeRHS和该(组)边的属性声明列表(无此列表则与默认或最近的edge属性声明一致)。若节点ID未用节点语句定义,则其属性与默认或最近的node属性声明保持一致。
edgeRHS:edgeop (node_id | subgraph) [ edgeRHS ]
首先是边操作符“->”或“--”,然后是一个节点ID或子图,edgeRHS可出现一次或多次,即可连续定义,如:
di