Хорошие парсеры сложно написать. Это начинается с генератора кода для кода синтаксического анализатора (который обычно использует некоторый (E) BNF-подобный синтаксис, который имеет свои собственные ограничения).
Обработка ошибок в парсерах - это отдельная тема для исследования. Речь идет не только об обнаружении ошибок, но и о предоставлении полезной информации о том, что может быть не так и как ее устранить. Некоторые парсеры даже не предоставляют информацию о местоположении («произошла ошибка в строке / столбце»).
Далее у вас есть SQL, что означает «Язык структурированных запросов», а не « Стандартный Язык запросов». Существует стандарт SQL, даже несколько, но вы не найдете ни одной базы данных, которая реализует какую-либо из них.
Oracle неохотно предлагает VARCHAR, но вам лучше использовать VARCHAR2. Некоторые базы данных предлагают рекурсивные / древовидные запросы. Все они используют для этого свой особый синтаксис. Присоединение определено довольно четко в стандарте (join
, left join
, ...), но зачем беспокоиться, если вы можете использовать +
?
Кроме того, для каждой версии базы данных в грамматику добавляются новые функции.
Итак, хотя вы могли бы написать парсер, который может читать стандартные случаи, написать парсер, который может поддерживать все функции, которые предлагают все базы данных по всему миру, практически невозможно. И я даже не говорю об ошибках, с которыми вы можете столкнуться в этих парсерах.
Одним из решений было бы, если бы все поставщики баз данных опубликовали файлы грамматики. Но это драгоценности короны (IP). Поэтому вы должны быть рады, что вы можете использовать их без необходимости платить лицензионный сбор за анализируемый символ * количество процессоров.