Парсер SQL в Гедымине (постановка)
Стандартная схема анализа текста компьютерной програмы (в частности SQL запроса) включает две компоненты: лексический и синтаксический анализаторы. Первая -- разбирает поток символов и выделяет из него лексемы: строка, число, идентификатор, дата, специальный символ и т.п. Вторая -- получая на вход поток лексем, анализирует их и формирует синтаксическое дерево.
Лексические и синтаксические анализаторы уже давно никто не пишет руками. Теория соответствующих алгоритмом была проработана в 60-70-е годы. Наиболее фундаментальный труд в этой области -- т.н. Dragon book. Лексические и синтаксические анализаторы для конкретной задачи создаются автоматически с помощью соответствующих генераторов кода, на вход которых передается набор правил на специальном языке.
В Гедымине присутствуют сразу несколько парсеров SQL запросов. Самый фундаментальный предназначен для добавления пользовательских полей и таблиц. Парсер по-проще находится внутри компонента фильтрации. Компонент TIBSQL содержит простенький парсер для вычленения параметров из параметризованного запроса. По состоянию на январь 2010 г. ни один из указанных парсеров не поддерживает все нововведения сервера Firebird 2.5.
Стоит отметить, что ни один из наших парсеров не следует стандартной схеме по разделению лексического и синтаксического анализа. В результате, выполняя синтаксический анализ, мы вынуждены работать не с лексемами, а с подстроками, что существенно влияет на производительность и усложняет понимание и модификацию алгоритма.