19 марта состоялся выпуск C++ библиотеки [ Lug ](
https://github.com/jwtowner/lug ) , реализующей встраиваемый [ предметно-ориентированный язык ](
https://ru.wikipedia.org/wiki/Предметно-ориентированный_язык ) для выражения синтаксических анализаторов в виде расширенных [ грамматик синтаксических выражений ](
https://ru.wikipedia.org/wiki/Грамматика,_разбирающая_выражение ) , и распространяемой по лицензии MIT.
Возможности библиотеки:
• Естественный синтаксис, напоминающий языки внешних генераторов парсеров, с поддержкой атрибутов и семантических действий.
• Возможность работы с контекстно-зависимыми грамматиками с таблицами символов, условиями и синтаксическими предикатами.
• Сгенерированные парсеры компилируются в байткод и выполняются в виртуальной машине синтаксического анализа.
• Чёткое разделение синтаксических и лексических правил с возможностью настройки неявного пропуска пробельных символов.
• Поддержка прямой и косвенной левой рекурсии, с уровнями старшинства для разграничения подвыражений со смешанными левой и правой рекурсиями.
• Полная поддержка разбора текста в формате UTF-8, включая уровень 1 и частичное соответствие уровню 2 технического стандарта [ UTS #18 Unicode Regular Expressions ](
https://www.unicode.org/reports/tr18 ) .
• Обработка ошибок и восстановление с помощью помеченных сбоев, правил восстановления и обработчиков ошибок.
• Автоматическое отслеживание номеров строк и колонок, настраиваемая ширина и выравнивание табуляции.
• Header-only-библиотека, использующая только стандартную библиотеку и возможности стандарта C++17. Перспективно совместима со стандартами C++20 и C++23.
• Относительно небольшой размер библиотеки, с целью содержания общего количества строк во всех заголовочных файлах на уровне менее 6000 строк лаконичного кода.
( [ читать дальше... ](
https://www.linux.org.ru/news/development/17925650#cut ) )