/home/ooechs/Ecj2Java/src/ac/essex/ooechs/ecj/ecj2java/nodes/ParseableGPNode.java
|
package ac.essex.ooechs.ecj.ecj2java.nodes;
import ec.gp.GPNode;
import ec.gp.GPIndividual;
import ec.EvolutionState;
import ec.util.Parameter;
/**
* <p>
* An abstract class which allows us to save a node and run it again at a later time.
* It is able to interface the GP node class with the parseableNode class. The only code
* that your GP code needs to make is to add the "getJavaCode()" function to your class and
* implement this abstract class.
* </p>
*
* <p/>
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation; either version 2
* of the License, or (at your option) any later version,
* provided that any use properly credits the author.
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details at http://www.gnu.org
* </p>
*
* @author Olly Oechsle, University of Essex, Date: 05-Sep-2006
* @version 1.0
*/
public abstract class ParseableGPNode extends GPNode implements ParseableNode {
/** The amount of children this node is SUPPOSED to have **/
int numChildren;
/** The type of node - Terminal, Function or ERC - used by the JavaWriter **/
int type;
/** The name of this node - text is used by the GPNode's toString function **/
String text;
/**
* Initialises the GP node and sets the type as a function.
* @param text
* @param numChildren
*/
public ParseableGPNode(String text, int numChildren) {
this(text, numChildren, ParseableNode.FUNCTION);
}
public ParseableGPNode(String text, int numChildren, int type) {
this.numChildren = numChildren;
this.text = text;
this.type = type;
variableName = "";
}
public void checkConstraints(final EvolutionState state, final int tree, final GPIndividual typicalIndividual, final Parameter individualBase) {
super.checkConstraints(state, tree, typicalIndividual, individualBase);
if (children.length != numChildren)
state.output.error("Incorrect number of children for node " + toStringForError() + " at " + individualBase + " (" + children.length + " != " + numChildren + ")");
}
/**
* Returns a string representation of the java statement represented by this node.
*/
public abstract String getJavaCode();
public String getEndJavaCode() {
return "";
}
public String toString() {
return text;
}
public ParseableNode getChild(int index) {
return (ParseableNode) children[index];
}
public int countChildren() {
return children.length;
}
String variableName;
/**
* When the java writer uses this node, it may use a variable name to describe it.
*/
public String getVariableName() {
return variableName;
}
/**
* Attaches a variable name to this node, used by JavaWriter
*/
public void setVariableName(String name) {
this.variableName = name;
}
public int getType() {
return type;
}
public void setType(int type) {
this.type = type;
}
public String getValue() {
return null;
}
public abstract int getObjectType();
public String getLineComment() {
return null;
}
}