anchor.diff:   ;
   
   identifier_list : identifier | identifier ',' identifier_list  ;
  -
  +/*
  +Operator : EQUALS | IDIVIDE | MINUS | PLUS | EXCLAMATION | TIMES 
  + | MOD | LTHAN | GTHAN | AND | OR | XOR | EXCLAMATION | DOT | DIVIDE
  + | Dot_operator_head Dot_operator_characters?
  +;
  +*/
  +
  +Dot_operator_characters : Dot_operator_character+ ;
  +fragment Dot_operator_character : DOT | Operator_character ;
  +Dot_operator_head : DOTDOT ;
  +fragment Operator_characters : Operator_character+ ;
  +
  +
  +fragment Operator_character : Operator_head | TILDE
  +/*
  + | [\u0300-\u036F]
  + | [\u1DC0-\u1DFF]
  + | [\u20D0-\u20FF]
  + | [\uFE00-\uFE0F]
  + | [\uFE20-\uFE2F]
  + //| U+E0100U+E01EF
  +*/
  +;
  +
  +fragment Operator_head : EQUALS | IDIVIDE | MINUS | PLUS | EXCLAMATION | STAR 
  + | MOD | LTHAN | GTHAN | AND | OR | XOR | EXCLAMATION | DOT | DIVIDE
  +/*
  + | [\u00A1-\u00A7]
  + | '\u00A9' | '\u00AB'
  + | '\u00AC' | '\u00AE'
  + | [\u00B0-\u00B1] | '\u00B6' | '\u00BB' | '\u00BF' | '\u00D7' | '\u00F7'
  + | [\u2016-\u2017] | [\u2020-\u2027]
  + | [\u2030-\u203E]
  + | [\u2041-\u2053]
  + | [\u2055-\u205E]
  + | [\u2190-\u23FF]
  + | [\u2500-\u2775]
  + | [\u2794-\u2BFF]
  + | [\u2E00-\u2E7F]
  + | [\u3001-\u3003]
  + | [\u3008-\u3030]
  +*/
  +;
  +
  +// lexer stuff copied from parr version
   fragment Identifier_head : [a-zA-Z]
    | '\u00A8' | '\u00AA' | '\u00AD' | '\u00AF' | [\u00B2-\u00B5] | [\u00B7-\u00BA]
    | [\u00BC-\u00BE] | [\u00C0-\u00D6] | [\u00D8-\u00F6] | [\u00F8-\u00FF]
  
