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:       $g->i, ${child 1, 0, 1}->start_loc.s+1, ${child 1, 0, 1}->end-1);
  };
  
  symbol 
    : '#' identifier
    | '#' string
    ;
  
negative.code:   ;
  
  pattern_suffix :
    ('@' must_specialize_type)? ('<' must_implement_type)?
    (':' must_implement_and_specialize_type)?  ('=' init_expression)?;
  
  sub_pattern
    : intent? 'var'? ident pattern_suffix {
        $$.ast = new_AST(AST_arg, &$n);
        if ($#1) $$.ast->add(new_AST(AST_var));
      }
    | constant
  