'Get the next token.
@param want_leading: If True, return a WHITESPACE token if the
first character read is whitespace.  The default is False.
@type want_leading: bool
@param want_comment: If True, return a COMMENT token if the
first token read is a comment.  The default is False.
@type want_comment: bool
@rtype: Token object
@raises dns.exception.UnexpectedEnd: input ended prematurely
@raises dns.exception.SyntaxError: input was badly formed'

def get(self, want_leading=False, want_comment=False):

    if (not (self.ungotten_token is None)):
        token = self.ungotten_token
        self.ungotten_token = None
        if token.is_whitespace():
            if want_leading:
                return token
        elif token.is_comment():
            if want_comment:
                return token
        else:
            return token
    skipped = self.skip_whitespace()
    if (want_leading and (skipped > 0)):
        return Token(WHITESPACE, '    ')
    token = ''
    ttype = IDENTIFIER
    has_escape = False
    while True:
        c = self._get_char()
        if ((c == '') or (c in self.delimiters)):
            if ((c == '') and self.quoting):
                raise dns.exception.UnexpectedEnd
            if ((token == '') and (ttype != QUOTED_STRING)):
                if (c == '('):
                    self.multiline += 1
                    self.skip_whitespace()
                    continue
                elif (c == ')'):
                    if (not (self.multiline > 0)):
                        raise dns.exception.SyntaxError
                    self.multiline -= 1
                    self.skip_whitespace()
                    continue
                elif (c == '"'):
                    if (not self.quoting):
                        self.quoting = True
                        self.delimiters = _QUOTING_DELIMITERS
                        ttype = QUOTED_STRING
                        continue
                    else:
                        self.quoting = False
                        self.delimiters = _DELIMITERS
                        self.skip_whitespace()
                        continue
                elif (c == '\n'):
                    return Token(EOL, '\n')
                elif (c == ';'):
                    while 1:
                        c = self._get_char()
                        if ((c == '\n') or (c == '')):
                            break
                        token += c
                    if want_comment:
                        self._unget_char(c)
                        return Token(COMMENT, token)
                    elif (c == ''):
                        if self.multiline:
                            raise dns.exception.SyntaxError('unbalanced    parentheses')
                        return Token(EOF)
                    elif self.multiline:
                        self.skip_whitespace()
                        token = ''
                        continue
                    else:
                        return Token(EOL, '\n')
                else:
                    token = c
                    ttype = DELIMITER
            else:
                self._unget_char(c)
            break
        elif self.quoting:
            if (c == '\\'):
                c = self._get_char()
                if (c == ''):
                    raise dns.exception.UnexpectedEnd
                if c.isdigit():
                    c2 = self._get_char()
                    if (c2 == ''):
                        raise dns.exception.UnexpectedEnd
                    c3 = self._get_char()
                    if (c == ''):
                        raise dns.exception.UnexpectedEnd
                    if (not (c2.isdigit() and c3.isdigit())):
                        raise dns.exception.SyntaxError
                    c = chr((((int(c) * 100) + (int(c2) * 10)) + int(c3)))
            elif (c == '\n'):
                raise dns.exception.SyntaxError('newline    in    quoted    string')
        elif (c == '\\'):
            token += c
            has_escape = True
            c = self._get_char()
            if ((c == '') or (c == '\n')):
                raise dns.exception.UnexpectedEnd
        token += c
    if ((token == '') and (ttype != QUOTED_STRING)):
        if self.multiline:
            raise dns.exception.SyntaxError('unbalanced    parentheses')
        ttype = EOF
    return Token(ttype, token, has_escape)
