anchor.diff:      left='$1', 
       right='$3'
     }.
  -match_expr -> match_expr rebind_op comp_expr :
  +match_expr -> match_expr rebind_op bool_expr :
     #binary_op{
       line=?line('$1'), 
       type=?op('$2'), 
       left='$1', 
       right='$3'
     }.
  -match_expr -> comp_expr : '$1'.
  +match_expr -> bool_expr : '$1'.
  +
  +bool_expr -> bool_expr bool_op comp_expr : 
  +  #binary_op{
  +    line=?line('$1'), 
  +    type=?op('$2'), 
  +    left='$1', 
  +    right='$3'
  +  }.
  +bool_expr -> comp_expr : '$1'.
   
   comp_expr -> range_expr comp_op range_expr : 
     #binary_op{
  
positive.code:   max_expr
    function_identifier
    rebind_op
    comp_op
    add_op
    mult_op
  
negative.code: dict -> '{' '}' :                #dict{line=?line('$1'), elements=[]}.
  dict -> '{' dict_entries '}' :   #dict{line=?line('$1'), elements='$2'}.
  
  dict_entries -> bool_expr '=>' expr : [{'$1','$3'}]. % FIXME: change add_expr to 1 below match
  dict_entries -> bool_expr '=>' expr ',' dict_entries : [{'$1','$3'}|'$5'].
  
  Erlang code.
  
  