在编译时构建递归树

时间:2014-07-22 19:11:35

标签: macros rust

我创建了一个生锈的递归树,但它不够快我所需要的(https://github.com/Noxivs/tree)。

所以我想在编译时构建它,但我不能用#34; recurcive matchers"来理解语法扩展。

你能给我一个办法吗?

编辑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();

0 个答案:

没有答案