anchor.diff:      ;
   
   ternary_manipulation_function
  -    : function_name=(CONV | SUBSTR | HASH | RPAD | SUBSTRING | LPAD | MID | REPLACE | SUBSTRING_INDEX)
  +    : function_name=(CONV | SUBSTR | HASH | RPAD | SUBSTRING | LPAD | MID | REPLACE | SUBSTRING_INDEX | MAKETIME | IF)
         '(' expression ',' expression ',' expression ')'
       ;
   
  
positive.code:      | ABS | STDDEV | SQRT | LCASE | MD5 | CRC32 | YEAR | QUARTER | MONTH | DAY | HOUR | MINUTE | SECOND | WEEKOFYEAR | LOWER
       | UPPER | UCASE | ASCII | CHARACTER_LENGTH | FACTORIAL | CBRT | LENGTH | TRIM | ASIN | ACOS | ATAN | ATAN2 | DEGREES | RADIANS | POSITIVE
       | NEGATIVE | BROUND | BIN | HEX | UNHEX | FROM_UNIXTIME | TO_DATE | CHR | LTRIM | RTRIM| REVERSE | SPACE_FUNCTION | SHA1
       | SHA2 | SPACE | DATE | DAYNAME | DAYOFMONTH | DAYOFWEEK | DAYOFYEAR)
        '(' expression ')'
      | function_name=CAST '(' cast_as_expression ')'    
      ;
      
  noparam_manipulation_function
      : function_name=(UNIX_TIMESTAMP | CURRENT_TIMESTAMP | CURRENT_DATE | CURRENT_TIME | RANDOM | RAND | NATURAL_CONSTANT
      | PI | CURDATE | CURTIME)
        '(' ')'
      ;
      
  
negative.code: USING:                           U S I N G;
  VAR:                             V A R;
  VARP:                            V A R P;
  VERSION:                         V E R S I O N;
  VIEW_METADATA:                   V I E W '_' M E T A D A T A;
  WEEKOFYEAR:                      W E E K O F Y E A R;
  WEEK:                            W E E K;
  WEEKDAY:                         W E E K D A Y;
  WORK:                            W O R K;
  XML:                             X M L;
  XMLNAMESPACES:                   X M L N A M E S P A C E S;
  YEAR:                            Y E A R;
  YEARS:                           Y E A R S;
  YEARWEEK:                        Y E A R W E E K;
  
  DOLLAR_ACTION:                   '$' A C T I O N;
  
  