anchor.diff:    ;
   
   pattern_suffix :
  -  ('@' must_specialize_type)? ('<' must_implement_type)? 
  +  ('@' 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); 
  +  : intent? 'var'? ident pattern_suffix {
  +      $$.ast = new_AST(AST_arg, &$n);
         if ($#1) $$.ast->add(new_AST(AST_var));
       }
     | constant
  
positive.code: char ::= "\'([^\'\\]|\\[^])*\'";
  
  base_int ::= "(0[0-7]*|(0x|0X)[0-9a-fA-F]+|[1-9][0-9]*)";
  int8	 ::= base_int "(b|B)";
  uint8	 ::= base_int "(u|U)(b|B)|(b|B)(u|U)";
  int16	 ::= base_int "(s|S)";
  uint16	 ::= base_int "(u|U)(s|S)|(s|S)(u|U)";
  int32	 ::= base_int "(w|W)";
  uint32	 ::= base_int "(u|U)(w|W)|(w|W)(u|U)";
  int64	 ::= base_int "(l|L)";
  uint64	 ::= base_int "(u|U)(l|L)|(u|U)(l|L)";
  int	 ::= base_int  "/[^\.]";
  uint	 ::= base_int "(u|U)";
  anyint	 : char | int8 | uint8 | int16 | uint16 | 
  	   int32 | uint32 | int64 | uint64 | int | uint
  { 
    $$.ast = new_AST(AST_const); 
    $$.ast->string = if1_cannonicalize_string($g->i, $n0.start_loc.s, $n0.end);
    $$.ast->constant_type = constant_type($n, d_symbols_v);
  };
  
  base_float ::= "(([0-9]+.[0-9]*|[0-9]*.[0-9]+)([eE][\-\+]?[0-9]+)?|[0-9]+[eE][\-\+]?[0-9]+)";
  float32	   ::= base_float "(f|F)";
  float64	   ::= base_float "(d|D)";
  float128   ::= base_float "(l|L)";
  float	   ::= base_float "/[^\.]";
  
  complex32  ::= float32 "i";
  complex64  ::= float64 "i";
  
negative.code:   ;
  
  unqualified_type_statement
    : ('type' | 'subtype') type_definition (',' type_definition)*
    | 'class' ident def_type_parameter_list? class_definition?
      { $$.ast = new_AST(AST_def_type, &$n);
        $$.ast->scope_kind = Scope_RECURSIVE; }
    | 'enum' ident enum_definition?
      { $$.ast = new_AST(AST_def_type, &$n);
        $$.ast->scope_kind = Scope_RECURSIVE; }
    ;
  
  type_definition : ident def_type_parameter_list? ('__name' string)?
      (':' must_implement)? ('=' type)? {
    $$.ast = new_AST(AST_def_type, &$n);
    if ($#2)
      $$.ast->builtin = if1_cannonicalize_string(
        $g->i, ${child 2, 0, 1}->start_loc.s+1, ${child 2, 0, 1}->end-1);
  