Kanishka87 Ответов: 2

Как написать синтаксический анализатор языка запросов с языка Си#


Мне нужно написать синтаксический анализатор языка запросов с языка Си#
Строка запроса должна быть примерно такой.

Ввод:
string query = "Site = 'Location 1'

Выход:
Select * from Table1
where TagName = 'Site' 
and TagValue = 'Location 1'

Есть ли какая-нибудь dll, чтобы это или как можно было сделать что-то подобное. Пожалуйста, помогите мне кто-нибудь. Спасибо

Что я уже пробовал:

Я попробовал это сделать, прочитав каждый символ и проверив каждый символ с помощью заданных операторов.
Я знаю, что это неправильно.

PIEBALDconsult

Я начинал с регулярных выражений, а потом открывал бутылку текилы.
Разбор фрагментов и использование их для установки значений параметров может быть всем, что вам нужно-и избежать инъекции, упомянутой Гриффом.
Кроме того, вы не предоставили достаточно информации, чтобы помочь в дальнейшем.

2 Ответов

Рейтинг:
2

OriginalGriff

То, что вы пытаетесь сделать, довольно сложно и потребует изрядного объема работы - в основном потому, что обрабатываемый вами запрос почти не содержит никакой информации, а остальное (имя таблицы, имя столбца и т. д.) должно быть либо выведено из предоставленной вам информации, либо жестко закодировано, что приведет к неэффективному и негибкому дизайну базы данных.

А поскольку сложность запроса, который вы хотите обработать, возрастает, сложность выходного запроса возрастает экспоненциально. Это не значит, что это невыполнимая задача, но она определенно нетривиальна!

Начните с чтения о маркировке и синтаксическом анализе выражений, определите свой "язык ввода" в деталях, а затем начните писать синтаксический анализатор для него. Когда вы это проверите, вы можете начать с генерации SQL - выражений, что будет еще менее тривиально-особенно если вы хотите, чтобы ваша БД оставалась неповрежденной. Проблема повреждения возникает из - за SQL-инъекции, для которой ваш текущий выходной запрос широко открыт-вам нужно подумать о том, как предотвратить любую форму конкатенации строк и использования параметризованных запросов здесь, иначе ваша БД будет удалена довольно быстро!

- Я? Я бы сказал, что прилагаемые усилия не оправдывают риска, который вы вводите: я бы отказался от проекта!


Рейтинг:
2

Richard MacCutchan

Идти к: https://www.codeproject.com/Articles/code-witch#Article[^] и посмотрите на раздел "Парсеры". Хани написала несколько блестящих статей на эту тему.