anchor.diff:  
   include "c.g"
   c_extern_statement
  -  : 'extern' ('"c"' | '"C"') c_declarator ';' 
  +  : 'extern' ('"c"' | '"C"') c_declarator ';'
       { $$.ast = new_AST(AST_extern, &$n); }
     | 'extern' ('"c"' | '"C"') 'include' (string | bracket_string) ';'
       [ assert(!"unsupported"); ]
  
positive.code: 
  intent
    : 'const'
      { $$.ast = new_AST(AST_intent, &$n); 
        $$.ast->intent = Intent_const; }
    | 'in'
      { $$.ast = new_AST(AST_intent, &$n); 
        $$.ast->intent = Intent_in; }
    | 'out'
      { $$.ast = new_AST(AST_intent, &$n); 
        $$.ast->intent = Intent_out; }
    | 'inout'
      { $$.ast = new_AST(AST_intent, &$n); 
        $$.ast->intent = Intent_inout; }
    ;
  
  qualified_ident : global? (ident '::')* ident
    { $$.ast = new_AST(AST_qualified_ident, &$n); };
  
  global: '::' 
    { $$.ast = new_AST(AST_global, &$n); } ;
  
  control_flow
    : 'goto' ident 
      { $$.ast = new_AST(AST_goto, &$n); }
    | 'continue' ident? 
      { $$.ast = new_AST(AST_continue, &$n); }
    | 'break' ident? 
      { $$.ast = new_AST(AST_break, &$n); }
    | 'return' expression? 
      { $$.ast = new_AST(AST_return, &$n); }
    | 'while' '(' expression ')' unterminated_statement $right 2200
      { $$.ast = loop_AST($n0, $n2, 0, 0, $n4); }
  
negative.code:       $g->i, ${child 1, 0, 1}->start_loc.s+1, ${child 1, 0, 1}->end-1);
  };
  
  symbol
    : '#' identifier
    | '#' string
    ;
  