英语法语西班牙语

Ad


OnWorks 网站图标

gvpr - 云端在线

通过 Ubuntu Online、Fedora Online、Windows 在线模拟器或 MAC OS 在线模拟器在 OnWorks 免费托管服务提供商中运行 gvpr

这是 gvpr 命令,可以使用我们的多个免费在线工作站之一在 OnWorks 免费托管服务提供商中运行,例如 Ubuntu Online、Fedora Online、Windows 在线模拟器或 MAC OS 在线模拟器

程序:

您的姓名


gvpr - 图模式扫描和处理语言

概要


虚拟现实 [-icnqV?[ -o 输出文件 [ -a ARGS [ '编' | -f 配置文件 [ ]

商品描述


虚拟现实 (以前称为 GPR) 是一个图形流编辑器,灵感来自 AWK. 它复制输入
图形到其输出,可能会转换它们的结构和属性,创建新的
图形,或打印任意信息。 图模型是由提供的
库图(3). 特别是, 虚拟现实 使用点语言读取和写入图形。

基本上, 虚拟现实 遍历每个输入图,表示为 $G,访问每个节点和边,
将其与输入程序中提供的谓词-动作规则相匹配。 规则是
顺序评价。 对于每个评估为真的谓词,相应的动作是
执行。 在遍历过程中,当前被访问的节点或边表示为 $.

对于每个输入图,都有一个目标子图,表示为 $T, 最初为空并使用
累积选择的实体和输出图, $O, 用于最终处理,然后
写入输出。 默认情况下,输出图是目标图。 输出图
可以在程序中设置,或者在有限的意义上,在命令行上设置。

配置


支持以下选项:

-a ARGS
字符串 ARGS 被拆分为以空格分隔的标记,个人
可作为字符串使用的令牌 虚拟现实 程序为 无人驾驶汽车[0],...,ARGV[ARGC-1].
单引号或双引号子字符串中的空白字符,或以
反斜杠,作为分隔符被忽略。 通常,反斜杠字符会关闭
以下字符的任何特殊含义。 请注意,派生自的令牌
-a 标志是串联的。

-c 使用源图作为输出图。

-i 在以下上下文中导出输出图的节点诱导子图扩展
它的根图。

-o 输出文件
使输出流写入指定文件; 默认情况下,输出为
写入 标准输出.

-f 配置文件
使用指定文件的内容作为对输入执行的程序。 如果
配置文件 包含斜杠字符,名称将作为文件的路径名。
除此以外, 虚拟现实 将使用环境变量中指定的目录
GVPR路径 查找文件。 如果 -f 没有给出, 虚拟现实 将使用第一个非
选项参数作为程序。

-q 关闭警告消息。

-n 关闭图形预读。 默认情况下,变量 $NG 设置为下一个图形
待处理。 这需要在处理之前读取下一张图
当前图形,如果下一个图形仅响应于生成,则可能会阻塞
一些与处理当前图形有关的操作。

-V 使程序打印版本信息并退出。

-? 使程序打印使用信息并退出。

操作数


支持以下操作数:

包含 1 个或多个点语言图形的文件的名称。 如果不 -f 选项
给出,名字从列表中删除并用作输入程序。
如果文件列表为空, 标准输入 将被使用。

课程


A 虚拟现实 程序由一系列谓词-动作从句组成,具有以下形式之一:

开始 { 行动 }

BEG_G { 行动 }

N [ 谓词 ] { 行动 }

E [ 谓词 ] { 行动 }

END_G { 行动 }

结束 { 行动 }

一个程序最多可以包含每一个 开始, END_G结束 条款。 有可以
是任意数量 BEG_G, NE 语句,第一个应用于图形,第二个应用于
节点,第三个是边。 这些被分成块,一个块由一个
可选 BEG_G 声明和所有 NE 直到下一个声明 BEG_G 声明,如果
任何。 的顶级语义 虚拟现实 程序是:

评估 开始 条款,如果有的话。
对于每个输入图 G {
对于每个块{
G 作为当前图形和当前对象。
评估 BEG_G 条款,如果有的话。
对于每个节点和边 G {
将节点或边设置为当前对象。
评估 N or E 条款,视情况而定。
}
}
G 作为当前对象。
评估 END_G 条款,如果有的话。
}
评估 结束 条款,如果有的话。

的行动 开始, BEG_G, END_G结束 当子句被执行时,子句被执行
评估。 为了 N or E 子句中,谓语或动作都可以省略。 如果有
不是带有动作的谓词,动作是在每个节点或边上执行的,如
合适的。 如果没有动作并且谓词评估为真,则关联的
节点或边被添加到目标图中。

这些块按照它们出现的顺序进行评估。 在一个街区内, N 条款
(E 子句)按照发生的顺序进行评估。 不过请注意,
在一个街区内, N or E 子句可以交错,这取决于遍历顺序。

谓词和动作是 C 方言支持的语句序列
表达式(3) 图书馆。 谓词和动作之间的唯一区别是前者
必须具有可以解释为 true 或 false 的类型。 这里通常的 C
遵循约定,其中非零值被认为是真的。 这将包括
非空字符串和对节点、边等的非空引用。 然而,如果一个字符串可以
转换为整数,则使用此值。

除了通常的 C 基类型 (无效, INT, 坦克, 浮动, , 无符号翻番),
虚拟现实 提供 绳子 作为...的同义词 字符*,以及基于图的类型 节点_t, 边_t,
图_t对象_t。 该 对象_t 类型可以看作是其他 3 个具体的超类型
类型; 正确的基类型是动态维护的。 除了这些基本类型,
只有其他支持的类型表达式是(关联)数组。

常量遵循 C 语法,但字符串可以用 “......” or '……'. 虚拟现实
接受 C++ 注释以及 cpp 类型的注释。 对于后者,如果一行以
'#' 字符,该行的其余部分将被忽略。

语句可以是函数的声明、变量或数组,或可执行文件
陈述。 对于声明,只有一个作用域。 数组声明具有以下形式:

类型 排列 [ type0 ]

哪里 type0 是可选的。 如果提供,解析器将强制所有数组
下标具有指定的类型。 如果没有提供,所有类型的对象都可以
用作下标。 与在 C 中一样,必须声明变量和数组。 特别是,一个
未声明的变量将被解释为节点、边或
图,视上下文而定。

可执行语句可以是以下之一:

{ [ 声明 ... ] }
表达 // 通常 VAR = 表达
如果( 表达 ) 声明 [ 其他 声明 ]
为( 表达 ; 表达 ; 表达 ) 声明
为( 排列 [ VAR ]) 声明
为 ( 排列 [ VAR ]) 声明
尽管 ( 表达 ) 声明
开关( 表达 ) 案件 声明
打破 [ 表达 ]
继续 [ 表达 ]
回报 [ 表达 ]
括号中的项目是可选的。

在第二种形式 声明和 福尔 声明,变量 VAR 被设置为
每个值用作指定数组中的索引,然后是关联的 声明 is
评估。 对于数字和字符串索引,索引以递增的形式返回
(递减)数字或字典顺序 (福尔, 分别)。 这个可以用
用于排序。

函数定义只能出现在 开始 条款。

表达式包括常用的 C 表达式。 字符串比较使用 ==!= 对待
右手操作数作为正则表达式匹配的模式。 图案
使用 KSH(1) 文件匹配模式语法。 (对于简单的字符串相等,使用 链表
功能。

虚拟现实 将尝试将表达式用作适当的字符串或数值。 两个都
如果可能,类似 C 的强制转换和函数模板将导致执行转换。

图形类型的表达式(即 图_t, 节点_t, 边_t, 对象_t) 后可以跟一个
字段引用的形式 .姓名. 结果值是属性的值
命名 姓名 给定的对象。 此外,在某些情况下,未申报的、
未修改的标识符被视为属性名称。 具体来说,这样的标识符
分别表示当前节点或边的属性,在 NE 条款,以及
当前图表在 BEG_GEND_G 条款。

像往常一样在 库图(3) 模型,属性是字符串值。 此外, 虚拟现实
支持图形对象的某些伪属性,不一定是字符串值。 这些
反映图形对象的内在属性,不能由用户设置。

: 节点_t
边缘的头部。

尾巴 : 节点_t
边缘的尾部。

姓名 : 绳子
边、节点或图的名称。 边的名称具有“<尾巴-
姓名>[]“,在哪里 是“->“或”--“ 根据
图是否有向。 支架部分 [] 仅当
edge 有一个非平凡的键。

入度 : INT
节点的入度。

出度 : INT
节点的出度。

: INT
节点的度数。

: 图_t
对象的根图。 根图的根是它本身。

: 图_t
子图的父图。 根图的父节点是

n_边 : INT
图中的边数

n_节点 : INT
图中的节点数

针对 : INT
如果图是有向图,则为真(非零)

严格 : INT
如果图是严格的,则为真(非零)

内置 职能


以下函数内置于 虚拟现实. 这些函数返回对图形的引用
对象返回 在失败的情况下。

子图
图形(s : 绳子, t : 绳子): 图_t
创建一个名称为的图 s 并且其类型由字符串指定 t.
忽略大小写,字符 U, D, S, N 使解释不受指导,
分别是定向的、严格的和非严格的。 如果 t 是空的,有向的,非
生成严格的图。

亚克(g : 图_t, s : 绳子): 图_t
在图中创建子图 g 有名字 s. 如果子图已经存在,则为
回。

是Subg(g : 图_t, s : 绳子): 图_t
返回图中的子图 g 有名字 s,如果它存在,或 除此以外。

fstsubg(g : 图_t): 图_t
返回图中的第一个子图 g 如果不存在。

NXTSUBG(sg : 图_t): 图_t
之后返回下一个子图 sg.

是直接的(g : 图_t): INT
当且仅当返回真 g 被指示。

是严格的(g : 图_t): INT
当且仅当返回真 g 严格。

节点数(g : 图_t): INT
返回节点数 g.

(g : 图_t): INT
返回边的数量 g.

Nodes
节点(sg : 图_t, s : 绳子): 节点_t
在图中创建一个节点 g 名字的 s. 如果这样的节点已经存在,则返回它。

子节点(sg : 图_t, n : 节点_t): 节点_t
插入节点 n 进入子图 g. 返回节点。

节点(g : 图_t): 节点_t
返回图中的第一个节点 g 如果不存在。

节点(n : 节点_t): 节点_t
之后返回下一个节点 n 在根图中,或 .

nxtnode_sg(sg : 图_t, n : 节点_t): 节点_t
之后返回下一个节点 n in sg.

节点(sg : 图_t, s : 绳子): 节点_t
在(子)图中寻找一个节点 sg 名字的 s. 如果存在这样的节点,则返回它。
除此以外, 返回。

是子节点(sg : 图_t, n : 节点_t): INT
如果节点返回非零 n 在(子)图中 sg,否则为零。

入度(sg : 图_t, n : 节点_t): INT
返回节点的入度 n 在(子)图中 sg.

出度(sg : 图_t, n : 节点_t): INT
返回节点的出度 n 在(子)图中 sg.

程度(sg : 图_t, n : 节点_t): INT
返回节点的度数 n 在(子)图中 sg.

边缘
边缘(t : 节点_t, h : 节点_t, s : 绳子): 边_t
创建带有尾节点的边 t, 头节点 h 和名字 s 在根图中。 如果
图是无向的,头和尾节点之间的区别并不重要。
如果这样的边已经存在,则返回它。

边缘_sg(sg : 图_t, t : 节点_t, h : 节点_t, s : 绳子): 边_t
创建带有尾节点的边 t, 头节点 h 和名字 s 在(子)图中 sg (和所有
父图)。 如果图是无向图,头尾的区别
节点不重要。 如果这样的边已经存在,则返回它。

子边(g : 图_t, e : 边_t): 边_t
插入边缘 e 进入子图 g. 返回边缘。

是边(t : 节点_t, h : 节点_t, s : 绳子): 边_t
寻找带有尾节点的边 t, 头节点 h 和名字 s. 如果图形是
无向,头和尾节点之间的区别并不重要。 如果这样一个
edge 存在,它被返回。 除此以外, 返回。

isEdge_sg(sg : 图_t, t : 节点_t, h : 节点_t, s : 绳子): 边_t
寻找带有尾节点的边 t, 头节点 h 和名字 s 在(子)图中 sg。 如果
图是无向的,头和尾节点之间的区别并不重要。
如果存在这样的边,则返回它。 除此以外, 返回。

是子边(g : 图_t, e : 边_t): INT
如果边缘返回非零 e 在(子)图中 sg,否则为零。

粗壮的(n : 节点_t): 边_t
返回节点的第一个外缘 n 在根图中。

fstout_sg(sg : 图_t, n : 节点_t): 边_t
返回节点的第一个外缘 n 在(子)图中 sg.

输出(e : 边_t): 边_t
返回下一个outedge之后 e 在根图中。

nxtout_sg(sg : 图_t, e : 边_t): 边_t
返回下一个outedge之后 e 在图中 sg.

斯廷(n : 节点_t): 边_t
返回节点的第一个边缘 n 在根图中。

fstin_sg(sg : 图_t, n : 节点_t): 边_t
返回节点的第一个边缘 n 在图中 sg.

新丁(e : 边_t): 边_t
返回下一个 inedge 之后 e 在根图中。

NXtin_sg(sg : 图_t, e : 边_t): 边_t
返回下一个 inedge 之后 e 在图中 sg.

费斯特奇(n : 节点_t): 边_t
返回节点的第一条边 n 在根图中。

fstedge_sg(sg : 图_t, n : 节点_t): 边_t
返回节点的第一条边 n 在图中 sg.

边缘(e : 边_t, 节点_t): 边_t
之后返回下一个边 e 在根图中。

nxtedge_新加坡(sg : 图_t, e : 边_t, 节点_t): 边_t
之后返回下一个边 e 在图中 sg.

奥普(e : 边_t, 节点_t): 节点_t
返回边缘上的节点 e 不等于 n. 返回 NULL 如果 n 不是一个节点
e. 这在使用时很有用 费斯特奇边缘 枚举邻居
n.

图表 I / O
(g : 图_t): 无效
打印 g 点格式到输出流。

写G(g : 图_t, : 绳子): 无效
打印 g 以点格式写入文件 .

写G(g : 图_t, fd : INT): 无效
打印 g 以点格式到由整数表示的开放流上 fd.

读G( : 绳子): 图_t
返回从文件中读取的图形 . 图形应为点格式。 如果不
可以读取图形, 返回。

恐惧症(fd : INT): 图_t
返回从打开的流中读取的下一个图形 fd. 退货 在文件末尾。

图表 杂项
删除(g : 图_t, x : 对象_t): 无效
删除对象 x 从图 g。 如果 g is ,该函数使用的根图
x。 如果 x 是图或子图,除非 x 锁住了。

是在(g : 图_t, x : 对象_t): INT
返回真如果 x 在子图中 g.

克隆G(g : 图_t, s : 绳子): 图_t
创建图的克隆 g 名称为 s。 如果 s 是“”,创建的图有
同名 g.

克隆(g : 图_t, x : 对象_t): 对象_t
创建对象的克隆 x 在图中 g. 特别是,新对象具有相同的
名称/值属性和结构作为原始对象。 如果一个对象带有
相同的键 x 已经存在,它的属性被 x
对象被返回。 如果克隆了一条边,则隐式克隆了两个端点。
如果一个图被克隆,则所有节点、边和子图都被隐式克隆。 如果 x
是一个图形, g 也许 , 在这种情况下克隆的对象将是一个新的根
图形。 在这种情况下,调用相当于 克隆G(x,"").

复制(g : 图_t, x : 对象_t): 对象_t
创建对象的副本 x 在图中 g,其中新对象具有相同的名称/值
属性作为原始对象。 如果具有相同键的对象 x 已经
存在,它的属性被 x 并返回对象。 笔记
这是一个浅拷贝。 如果 x 是一个图,没有它的节点、边或子图
被复制到新图形中。 如果 x 是一条边,如果端点被创建
必要的,但它们不是克隆的。 如果 x 是一个图形, g 也许 ,在这种情况下
克隆的对象将是一个新的根图。

副本A(SRC : 对象_t, 时间 : 对象_t): INT
复制对象的属性 SRC 反对 时间, 覆盖任何属性值
时间 最初可能有。

促使(g : 图_t): 无效
扩展 g 到其根图中的节点诱导子图扩展。

有属性(SRC : 对象_t, 姓名 : 绳子): INT
如果对象返回非零 SRC 有一个属性,它的名字是 姓名. 它返回 0
除此以外。

属性(g : 图_t, : 绳子, 姓名 : 绳子): INT
如果属性返回非零 姓名 已经定义在 g 对于对象
特定 . 对于节点、边和图, 应该是“N”、“E”和“G”,
分别。 否则返回 0。

得到(SRC : 对象_t, 姓名 : 绳子): 绳子
返回属性的值 姓名 在对象 SRC. 这对这些情况很有用
,尤其是 姓名 与关键字之一(例如“head”或“root”)冲突。 如果
属性尚未在图中声明,函数将使用
默认值“”。 为了避免这种情况,应该使用 有属性 or 属性 功能
检查属性是否存在。

一套(SRC : 对象_t, 姓名 : 绳子, 折扣值 : 绳子): INT
设置属性值 姓名 在对象 SRC折扣值. 成功返回 0,
失败时非零。 看 得到 以上。

获取文件(g : 图_t, : 绳子, 姓名 : 绳子): 绳子
返回属性的默认值 姓名 在对象中 g 给定的 。 对于
节点、边和图, 应分别为“N”、“E”和“G”。 如果
属性尚未在图中声明,函数将使用
默认值“”。 为了避免这种情况,应该使用 属性 检查功能
该属性存在。

设置文件(g : 图_t, : 绳子, 姓名 : 绳子, 折扣值 : 绳子): INT
设置属性的默认值 姓名折扣值 在对象中 g 给定的
. 对于节点、边和图, 应分别为“N”、“E”和“G”。
成功时返回 0,失败时返回非零。 看 获取文件 以上。

属性(g : 图_t, : 绳子): 绳子
返回对象的第一个属性的名称 g 给定的 。 对于
节点、边和图, 应分别为“N”、“E”和“G”。 如果有
没有属性,则返回字符串“”。

nxt属性(g : 图_t, : 绳子, 姓名 : 绳子): 绳子
返回对象的下一个属性的名称 g 给定的
属性 姓名. 论据 姓名 必须是现有属性的名称; 它
通常是先前调用的返回值 属性 or nxt属性。 对于
节点、边和图, 应分别为“N”、“E”和“G”。 如果有
如果没有剩余属性,则返回字符串“”。

组合(g : 图_t, n : 节点_t): 图_t
返回图的连通分量 g 包含节点 n,作为的子图
g. 子图仅包含节点。 一个可以用 促使 添加边缘。 这
函数失败并返回 if n 不在 g. 连通性是基于
底层无向图 g.

的种类(OBJ : 对象_t): 绳子
返回类型的指示 OBJ. 对于节点、边和图,它返回
分别为“N”、“E”和“G”。

(g : 图_t, v : INT): INT
在根图上实现图锁定。 如果整数 v 为正,图形为
设置以便将来调用 删除 没有立竿见影的效果。 如果 v 为零,则
图形已解锁。 如果在图形被删除时调用了删除图形
锁定,图形关闭。 如果 v 是否定的,什么都不做。 在所有情况下,
返回先前的锁定值。

琴弦
冲刺(fmt : 绳子, ...): 绳子
返回格式化表达式的值所产生的字符串
发生在 fmt 根据本 的printf(3) 格式 fmt

格子(STR : 绳子, : 绳子): 绳子

格子(STR : 绳子, : 绳子, 代表 : 绳子): 绳子
回报 STR 所有子串匹配 删除或替换为 代表,


(STR : 绳子, : 绳子): 绳子

(STR : 绳子, : 绳子, 代表 : 绳子): 绳子
回报 STR 与最左边的子串匹配 删除或替换为 代表,
分别。 字符 '^' 和 '$' 可用于开头和结尾,
分别是 将模式锚定到开头或结尾 STR.

子字符串(STR : 绳子, IDX : INT): 绳子

子字符串(STR : 绳子, IDX : INT, LEN : INT): 绳子
返回子串 STR 从位置开始 IDX 到字符串的末尾或
长度 LEN, 分别。 索引从 0 开始。如果 IDX 是否定的或 IDX is
大于长度 STR,发生致命错误。 同样,在第二个
情况下,如果 LEN 是否定的或 IDX + LEN 大于长度 STR致命
发生错误。

链表(s1 : 绳子, s2 : 绳子): INT
提供标准的C函数 链表(3)。

长度(s : 绳子): INT
返回字符串的长度 s.

指数(s : 绳子, t : 绳子): INT

指数(s : 绳子, t : 绳子): INT
返回字符串中字符的索引 s 最左边(最右边)的副本在哪里
字符串的 t 可以找到,或者 -1 如果 t 不是的子串 s.

匹配(s : 绳子, p : 绳子): INT
返回字符串中字符的索引 s 其中最左边的模式匹配
p 可以找到,或者 -1 如果没有子串 s 火柴 p.

上衣(s : 绳子): 绳子
返回一个版本 s 将字母字符转换为大写。

降低(s : 绳子): 绳子
返回一个版本 s 将字母字符转换为小写。

教规(s : 绳子): 绳子
返回一个版本 s 适合用作点文件中的标识符。

HTML(g : 图_t, s : 绳子): 绳子
返回一个“魔法”版本的 s 作为 HTML 字符串。 这通常用于
将类似 HTML 的标签附加到图形对象。 请注意,返回的字符串位于
g. 特别是,当它被释放时 g 已关闭,并充当 HTML 字符串,
它必须与一个对象一起使用 g. 另外,注意尖括号
报价不应该是的一部分 s. 这些将被添加,如果 g 用具体的 DOT 写成
格式。

html(s : 绳子): INT
当且仅当返回非零值 s 是一个 HTML 字符串。

xof(s : 绳子): 绳子
返回字符串“x“ 如果 s 有形式“x,y”,其中 xy 是数字。

yof(s : 绳子): 绳子
返回字符串“y“ 如果 s 有形式“x,y”,其中 xy 是数字。

(s : 绳子): 绳子
返回字符串“LLX,LLY“ 如果 s 有形式“LLX,LLY,乌尔克斯,URY”,所有的 LLX,
LLY, 乌尔克斯URY 是数字。

尿素(s)
urof(s : 绳子): 绳子 返回字符串“乌尔克斯,URY“ 如果 s 具有形式
"LLX,LLY,乌尔克斯,URY”,所有的 LLX, LLY, 乌尔克斯URY 是数字。

扫描(s : 绳子, fmt : 绳子, ...): INT
扫描字符串 s, 根据 扫描(3) 格式 fmt。 该
值存储在以下地址中 fmt, 具有形式的地址 &v,
哪里 v 是一些正确类型的声明变量。 返回项目数
扫描成功。

分裂(s : 绳子, ARR : 排列, 九月 : 绳子): INT

分裂(s : 绳子, ARR : 排列): INT

令牌(s : 绳子, ARR : 排列, 九月 : 绳子): INT

令牌(s : 绳子, ARR : 排列): INT
分裂 函数打破字符串 s 进入领域,而 令牌 功能
将字符串分解为标记。 一个字段由所有非分隔符组成
两个分隔符之间或字符串的开头或结尾。 因此,一个
字段可能是空字符串。 一个标记是一个最大的、非空的子串
包含分隔符。 分隔符是在
九月 争论。 如果 九月 未提供,默认值为“\t\n”。 这
函数返回字段或标记的数量。

字段和标记存储在参数数组中。 数组必须是 绳子-
值,如果指定了索引类型,它必须是 INT. 条目已编入索引
由连续的整数组成,从 0 开始。任何已经存储在数组中的值都将
要么被覆盖,要么在函数返回后仍然存在。

I / O
打印(...): 无效
打印( 表达式, ... ) 依次打印每个参数的字符串表示
标准输出, 后跟换行符。

的printf(fmt : 绳子, ...): INT

的printf(fd : INT, fmt : 绳子, ...): INT
打印由格式化以下表达式的值产生的字符串
fmt 根据本 的printf(3) 格式 fmt. 成功返回 0。 默认情况下,它
印在 标准输出. 如果可选整数 fd 给定,输出写在
与相关联的开放流 fd.

scanf函数(fmt : 绳子, ...): INT

scanf函数(fd : INT, fmt : 绳子, ...): INT
根据输入流扫描值 scanf函数(3) 格式 fmt。 该
值存储在以下地址中 fmt, 具有形式的地址 &v,
哪里 v 是一些正确类型的声明变量。 默认情况下,它从
标准输入. 如果可选整数 fd 给定,从打开的流中读取输入
fd. 返回成功扫描的项目数。

打开F(s : 绳子, t : 绳子): INT
打开文件 s 作为 I/O 流。 字符串参数 t 指定文件的方式
打开。 参数与 C 函数相同 打开(3). 它返回一个
表示流的整数,或 -1 表示错误。

像往常一样,流 0、1 和 2 已经打开为 标准输入, 标准输出斯特德,
分别。 自从 虚拟现实 可以使用 标准输入 要读取输入图,用户应该
避免使用此流。

关闭F(fd : INT): INT
关闭由整数表示的打开流 fd. 流 0、1 和 2 不能是
关闭。 成功返回 0。

读L(fd : INT): 绳子
返回从输入流中读取的下一行 fd. 它返回空字符串“”
在文件末尾。 请注意,换行符保留在返回的字符串中。

数学
EXP(d : 翻番): 翻番
将 e 返回到 d权力。

日志(d : 翻番): 翻番
返回自然对数 d.

开方(d : 翻番): 翻番
返回双精度的平方根 d.

战俘(d : 翻番, x : 翻番): 翻番
回报 d 提出来 x权力。

(d : 翻番): 翻番
返回余弦 d.

(d : 翻番): 翻番
返回正弦 d.

阿坦2(y : 翻番, x : 翻番): 翻番
返回反正切 y / x 在 -pi 到 pi 的范围内。

(y : 翻番, x : 翻番): 翻番
返回最小值 yx.

最大(y : 翻番, x : 翻番): 翻番
返回最大值 yx.

联想的 阵列
# ARR : INT
返回数组中元素的数量 ARR.

IDX in ARR : INT
如果已为索引设置了值,则返回 1 IDX 在数组中 ARR. 它返回 0
除此以外。

未设定(v : 排列, IDX): INT
删除索引的项目 IDX. 如果项目存在,则返回 1,否则返回 0。

未设定(v : 排列): 无效
重新初始化数组。

其他
出口(v : INT): 无效
原因 虚拟现实 使用退出代码退出 v.

系统(CMD : 绳子): INT
提供标准的C函数 系统(3). 它执行 CMD 在用户的外壳中
环境,并返回 shell 的退出状态。

兰特(): 翻番
返回一个介于 0 和 1 之间的伪随机双精度值。

rand(): INT

rand(v : INT): INT
为随机数生成器设置种子。 可选参数给出了种子;
如果省略,则使用当前时间。 返回先前的种子值。
rand 应该在任何调用之前调用 兰特.

颜色(颜色 : 绳子, fmt : 绳子): 绳子
将颜色从一种格式转换为另一种格式。 这 颜色 参数应该是一种颜色
在可识别的字符串表示形式之一中。 这 fmt 值应该是其中之一
“RGB”、“RGBA”、“HSV”或“HSVA”。 出错时返回空字符串。

内置 变数


虚拟现实 提供某些特殊的内置变量,其值由自动设置
虚拟现实 视上下文而定。 除非另有说明,否则用户无法修改其值。

$ : 对象_t
根据上下文表示当前对象(节点、边、图)。 它不是
可用 开始 or 结束 条款。

$F : 绳子
是当前输入文件的名称。

$G : 图_t
表示正在处理的当前图形。 它不可用 开始 or 结束
条款。

$NG : 图_t
表示下一个要处理的图。 如果 $NG 为 NULL,当前图 $G
最后一张图。 请注意,如果输入来自 stdin,则最后一个图不能为
直到输入管道关闭。 它不可用 开始 or 结束
条款,或者如果 -n 标志被使用。

$O : 图_t
表示输出图。 在图遍历之前,它被初始化为目标
图形。 遍历后任意 END_G 动作,如果它指的是一个非空图,
该图被打印到输出流上。 它仅在 N, EEND_G
条款。 输出图可以由用户设置。

$T : 图_t
表示当前目标图。 它是一个子图 $G 并且仅在
N, EEND_G 条款。

$tgt名称 : 绳子
表示目标图的名称。 默认情况下,它设置为 “gvpr_result”。 如果
在执行过程中多次使用 虚拟现实,名称将附加一个
整数。 该变量可由用户设置。

$电视根 : 节点_t
表示(有向或无向)深度优先或广度优先的起始节点
图的第一次遍历(参见 $电视类型 以下)。 默认值为
每个输入图。 遍历给定根后,如果 $电视根
已更改,新的遍历将以新的值开始 $电视根. 另外,设置
$tvnext 联络一位教师

$tvnext : 节点_t
指示(有向或无向)深度优先的下一个起始节点或
图的广度优先遍历(cf. $电视类型 以下)。 如果遍历完成
$电视根 尚未重置,但 $tvnext 已设置但未使用,此
节点将用作下一个选择 $电视根. 默认值为
每个输入图。

$电视边缘 : 边_t
对于 BFS 和 DFS 遍历,这被设置为用于到达当前的边缘
节点或边。 在遍历开始时,或对于其他遍历类型,
价值是 .

$电视类型 : 电视类型_t
表示如何 虚拟现实 遍历一个图。 它只能取一个常数值
带有下面描述的前缀“TV_”。 电视平面 是默认值。

在底层图库中 图形(3)、无向图中的边被赋予一个
任意方向。 这用于遍历,例如 电视转播,需要
有向边。

农业研究中心 : INT
表示由指定的参数数量 -a ARGS 命令行参数。

无人驾驶汽车 : 绳子 排列
表示由指定的参数数组 -a ARGS 命令行参数。 这
i第一个参数由 无人驾驶汽车[i].

内置 常数


有几个符号常量定义为 虚拟现实.

: 对象_t
一个空对象引用,相当于 0。

电视平面 : 电视类型_t
一个简单的平面遍历,以看似任意的顺序访问图形对象。

电视_ne : 电视类型_t
首先访问所有节点,然后访问所有边的遍历。

电视_cn : 电视类型_t
首先访问所有边,然后访问所有节点的遍历。

电视_dfs : 电视类型_t
TV_postdfs : 电视类型_t
TV_prepostdfs : 电视类型_t
在底层无向图上使用深度优先搜索遍历图
图形。 为了做遍历, 虚拟现实 将检查的值 $电视根. 如果这有
与之前的值相同(在开始时,之前的值被初始化
。) 虚拟现实 将简单地寻找一些未访问的节点并遍历其连接的
成分。 另一方面,如果 $电视根 已更改,其连接组件将
被参观,假设它以前没有被参观过,或者,如果 $电视根 is 是,
遍历将停止。 请注意,使用 电视_dfs$电视根, 可以创建
一个无限循环。

默认情况下,遍历是按预先顺序完成的。 即之前访问过一个节点
它所有未访问的边缘。 为了 TV_postdfs,一个节点的所有未访问边都是
在节点之前访问过。 为了 TV_prepostdfs,一个节点被访问两次,之前和
在所有未访问的边缘之后。

电视转播 : 电视类型_t
电视后转 : 电视类型_t
TV_prepostfwd : 电视类型_t
在图上使用深度优先搜索遍历图
向前的弧线。 遍历根的选择与上面描述的相同
电视_dfs 以上。 指定的不同访问顺序 电视转播, 电视后转
TV_prepostfwd 与类似遍历指定的相同
电视_dfs, TV_postdfsTV_prepostdfs.

电视转播 : 电视类型_t
电视_postrev : 电视类型_t
TV_prepostrev : 电视类型_t
在图上使用深度优先搜索遍历图
反向弧线。 遍历根的选择与上面描述的相同
电视_dfs 以上。 指定的不同访问顺序 电视转播, 电视_postrev
TV_prepostrev 与类似遍历指定的相同
电视_dfs, TV_postdfsTV_prepostdfs.

电视_bfs : 电视类型_t
在图上使用广度优先搜索遍历图而忽略边
方向。 查看项目 电视_dfs 以上为作用 $电视根.

示例


虚拟现实 -i 'N[颜色==“蓝色”]' 文件.gv

生成蓝色所有节点的节点诱导子图。

虚拟现实 -c 'N[颜色==“蓝色”]{颜色 = “红色的”}' 文件.gv

使所有蓝色节点变为红色。

开始 { INT n, e; INT 总_n = 0; INT 手提包 = 0; }
BEG_G {
n = n节点($G);
e = n边($G);
的printf ("%d 节点 %d 边缘 %s\n", n, e, $G.名字);
总_n += n;
手提包 += e;
}
结束 { 的printf ("%d 节点 %d 边缘 总计\n", 总_n, 总_e) }

程序版本 gc.

虚拟现实 -c ""

相当于 NOP.

BEG_G { 图_t g = 图形 (“合并”, "S"); }
E {
节点_t h = 克隆(克,$。头);
节点_t t = 克隆(g,$.tail);
边_t e = 边缘(t,h,“”);
e.重量 = e.重量 + 1;
}
END_G { $O = g; }

生成输入图的严格版本,其中边的权重属性
指示边代表输入图中的边数。

开始 {节点_t n; INT 度[]}
E{度[头]++; 度[尾]++; }
END_G {
(度[n]) {
的printf ("度[%s] = %d\n", n.名称, 度[n]);
}
}

计算具有边的节点的度数。

开始 {
INT i, 缩进;
INT 看到[字符串];
无效 印品 (整数 碳纳米管) {
(i = 0; i < cn; 我++) 的printf (" “);
}
}
BEG_G {

$电视类型 = TV_prepostfwd;
$电视根 = 节点($,ARGV[0]);
}
N {
if (见[$.name]) 缩进--;
其他 {
prInd(缩进);
打印 ($.名称);
看过[$.name] = 1;
缩进++;
}
}

打印图形的深度优先遍历,从名称为的节点开始
自动驾驶汽车[0],作为缩进列表。

环境


GVPR路径
要搜索以查找指定的文件的冒号分隔的目录列表
-f 选项。 虚拟现实 有一个内置的默认列表。如果 GVPR路径 没有定义,
使用默认列表。 如果 GVPR路径 以冒号开头,列表由
附加 GVPR路径 到默认列表。 如果 GVPR路径 以冒号结尾,列表是
通过将默认列表附加到 GVPR路径。 除此以外, GVPR路径 是用来
列表。

在 Windows 系统上,将上一段中的“冒号”替换为“分号”。

使用 onworks.net 服务在线使用 gvpr


免费服务器和工作站

下载 Windows 和 Linux 应用程序

Linux 命令

Ad