我有这样一个宏:
macro_rules! expect_token (
([$($token:matchers, $result:expr)|+] <= $tokens:ident, $parsed_tokens:ident, $error:expr) => (
match $tokens.pop() {
$(
Some($token) => {
$parsed_tokens.push($token);
$result
},
)+
None => {
$parsed_tokens.reverse();
$tokens.extend($parsed_tokens.into_iter());
return NotComplete;
},
_ => return error(expr)
}
);
)
当我用expect_token!([Ident(name), name] <= tokens, parsed_tokens, "expected function name in prototype");
调用它时,我收到错误“错误:预期打开分隔符”。
这个错误意味着什么,我做错了什么?
P.S。如果您想知道像NotComplete
这样的标识符的定义是什么,您可以查看https://github.com/jauhien/iron-kaleidoscope/blob/master/src/parser.rs,但据我所知,它与此问题无关,因为问题不在于宏体,但随着它的调用。
答案 0 :(得分:0)
好的,我找到了响应:宏调用中的matchers
应该括在括号中。问题在于我对比赛者的误解是比赛规则的左手边,而他们是=&gt;的lhs。宏观规则中明确规定了这一点。
P.S。我给出的整个宏怎么样,无论如何都是错的。 )