anchor.diff:  expr_max -> fun_expr : '$1'.
   expr_max -> try_expr : '$1'.
   
  +pat_expr -> pat_expr_200 '=' pat_expr : {match,?anno('$2'),'$1','$3'}.
  +pat_expr -> pat_expr_200 : '$1'.
  +
  +pat_expr_200 -> pat_expr_300 comp_op pat_expr_300 :
  +	?mkop2('$1', '$2', '$3').
  +pat_expr_200 -> pat_expr_300 : '$1'.
  +
  +pat_expr_300 -> pat_expr_400 list_op pat_expr_300 :
  +	?mkop2('$1', '$2', '$3').
  +pat_expr_300 -> pat_expr_400 : '$1'.
  +
  +pat_expr_400 -> pat_expr_400 add_op pat_expr_500 :
  +	?mkop2('$1', '$2', '$3').
  +pat_expr_400 -> pat_expr_500 : '$1'.
  +
  +pat_expr_500 -> pat_expr_500 mult_op pat_expr_600 :
  +	?mkop2('$1', '$2', '$3').
  +pat_expr_500 -> pat_expr_600 : '$1'.
  +
  +pat_expr_600 -> prefix_op pat_expr_700 :
  +	?mkop1('$1', '$2').
  +pat_expr_600 -> map_pat_expr : '$1'.
  +pat_expr_600 -> pat_expr_700 : '$1'.
  +
  +pat_expr_700 -> record_pat_expr : '$1'.
  +pat_expr_700 -> pat_expr_800 : '$1'.
  +
  +pat_expr_800 -> pat_expr_max : '$1'.
  +
  +pat_expr_max -> var : '$1'.
  +pat_expr_max -> atomic : '$1'.
  +pat_expr_max -> list : '$1'.
  +pat_expr_max -> binary : '$1'.
  +pat_expr_max -> tuple : '$1'.
  +pat_expr_max -> '(' pat_expr ')' : '$2'.
  +
  +map_pat_expr -> '#' map_tuple :
  +	{map, ?anno('$1'),'$2'}.
  +map_pat_expr -> pat_expr_max '#' map_tuple :
  +	{map, ?anno('$2'),'$1','$3'}.
  +map_pat_expr -> map_pat_expr '#' map_tuple :
  +	{map, ?anno('$2'),'$1','$3'}.
  +
  +record_pat_expr -> '#' atom '.' atom :
  +	{record_index,?anno('$1'),element(3, '$2'),'$4'}.
  +record_pat_expr -> '#' atom record_tuple :
  +	{record,?anno('$1'),element(3, '$2'),'$3'}.
   
   list -> '[' ']' : {nil,?anno('$1')}.
   list -> '[' expr tail : {cons,?anno('$1'),'$2','$3'}.
  
positive.code: 	{clause,?anno('$1'),element(3, '$1'),'$2','$3','$4'}.
  
  
  clause_args -> argument_list : element(1, '$1').
  
  clause_guard -> 'when' guard : '$2'.
  clause_guard -> '$empty' : [].
  
negative.code: 'spec' 'callback' % helper
  dot.
  
  Expect 0.
  
  Rootsymbol form.
  
  