我想知道 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/