Guest User

Untitled

a guest
Mar 29th, 2017
72
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.10 KB | None | 0 0
  1. var[3] = 0 and var[2] = 1
  2. var[0] = 1 and var[2] = 0 and var[3] = 1
  3. ...
  4.  
  5. #!/usr/bin/env python
  6. from pyparsing import Word, alphas, nums, infixNotation, opAssoc
  7.  
  8. class BoolAnd():
  9. def __init__(self, pattern):
  10. self.args = pattern[0][0::2]
  11.  
  12. def __bool__(self):
  13. return all(bool(a) for a in self.args)
  14.  
  15. __nonzero__ = __bool__
  16.  
  17.  
  18. class BoolEqual():
  19. def __init__(self, pattern):
  20. self.bit_offset = int(pattern[0][1])
  21. self.value = int(pattern[0][-1])
  22.  
  23. def __bool__(self):
  24. return True if (0xf >> self.bit_offset) & 0x1 == self.value else False # for now, let's assume var == 0xf
  25.  
  26. __nonzero__ = __bool__
  27.  
  28.  
  29.  
  30.  
  31. variable_name = 'var'
  32. bit_access = variable_name + '[' + Word(nums) + ']'
  33. multibit_access = variable_name + '[' + Word(nums) + ':' + Word(nums) + ']'
  34. value = Word(nums)
  35.  
  36. operand = bit_access | multibit_access | Word(nums)
  37.  
  38. expression = infixNotation(operand,
  39. [
  40. ('=', 2, opAssoc.LEFT, BoolEqual),
  41. ('AND', 2, opAssoc.LEFT, BoolAnd),
  42. ])
  43.  
  44.  
  45. p = expression.parseString('var[3] = 1 AND var[1] = 0', True)
  46.  
  47. print 'SUCCESS' if bool(p) else 'FAIL'
Advertisement
Add Comment
Please, Sign In to add comment