package edu.stanford.nlp.trees;
import edu.stanford.nlp.ling.Label;
import java.util.List;
/**
* A <code>TreeFactory</code> acts as a factory for creating objects of
* class <code>Tree</code>, or some descendant class.
* Methods implementing this interface may assume that the <code>List</code>
* of children passed to them is a list that actually contains trees, but
* this can't be enforced in Java without polymorphic types.
* The methods with a String argument do not guarantee
* that the tree label() will be a String -- the TreeFactory may
* convert it into some other type.
*
* @author Christopher Manning
* @version 2000/12/20
*/
public interface TreeFactory {
/**
* Create a new tree leaf node, where the label is formed from
* the <code>String</code> passed in.
*
* @param word The word that will go into the tree label.
* @return The new leaf
*/
public Tree newLeaf(String word);
/**
* Create a new tree non-leaf node, where the label is formed from
* the <code>String</code> passed in.
*
* @param parent The string that will go into the parent tree label.
* @param children The list of daughters of this tree. The children
* may be a (possibly empty) <code>List</code> of children or
* <code>null</code>
* @return The new interior tree node
*/
public Tree newTreeNode(String parent, List<Tree> children);
/**
* Create a new tree leaf node, with the given label.
*
* @param label The label for the leaf node
* @return The new leaf
*/
public Tree newLeaf(Label label);
/**
* Create a new tree non-leaf node, with the given label.
*
* @param label The label for the parent tree node.
* @param children The list of daughters of this tree. The children
* may be a (possibly empty) <code>List</code> of children or
* <code>null</code>
* @return The new interior tree node
*/
public Tree newTreeNode(Label label, List<Tree> children);
}