anchor.diff:          token FRACTFLOAT:                     r'\.[0-9]+([eE][+-][0-9]+)?'
           token STRING:       r'"([^"\\]+|\\.)*"'             # double quotes string
   
  -rule IdlSyntax: ( ';' | namespace )* EOF        {{ return yynamespaces; }}
  +rule IdlSyntax: ( ';' | namespace )* EOF        {{ return yy.ns_list; }}
   
   rule namespace:
           'namespace' IDENT                       {{ namespace_open (IDENT) }}
  
positive.code: 
  rule enumeration:
          ( 'enumeration' | 'enum' )
          IDENT '{'                               {{ evalues = []; global yyecounter; yyecounter = 1 }}
          enumeration_rest                        {{ evalues = enumeration_rest }}
          '}' ';'                                 {{ AIn (IDENT); yydict[IDENT] = tuple (evalues); yyecounter = None }}
  rule enumeration_rest:                          {{ evalues = [] }}
          ( ''                                    # empty
          | enumeration_value                     {{ evalues = evalues + [ add_evalue (enumeration_value) ] }}
  
negative.code: def ASi (string_candidate): # assert i18n string
      if not TSi (string_candidate): raise TypeError ('invalid translated string: ' + repr (string_candidate))
  def AIn (identifier):   # assert new identifier
      if yy.dict.has_key (identifier):  raise KeyError ('redefining existing identifier: %s' % identifier)
  
  %%
  parser IdlSyntaxParser:
  