From 17b6d6d3b3a14550722b084391caf9cd12d580e6 Mon Sep 17 00:00:00 2001 From: Erez Sh Date: Fri, 1 Nov 2019 14:37:16 +0200 Subject: [PATCH] BUGFIX for declared terminals --- lark/load_grammar.py | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/lark/load_grammar.py b/lark/load_grammar.py index 1b4ab65..a65ca1e 100644 --- a/lark/load_grammar.py +++ b/lark/load_grammar.py @@ -656,16 +656,18 @@ def resolve_term_references(term_defs): raise GrammarError("Rules aren't allowed inside terminals (%s in %s)" % (item, name)) if item.type == 'TERMINAL': term_value = term_dict[item] + assert term_value is not None exp.children[0] = term_value changed = True if not changed: break for name, term in term_dict.items(): - for child in term.children: - ids = [id(x) for x in child.iter_subtrees()] - if id(term) in ids: - raise GrammarError("Recursion in terminal '%s' (recursion is only allowed in rules, not terminals)" % name) + if term: # Not just declared + for child in term.children: + ids = [id(x) for x in child.iter_subtrees()] + if id(term) in ids: + raise GrammarError("Recursion in terminal '%s' (recursion is only allowed in rules, not terminals)" % name) def options_from_rule(name, *x):