Selaa lähdekoodia

A few more fixes

tags/gm/2021-09-23T00Z/github.com--lark-parser-lark/0.5.1
Erez Shinan 6 vuotta sitten
vanhempi
commit
0155d3d956
2 muutettua tiedostoa jossa 8 lisäystä ja 7 poistoa
  1. +4
    -3
      lark/parsers/earley.py
  2. +4
    -4
      lark/parsers/xearley.py

+ 4
- 3
lark/parsers/earley.py Näytä tiedosto

@@ -110,8 +110,9 @@ class Column:

if item.is_complete:
# XXX Potential bug: What happens if there's ambiguity in an empty rule?
if item.rule.expansion and item in self.completed:
old_tree = self.completed[item].tree
item_key = item, item.tree # Elsewhere, tree is not part of the comparison
if item.rule.expansion and item_key in self.completed:
old_tree = self.completed[item_key].tree
if old_tree == item.tree:
is_empty = len(self.FIRST[item.rule.origin])
if is_empty:
@@ -130,7 +131,7 @@ class Column:
old_tree.children.append(item.tree)
# old_tree.children.append(item.tree)
else:
self.completed[item] = item
self.completed[item_key] = item
self.to_reduce.append(item)
else:
if isinstance(item.expect, Terminal):


+ 4
- 4
lark/parsers/xearley.py Näytä tiedosto

@@ -51,7 +51,7 @@ class Parser:
def parse(self, stream, start_symbol=None):
# Define parser functions
start_symbol = start_symbol or self.start_symbol
delayed_matches = defaultdict(set)
delayed_matches = defaultdict(list)
match_after_ignore = set()

text_line = 1
@@ -88,7 +88,7 @@ class Parser:
for x in self.ignore:
m = x.match(stream, i)
if m:
delayed_matches[m.end()] |= set(to_scan)
delayed_matches[m.end()] += set(to_scan)
if m.end() == len(stream):
match_after_ignore.update(set(column.to_reduce))

@@ -103,13 +103,13 @@ class Parser:
m = item.expect.match(stream, i)
if m:
t = Token(item.expect.name, m.group(0), i, text_line, text_column)
delayed_matches[m.end()].add(item.advance(t))
delayed_matches[m.end()].append(item.advance(t))

s = m.group(0)
for j in range(1, len(s)):
m = item.expect.match(s[:-j])
if m:
delayed_matches[m.end()].add(item.advance(m.group(0)))
delayed_matches[m.end()].append(item.advance(m.group(0)))

next_set = Column(i+1, self.FIRST)
next_set.add(delayed_matches[i+1])


Ladataan…
Peruuta
Tallenna