From a01de190d3bff78de82fc4d86f8b29095f2ae03b Mon Sep 17 00:00:00 2001 From: Omega16 <22673084+omega16@users.noreply.github.com> Date: Mon, 24 Aug 2020 15:35:29 -0500 Subject: [PATCH 1/3] Added pydot__tree_to_dot and pydot__tree_to_graph, changed pydot__tree_to_png --- lark/tree.py | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/lark/tree.py b/lark/tree.py index b9dddf4..45346c6 100644 --- a/lark/tree.py +++ b/lark/tree.py @@ -160,6 +160,15 @@ class SlottedTree(Tree): def pydot__tree_to_png(tree, filename, rankdir="LR", **kwargs): + graph = pydot__tree_to_graph(tree, rankdir, **kwargs) + graph.write_png(filename) + + +def pydot__tree_to_dot(tree, filename, rankdir="LR", **kwargs): + graph = pydot__tree_to_graph(tree, rankdir, **kwargs) + graph.write(filename) + +def pydot__tree_to_graph(tree, rankdir="LR", **kwargs): """Creates a colorful image that represents the tree (data+children, without meta) Possible values for `rankdir` are "TB", "LR", "BT", "RL", corresponding to @@ -197,5 +206,5 @@ def pydot__tree_to_png(tree, filename, rankdir="LR", **kwargs): return node _to_pydot(tree) - graph.write_png(filename) - + return graph + From 3edd27f3df7790d6bf93e88a6e404c41537a743b Mon Sep 17 00:00:00 2001 From: Omega16 <22673084+omega16@users.noreply.github.com> Date: Mon, 24 Aug 2020 16:25:12 -0500 Subject: [PATCH 2/3] Added mention to lark output as dot or png --- README.md | 2 +- docs/features.md | 2 ++ 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 8bc45f5..ce266d3 100644 --- a/README.md +++ b/README.md @@ -81,7 +81,7 @@ Lark is great at handling ambiguity. Here is the result of parsing the phrase "f ![fruitflies.png](examples/fruitflies.png) -See the code and more [examples here](https://github.com/lark-parser/lark/tree/master/examples) +See the code to make [this image](https://github.com/lark-parser/lark/tree/master/examples/fruitflies.py) and more [examples here](https://github.com/lark-parser/lark/tree/master/examples) ## List of main features diff --git a/docs/features.md b/docs/features.md index ccaa4cd..fc8ccb6 100644 --- a/docs/features.md +++ b/docs/features.md @@ -26,6 +26,8 @@ - Support for external regex module ([see here](classes.md#using-unicode-character-classes-with-regex)) - Import grammars from Nearley.js ([read more](nearley.md)) - CYK parser + - Transform your parse tree to dot or png files for better visualization ([see_example](https://github.com/lark-parser/lark/blob/master/examples/fruitflies.py)) + ### Experimental features - Automatic reconstruction of input from parse-tree (see examples) From 0b99356a394b750e56e32daa0ebb3d6c6415d84a Mon Sep 17 00:00:00 2001 From: Omega16 <22673084+omega16@users.noreply.github.com> Date: Mon, 24 Aug 2020 16:29:58 -0500 Subject: [PATCH 3/3] added make_dot --- examples/fruitflies.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/examples/fruitflies.py b/examples/fruitflies.py index 697b4ac..aca0b1b 100644 --- a/examples/fruitflies.py +++ b/examples/fruitflies.py @@ -33,9 +33,13 @@ sentence = 'fruit flies like bananas' def make_png(filename): tree.pydot__tree_to_png( parser.parse(sentence), filename) +def make_dot(filename): + tree.pydot__tree_to_dot( parser.parse(sentence), filename) + if __name__ == '__main__': print(parser.parse(sentence).pretty()) # make_png(sys.argv[1]) + # make_dot(sys.argv[1]) # Output: #