anchor.diff:  block_expr -> dot_do_identifier do_block : build_identifier('$1', '$2').
   block_expr -> dot_identifier call_args_no_parens_strict do_block : build_identifier('$1', '$2' ++ '$3').
   
  -fn_expr -> fn_eol stab end_eol : build_fn('$1', build_stab(lists:reverse('$2'))).
  -fn_expr -> call_expr : '$1'.
  -
  -call_expr -> dot_punctuated_identifier call_args_no_parens_strict : build_identifier('$1', '$2').
  -call_expr -> dot_op_identifier call_args_no_parens_strict : build_identifier('$1', '$2').
  -call_expr -> dot_identifier call_args_no_parens_strict : build_identifier('$1', '$2').
  -call_expr -> dot_punctuated_identifier : build_identifier('$1', []).
  -call_expr -> dot_do_identifier : build_identifier('$1', nil).
  -call_expr -> var : build_identifier('$1', nil).
  -call_expr -> max_expr : '$1'.
  -
  +no_parens_expr -> dot_punctuated_identifier call_args_no_parens_strict : build_identifier('$1', '$2').
  +no_parens_expr -> dot_op_identifier call_args_no_parens_strict : build_identifier('$1', '$2').
  +no_parens_expr -> dot_identifier call_args_no_parens_strict : build_identifier('$1', '$2').
  +no_parens_expr -> identifier_expr : '$1'.
  +
  +identifier_expr -> dot_punctuated_identifier : build_identifier('$1', []).
  +identifier_expr -> dot_do_identifier : build_identifier('$1', nil).
  +identifier_expr -> var : build_identifier('$1', nil).
  +identifier_expr -> max_expr : '$1'.
  +
  +max_expr -> fn_eol stab end_eol : build_fn('$1', build_stab(lists:reverse('$2'))).
  +max_expr -> open_paren stab close_paren : build_stab(lists:reverse('$2')).
   max_expr -> bracket_expr : '$1'.
   max_expr -> parens_call call_args_parens : build_identifier('$1', '$2').
   max_expr -> parens_call call_args_parens call_args_parens : build_nested_parens('$1', '$2', '$3').
  -max_expr -> dot_ref : '$1'.
  +max_expr -> dot_alias : '$1'.
   max_expr -> base_expr : '$1'.
  -max_expr -> open_paren stab close_paren : build_stab(lists:reverse('$2')).
   
   bracket_expr -> dot_bracket_identifier bracket_access : build_access(build_identifier('$1', nil), '$2').
   bracket_expr -> max_expr bracket_access : build_access('$1', '$2').
  
positive.code: dot_identifier -> identifier : '$1'.
  dot_identifier -> matched_expr dot_op identifier : build_dot('$2', '$1', '$3').
  
  dot_ref -> matched_expr dot_op aliases : build_dot_ref('$2', '$1', '$3').
  
  dot_op_identifier -> op_identifier : '$1'.
  dot_op_identifier -> matched_expr dot_op op_identifier : build_dot('$2', '$1', '$3').
  
negative.code:   stab stab_eol stab_expr stab_maybe_expr
    kw_eol kw_expr kw_comma kw_base
    matched_kw_expr matched_kw_comma matched_kw_base
    dot_op dot_alias dot_identifier dot_op_identifier dot_do_identifier
    dot_paren_identifier dot_punctuated_identifier dot_bracket_identifier
    var list bracket_access bit_string tuple
    do_block fn_eol do_eol end_eol block_eol block_item block_list
  