org.antlr.runtime.tree
Class CommonTreeAdaptor

java.lang.Object
  extended by org.antlr.runtime.tree.BaseTreeAdaptor
      extended by org.antlr.runtime.tree.CommonTreeAdaptor
All Implemented Interfaces:
TreeAdaptor

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).


Constructor Summary
CommonTreeAdaptor()
           
 
Method Summary
 java.lang.Object create(Token payload)
          Create a tree node from Token object; for CommonTree type trees, then the token just becomes the payload.
 Token createToken(int tokenType, java.lang.String text)
          Tell me how to create a token for use with imaginary token nodes.
 Token createToken(Token fromToken)
          Tell me how to create a token for use with imaginary token nodes.
 java.lang.Object dupNode(java.lang.Object treeNode)
          Duplicate a node.
 java.lang.Object getChild(java.lang.Object t, int i)
          Get a child 0..n-1 node
 int getChildCount(java.lang.Object t)
          How many children? If 0, then this is a leaf node
 java.lang.String getText(java.lang.Object t)
           
 Token getToken(java.lang.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.
 int getTokenStartIndex(java.lang.Object t)
          Get the token start index for this subtree; return -1 if no such index
 int getTokenStopIndex(java.lang.Object t)
          Get the token stop index for this subtree; return -1 if no such index
 int getType(java.lang.Object t)
          For tree parsing, I need to know the token type of a node
 void setTokenBoundaries(java.lang.Object t, Token startToken, Token stopToken)
          Track start/stop token for subtree root created for a rule.
 
Methods inherited from class org.antlr.runtime.tree.BaseTreeAdaptor
addChild, becomeRoot, becomeRoot, create, create, create, dupTree, getUniqueID, isNil, nil, rulePostProcessing, setText, setType
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

CommonTreeAdaptor

public CommonTreeAdaptor()
Method Detail

dupNode

public java.lang.Object dupNode(java.lang.Object treeNode)
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 java.lang.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.


createToken

public Token createToken(int tokenType,
                         java.lang.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(java.lang.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(java.lang.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(java.lang.Object t)
Description copied from interface: TreeAdaptor
Get the token stop index for this subtree; return -1 if no such index


getText

public java.lang.String getText(java.lang.Object t)
Specified by:
getText in interface TreeAdaptor
Overrides:
getText in class BaseTreeAdaptor

getType

public int getType(java.lang.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(java.lang.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 java.lang.Object getChild(java.lang.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(java.lang.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