1 个不稳定版本
0.1.1 | 2023年10月2日 |
---|
#233 在 解析工具
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
做得更好
- https://crates.io/crates/lalrpop - 在各个方面都几乎更好
- https://crates.io/crates/nom - 适合编写解析器
限制
不幸的是,这个项目有很多限制和不完整的地方。找到它们留给读者作为练习。
作者
RACC 由 Arlie Davis 实现 arlie.davis@gmail.com
。我这样做是为了将一个众所周知(并且有用)的工具移植到 Rust 的实验。我也对 Rust 的程序化宏支持很感兴趣,并想知道我是否可以使用程序化宏实现一些有趣的东西。
反馈
请随时将有关 RACC 的任何反馈发送给我 arlie.davis@gmail.com
。
lib.rs
:
包含供希望使用RACC生成的解析器应用所需的辅助逻辑。之前在racc_runtime
中有更多内容,但现在只有一个Error
类型。甚至这个类型也可能被消除,并融合到生成的代码中。