PostgreSQL: Документация: 15: 52.3. Этап парсера
- 52.3.1. Парсер
- 52.3.2. Процесс трансформации
Этап анализатора состоит из двух частей:
52.3.1. Анализатор
Анализатор должен проверить строку запроса (которая поступает в виде обычного текста) на допустимый синтаксис. Если синтаксис правильный, дерево синтаксического анализа создается и передается обратно; в противном случае возвращается ошибка. Парсер и лексер реализованы с помощью известных Unix-инструментов bison и flex.
Лексер определен в файле scan.l
и отвечает за распознавание идентификаторов , ключевых слов SQL и т. д. Для каждого найденного ключевого слова или идентификатора генерируется токен и передан парсеру.
Анализатор определен в файле gram.y
и состоит из набора грамматических правил и действий , которые выполняются всякий раз, когда правило срабатывает. Код действий (который на самом деле является кодом C) используется для построения дерева синтаксического анализа.
Файл scan.l
преобразуется в исходный файл C scan.c
с помощью программы flex, а gram.y
преобразуется в gram.c
с помощью bison. После выполнения этих преобразований для создания синтаксического анализатора можно использовать обычный компилятор C. Никогда не вносите никаких изменений в сгенерированные файлы C, так как они будут перезаписаны при следующем вызове flex или bison.
Примечание
Упомянутые преобразования и компиляции обычно выполняются автоматически с помощью Makefiles поставляются с исходным кодом PostgreSQL.
Подробное описание бизона или правил грамматики, приведенных в gram.y
, выходит за рамки данного руководства. Есть много книг и документов, посвященных flex и bison. Вы должны быть знакомы с bison, прежде чем начнете изучать грамматику, данную в gram.
, иначе вы не поймете, что там происходит. y
52.3.2. Процесс преобразования
Этап синтаксического анализатора создает дерево синтаксического анализа с использованием только фиксированных правил синтаксической структуры SQL. Он не выполняет поиск в системных каталогах, поэтому нет возможности понять детальную семантику запрошенных операций. После завершения синтаксического анализа 9Процесс преобразования 0009 принимает дерево, возвращенное синтаксическим анализатором, в качестве входных данных и выполняет семантическую интерпретацию, необходимую для понимания того, на какие таблицы, функции и операторы ссылается запрос. Структура данных, созданная для представления этой информации, называется деревом запросов .
Причина отделения необработанного синтаксического анализа от семантического анализа заключается в том, что поиск в системном каталоге может выполняться только в рамках транзакции, и мы не хотим начинать транзакцию сразу после получения строки запроса. Этапа необработанного синтаксического анализа достаточно для идентификации команд управления транзакциями (
BEGIN
, ROLLBACK
и т. д.), после чего они могут быть правильно выполнены без дальнейшего анализа. Как только мы узнаем, что имеем дело с фактическим запросом (например, SELECT
или UPDATE
), можно начать транзакцию, если мы еще не в ней. Только после этого можно запустить процесс преобразования.
Дерево запросов, созданное в процессе преобразования, в большинстве случаев структурно похоже на необработанное дерево синтаксического анализа, но имеет много отличий в деталях. Например, Узел FuncCall
в дереве синтаксического анализа представляет нечто, что синтаксически выглядит как вызов функции. Это может быть преобразовано либо в узел FuncExpr
, либо в узел Aggref
, в зависимости от того, оказывается ли указанное имя обычной функцией или агрегатной функцией. Также в дерево запросов добавляется информация о фактических типах данных столбцов и результатов выражений.
Выбор группы и зависимости | Лукас Кохорст
Избирательный округ против разбора зависимостей | Лукас Кохорст | Средний 6 мин чтения·
13 декабря 2019 г.Разбор предложений может помочь понять смысл, структуру и синтаксические отношения в предложениях. Двумя распространенными типами являются синтаксический анализ зависимостей и групп, который также известен как синтаксический анализ. Анализ зависимостей — это процесс определения грамматической структуры предложения путем перечисления каждого слова в виде узла и отображения ссылок на его зависимые элементы. Проанализированное дерево избирательных округов отображает синтаксический…
Автор: Лукас Кохорст
588 Подписчики
@foundryservices
Еще от Лукаса Кохорста
На пути к науке о данных
Прогнозирование цен на акции с помощью Python
В 100 строках кода
7 минут чтения · 9 ноября 2018 г.
Лукас Кохорст
в
На пути к науке о данных
Децентрализация вашего веб-сайта
IPFS + ENS
Чтение за 6 мин·13 января 2020 г.
Лукас Кохорст
Продажа коллов и путов на Uniswap V3
9001 1Эмуляция выплат по опционам на uniswap v3, а также разница в премиях и сроках действия
Чтение: 6 мин·17 августа 2021 г.
Lucas Kohorst
in
Около 15% Твиттер состоит из ботов, и мне захотелось попробовать свои силы. Я погуглил, как создать бота для Twitter, и наткнулся на…
5 минут чтения·8 апреля 2018 г.
Посмотреть все от Лукаса Кохорста
Рекомендовано на Medium
Андреа Д’Агостино
в
Навстречу науке о данных
Как обучить модель Word2Vec с нуля с помощью Gensim
В этой статье мы рассмотрим Gensim, очень популярную библиотеку Python для обучения моделей машинного обучения на основе текста, для обучения Word2Vec…0011
в
Искусственный угол
Вы используете ChatGPT неправильно! Вот как опередить 99% пользователей ChatGPT
Овладейте ChatGPT, изучив технику быстрого доступа.

Списки
Истории, которые помогут вам расти как разработчику программного обеспечения
19 историй·158 сохранений
Общие знания по программированию
20 историй·45 сохранений s
Публикации на средних носителях, принимающие статьи
145 историй·192 сохранения
New_Reading_List
173 истории·8 сохранений
Любовь Шарма
в
Dev Genius
901 01 Схема проектирования системы: полное руководство
Разработка надежной, масштабируемой и эффективной система может быть пугающей. Тем не менее, понимание ключевых концепций и компонентов может сделать…
· 9 минут чтения · 20 апреляНеподходящий
10 секунд, которые закончились моим 20-летним браком
В Северной Вирджинии август, жарко и влажно. Я до сих пор не принял душ после утренней пробежки. Я ношу свою домохозяйку…
·Чтение на 4 мин·16 февраля 2022 г.