Skip to content

Commit

Permalink
Disable ForestToParseTree cache when ambiguity='resolve' (issue lark-…
Browse files Browse the repository at this point in the history
  • Loading branch information
chanicpanic committed Aug 1, 2023
1 parent 1b6c1dd commit 18562ae
Show file tree
Hide file tree
Showing 2 changed files with 5 additions and 4 deletions.
2 changes: 1 addition & 1 deletion lark/parsers/earley.py
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
7 changes: 4 additions & 3 deletions lark/parsers/earley_forest.py
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand Down

0 comments on commit 18562ae

Please sign in to comment.