Где я могу стать материальным для изучения EBNF?

Один запрос требует учета регистра, а второй - без учета регистра. Поэтому я предлагаю вам использовать подполе для поля хеша. Ваше основное поле будет проанализировано с помощью строчного анализатора, а одно будет хранить необработанные данные, то есть точный хеш. Таким образом, ваш индекс будет выглядеть следующим образом:

PUT /test
{
  "settings": {
    "number_of_shards": "1",
    "number_of_replicas": "0",
    "analysis": {
      "analyzer": {
        "custom_lowercase": {
          "filter": [
            "lowercase"
          ],
          "type": "custom",
          "tokenizer": "keyword"
        }
      }
    }
  },
  "mappings": {
    "_doc": {
      "properties": {
        "hash": {
          "type": "text",
          "analyzer": "custom_lowercase",
          "fields": {
            "keyword": {
              "type": "keyword"
            }
          }
        }
      }
    }
  }
}

Запрос для проверки существования хеша «ErTg1Qh» (с учетом регистра)

POST /test/_doc/_search
{
  "query": {
    "match": {
      "hash.keyword": "ErTg1Qh"
    }
  }
}

Запрос для поиска хешей, которые содержит подстрока s в них

POST /test/_doc/_search
{
  "query": {
    "query_string": {
      "query": "*tg*"
    }
  }
}
9
задан yesraaj 14 December 2008 в 08:56
поделиться

4 ответа

Статья Wikipedia точна. Если у Вас есть доступ, определенно прочитайте исходную статью Wirth о EBNF.

Другая вещь знать состоит в том, что EBNF был разработан, чтобы помочь написать от руки синтаксические анализаторы с рекурсивным спуском для языков, на которых каждая синтаксическая конструкция имеет ключевые слова идентификации вначале. Фигурные скобки переводят в while циклы; квадратные скобки (дополнительный материал) переводят в if, и альтернативы переводят в if-then-else или case операторы. Если у Вас есть роскошь разработки Вашего языка таким образом, можно вывести синтаксический анализатор из строя быстро и дать хорошие сообщения об ошибках.

Единственное место это становится немного утомительным, - когда у Вас есть язык, на котором существуют инфиксные операторы со многими разными уровнями приоритета. Для этого Вы хотите статью Dave Hanson Компактный синтаксический анализ методом рекурсивного спуска Выражений. Возможно, технический ряд отчета Принстона имеет бесплатную версию, и можно всегда смотреть на код во фронтэнде Hanson C.

5
ответ дан 4 December 2019 в 20:25
поделиться

Сам BNF прост, но необходимо привыкнуть к способу, которым думают разработчики компилятора. Они не, обязательно легкое чтение, но следующее является примечаниями лекции из Беркли UC и Стэнфорда.

5
ответ дан 4 December 2019 в 20:25
поделиться

Ну, я думаю, что Википедия является самым простым путем по двум причинам:

  • Это указывает наиболее важные моменты на статье
  • Это имеет ссылки для дополнительных материалов для чтения внизу страницы

Также я предложил бы читать стандартного BNF только, чтобы познакомиться с идеей позади него.

По крайней мере, я всегда запускаю с Википедии также, и она почти всегда помогает.

0
ответ дан 4 December 2019 в 20:25
поделиться

Здесь - парсер ebnf в php.

Также может помочь немного узнать о том, как реализованы механизмы регулярных выражений. Попробуйте: re2 .

1
ответ дан 4 December 2019 в 20:25
поделиться
Другие вопросы по тегам:

Похожие вопросы: