def _parse_operator(self) -> ASTOperator:
    self.skip_ws()
    if self.match(_operator_re):
        return ASTOperatorBuildIn(self.matched_text)
    for op in ('new', 'delete'):
        if (not self.skip_word(op)):
            continue
        self.skip_ws()
        if self.skip_string('['):
            self.skip_ws()
            if (not self.skip_string(']')):
                self.fail((('Expected "]" after  "operator ' + op) + '["'))
            op += '[]'
        return ASTOperatorBuildIn(op)
    if self.skip_string('""'):
        self.skip_ws()
        if (not self.match(identifier_re)):
            self.fail('Expected user-defined literal suffix.')
        identifier = ASTIdentifier(self.matched_text)
        return ASTOperatorLiteral(identifier)
    type = self._parse_type(named=False, outer='operatorCast')
    return ASTOperatorType(type)
def _parse_operator(self) -> ASTOperator:
    self.skip_ws()
    if self.match(_operator_re):
        return ASTOperatorBuildIn(self.matched_text)
    for op in ('new', 'delete'):
        if (not self.skip_word(op)):
            continue
        self.skip_ws()
        if self.skip_string('['):
            self.skip_ws()
            if (not self.skip_string(']')):
                self.fail((('Expected "]" after  "operator ' + op) + '["'))
            op += '[]'
        return ASTOperatorBuildIn(op)
    if self.skip_string(''):
        self.skip_ws()
        if (not self.match(identifier_re)):
            self.fail('Expected user-defined literal suffix.')
        identifier = ASTIdentifier(self.matched_text)
        return ASTOperatorLiteral(identifier)
    type = self._parse_type(named=False, outer='operatorCast')
    return ASTOperatorType(type)