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
每月158次下载
在gramatika中使用
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