Macros 在编译时构建递归树
我在rust中创建了一个递归树,但它的速度不够快,无法满足我的需要 所以我想在编译时构建它,但我还不足以理解使用递归匹配器的语法扩展 你能给我一个办法吗 编辑1:我可能可以这样做,在宏扩展器中构建一个简单的匹配Macros 在编译时构建递归树,macros,rust,Macros,Rust,我在rust中创建了一个递归树,但它的速度不够快,无法满足我的需要 所以我想在编译时构建它,但我还不足以理解使用递归匹配器的语法扩展 你能给我一个办法吗 编辑1:我可能可以这样做,在宏扩展器中构建一个简单的匹配 let d = vec!( (0, "match 0"), (1, "match 1"), (3, "match 3"), ); fn ms(m: Mather_) -> Matcher { Spanned {
let d = vec!(
(0, "match 0"),
(1, "match 1"),
(3, "match 3"),
);
fn ms(m: Mather_) -> Matcher {
Spanned {
node: m.clone(),
span: DUMMY_SP
}
}
let lhs_nm = gensym_ident("lhs");
let rhs_nm = gensym_ident("rhs");
let m = d.iter().map(|&(ref i, ref s)| {
vec!(
ms(MatchSeq(vec!(
ms(MatchNonterminal()), // no args
ms(MatchTok(FAT_ARROW)),
ms(MatchNonterminal()), // no args
))),
ms(MatchSeq(vec!(ms(MatchTok(COMMA)) // no args
)))
)
}).collect();
@扎克斯彭斯:我不是要求你这么做。我要求给我一个方法,你可以看到像给我一个链接或类似的东西。我是个初学者,我想。目前还没有关于语法扩展的大型文档,这有点困难。然而,我读了一些github和这个的例子,但是我仍然不知道如何做嵌套匹配器。它使用一个rustc解析器插件和一个库在编译时创建一个哈希表。