Миграция парсера YQL на ANTLR4: глубокий анализ и элегантное решение

Перевод парсера языка запросов YQL с ANTLR3 на ANTLR4 — сложная задача, продиктованная необходимостью поддержки современных кодогенераторов и расширения функциональности YDB. Эта миграция, кажущаяся на первый взгляд незаметной для конечного пользователя, на самом деле открывает возможности для генерации парсеров на Golang, TypeScript и C++, что критически важно для проектов вроде sqlc и улучшения пользовательского опыта.
Миграция парсера YQL на ANTLR4: глубокий анализ и элегантное решение
Изображение носит иллюстративный характер

Основная проблема заключалась в нестандартном использовании ANTLR в YDB: вместо генерации кода парсера, ANTLR3 применялся для создания protobuf-схем, описывающих структуру синтаксического дерева. Это требовало глубокого понимания механизма кодогенерации ANTLR и переработки.stg-шаблонов для ANTLR4, чтобы достичь идентичной схемы. Решение оказалось нетривиальным, особенно с учетом различий в шаблонах между версиями ANTLR.

Ключевым моментом стала адаптация процесса генерации protobuf-схем в ANTLR4 и создание соответствующего кода парсера. Для этого пришлось детально изучить иерархию шаблонов ANTLR4 и модифицировать Cpp.stg. Несмотря на специфичность задачи, ее решение позволило осуществить миграцию безболезненно, сохранив обратную совместимость и минимизируя изменения в кодовой базе YQL.

Внедрение нового парсера реализовано как опциональная, переключаемая функциональность, что минимизировало риски. Использовались шаблоны C++ и специализация типов для работы с разными версиями парсера. При тестировании обнаружилась некорректная работа лексического анализатора ANTLR4 с «жадным» захватом токенов, что потребовало исправления грамматики YQL в части обработки бэктиков в идентификаторах.


Новое на сайте

19208Как новые поколения троянов удаленного доступа захватывают системы ради кибершпионажа и... 19207Почему мировые киберпреступники захватили рекламные сети, и как Meta вместе с властями... 19206Как фальшивый пакет StripeApi.Net в NuGet Gallery незаметно похищал финансовые API-токены... 19205Зачем неизвестная группировка UAT-10027 внедряет бэкдор Dohdoor в системы образования и... 19204Ритуальный предсвадебный плач как форма протеста в традиционном Китае 19203Невидимая угроза в оперативной памяти: масштабная атака северокорейских хакеров на... 19202Как уязвимость нулевого дня в Cisco SD-WAN позволяет хакерам незаметно захватывать... 19201Как Google разрушил глобальную шпионскую сеть UNC2814, охватившую правительства 70 стран... 19200Как простое открытие репозитория в Claude Code позволяет хакерам получить полный контроль... 19199Зачем киберсиндикат SLH платит женщинам до 1000 долларов за один телефонный звонок в... 19198Устранение слепых зон SOC: переход к доказательной сортировке угроз для защиты бизнеса 19197Скрытые бэкдоры в цепочках поставок по: атаки через вредоносные пакеты NuGet и npm 19196Как абсолютная самоотдача, отказ от эго и физиологическое переосмысление тревоги помогают... 19195Отказ от стратегии гладиаторов как главный драйвер экспоненциального роста корпораций 19194Цена ручного управления: почему отказ от автоматизации данных разрушает национальную...
Ссылка