anchor.diff:  
   statements : statement+ ;
   
  -/** A naked '=' op is not part of a valid expression so I'm making it a statement;
  - *  see comment on binary_expression.  It also resolves ambiguity between
  - *  rule pattern's expression_pattern alt and pattern_initializer.
  -assignment_statement
  - : try_operator? prefix_expression assignment_operator try_operator? prefix_expression
  - ;
  - */
  -
   // GRAMMAR OF A LOOP STATEMENT
   
  -loop_statement : for_statement
  - | for_in_statement
  +loop_statement
  + : for_in_statement
    | while_statement
    | repeat_while_statement
    ;
   
  -// GRAMMAR OF A FOR STATEMENT
  -
  -for_statement
  - : 'for' for_init? ';' expression? ';' expression? code_block
  - | 'for' '(' for_init? ';' expression? ';' expression? ')' code_block
  - ;
  -
  -for_init : variable_declaration | expression_list  ;
  -
   // GRAMMAR OF A FOR_IN STATEMENT
   
   for_in_statement : 'for' 'case'? pattern 'in' expression where_clause? code_block  ;
   
   // GRAMMAR OF A WHILE STATEMENT
   
  -while_statement : 'while' condition_clause code_block  ;
  -
  -condition_clause
  - : expression
  - | expression ',' condition_list
  - | condition_list
  - | availability_condition ',' expression
  - ;
  +while_statement : 'while' condition_list code_block  ;
   
   condition_list : condition (',' condition)* ;
   condition
  
positive.code: constant_declaration : attributes? declaration_modifiers? 'let' pattern_initializer_list  ;
  pattern_initializer_list : pattern_initializer (',' pattern_initializer)* ;
  
  /** rule is ambiguous. can match "var x = 1" with x as pattern
   *  OR with x as expression_pattern.
   *  ANTLR resolves in favor or first choice: pattern is x, 1 is initializer.
   */
  pattern_initializer : pattern initializer? ;
  initializer : assignment_operator expression  ;
  
  // GRAMMAR OF A VARIABLE DECLARATION
  
  
negative.code:  | optional_binding_condition
   | expression
   ;
  
  case_condition : 'case' pattern initializer ;
  optional_binding_condition
   : 'let' pattern initializer
   | 'var' pattern initializer
   ;
  
  // GRAMMAR OF A REPEAT-WHILE STATEMENT
  
  repeat_while_statement : 'repeat' code_block 'while' expression ;
  
  // GRAMMAR OF A BRANCH STATEMENT
  
  branch_statement
   : if_statement
   | guard_statement
   | switch_statement
   ;
  
  // GRAMMAR OF AN IF STATEMENT
  
  if_statement : 'if' condition_list code_block else_clause? ;
  else_clause
   : 'else' code_block
   | 'else' if_statement
   ;
  
  // GRAMMAR OF A GUARD STATEMENT
  
  guard_statement : 'guard' condition_list 'else' code_block ;
  
  // GRAMMAR OF A SWITCH STATEMENT
  
  switch_statement : 'switch' expression '{' switch_cases? '}'  ;
  switch_cases : switch_case switch_cases? ;
  switch_case
   : case_label statements
   | default_label statements
   ;
  case_label : 'case' case_item_list ':' ;
  case_item_list
   : pattern where_clause?
   | pattern where_clause? ',' case_item_list
   ;
  default_label : 'default' ':' ;
  where_clause : 'where' where_expression ;
  where_expression : expression ;
  
  // GRAMMAR OF A LABELED STATEMENT
  
  labeled_statement
   : statement_label loop_statement
   | statement_label if_statement
   | statement_label switch_statement
   ;
  statement_label : label_name ':' ;
  label_name : identifier  ;
  
  // GRAMMAR OF A CONTROL TRANSFER STATEMENT
  
  control_transfer_statement
   : break_statement
   | continue_statement
   | fallthrough_statement
   | return_statement
  