Что такое форма Бэкуса-Наура?
Мне интересно, есть ли у Cypher (язык запросов Neo4j) форма Бэкуса-Наура.
Если так, где я могу найти это? Если это не так, вы могли бы угадать один?
1 ответ
Не существует отдельной грамматики, которая публикуется для языка, но вы можете получить то, что вам нужно из этого.
Внутренне 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, вполне возможно, что, учитывая это определение грамматики, parboiled может генерировать грамматику в любом синтаксисе, который вам может понравиться.