def _parse(self):

        # self.log.debug("Parsing IMAP message: '%s'" % self.input)

        # We must always begin with a tag. Pull it off. If this fails it will
        # raise an exception that is caught by our caller.
        #
        self.tag = self._p_re(_tag_re, syntax_error = "missing expected " \
                              "tag that prefixes a command")
        self._p_simple_string(' ', syntax_error = "expected ' ' after tag")
        self.command = self._p_re(_atom_re,
                                  syntax_error = "expected an atom for " \
                                  "the command name").lower()

        # At this point we have the actual IMAP command being used. We
        # need to verify that it is a valid IMAP command (and raise an
        # exception if it is not.) For every known command we
        # can find a function in our class whose name is derived from the
        # command.
        #
        if not hasattr(self, '_p_%s' % self.command):
            raise UnknownCommand(value = self.command)

        # Okay. The command was a known command. Now we attempt to parse
        # its arguments based on the command.
        #
        getattr(self, '_p_%s' % self.command)()

        # NOTE: the asynchat we are using swallows the line terminators we tell
        #       it to look for so the CRLF is not part of our input string. We
        #       are leaving this code here commented out in case we change our
        #       mind how this is going to work.
        #
        # # commands are terminated by a CRLF
        # self._p_simple_string('\r\n', syntax_error = "missing expected <cr>" \
        #                       "<lf> at the end of the message")

        return

    #######################################################################
    #
Parse a command from the input stream. This is the highest level
dataset/ETHPy150Open scanner/asimap/asimap/parse.py/IMAPClientCommand._parse