anchor.diff:      Line = line('$1'),
       {bin_type_element, Line, {var, Line, '_'}, '$2'}.
   
  -bin_type_def -> bin_type add_op bin_type_def :
  +bin_type_def -> bin_type add_op bin_type_def:
       assert_atom('$2', '-'),
       ['$1'|'$3'].
  -bin_type_def -> bin_type : ['$1'].
  -
  -bin_type -> atom split_op integer : {unwrap('$1'), unwrap('$3')}.
  -bin_type -> atom : unwrap('$1').
  +bin_type_def -> bin_type: ['$1'].
  +
  +bin_type -> atom split_op integer: {unwrap('$1'), unwrap('$3')}.
  +bin_type -> atom: unwrap('$1').
   
   Erlang code.
   
  
positive.code: 
  % records
  
  rec -> atom dot var open_list atom close_list : {'record_field', line('$2'), '$3', unwrap('$1'), '$5'}.
  
  rec_set -> atom dot var open_list close_list :
      {'record', line('$2'), '$3', unwrap('$1'), []}.
  
  rec_set -> atom dot var open_list attr_sets close_list :
      {'record', line('$2'), '$3', unwrap('$1'), '$5'}.
  
  rec_new -> atom open_list sep close_list :
      {'record', line('$2'), unwrap('$1'), []}.
  
  rec_new -> atom open_list attr_sets close_list :
      {'record', line('$2'), unwrap('$1'), '$3'}.
  
  attr_sets -> attr_set sep attr_sets : ['$1'|'$3'].
  
negative.code: 
  % function call
  
  fun_call -> atom fn_parameters: {call, line('$1'), '$1', '$2'}.
  fun_call -> var fn_parameters : {call, line('$1'), '$1', '$2'}.
  fun_call -> atom dot atom fn_parameters:
      {call, line('$2'), {remote, line('$2'), '$1', '$3'}, '$4'}.
  fun_call -> atom dot var fn_parameters:
      {call, line('$2'), {remote, line('$2'), '$1', '$3'}, '$4'}.
  fun_call -> var dot atom fn_parameters:
      {call, line('$2'), {remote, line('$2'), '$1', '$3'}, '$4'}.
  fun_call -> var dot var fn_parameters:
      {call, line('$2'), {remote, line('$2'), '$1', '$3'}, '$4'}.
  fun_call -> fun_call fn_parameters: {call, line('$1'), '$1', '$2'}.
  
  % function arity
  
  farity -> fn atom split_op integer:
      {'fun', line('$1'), {function, unwrap('$2'), unwrap('$4')}}.
  
  farity -> fn atom dot atom split_op integer:
      {'fun', line('$1'), {function, unwrap('$2'), unwrap('$4'), unwrap('$6')}}.
  
  % list comprehension
  