Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/fortran/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Syntax 任何地方都有密码语法定义吗?_Syntax_Neo4j_Cypher_Bnf - Fatal编程技术网

Syntax 任何地方都有密码语法定义吗?

Syntax 任何地方都有密码语法定义吗?,syntax,neo4j,cypher,bnf,Syntax,Neo4j,Cypher,Bnf,我正在寻找Cypher查询语言的语法定义。我试过了,但很模糊 理想情况下,我想要一个BNF(或任何变体)定义,或者像或这样的“图形”定义。真的,任何类似正式定义的东西。更新 Neo4j在写下这个答案后发生了很大的变化。2017年,简单的答案是肯定的,您可以从 以下是旧答案,在2014年是准确的 据我所知,唯一的正式定义是在代码中。这是个坏消息 好消息是代码使用scala库进行解析,这使得代码规则看起来有点像BNF。还有一些关于如何阅读的文档 在github上,我觉得它包含了所有的cypher命

我正在寻找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语法初稿的链接更新了答案。如果我记得的话,如果我听到更多的消息,我会再次回来更新,但我可能会忘记,所以跟踪存储库可能是跟踪进度的更好方法。:)