anchor.diff:      [normalise(Head)|normalise(Tail)];
   normalise({tuple,_,Args}) ->
       list_to_tuple(normalise_list(Args));
  -%% Atom dot-notation, as in 'foo.bar.baz'
  -normalise({record_field,_,_,_}=A) ->
  -    case package_segments(A) of
  -	error -> erlang:error({badarg, A});
  -	As -> list_to_atom(packages:concat(As))
  -    end;
   %% Special case for unary +/-.
   normalise({op,_,'+',{char,_,I}}) -> I;
   normalise({op,_,'+',{integer,_,I}}) -> I;
  
positive.code: expr_700 -> record_expr : '$1'.
  expr_700 -> expr_800 : '$1'.
  
  expr_800 -> expr_900 ':' expr_max :
  	{remote,?line('$2'),'$1','$3'}.
  expr_800 -> expr_900 : '$1'.
  
  expr_900 -> '.' atom :
  	{record_field,?line('$1'),{atom,?line('$1'),''},'$2'}.
  expr_900 -> expr_900 '.' atom :
  	{record_field,?line('$2'),'$1','$3'}.
  expr_900 -> expr_max : '$1'.
  
  expr_max -> var : '$1'.
  expr_max -> atomic : '$1'.
  
negative.code: 
  -export([parse_form/1,parse_exprs/1,parse_term/1]).
  -export([normalise/1,abstract/1,tokens/1,tokens/2]).
  -export([abstract/2]).
  -export([inop_prec/1,preop_prec/1,func_prec/0,max_prec/0]).
  -export([set_line/2,get_attribute/2,get_attributes/1]).
  
  