Parsers don't have to be complicated5 days agohttps://bkaradzic.github.io/posts/scanner/解析器可以使用可重用的原语如bx::Scanner来构建,避免了复杂的生成器或特设的指针追踪代码。bx::Scanner是零拷贝、非拥有型的,并使用StringView引用原始输入而无需分配。关键设计约束包括零拷贝、单一光标、内置行/列跟踪、字符类以及小巧的公共接口。扫描器使用诸如accept、acceptWhile和acceptUntil之类的方法来消耗令牌,并使用peek进行非消耗性检查。更多...
Practical parsing with PEG and cpp-peglib - Bert Hubert's writings7 days agohttps://berthub.eu/articles/posts/practical-peg-parsing/解析表达式文法(PEG)易于编写和使用,尤其是借助 cpp-peglib 库。cpp-peglib 是一个单文件包含的 C++ 库,无需预处理或外部工具。示例:使用 PEG 文法解析向量格式,并通过附加函数提取数字。示例:使用选择运算符和标记操作处理带引号字符串中的转义字符。更多...
A few thought about snarky answers on StackOverflow (2019)a month agohttps://www.cargocultcode.com/solving-the-zalgo-regex/正则表达式可以识别XHTML中的独立语法单元,如注释、开始标签和结束标签,但由于缺乏递归功能,无法随意匹配开始标签和结束标签。一个常见的误解是HTML属于2型文法,而正则表达式属于3型文法,因此不可能用正则表达式匹配;但实际上,通过结合计数器或栈进行解析,正则表达式可以处理嵌套结构。解析过程包括用正则表达式进行词法分析和构建树结构,但像DOM这样的标准解析器并不暴露空元素与自闭合标签等区别,这限制了对原始问题的解决方案。StackOverflow的投票系统有时会助长模因和错误信息的传播,比如关于正则表达式和XHTML的那些讽刺性回答,掩盖了合理的解决方案。