anchor.diff:  reduce(21, [T|Vs]) -> [val(T)|Vs];              %s->binary
   reduce(4, [T|Vs]) ->                            %s->fun
       [make_fun(val(T))|Vs];
  +reduce(22, [S,D|Vs]) ->                         %s->#. s
  +    [eval_expr(line(D), S)|Vs];
   reduce(5, [S,_|Vs]) -> [[quote,S]|Vs];          %s->' s
   reduce(6, [S,_|Vs]) -> [[backquote,S]|Vs];      %s->` s
   reduce(7, [S,_|Vs]) -> [[unquote,S]|Vs];        %s->, s
  
positive.code: parse1(#lp{l=none}=Lp, [T|_]=Ts) ->             %Guarantee a start line
      parse1(Lp#lp{l=line(T)}, Ts);
  parse1(#lp{l=L,st=St0,vs=Vs0}, Ts) ->
      case parse2(Ts, St0, Vs0) of
          {done,Rest,[],[V]} -> {ok,L,V,Rest};
          {more,[],St1,Vs1} -> {more,#lp{l=L,st=St1,vs=Vs1}};
          {error,Line,Error,Rest,_,_} ->
              %% Can't really continue from errors here.
              {error,{Line,?MODULE,Error},Rest}
      end.
  
  %% parse2(Tokens, StateStack, ValueStack) ->
  
negative.code: %%  9 sexpr -> ( list ) : '$2'.
  %% 10 sexpr -> [ list ] : '$2'.
  %% 11 sexpr -> '#(' proper_list ')' : list_to_tuple('$2').
  %% 12 sexpr -> '#B(' proper_list ')' : make_bin(line('$1'), '$2').
  %% 13 sexpr -> '#M(' proper_list ')' : make_map(line('$1'), '$2').
  %% 14 list -> sexpr list_tail : ['$1'|'$2].
  %% 15 list -> empty : [].
  %% 16 list_tail -> sexpr list_tail : ['$1'|'$2'].
  