anchor.diff:   |
    ;
   frameclauseOptional
  - :  (K_RANGE|K_ROWS)  frame_start  
  - |  (K_RANGE|K_ROWS)  K_BETWEEN  frame_start K_AND frame_end
  + :  (K_RANGE|K_ROWS)  (frame_start| K_BETWEEN  frame_start K_AND frame_end )
    ;
   frame_start
    : signed_number K_PRECEDING 
  
positive.code:  : '*'
   | table_name '.' '*'
   | (expr|windowFunction) ( K_AS? column_alias )?
   | windowFunction 
   ;
  windowFunction
   : K_FIRST_VALUE '('  expr  ')' K_OVER '('  partitionbyOptional? K_ORDER K_BY exprAscDescOptional frameclauseOptional? ')'
  
negative.code: K_WHERE : W H E R E;
  K_WITH : W I T H;
  K_WITHOUT : W I T H O U T;
  K_FIRST_VALUE : F I R S T'_'V A L U E;
  K_OVER  : O V E R;
  K_PARTITION : P A R T I T I O N;
  K_RANGE     : R A N G E;
  