def __init__(self, table, raw=False): self._table = table self._raw = raw self._updates = dict() token_char = p(one_of, letters + digits + '.-_') self._token = as_string(p(many, token_char)) self._phrase = p(choice, quoted, self._token) self._expr_parser = p(many, p(choice, p(one_of, ','), self._ParsePhrase))
def __init__(self, schema, parse_phrase_func=None): self._schema = schema if not parse_phrase_func: parse_phrase_func = self._ParsePhrase self._op_classes = {'|': Union, '-': Difference, '&': Intersection, '+': PositionalIntersection} self._operator = p(lexeme, p(one_of, u''.join(self._op_classes.keys()))) token_char = p(one_of, letters + digits + ':_') self._token = as_string(p(many1, token_char)) self._phrase = p(choice, quoted, self._token) self._param_parser = p(choice, self._ParseParam, quoted, self._token) self._term_parser = p(choice, self._ParseParenthetical, parse_phrase_func) self._expr_parser = p(choice, self._ParseOp, self._term_parser)
else: self.right = right return self def __repr__(self): return "%s(%r, %r, %r)" % (self.__class__.__name__, self.left, self.op, self.right) def evaluate(self): return operator_functions[self.op](self.left.evaluate(), self.right.evaluate()) # parser digits = partial(lexeme, as_string(partial(many1, partial(one_of, digit_chars)))) operator = partial(lexeme, partial(one_of, operators)) @tri def bin_op(): left = term() op = operator() commit() right = expression() whitespace() n = BinaryNode(left, op) return n.merge(right) @tri def parenthetical():
return right else: self.right = right return self def __repr__(self): return "%s(%r, %r, %r)" % (self.__class__.__name__, self.left, self.op, self.right) def evaluate(self): return operator_functions[self.op](self.left.evaluate(), self.right.evaluate()) # parser digits = partial(lexeme, as_string(partial(many1, partial(one_of, digit_chars)))) operator = partial(lexeme, partial(one_of, operators)) @tri def bin_op(): left = term() op = operator() commit() right = expression() whitespace() n = BinaryNode(left, op) return n.merge(right)