anchor.diff:     | '-'? FLOAT_LITERAL
      ;
   
  -identifierPattern
  -   : 'ref'? 'mut'? identifier ('@' pattern)?
  -   ;
  +identifierPattern: 'ref'? 'mut'? identifier ('@' pattern)?;
   wildcardPattern: '_';
   restPattern: '..';
  -rangePattern
  -   : rangePatternBound '..=' rangePatternBound
  -   ;
  -obsoleteRangePattern
  -   : rangePatternBound '...' rangePatternBound
  -   ;
  +rangePattern: rangePatternBound '..=' rangePatternBound;
  +obsoleteRangePattern: rangePatternBound '...' rangePatternBound;
   rangePatternBound
      : CHAR_LITERAL
      | BYTE_LITERAL
  
positive.code: genericArgsLifetimes: lifetime (',' lifetime)*;
  
  genericArgsTypes: type (',' type)*;
  genericArgsBindings
     : genericArgsBinding (',' genericArgsBinding)*
     ;
  genericArgsBinding: identifier '=' type;
  
  qualifiedPathInExpression
     : qualifiedPathType ('::' pathExprSegment)+
     ;
  qualifiedPathType: '<' type ('as' typePath)? '>';
  qualifiedPathInType
     : qualifiedPathType ('::' typePathSegment)+
     ;
  
  typePath
     : '::'? typePathSegment ('::' typePathSegment)*
     ;
  typePathSegment
     : pathIdentSegment '::'?
     (
        genericArgs
        | typePathFn
     )?
     ;
  
  typePathFn: '(' typePathInputs? ')' ( '->' type)?;
  typePathInputs: type (',' type)* ','?;
  
  macroInvocation: simplePath '!' delimTokenTree;
  
  delimTokenTree
     : '(' tokenTree* ')'
     | '[' tokenTree* ']'
     | '{' tokenTree* '}'
     ;
  
  tokenTree
     : '::' // TODO: test, put all token except delim here...
  
negative.code:       | macroInvocationSemi
     )
     ;
  traitFunc: traitFunctionDecl (';' | blockExpression);
  traitMethod: traitMethodDecl (';' | blockExpression);
  traitFunctionDecl
     : functionQualifiers 'fn' identifier generics? '(' traitFunctionParameters? ')' functionReturnType? whereClause?
     ;
  traitMethodDecl
     : functionQualifiers 'fn' identifier generics? '(' selfParam
  