+ /** the tree's children */
+ public Iterator<Tree<NodeType>> iterator() { return new ArrayIterator(children); }
+
+ /** get the <tt>i</t>th child */
+ public Tree<NodeType> child(int i) { return children[i]; }
+
+ /** get the input region that this tree was parsed from */
+ public Input.Region getRegion() { return location; }
+
+ public Tree(Input.Region loc, NodeType head) {
+ location = loc;
+ ihead = head;
+ children = emptyTree;
+ }
+ public Tree(Input.Region loc, NodeType head, List<Tree<NodeType>> kids){
+ location = loc;
+ ihead = head;
+ if (kids.size() == 0)
+ children = emptyTree;
+ else {
+ children = new Tree[kids.size()];
+ kids.toArray(children);
+ }
+ }
+ public Tree(Input.Region loc, NodeType head, Tree<NodeType>[] kids) {
+ location = loc;
+ ihead = head;
+ children = (kids == null ? emptyTree : kids.clone());
+ }