Что такое форма Бэкуса-Наура?

Мне интересно, есть ли у 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 может генерировать грамматику в любом синтаксисе, который вам может понравиться.

Другие вопросы по тегам