tok.py 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546
  1. class Token:
  2. """
  3. Class representing a token.
  4. kind: the kind of token, e.g. filename, number, other
  5. value: specific instance value, e.g. "/tmp/foo.c", or 5
  6. offset: byte offset from start of parse string
  7. """
  8. def __init__(self, kind, value=None, offset=None):
  9. self.offset = offset
  10. self.kind = kind
  11. self.value = value
  12. def __eq__(self, o):
  13. """ '==', but it's okay if offset is different"""
  14. if isinstance(o, Token):
  15. # Both are tokens: compare kind and value
  16. # It's okay if offsets are different
  17. return (self.kind == o.kind)
  18. else:
  19. return self.kind == o
  20. def __repr__(self):
  21. return str(self.kind)
  22. def __repr1__(self, indent, sib_num=''):
  23. return self.format(line_prefix=indent, sib_num=sib_num)
  24. def __str__(self):
  25. return self.format(line_prefix='')
  26. def format(self, line_prefix='', sib_num=None):
  27. if sib_num:
  28. sib_num = "%d." % sib_num
  29. else:
  30. sib_num = ''
  31. prefix = ('%s%s' % (line_prefix, sib_num))
  32. offset_opname = '%5s %-10s' % (self.offset, self.kind)
  33. if not self.value:
  34. return "%s%s" % (prefix, offset_opname)
  35. return "%s%s %s" % (prefix, offset_opname, self.value)
  36. def __hash__(self):
  37. return hash(self.kind)
  38. def __getitem__(self, i):
  39. raise IndexError