diff --git a/docs/visitors.rst b/docs/visitors.rst index f263712..43d0513 100644 --- a/docs/visitors.rst +++ b/docs/visitors.rst @@ -103,12 +103,17 @@ v_args .. autofunction:: lark.visitors.v_args +merge_transformers +------------------ + +.. autofunction:: lark.visitors.merge_transformers + Discard ------- .. autoclass:: lark.visitors.Discard VisitError -------- +---------- .. autoclass:: lark.exceptions.VisitError \ No newline at end of file diff --git a/examples/composition/eval_csv.py b/examples/composition/eval_csv.py index 3323936..8b83f08 100644 --- a/examples/composition/eval_csv.py +++ b/examples/composition/eval_csv.py @@ -1,3 +1,5 @@ +"Transformer for evaluating csv.lark" + from lark import Transformer class CsvTreeToPandasDict(Transformer): diff --git a/examples/composition/eval_json.py b/examples/composition/eval_json.py index 26bf501..c665a19 100644 --- a/examples/composition/eval_json.py +++ b/examples/composition/eval_json.py @@ -1,3 +1,5 @@ +"Transformer for evaluating json.lark" + from lark import Transformer, v_args class JsonTreeToJson(Transformer): diff --git a/lark/visitors.py b/lark/visitors.py index 3d65a13..e2f8b53 100644 --- a/lark/visitors.py +++ b/lark/visitors.py @@ -159,7 +159,7 @@ def merge_transformers(base_transformer=None, **transformers_to_merge): thereby creating some of their rules in a 'namespace'. (i.e with a consitent name prefix) In this case, the key for the transformer should match the name of the imported grammar. - Paramaters: + Parameters: base_transformer (Transformer, optional): The transformer that all other transformers will be added to. **transformers_to_merge: Keyword arguments, in the form of ``name_prefix = transformer``. @@ -167,21 +167,22 @@ def merge_transformers(base_transformer=None, **transformers_to_merge): AttributeError: In case of a name collision in the merged methods Example: - ```python - class TBase(Transformer): - def start(self, children): - return children[0] + 'bar' + :: + + class TBase(Transformer): + def start(self, children): + return children[0] + 'bar' + + class TImportedGrammar(Transformer): + def foo(self, children): + return "foo" - class TImportedGrammar(Transformer): - def foo(self, children): - return "foo" + composed_transformer = merge_transformers(TBase(), imported=TImportedGrammar()) - composed_transformer = merge_transformers(TBase(), imported=TImportedGrammar()) + t = Tree('start', [ Tree('imported__foo', []) ]) - t = Tree('start', [ Tree('imported__foo', []) ]) + assert composed_transformer.transform(t) == 'foobar' - assert composed_transformer.transform(t) == 'foobar' - ``` """ if base_transformer is None: base_transformer = Transformer()