我创建了一个生锈的递归树,但它不够快我所需要的(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();