Module rustc_expand::mbe

source ·
Expand description

This module implements declarative macros: old macro_rules and the newer macro. Declarative macros are also known as “macro by example”, and that’s why we call this module mbe. For external documentation, prefer the official terminology: “declarative macros”.


  • Checks that meta-variables in macro definition are correctly declared and used.
  • This is an NFA-based parser, which calls out to the main Rust parser for named non-terminals (which it commits to fully when it hits one in a grammar). There’s a set of current NFA threads and a set of next ones. Instead of NTs, we have a special case for Kleene star. The big-O, in pathological cases, is worse than traditional use of NFA or Earley parsing, but it’s an easier fit for Macro-by-Example-style rules.
  • quoted 🔒
  • transcribe 🔒


  • Delimited 🔒
    Contains the sub-token-trees of a “delimited” token tree such as (a b c). The delimiters are not represented explicitly in the tts vector.


  • KleeneOp 🔒
    A Kleene-style repetition operator for token sequences.
  • TokenTree 🔒
    Similar to tokenstream::TokenTree, except that Sequence, MetaVar, MetaVarDecl, and MetaVarExpr are “first-class” token trees. Useful for parsing macros.