anchor.diff:  ISNULL : 'is null' ;
   ISNOTNULL : 'is not null' ;
   
  -ISNULL_FUNC : 'isnull' ;
  +/* Core functions */
  +
  +NATIVE_FUNCTIONS : (NUMERIC_FUNCTIONS | STRING_FUNCTIONS ) ;
  +nativeFunctions : NUMERIC_FUNCTIONS
  +                | STRING_FUNCTIONS ;
  +FUNC_ISNULL : 'isnull' ;
  +
  +// Numeric
  +fragment NUMERIC_FUNCTIONS : ( FUNC_ROUND | FUNC_CEIL | FUNC_FLOOR | FUNC_ABS |
  +                      FUNC_TRUNC | FUNC_EXP  | FUNC_LN    | FUNC_LOG |
  +                      FUNC_POWER | FUNC_SQRT | FUNC_NROOT | FUNC_MOD |
  +                      FUNC_LISTSUM
  +                    ) ;
  +
  +FUNC_ROUND  : 'round' ;
  +FUNC_CEIL   : 'ceil' ;
  +FUNC_FLOOR  : 'floor' ;
  +FUNC_ABS    : 'abs' ;
  +FUNC_TRUNC  : 'trunc' ;
  +FUNC_EXP    : 'exp' ;
  +FUNC_LN     : 'ln' ;
  +FUNC_LOG    : 'log' ;
  +FUNC_POWER  : 'power' ;
  +FUNC_SQRT   : 'sqrt' ;
  +FUNC_NROOT  : 'nroot' ;
  +FUNC_MOD    : 'mod' ;
  +FUNC_LISTSUM: 'listsum' ;
  +
  +// String
  +fragment STRING_FUNCTIONS : ( FUNC_LENGTH | FUNC_TRIM  | FUNC_LTRIM  | FUNC_RTRIM |
  +                     FUNC_UPPER  | FUNC_LOWER | FUNC_SUBSTR | FUNC_INSTR |
  +                     FUNC_D_F_S  | FUNC_REPLACE
  +                   ) ;
  +
  +FUNC_LENGTH  : 'length' ;
  +FUNC_TRIM    : 'trim' ;
  +FUNC_LTRIM   : 'ltrim' ;
  +FUNC_RTRIM   : 'rtrim' ;
  +FUNC_UPPER   : 'upper' ;
  +FUNC_LOWER   : 'lower' ;
  +FUNC_SUBSTR  : 'substr' ;
  +FUNC_INSTR   : 'instr' ;
  +FUNC_D_F_S   : 'date_from_string' ;
  +FUNC_REPLACE : 'replace' ;
   
   //WS : [ \r\t\u000C] -> skip ;
   
  
positive.code: 
  booleanExpression                                                                                       //Evaluation order of the operators
      : '(' booleanExpression ')'                                                 # BooleanPrecedence     // I
      | ISNULL_FUNC '(' booleanParam ')'                                          # BooleanIsNullFunction // II  All functional operators
      | booleanParam op=(ISNULL|ISNOTNULL)                                        # BooleanPostfix        // ??
      | left=booleanParam op=( LE | LT | GE | GT ) right=booleanParam             # BooleanEquality       // VII
      | op=NOT booleanExpression                                                  # BooleanNot            // IV
  
negative.code:     : dateFromStringFunction
      ;
  
  dateFromStringFunction : FUNC_D_F_S '(' componentRef ',' format=STRING_CONSTANT ')';
  
  
  // Left recursive
  