词法记号

以下正式的语法规范可以用来帮助更深入的了解如何使用 DataQL 的所有特性。

源码文本

DataQL 文档表示建议使用 Unicode字符序列。但这并不是强制的,您可以通过 java.io.Reader 来读取您的字符流数据。顾本文不会强调您的编写查询语言所使用的字符集。

DataQL 支持单行注释和多行注释两种注释方式。与 JavaScript 一样,您可以使用://// 的形式进行代码注释。被注释的代码会被语法解析器忽略。

  • 单行注释:以 // 开头后面的当前换行符内的所有内容均为注释内容。

  • 多行注释:以 * 开始直到遇到 */ 为止,中间的所有内容均为注释。

空白字符

空白字符用于提高源文本的可读性,并作为标记之间的分隔,任何数量的空白都可能出现在任何标记之前或之后。标记之间的空白对于 DataQL 文档的语义意义并不重要。

  • DataQL 会把这些字符识别为空白字符:(空格)\t\n\r\f

关键字

关键字含义
if条件语句的引导词
else用在条件语句中,表明当条件不成立时的分支
return三大退出指令之一,终止当前过程的执行并正常退出到上一个执行过程中
throw三大退出指令之一,终止所有后续指令的执行并抛出异常
exit三大退出指令之一,终止所有后续指令的执行并正常退出
var执行一个查询动作,并把查询结果保存到临时变量中
run仅仅执行查询动作,不保留查询的结果
hint写在 DataQL 查询语句的最前面,用于设置一些执行选项参数
import将另外一个 DataQL 查询导入并作为一个 Udf 形式存在、或直接导入一个 Udf 到当前查询中
as与 import 关键字配合使用,用作将导入的 Udf 命名为一个本地变量名
true基础类型之一,表示 Boolean 的:真值
false基础类型之一,表示 Boolean 的:假值
null基础类型之一,表示 NULL 值

标识符

在编写 DataQL 中用来表示查询中的一些实体。例如:变量名、参数名

  • 标识符必须满足正则表达式:[_a-zA-Z][_0-9a-zA-Z]*

分割符

主要用于分割语义,例如:表达式计算中的提权;语句块的包裹;函数入参的圈定等等。DataQL 的分割符有下面几种:

分割符含义
()函数入参的圈定,表达式中的计算项提取权
{}用来定义复合语句
[]对数据通过下标方式取值操作
,不同参数的分割;对象键值对或数组元素之间的分割
:对象键值对,键和值之间的分割
;语句的结束,DataQL 会自动推断语句结束,因此语句结束分割符并不是必须的

运算符

数学运算位运算比较运算逻辑运算
+加法&按位于运算>大于||逻辑或
-减法|按位或运算>=大于等于&&逻辑与
*乘法!按位取反<小于
/除法^异或<=小于等于
\整除<<左位移==等于
%取摸>>有符号右位移!=不等于
>>>无符号右位移