From c5218b185eef75547000f08db91c8509ff21c7a1 Mon Sep 17 00:00:00 2001 From: PJCampi Date: Tue, 16 Apr 2019 18:50:22 +0200 Subject: [PATCH] reconstructor creates parser at instantiation and update start_symbol in _reconstruct step. --- lark/reconstruct.py | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/lark/reconstruct.py b/lark/reconstruct.py index 791eb85..2800840 100644 --- a/lark/reconstruct.py +++ b/lark/reconstruct.py @@ -73,6 +73,9 @@ class Reconstructor: self.write_tokens = WriteTokensTransformer({t.name:t for t in tokens}) self.rules = list(self._build_recons_rules(rules)) + callbacks = {rule: rule.alias for rule in self.rules} # TODO pass callbacks through dict, instead of alias? + self.parser = earley.Parser(ParserConf(self.rules, callbacks, parser.options.start), + self._match, resolve_ambiguity=True) def _build_recons_rules(self, rules): expand1s = {r.origin for r in rules if r.options and r.options.expand1} @@ -112,9 +115,7 @@ class Reconstructor: def _reconstruct(self, tree): # TODO: ambiguity? - callbacks = {rule: rule.alias for rule in self.rules} # TODO pass callbacks through dict, instead of alias? - parser = earley.Parser(ParserConf(self.rules, callbacks, tree.data), self._match, resolve_ambiguity=True) - unreduced_tree = parser.parse(tree.children) # find a full derivation + unreduced_tree = self.parser.parse(tree.children, tree.data) # find a full derivation assert unreduced_tree.data == tree.data res = self.write_tokens.transform(unreduced_tree) for item in res: