Class DOTTreeGenerator


  • public class DOTTreeGenerator
    extends java.lang.Object
    A utility class to generate DOT diagrams (graphviz) from arbitrary trees. You can pass in your own templates and can pass in any kind of tree or use Tree interface method. I wanted this separator so that you don't have to include ST just to use the org.antlr.runtime.tree.* package. This is a set of non-static methods so you can subclass to override. For example, here is an invocation: CharStream input = new ANTLRInputStream(System.in); TLexer lex = new TLexer(input); CommonTokenStream tokens = new CommonTokenStream(lex); TParser parser = new TParser(tokens); TParser.e_return r = parser.e(); Tree t = (Tree)r.tree; System.out.println(t.toStringTree()); DOTTreeGenerator gen = new DOTTreeGenerator(); StringTemplate st = gen.toDOT(t); System.out.println(st);
    • Field Summary

      Fields 
      Modifier and Type Field Description
      static org.antlr.stringtemplate.StringTemplate _edgeST  
      static org.antlr.stringtemplate.StringTemplate _nodeST  
      static org.antlr.stringtemplate.StringTemplate _treeST  
      (package private) int nodeNumber
      Track node number so we can get unique node names
      (package private) java.util.HashMap nodeToNumberMap
      Track node to number mapping so we can get proper node name back
    • Method Summary

      All Methods Instance Methods Concrete Methods 
      Modifier and Type Method Description
      protected java.lang.String fixString​(java.lang.String in)  
      protected int getNodeNumber​(java.lang.Object t)  
      protected org.antlr.stringtemplate.StringTemplate getNodeST​(TreeAdaptor adaptor, java.lang.Object t)  
      org.antlr.stringtemplate.StringTemplate toDOT​(java.lang.Object tree, TreeAdaptor adaptor)  
      org.antlr.stringtemplate.StringTemplate toDOT​(java.lang.Object tree, TreeAdaptor adaptor, org.antlr.stringtemplate.StringTemplate _treeST, org.antlr.stringtemplate.StringTemplate _edgeST)  
      org.antlr.stringtemplate.StringTemplate toDOT​(Tree tree)
      Generate DOT (graphviz) for a whole tree not just a node.
      protected void toDOTDefineEdges​(java.lang.Object tree, TreeAdaptor adaptor, org.antlr.stringtemplate.StringTemplate treeST)  
      protected void toDOTDefineNodes​(java.lang.Object tree, TreeAdaptor adaptor, org.antlr.stringtemplate.StringTemplate treeST)  
      • Methods inherited from class java.lang.Object

        clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    • Field Detail

      • _treeST

        public static org.antlr.stringtemplate.StringTemplate _treeST
      • _nodeST

        public static org.antlr.stringtemplate.StringTemplate _nodeST
      • _edgeST

        public static org.antlr.stringtemplate.StringTemplate _edgeST
      • nodeToNumberMap

        java.util.HashMap nodeToNumberMap
        Track node to number mapping so we can get proper node name back
      • nodeNumber

        int nodeNumber
        Track node number so we can get unique node names
    • Constructor Detail

      • DOTTreeGenerator

        public DOTTreeGenerator()
    • Method Detail

      • toDOT

        public org.antlr.stringtemplate.StringTemplate toDOT​(java.lang.Object tree,
                                                             TreeAdaptor adaptor,
                                                             org.antlr.stringtemplate.StringTemplate _treeST,
                                                             org.antlr.stringtemplate.StringTemplate _edgeST)
      • toDOT

        public org.antlr.stringtemplate.StringTemplate toDOT​(java.lang.Object tree,
                                                             TreeAdaptor adaptor)
      • toDOT

        public org.antlr.stringtemplate.StringTemplate toDOT​(Tree tree)
        Generate DOT (graphviz) for a whole tree not just a node. For example, 3+4*5 should generate: digraph { node [shape=plaintext, fixedsize=true, fontsize=11, fontname="Courier", width=.4, height=.2]; edge [arrowsize=.7] "+"->3 "+"->"*" "*"->4 "*"->5 } Return the ST not a string in case people want to alter. Takes a Tree interface object.
      • toDOTDefineNodes

        protected void toDOTDefineNodes​(java.lang.Object tree,
                                        TreeAdaptor adaptor,
                                        org.antlr.stringtemplate.StringTemplate treeST)
      • toDOTDefineEdges

        protected void toDOTDefineEdges​(java.lang.Object tree,
                                        TreeAdaptor adaptor,
                                        org.antlr.stringtemplate.StringTemplate treeST)
      • getNodeST

        protected org.antlr.stringtemplate.StringTemplate getNodeST​(TreeAdaptor adaptor,
                                                                    java.lang.Object t)
      • getNodeNumber

        protected int getNodeNumber​(java.lang.Object t)
      • fixString

        protected java.lang.String fixString​(java.lang.String in)