anchor.diff:  
   intent
     : 'const'
  -    { $$.ast = new_AST(AST_intent, &$n); 
  +    { $$.ast = new_AST(AST_intent, &$n);
         $$.ast->intent = Intent_const; }
     | 'in'
  -    { $$.ast = new_AST(AST_intent, &$n); 
  +    { $$.ast = new_AST(AST_intent, &$n);
         $$.ast->intent = Intent_in; }
     | 'out'
  -    { $$.ast = new_AST(AST_intent, &$n); 
  +    { $$.ast = new_AST(AST_intent, &$n);
         $$.ast->intent = Intent_out; }
     | 'inout'
  -    { $$.ast = new_AST(AST_intent, &$n); 
  +    { $$.ast = new_AST(AST_intent, &$n);
         $$.ast->intent = Intent_inout; }
     ;
   
   qualified_ident : global? (ident '::')* ident
     { $$.ast = new_AST(AST_qualified_ident, &$n); };
   
  -global: '::' 
  +global: '::'
     { $$.ast = new_AST(AST_global, &$n); } ;
   
   control_flow
  -  : 'goto' ident 
  +  : 'goto' ident
       { $$.ast = new_AST(AST_goto, &$n); }
  -  | 'continue' ident? 
  +  | 'continue' ident?
       { $$.ast = new_AST(AST_continue, &$n); }
  -  | 'break' ident? 
  +  | 'break' ident?
       { $$.ast = new_AST(AST_break, &$n); }
  -  | 'return' expression? 
  +  | 'return' expression?
       { $$.ast = new_AST(AST_return, &$n); }
     | 'while' '(' expression ')' unterminated_statement $right 2200
       { $$.ast = loop_AST($n0, $n2, 0, 0, $n4); }
  
positive.code: def_type_parameter
    : ident
      { $$.ast = new_AST(AST_def_type_param, &$n); }
    | ident ':' type $binary_left 700 
      { $$.ast = new_AST(AST_def_type_param, &$n); }
    ;
  
  type
    : type vector_type 	$unary_left 800
      { $$.ast = new_AST(AST_vector_type, &$n); }
    | type '*'		$unary_left 700
      { $$.ast = new_AST(AST_ref_type, &$n); }
    | type '*' type 	$binary_left 600
      { $$.ast = new_AST(AST_record_type, &$n); }
    | type '|' type	$binary_left 500
      { $$.ast = new_AST(AST_sum_type, &$n); }
    | type '->' type	$binary_left 400
      { $$.ast = new_AST(AST_fun_type, &$n); }
    | ident 'of' type	$binary_right 300
      { $$.ast = new_AST(AST_tagged_type, &$n); }
    | type type_parameter_list $unary_left 200
      { $$.ast = new_AST(AST_type_application, &$n); }
  
negative.code: identifier : "[a-zA-Z_][a-zA-Z0-9_]*" $term -1;
  
  ident : identifier {
    $$.ast = new_AST(AST_ident, &$n);
    $$.ast->string = if1_cannonicalize_string($g->i, $n0.start_loc.s, $n0.end);
  };
  
  