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