Class CommonTreeAdaptor

java.lang.Object
org.antlr.runtime.tree.BaseTreeAdaptor
org.antlr.runtime.tree.CommonTreeAdaptor
All Implemented Interfaces:
TreeAdaptor
Direct Known Subclasses:
TreeWizard.TreePatternTreeAdaptor

public class CommonTreeAdaptor extends BaseTreeAdaptor
A TreeAdaptor that works with any Tree implementation. It provides really just factory methods; all the work is done by BaseTreeAdaptor. If you would like to have different tokens created than ClassicToken objects, you need to override this and then set the parser tree adaptor to use your subclass. To get your parser to build nodes of a different type, override create(Token), errorNode(), and to be safe, YourTreeClass.dupNode(). dupNode is called to duplicate nodes during rewrite operations.
  • Constructor Details

    • CommonTreeAdaptor

      public CommonTreeAdaptor()
  • Method Details

    • dupNode

      public Object dupNode(Object t)
      Duplicate a node. This is part of the factory; override if you want another kind of node to be built. I could use reflection to prevent having to override this but reflection is slow.
    • create

      public Object create(Token payload)
      Description copied from interface: TreeAdaptor
      Create a tree node from Token object; for CommonTree type trees, then the token just becomes the payload. This is the most common create call. Override if you want another kind of node to be built.
    • createToken

      public Token createToken(int tokenType, String text)
      Tell me how to create a token for use with imaginary token nodes. For example, there is probably no input symbol associated with imaginary token DECL, but you need to create it as a payload or whatever for the DECL node as in ^(DECL type ID). If you care what the token payload objects' type is, you should override this method and any other createToken variant.
      Specified by:
      createToken in class BaseTreeAdaptor
    • createToken

      public Token createToken(Token fromToken)
      Tell me how to create a token for use with imaginary token nodes. For example, there is probably no input symbol associated with imaginary token DECL, but you need to create it as a payload or whatever for the DECL node as in ^(DECL type ID). This is a variant of createToken where the new token is derived from an actual real input token. Typically this is for converting '{' tokens to BLOCK etc... You'll see r : lc='{' ID+ '}' -> ^(BLOCK[$lc] ID+) ; If you care what the token payload objects' type is, you should override this method and any other createToken variant.
      Specified by:
      createToken in class BaseTreeAdaptor
    • setTokenBoundaries

      public void setTokenBoundaries(Object t, Token startToken, Token stopToken)
      Track start/stop token for subtree root created for a rule. Only works with Tree nodes. For rules that match nothing, seems like this will yield start=i and stop=i-1 in a nil node. Might be useful info so I'll not force to be i..i.
    • getTokenStartIndex

      public int getTokenStartIndex(Object t)
      Description copied from interface: TreeAdaptor
      Get the token start index for this subtree; return -1 if no such index
    • getTokenStopIndex

      public int getTokenStopIndex(Object t)
      Description copied from interface: TreeAdaptor
      Get the token stop index for this subtree; return -1 if no such index
    • getText

      public String getText(Object t)
      Specified by:
      getText in interface TreeAdaptor
      Overrides:
      getText in class BaseTreeAdaptor
    • getType

      public int getType(Object t)
      Description copied from interface: TreeAdaptor
      For tree parsing, I need to know the token type of a node
      Specified by:
      getType in interface TreeAdaptor
      Overrides:
      getType in class BaseTreeAdaptor
    • getToken

      public Token getToken(Object t)
      What is the Token associated with this node? If you are not using CommonTree, then you must override this in your own adaptor.
    • getChild

      public Object getChild(Object t, int i)
      Description copied from interface: TreeAdaptor
      Get a child 0..n-1 node
      Specified by:
      getChild in interface TreeAdaptor
      Overrides:
      getChild in class BaseTreeAdaptor
    • getChildCount

      public int getChildCount(Object t)
      Description copied from interface: TreeAdaptor
      How many children? If 0, then this is a leaf node
      Specified by:
      getChildCount in interface TreeAdaptor
      Overrides:
      getChildCount in class BaseTreeAdaptor
    • getParent

      public Object getParent(Object t)
      Description copied from interface: TreeAdaptor
      Who is the parent node of this node; if null, implies node is root. If your node type doesn't handle this, it's ok but the tree rewrites in tree parsers need this functionality.
    • setParent

      public void setParent(Object t, Object parent)
    • getChildIndex

      public int getChildIndex(Object t)
      Description copied from interface: TreeAdaptor
      What index is this node in the child list? Range: 0..n-1 If your node type doesn't handle this, it's ok but the tree rewrites in tree parsers need this functionality.
    • setChildIndex

      public void setChildIndex(Object t, int index)
    • replaceChildren

      public void replaceChildren(Object parent, int startChildIndex, int stopChildIndex, Object t)
      Description copied from interface: TreeAdaptor
      Replace from start to stop child index of parent with t, which might be a list. Number of children may be different after this call. If parent is null, don't do anything; must be at root of overall tree. Can't replace whatever points to the parent externally. Do nothing.