package models;
import models.algebra.Type;
public abstract class EvaluableTerm extends RDLTerm{
public EvaluableTerm(int order) {
super(order);
}
public abstract boolean isLinearRightNormal();
@Deprecated
public abstract EvaluableTerm linearRightNormalize();
public abstract void selfLinearRightNormalize();
public static RDLVariable of(String name, Type type, int order) {
return new RDLVariable(name, type, order);
}
public static AssignEvaluableTerm of(EvaluableTerm term, RDLVariable variable, EvaluableTerm valueTerm) {
return new AssignEvaluableTerm(term, variable, valueTerm);
}
public static EvaluableTerm of(EvaluableTerm term, RDLVariable variable, EvaluableTerm valueTerm, int order) {
if(variable.getOrder() == valueTerm.getOrder() && variable.getOrder() == order) {
return new AssignEvaluableTerm(term, variable, valueTerm);
} else if(variable.getOrder() -1 == order) {
return new AssignEvaluableTerm(term, variable, valueTerm);
} else {
return new SetEvaluableTerm(new AssignEvaluableTerm(term, variable, valueTerm), order);
}
}
public static SetEvaluableTerm of(EvaluableTerm term, int order) {
return new SetEvaluableTerm(term, order);
}
}