anchor.diff:    : identifier ( '.' identifier )* ;
   
   mapping
  -  : 'mapping' '(' elementaryTypeName '=>' typeName ')' ;
  +  : 'mapping' '(' (elementaryTypeName | userDefinedTypeName) '=>' typeName ')' ;
   
   functionTypeName
  -  : 'function' functionTypeParameterList
  -    ( InternalKeyword | ExternalKeyword | stateMutability )*
  -    ( 'returns' functionTypeParameterList )? ;
  +  : 'function' parameterList modifierList returnParameters? ;
   
   storageLocation
     : 'memory' | 'storage' | 'calldata';
  
positive.code:   : 'struct' identifier
      '{' ( variableDeclaration ';' (variableDeclaration ';')* )? '}' ;
  
  constructorDefinition
    : 'constructor' parameterList modifierList block ;
  
  modifierDefinition
    : 'modifier' identifier parameterList? block ;
  
  modifierInvocation
    : identifier ( '(' expressionList? ')' )? ;
  
  functionDefinition
    : 'function' identifier? parameterList modifierList returnParameters? ( ';' | block ) ;
  
  returnParameters
    : 'returns' parameterList ;
  
  modifierList
    : ( modifierInvocation | stateMutability | ExternalKeyword
      | PublicKeyword | InternalKeyword | PrivateKeyword )* ;
  
  eventDefinition
    : 'event' identifier eventParameterList AnonymousKeyword? ';' ;
  
  enumValue
    : identifier ;
  
  enumDefinition
    : 'enum' identifier '{' enumValue? (',' enumValue)* '}' ;
  
  parameterList
    : '(' ( parameter (',' parameter)* )? ')' ;
  
  
negative.code: primaryExpression
    : BooleanLiteral
    | numberLiteral
    | hexLiteral
    | stringLiteral
    | identifier ('[' ']')?
    | TypeKeyword
    | tupleExpression
    | typeNameExpression ('[' ']')? ;
  
  expressionList
    : expression (',' expression)* ;
  