a day ago
- 解析器可以使用可重用的原语如bx::Scanner来构建,避免了复杂的生成器或特设的指针追踪代码。
- bx::Scanner是零拷贝、非拥有型的,并使用StringView引用原始输入而无需分配。
- 关键设计约束包括零拷贝、单一光标、内置行/列跟踪、字符类以及小巧的公共接口。
- 扫描器使用诸如accept、acceptWhile和acceptUntil之类的方法来消耗令牌,并使用peek进行非消耗性检查。
- 返回空既表示'无匹配'也表示'匹配到空',这对于像URL路径缺失这样的情况很有用。
- 示例包括用于读取行的LineReader、使用子扫描器限定作用域的INI解析以及文件路径规范化。
- bx::Scanner简化了诸如URL解析(75行)、堆栈跟踪符号化等任务,并减少了依赖项,例如移除的INI库。
- 该工具取代了特设解析器中重复的空格/标识符循环和模式匹配错误。