#ast #coercion #tlborm

已删除 reparse

《Rust宏小书》中描述的AST转换宏

使用旧的Rust 2015

0.1.1 2016年4月12日
0.1.0 2016年4月12日

#392 in #ast

CC-BY-SA-4.0/MIT

9KB

AST转换宏

Build Status Latest Version

这个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;

许可协议

根据您的要求,许可协议可以是以下之一:

任选其一。

无运行时依赖