code: def t_ANY_ID(self, token):
          r'[a-zA-Z_][a-zA-Z0-9_-]*'
          if token.value in self.KEYWORDS:
              if (token.value == 'annotation_type') and self.cur_indent:
                  # annotation_type was added as a reserved keyword relatively
                  # late, when there could be identifers with the same name
                  # in existing specs. because annotation_type-the-keyword can
                  # only be used at the beginning of a non-indented line, this
                  # check lets both the keyword and the identifer coexist and
                  # maintains backward compatibility.
                  # Note: this is kind of a hack, and we should get rid of it if
                  # the lexer gets better at telling keywords from identifiers in general.
                  return token
              token.type = self.RESERVED.get(token.value, 'KEYWORD')
              return token
          else:
              return tokef t_ANY_ID(self, token):
          r'[a-zA-Z_][a-zA-Z0-9_-]*'
          if token.value in self.KEYWORDS:
              if (token.value == 'annotation_type') and self.cur_indent:
                  # annotation_type was added as a reserved keyword relatively
                  # late, when there could be identifers with the same name
                  # in existing specs. because annotation_type-the-keyword can
                  # only be used at the beginning of a non-indented line, this
                  # check lets both the keyword and the identifer coexist and
                  # maintains backward compatibility.
                  # Note: this is kind of a hack, and we should get rid of it if
                  # the lexer gets better at telling keywords from identifiers in general.
                  return token
              token.type = self.RESERVED.get(token.value, 'KEYWORD')
              return token
          else:
              return token
docs: r'[a-zA-Z_][a-zA-Z0-9_-]*