User Tools

Site Tools


dsl:dot_language

This is an old revision of the document!


DOT 语言

DOT 语言的主要语法定义。

https://graphviz.gitlab.io/_pages/doc/info/lang.html Terminals are shown in bold font and nonterminals in italics.单引号表示本意词汇,圆括号表示分组,方括号表示可选项,竖线分隔替代项。

graph : [ strict ] (graph | digraph) [ ID ] '{' stmt_list '}' stmt_list : [ stmt [ ';' ] stmt_list ] stmt : node_stmt | edge_stmt | attr_stmt | ID '=' ID | subgraph attr_stmt : (graph | node | 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 : [ subgraph [ ID ] ] '{' stmt_list '}' compass_pt : (n | ne | e | se | s | sw | w | nw | c | _)

其中, node, edge, graph, digraph, subgraph, strict 大小写不敏感。

ID 可以取下列几种:

  • Any string of alphabetic ([a-zA-Z\200-\377]) characters, underscores ('_') or digits ([0-9]), not beginning with a digit;
  • a numeral [-]?(.[0-9]+ | [0-9]+(.[0-9]*)? );
  • any double-quoted string (“…”) possibly containing escaped quotes (\“)1;
  • an HTML string (<…>).

ID 就是一个字符串,前两项不使用引号只是为了简单。

edgeop 在有向图中使用 → ,在无向图中使用 – 。

Dot 语言支持 C++-风格的注释,/* */ 和 。同时,以 # 字符开始的行被认为是C预处理器输出行,也被忽略。 分号和逗号只是为了可读性,没有强制要求。元素之间可以插入任何数量的空格。 ===== 子图和图族 ===== 子图(Subgraph)在 Graphviz主要有三个作用。一是子图代表一个图形结构,其中的节点和边要求一起处理,同时也为边的操作提供了便捷方式; A -> {B C} 等价于 A -> B A -> C 二是子图提供了属性设置的上下文环境;如 subgraph { rank = same; A; B; C; } 三是子图决定了图形的布局。 ===== 词汇和语义注释 ===== 一个图必须声明为 digraphgraph。有向图必须使用 → 声明边,而无向图使用 – 声明边。 图的声明可以使用 strict,这样禁止在两个节点间创建多条边。比如 strict graph { a -- b a -- b b -- a [color=blue] } 在节点 a,b间只会创建一个蓝色的边。 如果使用 nodeedgegraph 声明定义了缺省的属性,或使用属性赋值定义了非节点和边相关的属性,此后的图形元素会使用相同的属性,直到新的属性定义。属性定义之前为空属性。 子图会继承父图的属性定义,但有时并不希望这样,所以,与其在图形开始处列出属性定义,在子图中重置属性定义,不如在子图定义时定义属性。 ===== 字符编码 ===== DOT 语言缺省使用 UTF-8 字符编码,也接受 Latin1 (ISO-8859-1) 字符集,需要使用 charset 属性指定。

dsl/dot_language.1557481991.txt.gz · Last modified: 2019/05/10 05:53 by zhwiki