From 0fe238d1cc4abaa0acd73d731351053c3e546759 Mon Sep 17 00:00:00 2001 From: Jitendra Mishra Date: Mon, 26 Jun 2023 00:20:38 +0530 Subject: [PATCH] Update parse_tree_builder.py List function is not required, and rule check in callback dict should be after loop Update parse_tree_builder.py Update parse_tree_builder.py revoke line changes --- lark/parse_tree_builder.py | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/lark/parse_tree_builder.py b/lark/parse_tree_builder.py index bb907a24b..6d93a9769 100644 --- a/lark/parse_tree_builder.py +++ b/lark/parse_tree_builder.py @@ -331,7 +331,7 @@ def __init__(self, rules, tree_class, propagate_positions=False, ambiguous=False self.ambiguous = ambiguous self.maybe_placeholders = maybe_placeholders - self.rule_builders = list(self._init_builders(rules)) + self.rule_builders = self._init_builders(rules) def _init_builders(self, rules): propagate_positions = make_propagate_positions(self.propagate_positions) @@ -341,13 +341,13 @@ def _init_builders(self, rules): keep_all_tokens = options.keep_all_tokens expand_single_child = options.expand1 - wrapper_chain = list(filter(None, [ + wrapper_chain = filter(None, [ (expand_single_child and not rule.alias) and ExpandSingleChild, maybe_create_child_filter(rule.expansion, keep_all_tokens, self.ambiguous, options.empty_indices if self.maybe_placeholders else None), propagate_positions, self.ambiguous and maybe_create_ambiguous_expander(self.tree_class, rule.expansion, keep_all_tokens), self.ambiguous and partial(AmbiguousIntermediateExpander, self.tree_class) - ])) + ]) yield rule, wrapper_chain @@ -362,6 +362,8 @@ def default_callback(data, children): default_callback = self.tree_class for rule, wrapper_chain in self.rule_builders: + if rule in callbacks: + raise GrammarError("Rule '%s' already exists" % (rule,)) user_callback_name = rule.alias or rule.options.template_source or rule.origin.name try: @@ -377,9 +379,6 @@ def default_callback(data, children): for w in wrapper_chain: f = w(f) - if rule in callbacks: - raise GrammarError("Rule '%s' already exists" % (rule,)) - callbacks[rule] = f return callbacks