Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- var[3] = 0 and var[2] = 1
- var[0] = 1 and var[2] = 0 and var[3] = 1
- ...
- #!/usr/bin/env python
- from pyparsing import Word, alphas, nums, infixNotation, opAssoc
- class BoolAnd():
- def __init__(self, pattern):
- self.args = pattern[0][0::2]
- def __bool__(self):
- return all(bool(a) for a in self.args)
- __nonzero__ = __bool__
- class BoolEqual():
- def __init__(self, pattern):
- self.bit_offset = int(pattern[0][1])
- self.value = int(pattern[0][-1])
- def __bool__(self):
- return True if (0xf >> self.bit_offset) & 0x1 == self.value else False # for now, let's assume var == 0xf
- __nonzero__ = __bool__
- variable_name = 'var'
- bit_access = variable_name + '[' + Word(nums) + ']'
- multibit_access = variable_name + '[' + Word(nums) + ':' + Word(nums) + ']'
- value = Word(nums)
- operand = bit_access | multibit_access | Word(nums)
- expression = infixNotation(operand,
- [
- ('=', 2, opAssoc.LEFT, BoolEqual),
- ('AND', 2, opAssoc.LEFT, BoolAnd),
- ])
- p = expression.parseString('var[3] = 1 AND var[1] = 0', True)
- print 'SUCCESS' if bool(p) else 'FAIL'
Advertisement
Add Comment
Please, Sign In to add comment