From 50a8a143b07e7d571185a999ff4f99e0dac0a213 Mon Sep 17 00:00:00 2001 From: Chanic Panic <51764816+chanicpanic@users.noreply.github.com> Date: Tue, 1 Aug 2023 12:28:13 -0700 Subject: [PATCH] Disable ForestToParseTree cache when ambiguity='resolve' (issue #1283) --- lark/parsers/earley.py | 2 +- lark/parsers/earley_forest.py | 7 ++++--- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/lark/parsers/earley.py b/lark/parsers/earley.py index 2153a0ce..731c10ae 100644 --- a/lark/parsers/earley.py +++ b/lark/parsers/earley.py @@ -300,7 +300,7 @@ def parse(self, lexer, start): if self.Tree is not None: # Perform our SPPF -> AST conversion - transformer = ForestToParseTree(self.Tree, self.callbacks, self.forest_sum_visitor and self.forest_sum_visitor(), self.resolve_ambiguity) + transformer = ForestToParseTree(self.Tree, self.callbacks, self.forest_sum_visitor and self.forest_sum_visitor(), self.resolve_ambiguity, not self.resolve_ambiguity) solutions = [transformer.transform(s) for s in solutions] if len(solutions) > 1: diff --git a/lark/parsers/earley_forest.py b/lark/parsers/earley_forest.py index cdc613ab..c60f3a6b 100644 --- a/lark/parsers/earley_forest.py +++ b/lark/parsers/earley_forest.py @@ -609,9 +609,10 @@ def transform_packed_node(self, node, data): children.append(data.left) if data.right is not PackedData.NO_DATA: children.append(data.right) - if node.parent.is_intermediate: - return self._cache.setdefault(id(node), children) - return self._cache.setdefault(id(node), self._call_rule_func(node, children)) + transformed = children if node.parent.is_intermediate else self._call_rule_func(node, children) + if self._use_cache: + self._cache[id(node)] = transformed + return transformed def visit_symbol_node_in(self, node): super(ForestToParseTree, self).visit_symbol_node_in(node)