#Lexers

रञ्जित (Ranjit Mathew)rmathew
2025-08-22

See Also:

“Chapter 6: Lexical Analysis”, from “lcc, A Retargetable Compiler For ANSI C”, by Christopher Fraser & David Hanson (drh.github.io/lcc/documents/06).

N-gated Hacker Newsngate
2025-07-14

🚀💨 This 8,277-word masterpiece on is a snooze-fest of that only a major could love. 😴 With terms like "purple gardens" and "zero alloc string windows," it sounds more like avant-garde than advice. If you're looking for a quick nap, this might be the 'lexer' you're searching for. 💤
xnacly.me/posts/2025/fast-lexe

2025-07-09

QapGen: Создаём мощные парсеры на C++

QapDSLv2 — это язык который транслируется в обычный C++ код. Он позволяет удобно и компактно задавать грамматики/правила разбора кода программ, значительно упрощая разработку компиляторов/анализаторов/трансляторов. QapGen — это генератор дерева_лексеров /парсеров описанных на QapDSLv2. Сама грамматика QapDSLv2 описана на QapDSLv2 на 100%. Поэтому QapGen как основной читатель этой грамматики сам генерирует часть своего кода(весь парсер QapDSLv2). Основные фишки QapDSLv2 + QapGen — это: 1) Отсутствие этапа токенизации — дерево лексеров разбивает входной поток на лексемы и сохраняет их в строго типизированных древовидных С++ структурах пропуская этап токенизации. 2) Генерация оптимизированного кода полиморфных лексеров . 3) Полное сохранение всех лексем(даже разделители сохраняются, такие как пробелы/переходы на новую строку и комментарии) в результирующем дереве. 4) Возможность сохранить как оригинальное дерево , так и модифицированное обратно в код/текст без потери разделителей/комментариев . 5) Автоматическая генерация кода посетителей (это такой паттерн проектирования). А теперь пример самой сочной части(рекурсивно самоописывающийся код): struct t_target_struct:i_target_item{ struct t_keyword{ string kw=any_str_from_vec(split("struct,class",",")); " "? // optional separator }; struct t_body_semicolon:i_struct_impl{";"}; struct t_body_impl:i_struct_impl{ "{" // жрём скобочку vector<TAutoPtr<i_target_item>> nested?; // рекурсия! " "? vector<TAutoPtr<i_struct_field>> arr?; // парсим поля " "? TAutoPtr<t_cpp_code> c?; // остальной С++ код " "? "}" }; struct t_parent{ string a_or_c=any_str_from_vec(split("=>,:",",")); " "? t_name name; }; //точка входа в парсер: TAutoPtr<t_keyword> kw?; //парсим struct/class t_name name; //парсим имя " "? TAutoPtr<t_parent> parent?; " "? TAutoPtr<i_struct_impl> body; };

habr.com/ru/articles/925420/

#parser #parsergenerator #lexers #c++ #tree #ast #gamedev #dsl #compiler

2025-07-09

Как создать свой парсер и AST-генератор на C++ с минимальными усилиями: знакомьтесь с QapDSLv2

QapDSLv2: Новый стандарт AST-heavy парсинга QapDSLv2 обеспечивает: Молниеносное построение AST Полное сохранение структуры исходного кода Простоту интерпретации и модификации грамматик Забудьте о любы других парсерах! С помощью QapDSLv2 можно создавать компиляторы/анализаторы/форматировщики кода за минуты/часы. // почти наглая лож Парсеры и генерация абстрактных синтаксических деревьев ( AST ) — это обычно долго, сложно и требует тонны шаблонного кода. Но что если я скажу, что теперь можно описывать грамматики и структуры данных одновременно и получать готовый, оптимизированный C++ код автоматически? QapDSLv2 — новый стандарт эффективности и удобства в парсинге . Это язык описания парсеров, который избавляет от синтаксического шума, упрощает интеграцию с C++ и позволяет создавать сложные анализаторы без боли и ошибок . Забудьте о бесконечных циклах отладки и непонятных генераторах — теперь всё просто, понятно и эффективно. В этой статье вы узнаете, как QapDSL v2 меняет правила игры в мире парсинга и компиляторов, увидите реальные примеры и поймёте, почему это важно для каждого, кто работает с языками программирования и обработкой текста . Готовы ускорить разработку и вывести свои проекты на новый уровень? QapGen — мощный генератор парсеров, построенный на основе QapDSLv2, который из грамматик QapDSLv2 сразу создаёт высокопроизводительный C++ парсер с типизированным AST , описанным прямо в грамматике. t_sep { string body = any (" \t\r\n"); } using " " as t_sep; t_value{ TAutoPtr<i_value> body; " "? } t_comma_value{ "," t_value body; " "? } t_array=>i_value{ "[" " "? t_value first?; vector<t_comma_value> arr?; "]" " "? }

habr.com/ru/articles/922128/

#QapDSL #Lexers #AST #Compilers #Parser #parsergenerator #Parsers #C++ #dsl

2025-06-10

It's fun to play with #lexers and #parsers to find the best approach for the specific task, continuously morphing between concepts until the right combination of trade-offs is reached.

#SoftwareDevelopment #SoftwareDeveloperSoapbox

2025-06-05

QapDSL — декларативное описание AST и парсеров для C++

QapDSL — декларативное описание AST и парсеров для C++ QapDSL — это специализированный язык (DSL), который позволяет описывать абстрактные синтаксические деревья (AST) и правила их разбора для языков программирования, прежде всего C++. Такая формализация помогает автоматизировать построение парсеров, генерацию кода, анализ исходников и даже рефакторинг. Зачем нужен QapDSL? Компактно и наглядно описывать структуру и грамматику языка. Автоматически генерировать C++-структуры, парсеры, сериализаторы и визиторы. Ускорять эксперименты с языками, создавая прототипы компиляторов и анализаторов. Упрощать анализ и рефакторинг сложных языков, в т.ч. C++. Пример QapDSL-описания Рассмотрим, как описывается объявление класса C++ на QapDSL: t_class{
string keyword;
t_sep sep0;
string name;
t_sep sep1;
TAutoPtr<t_parents> parents;
t_sep sep2;
TAutoPtr<t_class_body> body;
t_sep sep3;
{
M+=go_any_str_from_vec(keyword,split("struct,class,union",","));
O+=go_auto(sep0);
O+=go_str<t_name>(name);
O+=go_auto(sep1);
O+=go_auto(parents);
O+=go_auto(sep2);
O+=go_auto(body);
O+=go_auto(sep3);
M+=go_const(";");
}
}

habr.com/ru/articles/916006/

#QapDSL #Adler3D #Lexers #AST #Compilers

1. Writing a programming language - the Lexer

video.infosec.exchange/w/ja8bd

lorddimwit is now @rk@well.comlorddimwit
2022-12-03

Me: keyword

Lexer: looks good to me

Me: keyword

Lexer: yep no problem

Me: so what is this keyword

Lexer: identifier

Andy Balaam moved to https://video.infosec.exchange/a/andybalaamandybalaam@diode.zone
2020-12-10

1. Writing a programming language - the Lexer

diode.zone/videos/watch/4adcc2

Client Info

Server: https://mastodon.social
Version: 2025.07
Repository: https://github.com/cyevgeniy/lmst