Syntax 任何地方都有密码语法定义吗?
我正在寻找Cypher查询语言的语法定义。我试过了,但很模糊Syntax 任何地方都有密码语法定义吗?,syntax,neo4j,cypher,bnf,Syntax,Neo4j,Cypher,Bnf,我正在寻找Cypher查询语言的语法定义。我试过了,但很模糊 理想情况下,我想要一个BNF(或任何变体)定义,或者像或这样的“图形”定义。真的,任何类似正式定义的东西。更新 Neo4j在写下这个答案后发生了很大的变化。2017年,简单的答案是肯定的,您可以从 以下是旧答案,在2014年是准确的 据我所知,唯一的正式定义是在代码中。这是个坏消息 好消息是代码使用scala库进行解析,这使得代码规则看起来有点像BNF。还有一些关于如何阅读的文档 在github上,我觉得它包含了所有的cypher命
理想情况下,我想要一个BNF(或任何变体)定义,或者像或这样的“图形”定义。真的,任何类似正式定义的东西。更新 Neo4j在写下这个答案后发生了很大的变化。2017年,简单的答案是肯定的,您可以从 以下是旧答案,在2014年是准确的 据我所知,唯一的正式定义是在代码中。这是个坏消息 好消息是代码使用scala库进行解析,这使得代码规则看起来有点像BNF。还有一些关于如何阅读的文档 在github上,我觉得它包含了所有的cypher命令实现,并且应该具备您所要求的一切 此包中的代码是用scala编写的,如下所示:
object Query {
def start(startItems: StartItem*) = new QueryBuilder().startItems(startItems:_*)
def matches(patterns:Pattern*) = new QueryBuilder().matches(patterns:_*)
def optionalMatches(patterns:Pattern*) = new QueryBuilder().matches(patterns:_*).makeOptional()
def updates(cmds:UpdateAction*) = new QueryBuilder().updates(cmds:_*)
def unique(cmds:UniqueLink*) = new QueryBuilder().startItems(Seq(CreateUniqueStartItem(CreateUniqueAction(cmds:_*))):_*)
(...)
这与实际情况大致相符。您可以看到可以有start子句、match子句等等。这包括到其他实现类(如UpdateAction
)的链接,这些类进一步定义了被认为是更新操作的子句
务必阅读更多有关此处发生的信息,以及Scala类与我们通常认为EBNF之间的映射。这个博客文章是旧的(2011)。它给出的具体代码示例不值得信任,但我认为它提供了关于实现如何工作的良好一般信息,以及如果您想了解cypher背后的EBNF,应该寻找什么
免责声明:我不是scala硬核,YMMV,IANAL,devs,如果我错了,请驳回我的请求。(在评论中回答,所以我不能接受他的答案。以下是他的答案:)Cypher使用parboiled作为解析器,parboiled规则DSL非常容易阅读和理解。您要查找的内容将在openCypher中提供。几个项目将作为项目的一部分发布,其中一个是BNF语法
- 更新2016-01-30:语法初稿现已在\https://github.com/opencypher/openCypher/blob/master/grammar.ebnf.
- 更新:2016-10-17:EBNF和Antlr语法、TCK、铁路图和社区项目列表可在
看看(2015年10月),其中包括发布语言规范 从公告中: 1.密码参考文档: 一份全面的用户文档,描述了Cypher查询语言的使用,并附有示例和教程 2.技术兼容性工具包(TCK): TCK由许多测试组成,软件供应商将运行这些测试,以自认证对给定版本的Cypher的支持 3.参考实现: 参考实现是在Apache 2.0许可证下发布的,它是在数据平台或工具中支持Cypher所需的堆栈关键部分的全功能实现。第一个计划交付的是一个解析器,它将接受Cypher语句并将其解析为AST(抽象语法树)引用实现通过提供CyfER的工作实现来补充文档和测试,这是许可许可的,并且可以作为示例或作为自己实现的基础。 4.密码语言规范: Cypher语言规范根据Creative Commons许可证获得许可,是语言语法的技术表达,使解析器能够自动生成查询语法。完整的语义规范也计划作为openCypher项目的一部分
同一公告还说,这一过程是开放的,可以提交、审查和评论语言提案。这些似乎都不再有效 我在opencypher.org网站上没有看到任何看起来像要下载的语法 Michael Hunger的github链接都不起作用
我真的很想访问一些资源,在那里我可以学习如何为avg之类的函数构造查询,这些函数据称以列表表达式为参数,但我能找到的每个变量都会吐出来。谢谢!我想这是我将要得到的最好的结果!遗憾的是,这篇文章没有继续写出更完整的BNF…Cypher使用了p作为解析器,parboiled规则DSL非常容易阅读和理解。@MichaelHunger太棒了!我还看到了其他表达式(例如模式)在同一目录中的其他文件中定义。谢谢!链接已断开,有人对此有可用的链接吗?酷!当他们发布语法和语义时,请在此处链接,我将非常乐意接受您的答案:)@jameshfisher使用指向EBNF语法初稿的链接更新了答案。如果我记得的话,如果我听到更多的消息,我会再次回来更新,但我可能会忘记,所以跟踪存储库可能是跟踪进度的更好方法。:)