Skip to main content

rust macro

背景

MacroRulesDefinition :
macro_rules ! IDENTIFIER MacroRulesDef

MacroRulesDef :
( MacroRules ) ;
| [ MacroRules ] ;
| { MacroRules }

MacroRules :
MacroRule ( ; MacroRule )* ;?

MacroRule :
MacroMatcher => MacroTranscriber

MacroMatcher :
( MacroMatch* )
| [ MacroMatch* ]
| { MacroMatch* }

MacroMatch :
Tokenexcept $ and delimiters
| MacroMatcher
| $ ( IDENTIFIER_OR_KEYWORD except crate | RAW_IDENTIFIER | _ ) : MacroFragSpec
| $ ( MacroMatch+ ) MacroRepSep? MacroRepOp

MacroFragSpec :
block | expr | ident | item | lifetime | literal
| meta | pat | pat_param | path | stmt | tt | ty | vis

MacroRepSep :
Tokenexcept delimiters and MacroRepOp

MacroRepOp :
* | + | ?

MacroTranscriber :
DelimTokenTree

相关阅读