#解析器 #DSL #语言 #面向对象 #字符串

quoth

Quoth 是一个无词法扫描(无词法分析)的、开发者友好的解析库,用于在 Rust 中实现 DSL 和语法解析器。

9 个版本

0.1.7 2024年6月21日
0.1.6 2024年4月4日
0.1.2 2024年3月27日
0.0.1 2023年8月21日

#549 in Rust 模式

Download history 196/week @ 2024-04-24 142/week @ 2024-05-01 140/week @ 2024-05-08 106/week @ 2024-05-15 70/week @ 2024-05-22 189/week @ 2024-05-29 182/week @ 2024-06-05 186/week @ 2024-06-12 383/week @ 2024-06-19 132/week @ 2024-06-26 142/week @ 2024-07-03 96/week @ 2024-07-10 119/week @ 2024-07-17 136/week @ 2024-07-24 190/week @ 2024-07-31 157/week @ 2024-08-07

615 每月下载量
3 个包中使用(通过 currencies-core

MIT 许可证

195KB
1.5K SLoC

Quoth

quoth raven

Crates.io docs.rs Build Status MIT License

Quoth 是一个 无词法扫描 解析库(这意味着没有词法分析/标记化步骤),专门设计用于在 Rust 中实现语言和 DSL(领域特定语言)。它基于 syn 的想法,即所有东西都应该实现相同的 Parse 特征,但是 quoth 将这个想法进一步发展,使得词法分析不再是必需的,你得到的是类似于“面向对象解析”的东西,其中以多种方式组合、组合、解析甚至“反解析” Parsable 非常容易。

解析

在 quoth 中,一切事物都实现 Parsable,这带来了一组要求(因此是功能),这在其他解析生态系统中最好也是惯例。quoth 的核心功能包括

  • 任何可以用 quoth 解析的东西也可以“反解析”,即转换回字符串
  • 因为没有标记化步骤,任何 Parsable 的未修改的 Span 源文本始终可用,并且在解析过程中可以轻松/免费访问
  • Span 本身非常轻量,只是一个 Source 中的引用计数字符串切片
  • 因此,ParseStream 也非常轻量,并且免费提供通常昂贵的操作,如虚拟分支
  • 在 quoth 中,你可以通过 Parsable 类型进行窥视,但你也可以通过 ,甚至通过 正则表达式 进行窥视
  • 在 quoth 中处理分支和歧义要容易得多,因为分支成本低且鼓励。这是一把双刃剑,因为它意味着你可以有效地解析通常效率低下且难以推理的歧义性事物,但现在更容易将歧义引入你的底层语法。

窥视

Quoth 还特别关注使任何 Parsable 也自动成为 Peekable,这使得实现 Parsable 更加容易。此外,Peekable 本身允许基于类型和特定值进行窥视。例如,你可以窥视“下一个是 Ident 吗?”或“下一个是具有 这个特定值Ident 吗?”。

更多信息和相关文档将在下一个版本中提供

依赖项

~3–4.5MB
~87K SLoC