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: %%  3 sexpr -> string : val('$1').
  %% 21 sexpr -> binary : val('$1').
  %%  4 sexpr -> '#\'' : make_fun(val('$1')).
  %%  5 sexpr -> '\'' sexpr : [quote,'$2'].
  %%  6 sexpr -> '`' sexpr : [backquote,'$2'].
  %%  7 sexpr -> ',' sexpr : [unquote,'$2'].
  
negative.code: -define(IS_MAP(T), false).
  -endif.
  
  -define(CATCH(E, Error), try E catch _:_ -> Error end).
  
  %% We define the syntax as an LL(1) and write/generate a parser for
  %% it. We also define the grammar with the same form as for yecc even
  %% though we have no automatic generator.
  %%
  %% Terminals
  %%    symbol number string binary fun '(' ')' '[' ']' '.' '\'' ',' '@' ',@' '`'
  %%       '#(' '#B(' '#M(' '#.' '#\''.
  %%
  %% Nonterminals form sexpr list list_tail proper_list .
  %%
  