positive.code: 
  // GRAMMAR OF A STRING LITERAL
  
  String_literal : '"' Quoted_text '"' ;
  Quoted_text : Quoted_text_item Quoted_text? ;
  Quoted_text_item : Escaped_character
  // | '\\(' expression ')'
   | ~["\\\u000A\u000D]
   ;
  Escaped_character : '\\' [0\\tnr"']
   | '\\x' Hexadecimal_digit Hexadecimal_digit
   | '\\u' Hexadecimal_digit Hexadecimal_digit Hexadecimal_digit Hexadecimal_digit
   | '\\U' Hexadecimal_digit Hexadecimal_digit Hexadecimal_digit Hexadecimal_digit Hexadecimal_digit Hexadecimal_digit Hexadecimal_digit Hexadecimal_digit
  ;
  
  
negative.code:  | subscript_expression
   | forced_value_expression
   | optional_chaining_expression
  ;
  */
  
  postfix_expression : primary_expression
   | postfix_expression postfix_operator
   | postfix_expression (function_call_expression
   | initializer_expression
   | explicit_member_expression
   | postfix_self_expression
   | dynamic_type_expression
   | subscript_expression
   | forced_value_expression
   | optional_chaining_expression) 
  ;
  
  //GRAMMAR OF A FUNCTION CALL EXPRESSION
  
  function_call_expression : parenthesized_expression 
    | parenthesized_expression? trailing_closure
  ;
  
  trailing_closure : closure_expression ;
  
  //GRAMMAR OF AN INITIALIZER EXPRESSION
  
  initializer_expression : '.' 'init' ;
  
  //GRAMMAR OF AN EXPLICIT MEMBER EXPRESSION
  
  explicit_member_expression : '.' decimal_digits
   | '.' identifier generic_argument_clause?  ;
  
  //GRAMMAR OF A SELF EXPRESSION
  
  postfix_self_expression : '.' 'self' ;
  
  //GRAMMAR OF A DYNAMIC TYPE EXPRESSION
  
  dynamic_type_expression : '.' 'dynamicType' ;
  
  //GRAMMAR OF A SUBSCRIPT EXPRESSION
  
  subscript_expression : '[' expression_list ']' ;
  
  //GRAMMAR OF A FORCED-VALUE EXPRESSION
  
  forced_value_expression : '!' ;
  
  //GRAMMAR OF AN OPTIONAL-CHAINING EXPRESSION
  
  optional_chaining_expression : '?' ;
  
  
  //Types
  //GRAMMAR OF A TYPE
  
  type : array_type | dictionary_type 
  //| function_type 
  | type '->' type 
  | type_identifier | tuple_type 
  //| optional_type 
  | type '?' 
  //| implicitly_unwrapped_optional_type 
  | type '!' 
  | protocol_composition_type 
  //| metatype_type
  | type '.' 'Type' | type '.' 'Protocol' 
  ;
  
  //GRAMMAR OF A TYPE ANNOTATION
  
  type_annotation : ':' attributes? type ;
  
  //GRAMMAR OF A TYPE IDENTIFIER
  
  type_identifier : type_name generic_argument_clause? | type_name generic_argument_clause? '.' type_identifier
  ;
  
  type_name : identifier ;
  
  //GRAMMAR OF A TUPLE TYPE
  
  tuple_type : '(' tuple_type_body? ')' ;
  
  tuple_type_body : tuple_type_element_list '...'?  ;
  
  tuple_type_element_list : tuple_type_element (',' tuple_type_element )* ;
  
  tuple_type_element : attributes? 'inout'? type | 'inout'? element_name type_annotation
  ;
  
  element_name : identifier ;
  
  //GRAMMAR OF A FUNCTION TYPE
  
  function_type : type '->' type ;
  
  //GRAMMAR OF AN ARRAY TYPE
  
  array_type : '[' type ']' ;
  
  //GRAMMAR OF A DICTIONARY TYPE
  
  dictionary_type : '[' type ':' type ']' ;
  
  //GRAMMAR OF AN OPTIONAL TYPE
  
  optional_type : type '?' ;
  
  //GRAMMAR OF AN IMPLICITLY UNWRAPPED OPTIONAL TYPE
  
  implicitly_unwrapped_optional_type : type '!' ;
  
  //GRAMMAR OF A PROTOCOL COMPOSITION TYPE
  
  protocol_composition_type : 'protocol' '<' protocol_identifier_list? '>' ;
  
  protocol_identifier_list : protocol_identifier (',' protocol_identifier )* ;
  
  protocol_identifier : type_identifier ;
  
  //GRAMMAR OF A METATYPE TYPE
  
  metatype_type : type '.' 'Type' | type '.' 'Protocol' ;
  
  //GRAMMAR OF A TYPE INHERITANCE CLAUSE
  
  type_inheritance_clause : ':' class_requirement ',' type_inheritance_list
   | ':' class_requirement
   | ':' type_inheritance_list
  ;
  
  type_inheritance_list : type_identifier | type_identifier (',' type_identifier )* ;
  
  class_requirement : 'class' ;
  
  
  // ---------- Lexical Structure -----------
  
  binary_operator : operator ;
  //prefix_operator : MINUS | PLUS | EXCLAMATION | TILDE | postfix_operator ;
  prefix_operator : EXCLAMATION | TILDE | PLUSPLUS | MINUSMINUS ;
  postfix_operator : PLUSPLUS | MINUSMINUS ;
  
  operator : EQUALS | EXCLAMATION 
   | LTHAN | GTHAN | EXCLAMATION | DOT 
   | ISEQUAL | NOTEQUAL  
   | arithmetic_operator
   | Dot_operator_head Dot_operator_characters?
           ;
  
  arithmetic_operator : Arithmetic_operator;
  Arithmetic_operator : Arithmetic_operator_head EQUALS? ; 
  
  fragment Arithmetic_operator_head : 
   MOD | MINUS | PLUS | STAR | DIVIDE | AND | OR | XOR 
   | LAND | LOR | LXOR | SLEFT | SRIGHT | IDIVIDE
   ;
  decimal_digits : Decimal_digits ;
  
  TILDE : '~' ;
  ARROW : '->';
  AS : 'as';
  AND : '&';
  BREAK : 'break';
  CASE : 'case';
  CLASS : 'class';
  COLON : ':';
  COMMA : ',';
  CONTINUE : 'continue';
  DEFAULT : 'default';
  DIDSET : 'didSet';
  DIVIDE : '/';
  DO : 'do';
  DOT : '.';
  DOTDOT : '..';
  EQUALS : '=';
  ELSE : 'else';
  ENUM : 'enum';
  EXCLAMATION : '!';
  FALLTHROUGH : 'fallthrough';
  FOR : 'for';
  FUNC : 'func';
  GET : 'get';
  GTHAN : '>';
  IDIVIDE : '\\';
  IF : 'if';
  IMPORT : 'import';
  IN : 'in';
  IS : 'is' ;
  ISEQUAL : '==';
  LBRACE : '{';
  LBRACKET : '[';
  LET : 'let';
  LPAREN : '(';
  LTHAN : '<';
  SLEFT : '<<';
  SRIGHT : '>>';
  MINUS : '-';
  MINUSMINUS : '--';
  MOD : '%';
  NOTEQUAL : '!=';
  OR : '|';
  LAND : '&&';
  LOR : '||';
  LXOR : '^^';
  OVERRIDE : 'override';
  PLUS : '+' ;
  PLUSPLUS : '++' ;
  PUBLIC : 'public';
  PRIVATE : 'private';
  PROTOCOL : 'protocol';
  QMARK : '?';
  RBRACE : '}';
  RBRACKET : ']';
  RPAREN : ')';
  RETURN : 'return';
  SELF : 'self';
  SEMI : ';';
  SET : 'set';
  STAR : '*';
  STRUCT : 'struct';
  SUPER : 'super';
  SWITCH : 'switch';
  TYPEALIAS : 'typealias';
  VAR : 'var';
  WHERE : 'where';
  WHILE : 'while';
  WILLSET : 'willSet';
  XOR : '^' ;
  
  identifier : Identifier | context_sensitive_keyword ;
  
  Identifier : Identifier_head Identifier_characters?
   | '`' Identifier_head Identifier_characters? '`'
  