Мне интересно, имеет ли Cypher (язык запросов Neo4j) форму Backus-Naur.Что такое бэкус-наурская форма?
Если да, то где я могу его найти? Если это не так, не могли бы вы угадать?
Мне интересно, имеет ли Cypher (язык запросов Neo4j) форму Backus-Naur.Что такое бэкус-наурская форма?
Если да, то где я могу его найти? Если это не так, не могли бы вы угадать?
Для этого языка не существует отдельной грамматики, но вы можете получить то, что вам нужно from this.
Внутренне, neo4j использует пакет под названием Parboiled, чтобы выполнить синтаксический анализ cypher. В программном пакете cypher compiler, как правило, в /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 может генерировать грамматику в любом синтаксисе, который вам может понравиться.