Skip to main content

词法记号

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

源码文本

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

DataQL 支持单行注释和多行注释两种注释方式,被注释的代码会被语法解析器忽略。

  • 单行注释:以 // 开头后面的当前换行符内的所有内容均为注释内容。
  • 多行注释:以 \* 开始直到遇到 */ 为止,中间的所有内容均为注释。

空白字符

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

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

关键字

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

标识符

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

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

在一些接口中数据对象的 key 可能会超出标识符标示的范围,这时候可以使用反引号 ´xxx´ 的形式来标示标识符。

分割符

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

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

运算符

数学运算位运算比较运算逻辑运算
+加法&按位于运算>大于||逻辑或
-减法|按位或运算>=大于等于&&逻辑与
*乘法!按位取反<小于

/除法^异或<=小于等于

\整除<<左位移==等于

%取摸>>有符号右位移!=不等于



>>>无符号右位移