12个不稳定版本 (5个破坏性更新)

0.6.0 2024年5月20日
0.5.1 2024年5月8日
0.4.3 2021年11月21日
0.3.1 2021年10月18日
0.1.1 2021年8月8日

#362 in #find

Download history 253/week @ 2024-05-05 33/week @ 2024-05-12 190/week @ 2024-05-19 19/week @ 2024-05-26 18/week @ 2024-06-02 35/week @ 2024-06-09 23/week @ 2024-06-16 13/week @ 2024-06-23 33/week @ 2024-06-30 4/week @ 2024-07-07 47/week @ 2024-07-14 54/week @ 2024-07-21 52/week @ 2024-07-28

每月158次下载
gramatika中使用

MIT/Apache

39KB
1K SLoC

Gramatika

使用Rust编写解析器的最小工具包

动机

尽管功能强大且在很多情况下很有用,但我发现解析器生成器操作起来有些繁琐,而且由于各种原因,使用起来有些负担。另一方面,手动编写解析器需要大量繁琐的样板代码才能开始。

这个项目试图在自动化的语法工具和空白的 lib.rs 文件令人畏惧的空白之间找到我的“金发女郎”区域(你的体验可能会有所不同)。目前,它提供了一种极其简单的 词法分析器 生成器,一些便利的宏和一些受 syn 启发的原始解析功能——足以让你开始并清除你的障碍。

状态

自该项目启动以来,它已经成熟了许多,目前至少在以下真实世界生产代码库中使用:一个为IDE工具提供语言服务器协议实现的WGSL解析器。尽管如此,API仍然应被视为不稳定,并且直到1.0版本发布之前,在版本之间可能会发生破坏性更改。

入门

crate级文档中提供了简要教程和API概述。

您还可以探索这个仓库中的两个完整工作、非平凡示例项目

  • examples/lox 使用Gramatika的 derive 宏实现了Lox编程语言的解析器。

  • examples/lox_manual_impl 是一个解析器,它通过手动编写所有通常由 derive 宏生成的代码来 手动 实现 Gramatika 的特征。

    如果你对实现细节感兴趣,或者需要手动实现 Gramatika 的某些特征以覆盖特殊用例,这是一个很好的起点。

用例

Gramatika 适用于满足以下条件的语言

  • 文本可以无状态地标记化——也就是说,特定的字符模式可以始终由相同的标记表示,而不论它在语法树中的位置。

    例如,XML 家族的语言 满足此条件,因为只有 <> 括号(以及括号本身)内的文本应进行标记化,其余文本应作为字面量“文本节点”处理。

  • 语言可以使用一个带有单个前瞻标记和有限回溯的 LL(1) 或递归下降解析器进行解析。

尽管如此,Gramatika 的 API 足够灵活,通过一些额外的工作,它可以适应不完全符合这些标准的用例。如果你想在不符合这些标准的用例中使用 Gramatika 并需要一些指导或建议,请随时联系。

依赖关系

~5.5MB
~83K SLoC