Browse Source

Saving _hash for symbols isn't necessary

tags/gm/2021-09-23T00Z/github.com--lark-parser-lark/0.8.0
Erez Shinan 5 years ago
parent
commit
de24fa055d
1 changed files with 4 additions and 6 deletions
  1. +4
    -6
      lark/grammar.py

+ 4
- 6
lark/grammar.py View File

@@ -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




Loading…
Cancel
Save