2.1 词法与书写规则
DataQL 脚本由关键字、标识符、字面量和运算符组成。关键字区分大小写,语句末尾的分号可以省略。
注释与空白
// 注释延续到行末;/* ... */ 可以跨行,不支持嵌套。字符串和代码片段中的内容由各自的规则处理。
/* 计算总价 */
var price = 20;
var count = 3; // 数量
return price * count;
空格、制表符和换行可以分隔记号。3-1 与 3 - 1 含义相同。
关键字
| 关键字 | 用途 |
|---|---|
var | 定义或重新绑定变量 |
run | 执行表达式,忽略结果 |
return、throw、exit | 返回、抛错、结束整个查询 |
if、else | 条件分支 |
assert | 校验布尔条件 |
hint | 设置执行选项 |
import、as | 导入资源并指定名称 |
true、false、null | 布尔值与空值 |
标识符
普通标识符满足 [_a-zA-Z][_0-9a-zA-Z]*。包含中文、空格或关键字的名称可用反引号包裹;对象字段也可以通过字符串下标访问。
var `用户` = {"姓名": "Alice", "display-name": "Alice A"};
return [`用户`.`姓名`, `用户`['display-name']];
字符串
字符串可用单引号或双引号包裹,支持 \n、\r、\t、\b、\f、\\、\'、\"、\uXXXX 转义。字符串不能直接跨行,换行使用 \n。
return ["Hello", 'DataQL', '\u0041', 'line1\nline2'];
分隔符与运算符
| 记号 | 用途 |
|---|---|
() | 函数参数、表达式分组 |
{} | 语句块、对象、参数访问 |
[] | 列表、下标 |
,、:、; | 分隔元素、键值和语句 |
= | var 赋值、Hint 配置、片段参数表达式 |
-> | 定义函数 |
=> | 转换结果结构 |
@@name(...)<% ... %> | 定义代码片段 |
算术、比较、逻辑和位运算的用法及优先级见表达式。