anchor.diff:      ;
   
   functionCall
  -    : aggregationFunction | specialFunction_ | userDefinedFunction_ 
  +    : aggregationFunction | specialFunction_ | regularFunction_ 
       ;
   
   aggregationFunction
  
positive.code:     : COLLATE EQ_? (STRING_ | ignoredIdentifier_)
      ;
  
  userDefinedFunction_
      : userDefinedfunctionName_ LP_ (expr (COMMA_ expr)* | ASTERISK_)? RP_
      ;
  
  userDefinedfunctionName_
      : identifier_ | IF | CURRENT_TIMESTAMP | LOCALTIME | LOCALTIMESTAMP | NOW | REPLACE | CAST | CONVERT | POSITION | CHAR | TRIM
      ;
  
  ignoredIdentifier_
      : identifier_ (DOT_ identifier_)?
      ;
  
negative.code: 
  import Symbol, Keyword, Literals;
  
  parameterMarker
      : QUESTION_
      ;
  
  number
     : NUMBER_
     ;
  
  string
      : STRING_
      ;
  
  literals_
      : BIT_NUM_ | NUMBER_ | HEX_DIGIT_ | STRING_
      ;
  
  identifier_
      : IDENTIFIER_ | unreservedWord_
      ;
  
  variable_
      : (AT_ AT_)? (GLOBAL | PERSIST | PERSIST_ONLY | SESSION)? DOT_? identifier_
      ;
  
  unreservedWord_
  