没有前导零的 AQL 数字文字解析错误

AQL numeric literal parse error without leading zero

我在 AQL 查询中遇到解析错误,该查询包含一个 数值文字 ,其值为 'x',其中
-1 < x < 1 和 x != 0,其中 前导零被省略 ,例如 x < .5x > -.2.

我认为这可能是一个错误,但文档没有明确说明是否需要前导零(似乎很奇怪需要它)。

我只是 运行 版本 3.4 rc4,所以我无法验证此行为是否存在于任何正式发布的版本中。有人可以确认吗?或者这里有任何 ArangoDB 开发人员愿意发表评论吗?

谢谢!

运行 这在 3.3.19 中运行良好:

let tmp = [0.2,3,4,0.5]
for t in tmp
filter t > 0.5
return t

这会引发解析错误

let tmp = [0.2,3,4,0.5]
for t in tmp
filter t > .5
return t

所以,我认为可以肯定地说 0 是强制性的

AQL 不支持没有前导数字的浮点数文字。

documentation 显示了支持的符号示例,.5 不在其中。

如果您想将其作为功能提出,create an issue on GitHub

您可以在此处找到定义数字语言标记的代码: https://github.com/arangodb/arangodb/blob/devel/arangod/Aql/tokens.ll#L447

(0|[1-9][0-9]*) {
  /* a numeric integer value */
...
(0|[1-9][0-9]*)((\.[0-9]+)?([eE][\-\+]?[0-9]+)?) {
  /* a numeric double value */

从这些正则表达式中可以看出,0000.123 等字面量也不被支持 - 整数部分的前导 0 不能超过一个。

更新

我们最近将 a pull request 合并到 ArangoDB 的开发分支中,该分支增加了对小数的支持,而 AQL 中没有前导零。从下一个版本开始,这在 ArangoDB 开发版本中可用,但在任何版本中都不可用。到目前为止,目标版本为 3.5。

如果对该功能有普​​遍需求,将拉取请求反向移植到 ArangoDB 3.4 也应该很容易。