Как у nom есть вызов макроса в позиции указателя макроса? - PullRequest
0 голосов
/ 01 июня 2018

В следующем примере, взятом из nom, аргумент $submac имеет ident!( $($args:tt)* ) в позиции указателя.У меня сложилось впечатление, что ident!(...) - это вызов макроса, но, насколько я вижу, nom не определяет макрос с именем ident.Документация Rust по макросам не указывает, что вызовы макросов могут даже появляться в позиции указателя.

#[macro_export]
macro_rules! exact (
  ($i:expr, $submac:ident!( $($args:tt)* )) => ({
      terminated!($i, $submac!( $($args)*), eof!())
  });
  ($i:expr, $f:expr) => (
    exact!($i, call!($f));
  );
);

Что такое ident!(...) в формальном синтаксисе?

1 Ответ

0 голосов
/ 01 июня 2018

У меня сложилось впечатление, что ident!(...) - это макро-вызов

Это не так.Это то, что намеренно выглядит как вызов макроса.Добавление пробела, вероятно, сделает это более очевидным:

macro_rules! example {
    ($foo:ident !) => (1);
}

fn main() {
    example!(hello!);
}
...