HeadlinesBriefing HeadlinesBriefing.com

DuckDB v2.0: новый SQL-парсер на основе PEG

Hacker News •
×

DuckDB v2.0 представляет новый SQL-парсер на основе PEG, заменяя парсер, производный от PostgreSQL и использовавшийся с первого коммита проекта в 2018 году. Прежний парсер LALR(1), генерируемый Bison, становился всё более трудным для расширения из-за конфликтов сдвига/свертки (shift/reduce) и свертки/свертки (reduce/reduce) по мере развития Duck SQL. Новый парсер, построенный с использованием грамматик выражений разбора (Parsing Expression Grammars), устраняет эти конфликты за счёт явного упорядочивания альтернатив и обеспечивает расширяемость во время выполнения.

Парсер обрабатывает SQL-запросы в три этапа: токенизатор, парсер и трансформер. Токенизатор разбивает входные данные на токены, такие как ключевые слова и идентификаторы. Парсер проверяет синтаксис на соответствие грамматике Duck SQL, создавая дерево разбора. Трансформер преобразует его во внутреннее AST DuckDB для биндера.

Разработка началась с исследовательского прототипа, который обрабатывал лишь подмножество SQL. Он постепенно расширялся и был представлен как экспериментальная функция в DuckDB v1.5. Полная грамматика теперь поддерживает все типы операторов и выражений, правильный приоритет операторов, корректную классификацию ключевых слов и совместимость с существующими структурами AST.

Хотя реализация значительно меняется, сам Duck SQL остаётся неизменным. Новый парсер также улучшает отчёты об ошибках, предоставляя лучший контекст при синтаксических сбоях. Этот переход соответствует аналогичным шагам других систем, таких как Python 3.9, который также принял разбор на основе PEG ради большей гибкости.

Источник: Hacker News · Сводку подготовил HeadlinesBriefing