anchor.diff:     | simplePath '!' '{' tokenTree* '}'
      ;
   
  -macroRulesDefinition
  -   : 'macro_rules' '!' identifier macroRulesDef
  -   ;
  +macroRulesDefinition: 'macro_rules' '!' identifier macroRulesDef;
   
   macroRulesDef
      : '(' macroRules ')' ';'
  
positive.code:       ',' traitFunctionParam
     )* ',' ')' functionReturnType? whereClause?
     ;
  traitFunctionParameters
     : traitFunctionParam (',' traitFunctionParam)* ','?
     ;
  traitFunctionParam
     : outerAttribute* (pattern ':')? type
     ;
  
  traitConst
     : 'const' identifier ':' type ('=' expression)? ';'
     ;
  traitType
     : 'type' identifier (':' typeParamBounds?)? ';'
     ;
  
  implementation: inherentImpl | traitImpl;
  inherentImpl
     : 'impl' generics? type whereClause? '{' innerAttribute* inherentImplItem*
        '}'
     ;
  inherentImplItem
     : outerAttribute*
     (
        macroInvocationSemi
        |
        (
           visibility?
           (
              constantItem
              | function
              | method
           )
        )
     )
     ;
  
  traitImpl
     : 'unsafe'? 'impl' generics? '!'? typePath 'for' type whereClause? '{'
        innerAttribute* traitImplItem* '}'
     ;
  
  traitImplItem
     : outerAttribute*
     (
        macroInvocationSemi
        |
        (
           visibility?
           (
              typeAlias
              | constantItem
              | function
              | method
           )
        )
     )
     ;
  
  externBlock
     : 'extern' abi? '{' innerAttribute* externalItem* '}'
     ;
  
  externalItem
     : outerAttribute*
     (
        macroInvocationSemi
        |
        (
           visibility?
           (
              externalStaticItem
              | externalFunctionItem
           )
        )
     )
     ;
  
  externalStaticItem
     : 'static' 'mut'? identifier ':' type ';'
     ;
  
  externalFunctionItem
     : 'fn' identifier generics? '('
  
negative.code: 
  fragment FLOAT_SUFFIX: 'f32' | 'f64';
  
  fragment FLOAT_EXPONENT: [eE] [+-]? '_'* DEC_LITERAL;
  
  fragment OCT_DIGIT: [0-7];
  
  