For a pet project I started to fiddle with ANTLR. After following some tutorials I’m now trying to create the grammar for my very own language and to generate an AST.
For now I’m messing around in ANTLRWorks mostly, but now that I have validated that the parse tree seems to be fine I’d like to (iteratively, because I’m still learning and still need to make some decisions regarding the final structure of the tree) create the AST. It seems that antlrworks won’t visualize it (or at least not using the “Interpreter” feature, Debug’s not working on any of my machines).
Bottom line: Is the only way to visualize the AST the manual way, traversing/showing it or printing the tree in string representation to a console?
What I’m looking for is a simple way to go from input, grammar -> visual AST representation a la the “Interpreter” feature of ANTLRWorks. Any ideas?
Correct, the interpreter only shows what rules are used in the parsing process, and ignores any AST rewrite rules.
What you can do is use
StringTemplateto create a Graphviz DOT-file. After creating such a DOT-file, you use some 3rd party viewer to display this tree (graph).Here’s a quick demo in Java (I know little C#, sorry).
Take the following (overly simplistic) expression grammar that produces an AST:
First let ANTLR generate lexer and parser files from it:
then create a little test harness that parses the expressions
"12 * (5 - 6); 2^3^(4 + 1);"and will output a DOT-file:Compile all
.javafiles:and then run the main class and pipe its output to a file named
ast-tree.dot:The file
ast-tree.dotnow contains:which can be viewed with one of the viewers here. There are even online viewers. Take this one for example: https://dreampuf.github.io/GraphvizOnline/
When feeding it the contents of
ast-tree.dot, the following image is produced: