【翻译】The DOT Language

本文详细介绍了DOT语言的语法,包括DOT代码结构、语句类型、属性声明、边和节点语句、子图定义等。DOT语言用于定义有向无向图,支持C++风格注释和多行字符串,可用于数据可视化和图的布局。文章还提到了子图在图结构、属性设置和布局中的作用,以及字符编码的考虑。
摘要由CSDN通过智能技术生成

原文参考:https://graphviz.gitlab.io/_pages/doc/info/lang.html

学习神器:http://magjac.com/graphviz-visual-editor/

有些地方若翻译得不够好,请多多赐教啊,谢谢啦!

目录

1、DOT语法

1.1 DOT代码结构

1.2 语句(体)类型

1.3 属性声明语句

1.4 属性列表

1.5 属性列表项

1.6 边语句

1.7 节点语句与子图语句

1.8 “=”语句

2、子图与图群

3、词法&语义注解

4、字符编码


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 | edgeattr_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 | subgraphedgeRHS [ attr_list ]

边语句,定义一条边,以一个节点ID或一个子图(非语法要素,满足subgraph定义即可,后同)开始,后接edgeRHS和该(组)边的属性声明列表(无此列表则与默认或最近的edge属性声明一致)。若节点ID未用节点语句定义,则其属性与默认或最近的node属性声明保持一致。

edgeRHS:edgeop (node_id | subgraph) [ edgeRHS ]

首先是边操作符“->”或“--”,然后是一个节点ID或子图,edgeRHS可出现一次或多次,即可连续定义,如:

di
  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值