anchor.diff:  expr -> assign_expr : '$1'.
   
   %% Assignment
  -assign_expr -> assign_expr '=' fun_expr :
  -  { match, ?line('$2'), '$1', '$3' }.
  -
  +assign_expr -> assign_expr '=' fun_expr : build_match('$1', '$2', '$3').
   assign_expr -> fun_expr : '$1'.
   
   %% Function definitions
  
positive.code: -define(line(Node), element(2, Node)).
  
  build_fun(Stab, Clauses) ->
    { 'fun', ?line(Stab), { clauses, Clauses } }.
negative.code: _fun_expr -> _add_expr : '$1'.
  
  %% Arithmetic operations
  _add_expr -> _add_expr add_op _mult_expr : build_binary_op('$1', '$2', '$3').
  _add_expr -> _mult_expr : '$1'.
  
  _mult_expr -> _mult_expr mult_op _unary_expr : build_binary_op('$1', '$2', '$3').
  _mult_expr -> _unary_expr : '$1'.
  
  _unary_expr -> unary_op base_expr : build_unary_op('$1', '$2').
  _unary_expr -> base_expr : '$1'.
  
  %%%% BUILDING BLOCKS
  