Example #1
0
def parse_expression(q):
    if q[0] == "(":
        lhs, q = parse_boolean(q[1:])
        q = _expect(")", q)
        return lhs, q
    elif q[0] == "attr":
        lhs, q = parse_attribute(_expect("attr", q))
    elif "." in q[0]:
        raise StringParseError("Found a . in %s; missing attr?" % q[0])
    else:
        for op, kls in sorted(UNARY_BOOLEAN_OPERATORS.iteritems(), key=len, reverse=True):
            if op == q[0]:
                exp, rest = parse_expression(_expect(op, q))
                return kls(exp), rest
        else:
            lhs = q[0]
            q = q[1:]
    for op, kls in sorted(SUFFIX_OPERATORS.iteritems(), key=len, reverse=True):
        if q[0] == op:
            return kls(lhs), q[1:]
    for op, kls in sorted(INFIX_OPERATORS.iteritems(), key=len, reverse=True):
        if q[0] == op:
            return kls(lhs, q[1]), q[2:]
    else:
        raise UnexpectedTokenError(q)
Example #2
0
def parse_expression(q):
    if q[0] == "(":
        lhs, q = parse_boolean(q[1:])
        q = _expect(")", q)
        return lhs, q
    elif q[0] == "attr":
        lhs, q = parse_attribute(_expect("attr", q))
    elif "." in q[0]:
        raise StringParseError("Found a . in %s; missing attr?" % q[0])
    else:
        for op, kls in sorted(UNARY_BOOLEAN_OPERATORS.iteritems(),
                              key=len,
                              reverse=True):
            if op == q[0]:
                exp, rest = parse_expression(_expect(op, q))
                return kls(exp), rest
        else:
            lhs = q[0]
            q = q[1:]
    for op, kls in sorted(SUFFIX_OPERATORS.iteritems(), key=len, reverse=True):
        if q[0] == op:
            return kls(lhs), q[1:]
    for op, kls in sorted(INFIX_OPERATORS.iteritems(), key=len, reverse=True):
        if q[0] == op:
            return kls(lhs, q[1]), q[2:]
    else:
        raise UnexpectedTokenError(q)