From 6cd706279a21df7fd07b0c02c97421342c03933a Mon Sep 17 00:00:00 2001 From: Jonah Yolles-Murphy Date: Fri, 28 Aug 2020 14:43:44 -0400 Subject: [PATCH 1/2] make Trees and Tokens' reprs' evalable --- lark/lexer.py | 2 +- lark/tree.py | 3 +-- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/lark/lexer.py b/lark/lexer.py index 32bfe78..1905047 100644 --- a/lark/lexer.py +++ b/lark/lexer.py @@ -124,7 +124,7 @@ class Token(Str): return (self.__class__, (self.type, self.value, self.pos_in_stream, self.line, self.column, )) def __repr__(self): - return 'Token(%s, %r)' % (self.type, self.value) + return 'Token(%r, %r)' % (self.type, self.value) def __deepcopy__(self, memo): return Token(self.type, self.value, self.pos_in_stream, self.line, self.column) diff --git a/lark/tree.py b/lark/tree.py index 84c996a..90c7608 100644 --- a/lark/tree.py +++ b/lark/tree.py @@ -25,7 +25,7 @@ class Tree(object): return self._meta def __repr__(self): - return 'Tree(%s, %s)' % (self.data, self.children) + return 'Tree(%r, %r)' % (self.data, self.children) def _pretty_label(self): return self.data @@ -172,4 +172,3 @@ def pydot__tree_to_png(tree, filename, rankdir="LR", **kwargs): _to_pydot(tree) graph.write_png(filename) - From b82f7177cb618613bbef54cfb3850d26af0cbc6a Mon Sep 17 00:00:00 2001 From: Jonah Yolles-Murphy Date: Sun, 30 Aug 2020 17:39:56 -0400 Subject: [PATCH 2/2] added test --- lark/lexer.py | 2 +- lark/tree.py | 3 +-- tests/test_trees.py | 5 ++++- 3 files changed, 6 insertions(+), 4 deletions(-) diff --git a/lark/lexer.py b/lark/lexer.py index 32bfe78..1905047 100644 --- a/lark/lexer.py +++ b/lark/lexer.py @@ -124,7 +124,7 @@ class Token(Str): return (self.__class__, (self.type, self.value, self.pos_in_stream, self.line, self.column, )) def __repr__(self): - return 'Token(%s, %r)' % (self.type, self.value) + return 'Token(%r, %r)' % (self.type, self.value) def __deepcopy__(self, memo): return Token(self.type, self.value, self.pos_in_stream, self.line, self.column) diff --git a/lark/tree.py b/lark/tree.py index 84c996a..90c7608 100644 --- a/lark/tree.py +++ b/lark/tree.py @@ -25,7 +25,7 @@ class Tree(object): return self._meta def __repr__(self): - return 'Tree(%s, %s)' % (self.data, self.children) + return 'Tree(%r, %r)' % (self.data, self.children) def _pretty_label(self): return self.data @@ -172,4 +172,3 @@ def pydot__tree_to_png(tree, filename, rankdir="LR", **kwargs): _to_pydot(tree) graph.write_png(filename) - diff --git a/tests/test_trees.py b/tests/test_trees.py index d759cf1..cca92f9 100644 --- a/tests/test_trees.py +++ b/tests/test_trees.py @@ -7,6 +7,7 @@ import pickle import functools from lark.tree import Tree +from lark.lexer import Token from lark.visitors import Visitor, Visitor_Recursive, Transformer, Interpreter, visit_children_decor, v_args, Discard @@ -22,6 +23,9 @@ class TestTrees(TestCase): data = pickle.dumps(s) assert pickle.loads(data) == s + def test_repr_runnable(self): + assert self.tree1 == eval(repr(self.tree1)) + def test_iter_subtrees(self): expected = [Tree('b', 'x'), Tree('c', 'y'), Tree('d', 'z'), Tree('a', [Tree('b', 'x'), Tree('c', 'y'), Tree('d', 'z')])] @@ -232,4 +236,3 @@ class TestTrees(TestCase): if __name__ == '__main__': unittest.main() -