code: def t_prepro_ID(self, t):
          r'[_a-zA-Z][_a-zA-Z0-9]*'  # preprocessor directives
          t.type = reserved_directives.get(t.value.lower(), 'ID')
          if t.type == 'DEFINE':
              t.lexer.begin('define')
          elif t.type == 'PRAGMA':
              t.lexer.begin('pragma')
          return f t_prepro_ID(self, t):
          r'[_a-zA-Z][_a-zA-Z0-9]*'  # preprocessor directives
          t.type = reserved_directives.get(t.value.lower(), 'ID')
          if t.type == 'DEFINE':
              t.lexer.begin('define')
          elif t.type == 'PRAGMA':
              t.lexer.begin('pragma')
          return t
docs: r'[_a-zA-Z][_a-zA-Z0-9]*