From a5625a3be9f0280fe9674c3f14a36c5fc399929a Mon Sep 17 00:00:00 2001 From: Kevin Latimer Date: Mon, 18 Dec 2017 11:52:54 -0500 Subject: [PATCH] Add delete functionality --- lark/tree.py | 22 ++++++++++++++++++++-- 1 file changed, 20 insertions(+), 2 deletions(-) diff --git a/lark/tree.py b/lark/tree.py index 90583db..81a9929 100644 --- a/lark/tree.py +++ b/lark/tree.py @@ -95,7 +95,13 @@ class Transformer(object): return getattr(self, name) def transform(self, tree): - items = [self.transform(c) if isinstance(c, Tree) else c for c in tree.children] + items = [] + for c in tree.children: + if isinstance(c, Tree): + try: + items.append(self.transform(c)) + except Erase: + pass try: f = self._get_func(tree.data) except AttributeError: @@ -110,6 +116,9 @@ class Transformer(object): return TransformerChain(self, other) +class Erase(Exception): + pass + class TransformerChain(object): def __init__(self, *transformers): self.transformers = transformers @@ -166,7 +175,16 @@ class Transformer_NoRecurse(Transformer): return f(t) for subtree in reversed(subtrees): - subtree.children = [_t(c) if isinstance(c, Tree) else c for c in subtree.children] + children = [] + for c in subtree.children: + if isinstance(c, Tree): + try: + children.append(_t(c)) + except Erase: + pass + else: + children.append(c) + subtree.children = children return _t(tree)