| @@ -95,7 +95,13 @@ class Transformer(object): | |||||
| return getattr(self, name) | return getattr(self, name) | ||||
| def transform(self, tree): | 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: | try: | ||||
| f = self._get_func(tree.data) | f = self._get_func(tree.data) | ||||
| except AttributeError: | except AttributeError: | ||||
| @@ -110,6 +116,9 @@ class Transformer(object): | |||||
| return TransformerChain(self, other) | return TransformerChain(self, other) | ||||
| class Erase(Exception): | |||||
| pass | |||||
| class TransformerChain(object): | class TransformerChain(object): | ||||
| def __init__(self, *transformers): | def __init__(self, *transformers): | ||||
| self.transformers = transformers | self.transformers = transformers | ||||
| @@ -166,7 +175,16 @@ class Transformer_NoRecurse(Transformer): | |||||
| return f(t) | return f(t) | ||||
| for subtree in reversed(subtrees): | 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) | return _t(tree) | ||||