第二章 DOT 语言

2.1 图(graph|digraph)的定义

Definition of Graph
1
graph : [*strict*] (*graph* | *digraph*) [ID] '{' stmt_list '}'

DOT 语言内定义图,主要有三部分:图类型的声明、图的名称和图的具体内容。

[strict] (graph | digraph) 是对图类型的定义, graph 用于定义一般由点和线段组成的无向图,而 digraph 则用于定义有向图。 strict 是可选的,用于限制是否启用严格的语法。关于严格的语法,会在后续讲到,一般不需要声明 strict

[ID] 是对图名称的声明,一般由描述该图的名称的英文表示。

'{' stmt_list '}' 是图的具体内容,由一段被英文花括号包裹的语句列表组成。语句列表的定义如下:

2.2 语句(stmt)的定义

Definition of Statement List
1
stmt_list : [ stmt [';'] stmt_list ]

上述的定义是递归定义,简单的理解就是 stmt_list 是由多个 stmt 组成的,多个 stmt 之间使用英文分号分隔。

Definition of Statement
1
stmt : node_stmt | edge_stmt | attr_stmt | ID '=' ID | subgraph

2.2.1 属性语句(attr_stmt)的定义

Definition of Attribute Statement
1
2
3
attr_stmt : (*graph* | *node* | *edge*) attr_list
edge_stmt : (node_id | subgraph) edgeRHS [ attr_list ]
node_stmt : node_id [ attr_list ]