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
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")
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")
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")
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