Package org.antlr.runtime.tree
Class BaseTree
- java.lang.Object
-
- org.antlr.runtime.tree.BaseTree
-
- All Implemented Interfaces:
Tree
- Direct Known Subclasses:
CommonTree
,ParseTree
,RemoteDebugEventSocketListener.ProxyTree
public abstract class BaseTree extends Object implements Tree
A generic tree implementation with no payload. You must subclass to actually have any user data. ANTLR v3 uses a list of children approach instead of the child-sibling approach in v2. A flat tree (a list) is an empty node whose children represent the list. An empty, but non-null node is called "nil".
-
-
Field Summary
Fields Modifier and Type Field Description protected List<Object>
children
-
Fields inherited from interface org.antlr.runtime.tree.Tree
INVALID_NODE
-
-
Method Summary
All Methods Instance Methods Abstract Methods Concrete Methods Modifier and Type Method Description void
addChild(Tree t)
Add t as child of this node.void
addChildren(List<? extends Tree> kids)
Add all elements of kids list as children of this nodeprotected List<Object>
createChildrenList()
Override in a subclass to change the impl of children listObject
deleteChild(int i)
void
freshenParentAndChildIndexes()
Set the parent and child index values for all child of tvoid
freshenParentAndChildIndexes(int offset)
void
freshenParentAndChildIndexesDeeply()
void
freshenParentAndChildIndexesDeeply(int offset)
Tree
getAncestor(int ttype)
Walk upwards and get first ancestor with this token type.List<? extends Tree>
getAncestors()
Return a list of all ancestors of this node.int
getCharPositionInLine()
Tree
getChild(int i)
int
getChildCount()
int
getChildIndex()
BaseTree doesn't track child indexes.List<? extends Object>
getChildren()
Get the children internal List; note that if you directly mess with the list, do so at your own risk.Tree
getFirstChildWithType(int type)
int
getLine()
In case we don't have a token payload, what is the line for errors?Tree
getParent()
BaseTree doesn't track parent pointers.boolean
hasAncestor(int ttype)
Walk upwards looking for ancestor with this token type.void
insertChild(int i, Object t)
Insert child t at child position i (0..n-1) by shifting children i+1..n-1 to the right one position.boolean
isNil()
Indicates the node is a nil node but may still have children, meaning the tree is a flat list.void
replaceChildren(int startChildIndex, int stopChildIndex, Object t)
Delete children from start to stop and replace with t even if t is a list (nil-root tree).void
sanityCheckParentAndChildIndexes()
void
sanityCheckParentAndChildIndexes(Tree parent, int i)
void
setChild(int i, Tree t)
Set ith child (0..n-1) to t; t must be non-null and non-nil nodevoid
setChildIndex(int index)
void
setParent(Tree t)
abstract String
toString()
Override to say how a node (not a tree) should look as textString
toStringTree()
Print out a whole tree not just a node-
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
-
Methods inherited from interface org.antlr.runtime.tree.Tree
dupNode, getText, getTokenStartIndex, getTokenStopIndex, getType, setTokenStartIndex, setTokenStopIndex
-
-
-
-
Constructor Detail
-
BaseTree
public BaseTree()
-
BaseTree
public BaseTree(Tree node)
Create a new node from an existing node does nothing for BaseTree as there are no fields other than the children list, which cannot be copied as the children are not considered part of this node.
-
-
Method Detail
-
getChildren
public List<? extends Object> getChildren()
Get the children internal List; note that if you directly mess with the list, do so at your own risk.
-
getFirstChildWithType
public Tree getFirstChildWithType(int type)
-
getChildCount
public int getChildCount()
- Specified by:
getChildCount
in interfaceTree
-
addChild
public void addChild(Tree t)
Add t as child of this node. Warning: if t has no children, but child does and child isNil then this routine moves children to t via t.children = child.children; i.e., without copying the array.
-
addChildren
public void addChildren(List<? extends Tree> kids)
Add all elements of kids list as children of this node
-
setChild
public void setChild(int i, Tree t)
Description copied from interface:Tree
Set ith child (0..n-1) to t; t must be non-null and non-nil node
-
insertChild
public void insertChild(int i, Object t)
Insert child t at child position i (0..n-1) by shifting children i+1..n-1 to the right one position. Set parent / indexes properly but does NOT collapse nil-rooted t's that come in here like addChild.
-
deleteChild
public Object deleteChild(int i)
- Specified by:
deleteChild
in interfaceTree
-
replaceChildren
public void replaceChildren(int startChildIndex, int stopChildIndex, Object t)
Delete children from start to stop and replace with t even if t is a list (nil-root tree). num of children can increase or decrease. For huge child lists, inserting children can force walking rest of children to set their childindex; could be slow.- Specified by:
replaceChildren
in interfaceTree
-
createChildrenList
protected List<Object> createChildrenList()
Override in a subclass to change the impl of children list
-
isNil
public boolean isNil()
Description copied from interface:Tree
Indicates the node is a nil node but may still have children, meaning the tree is a flat list.
-
freshenParentAndChildIndexes
public void freshenParentAndChildIndexes()
Set the parent and child index values for all child of t- Specified by:
freshenParentAndChildIndexes
in interfaceTree
-
freshenParentAndChildIndexes
public void freshenParentAndChildIndexes(int offset)
-
freshenParentAndChildIndexesDeeply
public void freshenParentAndChildIndexesDeeply()
-
freshenParentAndChildIndexesDeeply
public void freshenParentAndChildIndexesDeeply(int offset)
-
sanityCheckParentAndChildIndexes
public void sanityCheckParentAndChildIndexes()
-
sanityCheckParentAndChildIndexes
public void sanityCheckParentAndChildIndexes(Tree parent, int i)
-
getChildIndex
public int getChildIndex()
BaseTree doesn't track child indexes.- Specified by:
getChildIndex
in interfaceTree
-
setChildIndex
public void setChildIndex(int index)
- Specified by:
setChildIndex
in interfaceTree
-
getParent
public Tree getParent()
BaseTree doesn't track parent pointers.
-
hasAncestor
public boolean hasAncestor(int ttype)
Walk upwards looking for ancestor with this token type.- Specified by:
hasAncestor
in interfaceTree
-
getAncestor
public Tree getAncestor(int ttype)
Walk upwards and get first ancestor with this token type.- Specified by:
getAncestor
in interfaceTree
-
getAncestors
public List<? extends Tree> getAncestors()
Return a list of all ancestors of this node. The first node of list is the root and the last is the parent of this node.- Specified by:
getAncestors
in interfaceTree
-
toStringTree
public String toStringTree()
Print out a whole tree not just a node- Specified by:
toStringTree
in interfaceTree
-
getLine
public int getLine()
Description copied from interface:Tree
In case we don't have a token payload, what is the line for errors?
-
getCharPositionInLine
public int getCharPositionInLine()
- Specified by:
getCharPositionInLine
in interfaceTree
-
-