|
@@ -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) |
|
|
|
|
|
|
|
|