Пример #1
0
def term():
    """
    """
    token = StringStart() + dice() + StringEnd() \
          | StringStart() + dice() + operator() + integer() + StringEnd() \
          | StringStart() + dice() + flags() + StringEnd() \
          | StringStart() + dice() + flags() + operator() + integer() + StringEnd()
    token.setName("term")
    token.setResultsName("term")
    return token
Пример #2
0
    def parse(self, string):
        # An integer value
        integer = Word(nums)
        integer.setParseAction(Integer.parse)
        integer.setName("integer")

        # An expression in dice notation
        expression = StringStart() + operatorPrecedence(integer, [
            (CaselessLiteral('d').suppress(), 2, opAssoc.LEFT, Dice.parse_binary),
            (CaselessLiteral('d').suppress(), 1, opAssoc.RIGHT, Dice.parse_unary),

            (Literal('/').suppress(), 2, opAssoc.LEFT, Div.parse),
            (Literal('*').suppress(), 2, opAssoc.LEFT, Mul.parse),
            (Literal('-').suppress(), 2, opAssoc.LEFT, Sub.parse),
            (Literal('+').suppress(), 2, opAssoc.LEFT, Add.parse),

            (CaselessLiteral('t').suppress(), 1, opAssoc.LEFT, Total.parse),
            (CaselessLiteral('s').suppress(), 1, opAssoc.LEFT, Sort.parse),

            (Literal('^').suppress(), 2, opAssoc.LEFT, Keep.parse),
            (Literal('v').suppress(), 2, opAssoc.LEFT, Drop.parse),
        ]) + StringEnd()
        expression.setName("expression")
Пример #3
0
        this <<= (operator_expression | last)
        last = this

    # Set the full expression and return it
    expression <<= last
    return expression

# An integer value
integer = Word(nums)
integer.setParseAction(Integer.parse)
integer.setName("integer")

# An expression in dice notation
expression = StringStart() + operatorPrecedence(integer, [
    (CaselessLiteral('d').suppress(), 2, opAssoc.LEFT, Dice.parse_binary),
    (CaselessLiteral('d').suppress(), 1, opAssoc.RIGHT, Dice.parse_unary),

    (Literal('/').suppress(), 2, opAssoc.LEFT, Div.parse),
    (Literal('*').suppress(), 2, opAssoc.LEFT, Mul.parse),
    (Literal('-').suppress(), 2, opAssoc.LEFT, Sub.parse),
    (Literal('+').suppress(), 2, opAssoc.LEFT, Add.parse),

    (CaselessLiteral('t').suppress(), 1, opAssoc.LEFT, Total.parse),
    (CaselessLiteral('s').suppress(), 1, opAssoc.LEFT, Sort.parse),

    (Literal('^').suppress(), 2, opAssoc.LEFT, Keep.parse),
    (Literal('v').suppress(), 2, opAssoc.LEFT, Drop.parse),
]) + StringEnd()
expression.setName("expression")
Пример #4
0
        last = this

    # Set the full expression and return it
    expression <<= last
    return expression

# An integer value
integer = Word(nums)
integer.setParseAction(Integer.parse)
integer.setName("integer")

# An expression in dice notation
expression = StringStart() + operatorPrecedence(integer, [
    (CaselessLiteral('d').suppress(), 2, opAssoc.LEFT, Dice.parse_binary),
    (CaselessLiteral('d').suppress(), 1, opAssoc.RIGHT, Dice.parse_unary),

    (Literal('/').suppress(), 2, opAssoc.LEFT, Div.parse),
    (Literal('*').suppress(), 2, opAssoc.LEFT, Mul.parse),
    (Literal('-').suppress(), 2, opAssoc.LEFT, Sub.parse),
    (Literal('+').suppress(), 2, opAssoc.LEFT, Add.parse),
    (Word('+-').suppress(), 1, opAssoc.RIGHT, AddEvenSubOdd.parse),
    (Word('+-').suppress(), 2, opAssoc.LEFT, AddEvenSubOdd.parse),

    (CaselessLiteral('t').suppress(), 1, opAssoc.LEFT, Total.parse),
    (CaselessLiteral('s').suppress(), 1, opAssoc.LEFT, Sort.parse),

    (Literal('^').suppress(), 2, opAssoc.LEFT, Keep.parse),
    (Literal('v').suppress(), 2, opAssoc.LEFT, Drop.parse),
]) + StringEnd()
expression.setName("expression")
Пример #5
0
and_.setParseAction(lambda s, l, t: pureldap.LDAPFilter_and(t))
and_.setName("and")
filtercomp = and_ | or_ | not_ | item
filtercomp.setName("filtercomp")
filter_ << (
    Suppress(Literal("(").leaveWhitespace())
    + filtercomp
    + Suppress(Literal(")").leaveWhitespace())
)
filter_.setName("filter")
filtercomp.leaveWhitespace()
filter_.leaveWhitespace()

toplevel = StringStart().leaveWhitespace() + filter_ + StringEnd().leaveWhitespace()
toplevel.leaveWhitespace()
toplevel.setName("toplevel")


def parseFilter(s):
    """
    Converting source string to pureldap.LDAPFilter

    Source string is converted to unicode as pyparsing cannot parse bytes
    objects with the rules declared in this module.
    """
    s = to_unicode(s)
    try:
        x = toplevel.parseString(s)
    except ParseException as e:
        raise InvalidLDAPFilter(e.msg, e.loc, e.line)
    assert len(x) == 1