调用rust macro意味着什么是`error:expected open delimiter`?

时间:2014-09-29 21:32:28

标签: macros rust

我有这样一个宏:

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,但据我所知,它与此问题无关,因为问题不在于宏体,但随着它的调用。

1 个答案:

答案 0 :(得分:0)

好的,我找到了响应:宏调用中的matchers应该括在括号中。问题在于我对比赛者的误解是比赛规则的左手边,而他们是=&gt;的lhs。宏观规则中明确规定了这一点。

P.S。我给出的整个宏怎么样,无论如何都是错的。 )