@@ -1,4 +1,5 @@ | |||||
from .tree import Tree, Transformer, InlineTransformer | |||||
from .tree import Tree | |||||
from .transformers import Transformer | |||||
from .common import ParseError, GrammarError, UnexpectedToken | from .common import ParseError, GrammarError, UnexpectedToken | ||||
from .lexer import UnexpectedInput, LexError | from .lexer import UnexpectedInput, LexError | ||||
from .lark import Lark | from .lark import Lark | ||||
@@ -145,7 +145,7 @@ class ParseTreeBuilder: | |||||
user_callback_name = rule.alias or rule.origin | user_callback_name = rule.alias or rule.origin | ||||
try: | try: | ||||
f = transformer._get_func(user_callback_name) | |||||
f = getattr(transformer, user_callback_name) | |||||
except AttributeError: | except AttributeError: | ||||
f = partial(self.tree_class, user_callback_name) | f = partial(self.tree_class, user_callback_name) | ||||
@@ -79,9 +79,6 @@ class Visitor(Base): | |||||
self._call_userfunc(subtree) | self._call_userfunc(subtree) | ||||
return tree | return tree | ||||
def __default__(self, tree): | |||||
pass | |||||
class InPlaceTransformer(Transformer): | class InPlaceTransformer(Transformer): | ||||
# def _transform(self, tree): | # def _transform(self, tree): | ||||
@@ -113,40 +113,6 @@ class SlottedTree(Tree): | |||||
__slots__ = 'data', 'children', 'rule' | __slots__ = 'data', 'children', 'rule' | ||||
###{standalone | |||||
class Transformer(object): | |||||
def _get_func(self, name): | |||||
return getattr(self, name) | |||||
def transform(self, tree): | |||||
items = [] | |||||
for c in tree.children: | |||||
try: | |||||
items.append(self.transform(c) if isinstance(c, Tree) else c) | |||||
except Discard: | |||||
pass | |||||
try: | |||||
f = self._get_func(tree.data) | |||||
except AttributeError: | |||||
return self.__default__(tree.data, items) | |||||
else: | |||||
return f(items) | |||||
def __default__(self, data, children): | |||||
return Tree(data, children) | |||||
def __mul__(self, other): | |||||
return TransformerChain(self, other) | |||||
class InlineTransformer(Transformer): | |||||
def _get_func(self, name): # use super()._get_func | |||||
return inline_args(getattr(self, name)).__get__(self) | |||||
###} | |||||
def pydot__tree_to_png(tree, filename): | def pydot__tree_to_png(tree, filename): | ||||
import pydot | import pydot | ||||
@@ -20,7 +20,9 @@ logging.basicConfig(level=logging.INFO) | |||||
from lark.lark import Lark | from lark.lark import Lark | ||||
from lark.common import GrammarError, ParseError, UnexpectedToken | from lark.common import GrammarError, ParseError, UnexpectedToken | ||||
from lark.lexer import LexError, UnexpectedInput | from lark.lexer import LexError, UnexpectedInput | ||||
from lark.tree import Tree, Transformer | |||||
from lark.tree import Tree | |||||
from lark.transformers import Transformer_Children as Transformer | |||||
# from lark.tree import Transformer | |||||
__path__ = os.path.dirname(__file__) | __path__ = os.path.dirname(__file__) | ||||
def _read(n, *args): | def _read(n, *args): | ||||