Selaa lähdekoodia

Remove duplicates of empty rules (Issue #315)

tags/gm/2021-09-23T00Z/github.com--lark-parser-lark/0.6.6
Erez Shinan 5 vuotta sitten
vanhempi
commit
d1fea12aa5
1 muutettua tiedostoa jossa 13 lisäystä ja 0 poistoa
  1. +13
    -0
      lark/load_grammar.py

+ 13
- 0
lark/load_grammar.py Näytä tiedosto

@@ -521,6 +521,19 @@ class Grammar:
rule = Rule(NonTerminal(name), expansion, i, alias, exp_options)
compiled_rules.append(rule)

# Remove duplicates of empty rules, throw error for non-empty duplicates
if len(set(compiled_rules)) != len(compiled_rules):
duplicates = classify(compiled_rules, lambda x: x)
for dups in duplicates.values():
if len(dups) > 1:
if dups[0].expansion:
raise GrammarError("Rules defined twice: %s" % ', '.join(str(i) for i in duplicates))

# Empty rule; assert all other attributes are equal
assert len({(r.alias, r.order, r.options) for r in dups}) == len(dups)

# Remove duplicates
compiled_rules = list(set(compiled_rules))

# Filter out unused terminals
used_terms = {t.name for r in compiled_rules


Ladataan…
Peruuta
Tallenna