Как создать свой парсер и 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?; "]" " "? }

https://habr.com/ru/articles/922128/

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

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

QapDSLv2 — это язык который транслируется в обычный C++ код. Он позволяет удобно и компактно задавать грамматики и правила разбора, значительно упрощая разработку компиляторов и анализаторов. Про...

Хабр
Unexpected security footguns in Go's parsers

File parsers in Go contain unexpected behaviors that can lead to serious security vulnerabilities. This post examines how JSON, XML, and YAML parsers in Go handle edge cases in ways that have repeatedly resulted in high-impact security issues in production systems. We explore three real-world attack scenarios: marshaling/unmarshaling unexpected data, exploiting parser differentials, and leveraging data format confusion. Through examples, we demonstrate how attackers can bypass authentication, circumvent authorization controls, and exfiltrate sensitive data by exploiting these parser behaviors.

The Trail of Bits Blog

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

Mini-rust in Rust 029: Parsing plus-equals

PeerTube

Whatay wonderful #list for anyone interested in #PLDI or #compilers 👌🏽:

“Writing That Changed How I Think About PL”, Max Bernstein (https://bernsteinbear.com/blog/pl-writing/).

Via Lobsters: https://lobste.rs/s/v2zmv3/writing_changed_how_i_think_about_pl

On HN: https://news.ycombinator.com/item?id=43980760

#Optimization #Writing #SSA #Parsers

Writing that changed how I think about PL

Every so often I come across a paper, blog post, or (occasionally) video that completely changes how I think about a topic in programming languages and compilers. For some of these posts, I can’t even remember how I thought about the idea before reading it—it was that impactful.

Max Bernstein

This is why I'm partial to Parslet as my go-to parser library. No generating files, no filling in missing methods, just write your rules and go.
https://kschiess.github.io/parslet/

#ruby #parsers

parslet - About

Why does racc require you to define the next_token method? That's not how the original bison+flex or yacc+lex tools work. Is there a Ruby equivalent of flex/lex?

#ruby #parsers

💪 Thoughts on DuckDB's Grammar Patching Thing (... I dream of parser generators with the sharp edges filed off)

https://buttondown.com/jaffray/archive/thoughts-on-duckdbs-grammar-patching-thing/

#duckdb #parsers #grammar #compilers #programming #software #cs

Thoughts on DuckDB's Grammar Patching Thing

It is the job of modern programming languages to be amenable to abstractions. It should be easy for users to take a little bundle of functionality and reuse...

NULL BITMAP by Justin Jaffray

I am learning a heck lot writing a midi file parser in C++.

#cpp #parsers #compsci

Last day of #RustLab2024. Looking forward to this talk by @woile!

#RustLang #RustLab #Florence #winnow #parsers