diff --git a/lark/parsers/earley.py b/lark/parsers/earley.py index a6229f888..20213f732 100644 --- a/lark/parsers/earley.py +++ b/lark/parsers/earley.py @@ -298,7 +298,7 @@ def parse(self, lexer, start): if self.tree_class is not None: # Perform our SPPF -> AST conversion - transformer = ForestToParseTree(self.tree_class, self.callbacks, self.forest_sum_visitor and self.forest_sum_visitor(), self.resolve_ambiguity) + transformer = ForestToParseTree(self.tree_class, self.callbacks, self.forest_sum_visitor and self.forest_sum_visitor(), self.resolve_ambiguity, not self.resolve_ambiguity) return transformer.transform(solutions[0]) # return the root of the SPPF diff --git a/lark/parsers/earley_forest.py b/lark/parsers/earley_forest.py index 6763af619..6cab17e15 100644 --- a/lark/parsers/earley_forest.py +++ b/lark/parsers/earley_forest.py @@ -612,9 +612,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)