diff --git a/lark/parsers/earley.py b/lark/parsers/earley.py index 9ec04c3..1926afa 100644 --- a/lark/parsers/earley.py +++ b/lark/parsers/earley.py @@ -94,11 +94,11 @@ class Column: self.i = i self.to_reduce = NewsList() self.to_predict = NewsList() - self.to_scan = NewsList() + self.to_scan = [] self.item_count = 0 self.FIRST = FIRST - self.added = set() + self.predicted = set() self.completed = {} def add(self, items): @@ -137,9 +137,9 @@ class Column: if isinstance(item.expect, Terminal): self.to_scan.append(item) else: - if item in self.added: + if item in self.predicted: continue - self.added.add(item) + self.predicted.add(item) self.to_predict.append(item) self.item_count += 1 # Only count if actually added @@ -200,10 +200,8 @@ class Parser: column.add(new_items) def scan(i, token, column): - to_scan = column.to_scan.get_news() - next_set = Column(i, self.FIRST) - next_set.add(item.advance(token) for item in to_scan if item.expect.match(token)) + next_set.add(item.advance(token) for item in column.to_scan if item.expect.match(token)) if not next_set: expect = {i.expect for i in column.to_scan} diff --git a/lark/parsers/xearley.py b/lark/parsers/xearley.py index f603b60..59ecb84 100644 --- a/lark/parsers/xearley.py +++ b/lark/parsers/xearley.py @@ -82,7 +82,7 @@ class Parser: column.add(new_items) def scan(i, token, column): - to_scan = column.to_scan.get_news() + to_scan = column.to_scan for x in self.ignore: m = x.match(stream, i)