我用rustc_ast::tokenstream::TokenStream工作
我在console中打印了TokenStream:
Contents of value2.tokens: TokenStream(
[
Token(
Token {
kind: Ident(
"dead_code",
false,
),
span: src/main.rs:12:9: 12:18 (#0),
},
Alone,
),
],
)
我需要在这个TokenStream上进行匹配,以确保我们处理的是“dead_code”属性符号(而不是其他符号)
下面是一段代码,我正在处理AST并试图匹配TokenStream,请注意代码中的注解,我卡住了 //这个匹配不正确,如何在这里匹配?
for attr in tcx.get_attrs(item.owner_id.to_def_id(), sym::allow) {
println!("Print attributes: {:#?}", attr);
if let AttrKind::Normal(value) = &attr.kind {
if let AttrArgs::Delimited(value2) = &value.item.args {
if let value3 = &value2.tokens {
println!("Contents of value2.tokens: {:#?}", value3);
match value3 {
[a] => { // THIS MATCH IS NOT CORRECT, HOW TO MATCH HERE?
println!("hi, {}", a)
}
}
}
}
}
}
我试图匹配这个TokenStream的内部作为元组,枚举,列表...一切都行不通我的脸总是不匹配。
我尝试使用这个解析器,但失败了,因为它的复杂性。
那么,如何匹配一个抽象的令牌序列TokenStream呢?
1条答案
按热度按时间gab6jxml1#
我刚刚做到了!
方法树()帮助了我。然后应该使用look_ahead函数
这是解决方案代码: