anchor.diff:  loop_statement : for_statement
    | for_in_statement
    | while_statement
  - | do_while_statement
  + | repeat_while_statement
    ;
   
   // GRAMMAR OF A FOR STATEMENT
  
positive.code: fragment Decimal_digits : Decimal_digit+ ;
  fragment Decimal_literal_character : Decimal_digit | '_'  ;
  fragment Decimal_literal_characters : Decimal_literal_character+ ;
  Hexadecimal_literal : '0x' Hexadecimal_digit Hexadecimal_literal_characters? ;
  fragment Hexadecimal_digit : [0-9a-fA-F] ;
  fragment Hexadecimal_literal_character : Hexadecimal_digit | '_'  ;
  
negative.code:  ;
  fragment Decimal_fraction : '.' Decimal_literal ;
  fragment Decimal_exponent : Floating_point_e Sign? Decimal_literal ;
  fragment Hexadecimal_fraction : '.' Hexadecimal_digit Hexadecimal_literal_characters? ;
  fragment Hexadecimal_exponent : Floating_point_p Sign? Decimal_literal ;
  fragment Floating_point_e : 'e' | 'E' ;
  fragment Floating_point_p : 'p' | 'P' ;
  fragment Sign : '+' | '-' ;
  
  // GRAMMAR OF A STRING LITERAL
  
  String_literal : Static_string_literal /*| Interpolated_string_literal*/ ; // TODO add this in once interpolated strings work
  Static_string_literal : '"' Quoted_text? '"' ;
  fragment Quoted_text : Quoted_text_item Quoted_text? ;
  fragment 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
  ;
  
  //Interpolated_string_literal : '"' Interpolated_text? '"' ;
  //fragment Interpolated_text : Interpolated_text_item Interpolated_text? ;
  //fragment Interpolated_text_item : '\\(' expression ')' | Quoted_text_item ;
  //fragment Interpolated_text_item : interpolated_expression | Quoted_text_item ;
  //fragment interpolated_expression : '\\(' expression ')' ;
  
  fragment SPACE : [ \n\r\t\u000B\u000C\u0000];
  
  WS : SPACE+ -> channel(HIDDEN) ;
  
  Block_comment : '/*' (Block_comment|.)*? '*/' -> channel(HIDDEN) ; // nesting allow
  
  Line_comment : '//' .*? '\n' -> channel(HIDDEN) ;