From e3c7564fa02d3f5f1f71494588dbd80a60c8525a Mon Sep 17 00:00:00 2001 From: Chanic Panic Date: Sat, 7 Nov 2020 19:38:13 -0800 Subject: [PATCH] Add debug attribute to ForestToParseTree --- lark/parsers/earley.py | 2 +- lark/parsers/earley_forest.py | 10 ++++++---- 2 files changed, 7 insertions(+), 5 deletions(-) diff --git a/lark/parsers/earley.py b/lark/parsers/earley.py index 3ccba01..d6afa71 100644 --- a/lark/parsers/earley.py +++ b/lark/parsers/earley.py @@ -315,7 +315,7 @@ class Parser: 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, self.debug) 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 630ea63..7a56bbc 100644 --- a/lark/parsers/earley_forest.py +++ b/lark/parsers/earley_forest.py @@ -483,20 +483,22 @@ class ForestToParseTree(ForestTransformer): tree. """ - def __init__(self, tree_class=Tree, callbacks=dict(), prioritizer=ForestSumVisitor(), resolve_ambiguity=True): + def __init__(self, tree_class=Tree, callbacks=dict(), prioritizer=ForestSumVisitor(), resolve_ambiguity=True, debug=False): super(ForestToParseTree, self).__init__() self.tree_class = tree_class self.callbacks = callbacks self.prioritizer = prioritizer self.resolve_ambiguity = resolve_ambiguity + self.debug = debug self._on_cycle_retreat = False self._cycle_node = None self._successful_visits = set() def on_cycle(self, node, path): - logger.warning("Cycle encountered in the SPPF at node: %s. " - "As infinite ambiguities cannot be represented in a tree, " - "this family of derivations will be discarded.", node) + if self.debug: + logger.warning("Cycle encountered in the SPPF at node: %s. " + "As infinite ambiguities cannot be represented in a tree, " + "this family of derivations will be discarded.", node) self._cycle_node = node self._on_cycle_retreat = True