#port #berkeley #grammar #source #write #yacc #racc

racc_runtime

RACC 是伯克利 YACC 到 Rust 的移植,允许您直接在 Rust 源代码中编写语法定义

1 个不稳定版本

0.1.1 2023年10月2日

#233解析工具

MIT/Apache

3KB

RACC -- Rust 另一个编译器-编译器

伯克利 YACC 解析生成器的 Rust 移植

racc 是一个 Rust 程序化宏(proc-macro),允许在 Rust 源代码中嵌入 LALR(1) 语法

如何使用它?

查看 racc/examples/math.rs 以了解如何编写语法的简要示例。

对于词法分析器,我该做什么?

nom 可能是您目前最好的选择。

但是,为什么??

我一直喜欢 yacc,多年前我首次将 yacc 移植到 Rust 作为语法扩展。这个项目主要是将事物移植到 Rust 的练习,看看结果如何。如果对任何人有用,那么它就有用;如果没有,那么它只是另一个在 Github 上腐烂的仓库,没有人会打扰。

这个移植练习的一部分是看看 C 语言的惯用法如何转换为 Rust 语言的惯用法。我发现将代码移植到 Rust 几乎总是可以澄清底层算法,因为切片和向量等概念比 C 指针更能清楚地表达算法的意图。

有更好的包,所以还是放弃吧。

当然,没问题。做你想做的。

这些包在某种程度上比 racc 做得更好

限制

不幸的是,这个项目有很多限制和不完整的地方。找到它们留给读者作为练习。

作者

RACC 由 Arlie Davis 实现 arlie.davis@gmail.com。我这样做是为了将一个众所周知(并且有用)的工具移植到 Rust 的实验。我也对 Rust 的程序化宏支持很感兴趣,并想知道我是否可以使用程序化宏实现一些有趣的东西。

反馈

请随时将有关 RACC 的任何反馈发送给我 arlie.davis@gmail.com


lib.rs:

包含供希望使用RACC生成的解析器应用所需的辅助逻辑。之前在racc_runtime中有更多内容,但现在只有一个Error类型。甚至这个类型也可能被消除,并融合到生成的代码中。

无运行时依赖

特性