| @@ -3,13 +3,12 @@ from .utils import Serialize | |||||
| ###{standalone | ###{standalone | ||||
| class Symbol(Serialize): | class Symbol(Serialize): | ||||
| __slots__ = ('name', '_hash') | |||||
| __slots__ = ('name',) | |||||
| is_term = NotImplemented | is_term = NotImplemented | ||||
| def __init__(self, name): | def __init__(self, name): | ||||
| self.name = name | self.name = name | ||||
| self._hash = hash(self.name) | |||||
| def __eq__(self, other): | def __eq__(self, other): | ||||
| assert isinstance(other, Symbol), other | assert isinstance(other, Symbol), other | ||||
| @@ -19,7 +18,7 @@ class Symbol(Serialize): | |||||
| return not (self == other) | return not (self == other) | ||||
| def __hash__(self): | def __hash__(self): | ||||
| return self._hash | |||||
| return hash(self.name) | |||||
| def __repr__(self): | def __repr__(self): | ||||
| return '%s(%r)' % (type(self).__name__, self.name) | return '%s(%r)' % (type(self).__name__, self.name) | ||||
| @@ -28,13 +27,12 @@ class Symbol(Serialize): | |||||
| class Terminal(Symbol): | class Terminal(Symbol): | ||||
| __serialize_fields__ = 'name', 'filter_out', '_hash' | |||||
| __serialize_fields__ = 'name', 'filter_out' | |||||
| is_term = True | is_term = True | ||||
| def __init__(self, name, filter_out=False): | def __init__(self, name, filter_out=False): | ||||
| self.name = name | self.name = name | ||||
| self._hash = hash(self.name) | |||||
| self.filter_out = filter_out | self.filter_out = filter_out | ||||
| @property | @property | ||||
| @@ -44,7 +42,7 @@ class Terminal(Symbol): | |||||
| class NonTerminal(Symbol): | class NonTerminal(Symbol): | ||||
| __serialize_fields__ = 'name', '_hash' | |||||
| __serialize_fields__ = 'name', | |||||
| is_term = False | is_term = False | ||||