package expressions;
import common.prettyprinter.PrettyStringBuilder;
/**
* Representation of a <b>(COND)</b> expression for
* the small step interpreter.
*
* @author bmeurer
* @version $Id$
*/
public final class Condition extends Expression {
/**
* Generates a new condition.
* @param e0 the condition.
* @param e1 the true case.
* @param e2 the false case.
*/
public Condition(Expression e0, Expression e1, Expression e2) {
this.e0 = e0;
this.e1 = e1;
this.e2 = e2;
}
/**
* Performs the substitution for <b>(COND)</b> expressions.
*
* @param id the identifier for the substitution.
* @param e the expression to substitute.
* @return the new expression.
*/
public Expression substitute(String id, Expression e) {
Expression e0 = this.e0.substitute(id, e);
Expression e1 = this.e1.substitute(id, e);
Expression e2 = this.e2.substitute(id, e);
return new Condition(e0, e1, e2);
}
/**
* @return Returns the e0.
*/
public Expression getE0() {
return this.e0;
}
/**
* @return Returns the e1.
*/
public Expression getE1() {
return this.e1;
}
/**
* @return Returns the e2.
*/
public Expression getE2() {
return this.e2;
}
/**
* Returns the pretty string builder for conditions.
* @return the pretty string builder for conditions.
* @see expressions.Expression#toPrettyStringBuilder()
*/
@Override
protected PrettyStringBuilder toPrettyStringBuilder() {
PrettyStringBuilder builder = new PrettyStringBuilder(this, 0);
builder.appendKeyword("if");
builder.appendText(" ");
builder.appendBuilder(this.e0.toPrettyStringBuilder(), 0);
builder.appendBreak();
builder.appendText(" ");
builder.appendKeyword("then");
builder.appendText(" ");
builder.appendBuilder(this.e1.toPrettyStringBuilder(), 0);
builder.appendBreak();
builder.appendText(" ");
builder.appendKeyword("else");
builder.appendText(" ");
builder.appendBuilder(this.e2.toPrettyStringBuilder(), 0);
return builder;
}
// sub expressions
private Expression e0;
private Expression e1;
private Expression e2;
}