anchor.diff:         | b_expr TYPECAST typename
   
           //right	unary plus, unary minus
  -       | PLUS b_expr
  -       | MINUS b_expr
  +       | (PLUS|MINUS) b_expr
   
           //^	left	exponentiation
          | b_expr CARET b_expr
   
           //* / %	left	multiplication, division, modulo
  -       | b_expr STAR b_expr
  -       | b_expr SLASH b_expr
  -       | b_expr PERCENT b_expr
  +       | b_expr (STAR | SLASH | PERCENT) b_expr
   
           //+ -	left	addition, subtraction
  -       | b_expr PLUS b_expr
  -       | b_expr MINUS b_expr
  +       | b_expr (PLUS | MINUS) b_expr
  +
          //(any other operator)	left	all other native and user-defined operators
          | b_expr qual_op b_expr
   
           //< > = <= >= <>	 	comparison operators
  -       | b_expr LT b_expr
  -       | b_expr GT b_expr
  -       | b_expr EQUAL b_expr
  -       | b_expr LESS_EQUALS b_expr
  -       | b_expr GREATER_EQUALS b_expr
  -       | b_expr NOT_EQUALS b_expr
  +       | b_expr (LT | GT | EQUAL | LESS_EQUALS | GREATER_EQUALS | NOT_EQUALS) b_expr
   
          | qual_op b_expr
          | b_expr qual_op
  
positive.code:  interval_second: SECOND_P
                  | SECOND_P OPEN_PAREN iconst CLOSE_PAREN
  ;
  //precendence accroding to Table 4.2. Operator Precedence (highest to lowest)
  //https://www.postgresql.org/docs/12/sql-syntax-lexical.html#SQL-PRECEDENCE
   a_expr: c_expr
  
negative.code:        | a_expr AT TIME ZONE a_expr
  
         //right	unary plus, unary minus
         | (PLUS| MINUS) a_expr
  
          //left	exponentiation
         | a_expr CARET a_expr
  
          //left	multiplication, division, modulo
         | a_expr (STAR | SLASH | PERCENT) a_expr
  
          //left	addition, subtraction
         | a_expr (PLUS | MINUS) a_expr
  
          //left	all other native and user-defined operators
         | a_expr qual_op a_expr
         | qual_op a_expr
  
          //range containment, set membership, string matching BETWEEN IN LIKE ILIKE SIMILAR
         | a_expr LIKE a_expr opt_escape
         | a_expr not_la LIKE a_expr opt_escape
         | a_expr ILIKE a_expr opt_escape
         | a_expr not_la ILIKE a_expr opt_escape
         | a_expr SIMILAR TO a_expr opt_escape
         | a_expr not_la SIMILAR TO a_expr opt_escape
         | a_expr BETWEEN opt_asymmetric b_expr AND a_expr
         | a_expr not_la BETWEEN opt_asymmetric b_expr AND a_expr
         | a_expr BETWEEN SYMMETRIC b_expr AND a_expr
         | a_expr not_la BETWEEN SYMMETRIC b_expr AND a_expr
  
          //< > = <= >= <>	 	comparison operators
         | a_expr (LT | GT | EQUAL | LESS_EQUALS | GREATER_EQUALS | NOT_EQUALS) a_expr
  
         //IS ISNULL NOTNULL	 	IS TRUE, IS FALSE, IS NULL, IS DISTINCT FROM, etc
         | a_expr IS NULL_P
  