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; }