Browse Source

Added a bit of explanation for `term_subs`

tags/gm/2021-09-23T00Z/github.com--lark-parser-lark/0.10.0
MegaIng1 4 years ago
parent
commit
e4e29f5127
2 changed files with 9 additions and 2 deletions
  1. +1
    -1
      lark-stubs/reconstruct.pyi
  2. +8
    -1
      lark/reconstruct.py

+ 1
- 1
lark-stubs/reconstruct.pyi View File

@@ -30,7 +30,7 @@ class MakeMatchTree:


class Reconstructor: class Reconstructor:


def __init__(self, parser: Lark):
def __init__(self, parser: Lark, term_subs: Dict[str, str] = ...):
... ...


def reconstruct(self, tree: Tree) -> str: def reconstruct(self, tree: Tree) -> str:


+ 8
- 1
lark/reconstruct.py View File

@@ -87,9 +87,16 @@ def best_from_group(seq, group_key, cmp_key):
return list(d.values()) return list(d.values())


class Reconstructor: class Reconstructor:
def __init__(self, parser, term_subs={}):
"""
A Reconstructor that will, given a full parse Tree, generate source code.
Pass `term_subs`, a dictionary of [Terminal name as str] to [output text as str]
to say what discarded Terminals should be written as.
"""
def __init__(self, parser, term_subs=None):
# XXX TODO calling compile twice returns different results! # XXX TODO calling compile twice returns different results!
assert parser.options.maybe_placeholders == False assert parser.options.maybe_placeholders == False
if term_subs is None:
term_subs = {}
tokens, rules, _grammar_extra = parser.grammar.compile(parser.options.start) tokens, rules, _grammar_extra = parser.grammar.compile(parser.options.start)


self.write_tokens = WriteTokensTransformer({t.name:t for t in tokens}, term_subs) self.write_tokens = WriteTokensTransformer({t.name:t for t in tokens}, term_subs)


Loading…
Cancel
Save