anchor.diff:  
               fail(Line, Message)
       end.
  +
  +gen_struct_get({Var, Line, _Last, Attrs}) ->
  +    struct_get(Var, Line, Attrs).
  
positive.code: range -> signed_integer : '$1'.
  range -> bin_not integer: {op, line('$2'), op(unwrap('$1')), '$2'}.
  range -> prefix_op float: {op, line('$2'), op(unwrap('$1')), '$2'}.
  range -> add_op char: {op, line('$2'), op(unwrap('$1')), '$2'}.
  range -> bin_not char: {op, line('$2'), op(unwrap('$1')), '$2'}.
  range -> bool_not bool_lit: {op, line('$2'), op(unwrap('$1')), '$2'}.
  
negative.code: literal -> meta_astify          : '$1'.
  literal -> begin fn_block       : {block, line('$1'), '$2'}.
  literal -> struct               : '$1'.
  literal -> struct_ask           : '$1'.
  
  literal -> struct_get           : gen_struct_get('$1').
  
  literal -> struct_set           :
      {Var, Line, _Last, Attrs, Value} = '$1',
      struct_set(Var, Line, Attrs, Value).
  
  literal -> struct_call          : '$1'.
  
  struct_ask -> struct_get question:
      {Var, Line, _Last, Attrs} = '$1',
      struct_query(Var, Line, Attrs).
  
  struct -> open_block struct_items close_block :
      {tuple, line('$1'), [{atom, line('$1'), struct}, '$2']}.
  