В следующем примере, взятом из 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!(...)
в формальном синтаксисе?