表达式语法
极测的表达式引擎是一款专为通信调试测试场景自主研发的引擎。其核心优势在于采用了精简的专用语法,显著降低了学习门槛,使用户能够快速上手。同时,引擎具备高度灵活的可扩展性,支持轻松定制新语法,满足多样化的测试需求,为用户提供更高效、更便捷的解决方案。
通用语法
通用语法与Javascript(js)的语法类似。
基本类型
- 支持number类型(整数 & 浮点数)
- 字符串使用单 or 双引号表示
- 十六进制整数以
0x开头 - 布尔值
true和false - 数组定义在
[和]之间
基本运算
- 整数 & 浮点数的数值计算(加
+,减-,乘*,除/,取余%); - 整数支持位运算(按位与
&,按位或|,按位异或^,按位非~,按位左移<<,按位右移>>,无符号右移>>>); - 布尔值运算(相等
==,不等!=,大于>,大于等于>=,小于<,小于等于<=,与(同时支持&&和and),或(同时支持||和or), 非!); - 字符串运算(连接
+); - 支持使用圆括号来改变运算优先级;
- 表达式结果支持js的
truthy和falsy规则,例如计算结果为空字符串时,规则判定为false; - 条件(三元)运算符:
条件 ? 表达式1 : 表达式2,如果条件为true,则返回表达式1的结果,否则返回表达式2的结果。
通用函数
数学常量
e
欧拉数,即自然对数的底数 e,其值约为 2.718。
ln2
2 的自然对数,其值约为 0.693。
ln10
10 的自然对数,其值约为 2.302。
log2e
以 2 为底数,e 的对数,其值约为 1.442。
log10e
以 10 为底数,e 的对数,其值约为 0.434。
pi
圆周率,其值约为 3.141592653589793。
sqrt2
2 的平方根,其值约为 1.414。
数学函数
abs()
abs(x) 函数返回一个数字的绝对值。
- 用法
abs(x)参数
x:一个数字。
返回值
x 的绝对值。如果 x 是负数(包括 -0),则返回 -x。否则,返回 x。
- 示例
abs(-1); // 1
abs(-0); // 0
abs(0); // 0
abs(1); // 1acos()
acos(x) 返回一个数的反余弦值(单位为弧度)。
- 用法
acos(x)参数
x:一个数值。
返回值
acos 方法以 -1 到 1 的一个数为参数,返回一个 0 到 pi(弧度)的数值。如果传入的参数值超出了限定的范围,将返回 NaN。
- 示例
acos(-2); // NaN
acos(-1); // 3.141592653589793
acos(0); // 1.5707963267948966
acos(0.5); // 1.0471975511965979
acos(1); // 0
acos(2); // NaNacosh()
acosh(x) 函数返回一个数的反双曲余弦值。
- 用法
acosh(x)参数
x:一个数字。
返回值
返回给定数的反双曲余弦值,如果该数小于 1 则返回 NaN。
- 示例
acosh(-1); // NaN
acosh(0); // NaN
acosh(0.5); // NaN
acosh(1); // 0
acosh(2); // 1.3169578969248166asin()
asin(x) 方法返回一个数值的反正弦(单位为弧度)。
- 用法
asin(x)参数
x:一个数值。
返回值
asin 方法接受 -1 到 1 之间的数值作为参数,返回一个介于 -π/2 到 π/2 之间的数值。如果接受的参数值超出范围,则返回 NaN。
- 示例
asin(-2); // NaN
asin(-1); // -1.5707963267948966
asin(0); // 0
asin(0.5); // 0.5235987755982989
asin(1); // 1.5707963267948966
asin(2); // NaNasinh()
asinh(x) 返回一个数值的反双曲正弦值。
- 用法
asinh(x)参数
x:一个数值。
返回值
返回指定数值的反双曲正弦值。
- 示例
asinh(-1); // -0.881373587019543
asinh(-0); // -0
asinh(0); // 0
asinh(1); // 0.881373587019543atan()
atan(x) 返回一个数值的反正切值(单位为弧度)。
- 用法
atan(x)参数
x:一个数值。
返回值
atan 返回一个 -π/2 到 π/2 弧度之间的数值。
- 示例
atan(1); // 0.7853981633974483
atan(0); // 0atanh()
atanh(x) 返回一个数值的反双曲正切值。
- 用法
atanh(x)参数
x:一个数值。
返回值
atanh 方法接受 -1 到 1 之间的数值作为参数,对于大于 1 或是小于-1 的值,函数返回 NaN。
- 示例
atanh(-2); // NaN
atanh(-1); // -Infinity
atanh(0); // 0
atanh(0.5); // 0.5493061443340548
atanh(1); // Infinity
atanh(2); // NaNcbrt()
cbrt(x) 返回一个数值的立方根。
- 用法
cbrt(x)参数
x:一个数值。
返回值
返回指定数值的立方根。
- 示例
cbrt(-1); // -1
cbrt(-0); // -0
cbrt(0); // 0
cbrt(1); // 1
cbrt(2); // 1.2599210498948732ceil()
ceil(x) 总是向上舍入,并返回大于等于给定数字的最小整数。
- 用法
ceil(x)参数
x:一个数值。
返回值
大于等于 x 的最小整数。
- 示例
ceil(-7.004); // -7
ceil(-4); // -4
ceil(-0.95); // -0
ceil(-0); // -0
ceil(0); // 0
ceil(0.95); // 1
ceil(4); // 4
ceil(7.004); // 8cos()
cos(x) 返回一个数值的余弦值。
- 用法
cos(x)参数
x:一个以弧度为单位的数值。
返回值
cos 方法返回一个 -1 到 1 之间的数值,表示角度(单位:弧度)的余弦值。
- 示例
cos(0); // 1
cos(1); // 0.5403023058681398
cos(pi); // -1
cos(2 * pi); // 1cosh()
cosh(x) 返回一个数值的双曲余弦值。
- 用法
cosh(x)参数
x:一个数值。
返回值
cosh 方法返回一个数值的双曲余弦值。
- 示例
cosh(0); // 1
cosh(1); // 1.5430806348152437
cosh(-1); // 1.5430806348152437exp()
exp(x) 函数返回 e^x,x 表示参数,e 是欧拉常数(Euler's constant),自然对数的底数。
- 用法
exp(x)参数
x:一个数值。
返回值
exp 方法返回一个数值的指数函数值。
- 示例
exp(-1); // 0.36787944117144233
exp(0); // 1
exp(1); // 2.718281828459045floor()
floor(x) 函数返回小于等于 x 的最大整数。
- 用法
floor(x)参数
x:一个数值。
返回值
floor 方法返回小于等于 x 的最大整数。
- 示例
floor(-45.95); // -46
floor(-45.05); // -46
floor(-0); // -0
floor(0); // 0
floor(4); // 4
floor(45.05); // 45
floor(45.95); // 45log()
log(x) 函数返回 x 的自然对数(底为 e)。
- 用法
log(x)参数
x:一个数值。
返回值
log 方法返回 x 的自然对数(底为 e)。
- 示例
log(-1); // NaN, out of range
log(0); // -Infinity
log(1); // 0
log(10); // 2.302585092994046log2()
log2(x) 函数返回 x 的以 2 为底的对数。
- 用法
log2(x)参数
x:一个数值。
返回值
log2 方法返回 x 的以 2 为底的对数。
- 示例
log2(2); // 1
log2(1024); // 10
log2(1); // 0
log2(0); // -Infinity
log2(-2); // NaN
log2("1024"); // 10log10()
log10(x) 函数返回 x 的以 10 为底的对数。
- 用法
log10(x)参数
x:一个数值。
返回值
log10 方法返回 x 的以 10 为底的对数。
- 示例
log10(10); // 1
log10(100); // 2
log10("100"); // 2
log10(1); // 0
log10(0); // -Infinity
log10(-2); // NaNmax()
max() 函数返回作为输入参数的最大数字,如果没有参数,则返回 -Infinity。
- 用法
max()
max(value0)
max(value0, value1)
max(value0, value1, /* … ,*/ valueN)参数
value1,value2, … ,valueN:0 个或多个数字,将在其中选择,并返回最大的值。
返回值
给定数值中最大的数。如果任一参数不能转换为数值,则返回 NaN。如果没有提供参数,返回 -Infinity。
- 示例
max(10, 20); // 20
max(-10, -20); // -10
max(-10, 20); // 20min()
min() 函数返回作为输入参数的最小数字,如果没有参数,则返回 Infinity。
- 用法
min()
min(value0)
min(value0, value1)
min(value0, value1, /* … ,*/ valueN)参数
value1,value2, … ,valueN:0 个或多个数字,将在其中选择,并返回最小的值。
返回值
给定数值中最小的数。如果任一参数不能转换为数值,则返回 NaN。如果没有提供参数,返回 Infinity。
- 示例
min(10, -20); // -20pow()
pow() 函数返回基数(base)的指数(exponent)次幂,即 base^exponent。
- 用法
pow(base, exponent)参数
base:基数。exponent:指数。
返回值
返回base^exponent。
- 示例
pow(2, 7); // 128random()
random() 返回一个大于等于 0 且小于 1 的伪随机浮点数,并在该范围内近似均匀分布,然后你可以缩放到所需的范围。
- 用法
random() | random
- 参数
无。
- 返回值
一个在 0(包括)到 1(不包括)之间的伪随机浮点数。
round()
round() 函数返回一个数值的四舍五入值。
- 用法
round(x)参数
x:一个数值。
返回值
返回 x 的四舍五入值。
- 示例
round(20.49); //20
round(20.5); //21
round(-20.5); //-20
round(-20.51); //-21sin()
sin() 函数返回一个数值的正弦值。
- 用法
sin(x)参数
x:一个数值。
返回值
x 的正弦值,介于 -1 到 1 之间(包含 -1 和 1)。
- 示例
sin(-0); // -0
sin(0); // 0
sin(1); // 0.8414709848078965
sin(pi / 2); // 1sinh()
sinh() 函数返回一个数字 (单位为角度) 的双曲正弦值。
- 用法
sinh(x)参数
x:任意数字 (单位为度)。
返回值
x 的双曲正弦值。
- 示例
sinh(-0); // -0
sinh(0); // 0
sinh(1); // 1.1752011936438014sqrt()
sqrt() 函数返回一个数字的平方根。
- 用法
sqrt(x)参数
x:一个数值。
返回值
x 的平方根。
- 示例
sqrt(9); // 3
sqrt(2); // 1.414213562373095
sqrt(1); // 1
sqrt(0); // 0
sqrt(-1); // NaN
sqrt(-0); // -0tan()
tan() 函数返回一个数值的正切值。
- 用法
tan(x)参数
x:一个数值,表示一个角(单位:弧度)。
返回值
x 的正切值。
- 示例
将角度值 deg 转换为弧度值,然后计算正切值。
tan((deg * pi) / 180)tanh()
tanh() 函数返回一个数值的双曲正切值。
- 用法
tanh(x)参数
x:一个数值,表示一个角(单位:弧度)。
返回值
x 的双曲正切值。
- 示例
tanh(0); // 0
tanh(1); // 0.7615941559557649trunc()
trunc() 方法会将数字的小数部分去掉,只保留整数部分。
- 用法
trunc(x)参数
x:一个数值。
返回值
x 的整数部分。
- 示例
trunc(13.37); // 13
trunc(42.84); // 42
trunc(0.123); // 0
trunc(-0.123); // -0
trunc("-1.123"); // -1时间函数
now()
now() 函数返回当前时间的时间戳,即自 1970 年 1 月 1 日 00:00:00 (UTC) 到当前时间的毫秒数。
- 用法
now() | now
- 参数
无。
- 返回值
当前时间的时间戳(单位:毫秒)。
elapsed()
elapsed() 函数返回当前时间与相关连接建立时间的差值(毫秒)。
- 用法
elapsed() | elapsed
- 参数
无。
- 返回值
当前时间与相关连接建立时间之间的毫秒数差,如果不存在这样的连接,则返回 0。
字符串
提供操作字符串的工具函数,包括startsWith、endsWith、includes函数。
startsWith()
通过 字符串.startsWith(子字符串) 判断当前字符串是否以另外一个给定的子字符串开头,并根据判断结果返回 true 或 false。
endsWith()
通过 字符串.startsWith(子字符串) 判断一个字符串是否以指定字符串结尾,如果是则返回 true,否则返回 false。
includes()
字符串.includes(子字符串) 执行区分大小写的搜索,以确定是否可以在一个字符串中找到另一个字符串,并根据情况返回 true 或 false。
match()
字符串.match(字符串/正则语法) 检索字符串与正则表达式进行匹配的结果。
反之,正则语法.test(字符串) 可以到达同样的目的。
数组
startsWith()
通过 数组.startsWith(子数组) 判断当前数组是否以另外一个给定的子数组开头,并根据判断结果返回 true 或 false。
数据语法
数据语法提供了访问和操作数据的表达能力。在不同场景中,同一个关键字可能导向不同结果。数据语法支持以下场景:
- 通信数据生成:发送数据时,通过数据语法可以访问数据对象的数据内容,发送的上下文数据等。
- 数据包解析:分析数据包时,通过数据语法可以访问数据包的载荷,访问解析后的数据字段值等。
this:1. 发送数据时,访问当前编辑的内容对象; 2. 分析数据包时,访问当前数据包对象。last:访问上一个数据包对象。lastIn|last('in'):访问上一个方向为「接收」的数据包对象。lastOut|last('out'):访问下一个方向为「发送」的数据包对象。next:分析数据包时,访问下一个数据包对象。nextIn|next('in'):分析数据包时,访问下一个方向为「接收」的数据包对象。nextOut|next('out'):分析数据包时,访问下一个方向为「发送」的数据包对象。
结合以下「属性」关键字,构成形式如[数据/数据包].[属性]的表达式,可以访问指定「数据/数据包」的属性数据。
payload:分析数据包时,访问数据包对象的原始载荷,一般为字节流的数组。data:1. 发送数据时,访问数据对象的数据内容; 2. 分析数据包时,访问解析后的载荷内容,例如将载荷解析为「文本」或「二进制文本」之后的字符串。in:判断数据包的方向是否为接收,返回布尔值。out:判断数据包的方向是否为发送,返回布尔值。$任意字符串:1. 发送数据时,访问数据段对象的指定字段,$后跟随数据段定义的字段名称; 2. 分析数据包时,将载荷解析成指定数据段之后,访问指定字段数据,$后跟随数据段定义的字段名称。asText:将载荷解析为文本字符串。默认采用utf-8解码,可通过asText('gb18030')来指定解码格式。asSegment:将载荷解析为指定的数据段。需要通过asSegment('数据段名称')来指定数据段的名称。
协议语法
通过形如[协议名].[属性名]的格式获取数据的协议信息。
UDP | TCP | WebSocket
协议名: udp | tcpServer | tcpClient | wsServer | wsClient
src:获取源ip地址。dst:获取目的ip地址。srcport:获取源端口。dstport:获取目的端口。
串口
协议名:serial
port:获取串口设备名。parity:校验机制,参考取值为'none' | 'odd' | 'even'。flow:流控,参考取值为'none' | 'onoff' | 'rtscts'。stopBits:停止位,参考取值为1 | 1.5 | 2。dataBits:数据位,参考取值为5 | 6 | 7 | 8。baudRate:波特率,参考取值为'9600', '19200', '38400', '57600', '115200', '230400', '460800', '921600'
CAN
协议名:can
port:获取CAN总线设备名。bitrate:比特率,参考取值为'125000', '250000', '500000', '800000', '1000000'。id:CAN帧的ID,标准帧ID长度为11比特,取值范围是0-2047。rtr:是否为远程帧。
1553B
协议名(远程终端): rt1553
commandWord:RT消息的命令字。statusWord:RT消息的状态字。bufferIndex:RT消息的缓冲区索引。rt:RT消息的远程终端地址。sa:RT消息的子地址。transmit:是否为发送方向(对该远程终端来说),参考取值为1 | 0。wordCount:有效数据字个数,取值范围0-31,0为32个有效数据字。dataWords:数据字的数组。
协议名(总线控制器):bc1553
commandWord:BC消息的命令字。statusWord:BC消息的状态字。bufferIndex:BC消息的缓冲区索引。messageIndex:BC消息索引。rt:BC消息的远程终端地址。sa:BC消息的子地址。transmit:是否为发送方向(对远程终端来说),参考取值为1 | 0。wordCount:有效数据字个数,取值范围0-31,0为32个有效数据字。dataWords:数据字的数组。
ZeroMQ
协议名:zmqpush | zmqpull | zmqreq | zmqrep | zmqpub | zmqsub
type:Endpoint的类型,本地绑定时为'bind',远程连接'connect'。address:绑定/连接的地址信息。topic:接口为发布/订阅模型时,关联的主题名称。
