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

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

#719 in 文本处理

Download history 248/week @ 2024-05-05 221/week @ 2024-05-12 196/week @ 2024-05-19 16/week @ 2024-05-26 16/week @ 2024-06-02 35/week @ 2024-06-09 19/week @ 2024-06-16 9/week @ 2024-06-23 29/week @ 2024-06-30 4/week @ 2024-07-07 44/week @ 2024-07-14 51/week @ 2024-07-21 42/week @ 2024-07-28

每月下载量 142
用于 wgsl-parser

MIT/Apache

84KB
884

Gramatika

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

动机

尽管在许多情况下非常强大且有用,但我发现解析器生成器有点繁琐,并且由于各种原因难以使用。另一方面,手动编写解析器需要大量的繁琐模板才能开始。

该项目试图在基于自动语法工具和面对空白 lib.rs 文件时令人恐惧的空白之间找到我的“金发姑娘地带”(您的里程可能会有所不同)。目前,它提供了一个非常简单的 lexer 生成器,一些方便的宏,以及一些由 syn 启发的基本解析原语——足以让您有一个良好的开始,并让您摆脱障碍。

状态

自从推出以来,这个 crate 已经发展得相当成熟,目前至少正在被一个真实世界的生产代码库使用:一个为 IDE 工具实现的 语言服务器协议实现 驱动的 WGSL 解析器。尽管如此,API 仍应被视为不稳定,并且可能在发布 1.0 版本之前在次要版本之间进行破坏性更改。

入门

有关教程和 API 概述的简要介绍可在 crate 级别文档 中找到。

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

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

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

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

用例

Gramatika 适用于满足以下标准的语言:

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

    例如,XML 类型的语言满足此条件,因为只有位于<>括号内(以及括号本身)的文本应该被标记化,其余文本应被视为字面“文本节点”。

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

尽管如此,Gramatika 的 API 足够灵活,通过一些额外的工作,它可以适应不严格满足这些标准的用例。如果您想使用 Gramatika 进行此类用例,并希望得到一些指导或建议,请随时联系。

依赖关系

~0.1–1.1MB
~16K SLoC