Macros 在编译时构建递归树

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 {

我在rust中创建了一个递归树,但它的速度不够快,无法满足我的需要

所以我想在编译时构建它,但我还不足以理解使用递归匹配器的语法扩展

你能给我一个办法吗

编辑1:我可能可以这样做,在宏扩展器中构建一个简单的匹配

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解析器插件和一个库在编译时创建一个哈希表。