neo4j - 什么是 cypher 的巴克斯-诺尔范式?

标签 neo4j cypher bnf

我想知道 Cypher(Neo4j 查询语言)是否有巴科斯-诺尔形式。

如果有的话,我在哪里可以找到它?如果没有,你能猜出一个吗?

最佳答案

没有针对该语言发布单独的语法,但您可以获取所需的内容 from this .

在内部,neo4j 使用一个名为 Parboiled 的包来解析密码。在 cypher 编译器软件包中,通常在 /src/main/scala/org/neo4j/cypher/internal/compiler/v2_3/parser/ 中,您会找到一个名为 Clauses.scala 的文件 它本质上实现了 Scala 中的密码语法。

举一个非常简单的例子,下面是 LIMIT 子句的定义:

  private def Limit: Rule1[ast.Limit] = rule("LIMIT") {
    group(keyword("LIMIT") ~~ (UnsignedIntegerLiteral | Parameter)) ~~>> (ast.Limit(_))
  }

很简单,LIMIT 子句就是关键字 LIMIT 后跟无符号整数文字或参数。

请注意,语法中更复杂的部分之一位于 Patterns.scala 中,您可以在其中看到图形模式的构成。其他类似资源通过引用包含在 Clauses.scala 中。

我对 parboiled 没有太多经验,鉴于语法的定义,parboiled 很可能可以以您可能喜欢的任何语法生成语法。

关于neo4j - 什么是 cypher 的巴克斯-诺尔范式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31684913/

相关文章:

Java EBNF?

lex - 如何使用 BNF 词法分析器识别和提取简单的嵌套标记?

parsing - 固定并恢复.bnf中的内容(解析)

neo4j - 针对 Cypher 子查询运行计算

java - 如何一步步连接Gremlin到Neo4j数据库?

docker - 使用Neo4j docker镜像切换事件数据库

Neo4j Cypher 路径使用多次相同的边

python - 如何保持 Neo4j bolt session 打开?

c# - Neo4j 单实例连接

performance - 连接两组节点的高效密码查询匹配子图