/** * Small-step semantics * * @return The expression after taking a single reduction step */ public Aexp reduce(Memory memory) { if (!a1.isValue()) return new Sub(a1.reduce(memory), a2); else if (!a2.isValue()) return new Sub(a1, a2.reduce(memory)); else return new ConstantInt(a1.value() - a2.value()); }