使用旧的Rust 2015
0.1.1 |
|
---|---|
0.1.0 |
|
#392 in #ast
9KB
AST转换宏
这个crate提供了由Daniel Keep在《Rust宏小书》中描述的AST转换宏。
Rust解析器在面临
tt
替换时不够健壮。当解析器期望特定的语法结构时,却意外地发现一大堆替换后的tt
标记,这可能会导致问题。在这种情况下,通常会放弃解析,而不是尝试解析它们。这时就需要使用AST转换。macro_rules! as_expr { ($e:expr) => {$e} } macro_rules! as_item { ($i:item) => {$i} } macro_rules! as_pat { ($p:pat) => {$p} } macro_rules! as_stmt { ($s:stmt) => {$s} }
这些转换通常与下推积累宏一起使用,以便让解析器将最终的
tt
序列视为特定的语法结构。请注意,这个特定宏集是由允许宏扩展到的内容决定的,而不是它们能够捕获的内容。也就是说,由于宏不能出现在类型位置(参见问题#27245),因此不能有
as_ty!
宏。
安装
这个crate在crates.io上可用。在Cargo.toml
中使用以下内容:
[dependencies]
reparse = "0.1"
由于这个crate提供宏,因此必须使用#[macro_use]
属性导入
#[macro_use]
extern crate reparse;
许可协议
根据您的要求,许可协议可以是以下之一:
- Creative Commons Attribution-ShareAlike 4.0 International License (LICENSE-CC 或 https://creativecommons.org/licenses/by-sa/4.0/legalcode)
- MIT license (LICENSE-MIT 或 http://opensource.org/licenses/MIT)
任选其一。