diff --git a/lark/parse_tree_builder.py b/lark/parse_tree_builder.py index de88cd1..c56483b 100644 --- a/lark/parse_tree_builder.py +++ b/lark/parse_tree_builder.py @@ -61,7 +61,10 @@ class ChildFilter: filtered = [] for i, to_expand in self.to_include: if to_expand: - filtered += children[i].children + if filtered: + filtered += children[i].children + else: # Optimize for left-recursion + filtered = children[i].children else: filtered.append(children[i]) diff --git a/lark/tree.py b/lark/tree.py index a9d4670..68eaf42 100644 --- a/lark/tree.py +++ b/lark/tree.py @@ -11,7 +11,7 @@ from .utils import inline_args class Tree(object): def __init__(self, data, children): self.data = data - self.children = list(children) + self.children = children def __repr__(self): return 'Tree(%s, %s)' % (self.data, self.children)