anchor.diff:  //{ Rule #358 <NATIONAL_CHAR_STRING_LIT> - subtoken typecast in <REGULAR_ID>, it also incorporates <character_representation>
   //  Lowercase 'n' is a usual addition to the standard
   NATIONAL_CHAR_STRING_LIT
  -    :    N '\'' (~('\'' | '\r' | '\n' ) | '\'' '\'' | NEWLINE)* '\''
  +    : N '\'' (~('\'' | '\r' | '\n' ) | '\'' '\'' | NEWLINE)* '\''
       ;
   //}
   
   //{ Rule #040 <BIT_STRING_LIT> - subtoken typecast in <REGULAR_ID>
   //  Lowercase 'b' is a usual addition to the standard
   BIT_STRING_LIT
  -    :    B ('\'' ('0' | '1')* '\'' /*SEPARATOR?*/ )+
  +    : B ('\'' ('0' | '1')* '\'' /*SEPARATOR?*/ )+
       ;
   //}
   
  
positive.code: // $<PL/SQL Statements
  
  seq_of_statements
      :     (statement (';'|EOF) | label_declaration)+
      ;  
  
  label_declaration
      :    ltp1='<' '<' label_name '>' '>'
      ;
  
  statement
      :    CREATE swallow_to_semi (';'|EOF)
      |    ALTER swallow_to_semi  (';'|EOF)
      |    GRANT swallow_to_semi  (';'|EOF)
      |    TRUNCATE swallow_to_semi  (';'|EOF)
      |    body
      |    block
      |    assignment_statement
      |    continue_statement
      |    exit_statement
      |    goto_statement
      |    if_statement
      |    loop_statement
      |    forall_statement
      |    null_statement
      |    raise_statement
      |    return_statement
      |    case_statement/*[true]*/
      |    sql_statement
      |    function_call
      ;
  
  assignment_statement
      :     (general_element|bind_variable) ASSIGN_OP expression
      ;
  
  continue_statement
      :    CONTINUE label_name? (WHEN condition)?
      ;
  
  exit_statement
      :    EXIT label_name? (WHEN condition)?
      ;
  
  goto_statement
      :    GOTO label_name
      ;
  
  if_statement
      :    IF condition THEN seq_of_statements
          elsif_part* else_part?
          END IF
      ;
  
  elsif_part
      :    ELSIF condition THEN seq_of_statements
      ;
  
  else_part
      :    ELSE seq_of_statements
      ;
  
  loop_statement
      :    label_name?
          (WHILE condition | FOR cursor_loop_param)?
          LOOP
          seq_of_statements
          END LOOP label_name?
      ;
  
  // $<Loop - Specific Clause
  
  cursor_loop_param
      :     index_name IN REVERSE? lower_bound '..' upper_bound
      |     record_name IN ( cursor_name expression_list? | '(' select_statement ')')
      ;
  // $>
  
  forall_statement
      :    FORALL index_name IN bounds_clause sql_statement (SAVE EXCEPTIONS)?
      ;
  
  bounds_clause
      :    lower_bound '..' upper_bound
      |    INDICES OF collection_name between_bound?
      |    VALUES OF index_name
      ;
  
  between_bound
      :    BETWEEN lower_bound AND upper_bound
      ;
  
  lower_bound
      :    concatenation
      ;
  
  upper_bound
      :    concatenation
      ;
  
  null_statement
      :    NULL
      ;
  
  raise_statement
      :    RAISE exception_name?
      ;
  
  return_statement
      :    RETURN cn1=condition?
      ;
  
  function_call
      :    CALL? routine_name function_argument?
      ;
  
  body
      :    BEGIN
          seq_of_statements
          exception_clause?
          END label_name?
      ;
  
  // $<Body - Specific Clause
  
  exception_clause
      :    EXCEPTION exception_handler+
      ;
  
  exception_handler
      :    WHEN exception_name (OR exception_name)* THEN
          seq_of_statements
      ;
  
  // $>
  
  trigger_block
      :    (DECLARE? declare_spec+)?
          body
      ;
  
  block
      :    DECLARE? declare_spec+
          body
      ;
  
  // $>
  
negative.code:     }*/
      ;
  
  PLSQL_NON_RESERVED_ELSIF: 'elsif';
  PLSQL_NON_RESERVED_PIVOT: 'pivot';
  PLSQL_NON_RESERVED_UNPIVOT: 'unpivot';
  
  REGULAR_ID
      : (SIMPLE_LETTER) (SIMPLE_LETTER | '$' | '_' | '#' | '0'..'9')*
      ;
  
  ZV
      : '@!' -> channel(HIDDEN)
      ;
  