package bigstep.rules;
import common.interpreters.MutableStore;
import expressions.Assign;
import expressions.BinaryOperator;
import expressions.BinaryOperatorException;
import expressions.Expression;
import expressions.Location;
import expressions.UnitConstant;
/**
* This class represents the big step rule <b>(ASSIGN)</b>.
*
* @author Benedikt Meurer
* @version $Id$
*
* @see bigstep.rules.AbstractBinaryOperatorRule
*/
public final class AssignRule extends AbstractBinaryOperatorRule {
//
// Constructor
//
/**
* Allocates a new <code>AssignRule</code> instance.
*/
public AssignRule() {
super("ASSIGN");
}
//
// Primitives
//
/**
* {@inheritDoc}
*
* @see bigstep.rules.AbstractBinaryOperatorRule#applyTo(common.interpreters.MutableStore, expressions.BinaryOperator, expressions.Expression, expressions.Expression)
*/
@Override
public Expression applyTo(MutableStore store, BinaryOperator op, Expression e1, Expression e2) throws ClassCastException, BinaryOperatorException {
// (ASSIGN) can only be applied to Assign
if (op instanceof Assign) {
store.put((Location)e1, e2);
return UnitConstant.UNIT;
}
else {
throw new ClassCastException("Illegal operator " + op.getClass());
}
}
}