Есть ли хорошие уроки, которые описывают, как использовать ANTLR для разбора логических строк поиска - PullRequest
1 голос
/ 31 июля 2009

Мне нужно проанализировать логическую строку поиска ключевых слов и операторов в запросе SQL, который будет выполнен из кода C #. Я думаю, что что-то вроде ANTLR - это то, что мне нужно для этой задачи, но я не уверен, как это сделать.

Есть ли хорошие уроки о том, как это сделать? А может мне нужен другой инструмент?

Пример того, что я имею в виду, ниже. Мне нужны только операторы AND и OR. Я также хотел бы иметь возможность использовать скобки.

входное выражение: (синий И зеленый) ИЛИ желтый

вывод:

ВЫБРАТЬ * С таблицы ГДЕ (СОДЕРЖИТ (Описание, «синий») И СОДЕРЖИТ (Описание, «зеленый»)) ИЛИ> СОДЕРЖИТ (Описание, «Желтый»

Если возможно, я бы также хотел поддерживать неявную вставку AND. Поэтому оператор по умолчанию, если он не указан, - это AND.

вход: зеленый (синий или желтый)

Выход: ВЫБРАТЬ * С таблицы ГДЕ СОДЕРЖИТ (Описание, «зеленый») И (СОДЕРЖИТ (Описание, «синий») ИЛИ> СОДЕРЖИТ (Описание, «желтый»))

1 Ответ

0 голосов
/ 31 июля 2009

Я бы, наверное, сделал это с прямой обработкой текста. По сути, вы хотите взять исходное выражение, вытянуть все цвета и заменить их предложением CONTAINS. В псевдокоде:

list of tokens = split input expression into tokens separated by spaces
foreach token in tokens
    if token is not keyword
        text = "CONTAINS(Description, \"" + token + "\")"
    else 
        text = token

    output = output + text
end

Где ключевыми словами являются "(", "AND" и т. Д. Затем вы просто помещаете вывод в свой оператор SQL

<вставить предупреждение об атаках SQL-инъекций здесь>

...