AssignmentIF.java

package edu.udel.cis.vsl.abc.analysis.pointsTo.IF;

/**
 * <p>
 * An abstract representation of one of the following assignments:
 * <ul>
 * <li>BASE: U = &U</li>
 * <li>SIMPLE: U = U</li>
 * <li>COMPLEX_LD: *U = U</li>
 * <li>COMPLEX_RD: U = *U</li>
 * </ul>
 * where U is a {@link AssignExpIF} which represents an abstract object.
 * </p>
 * 
 * @author ziqing
 *
 */
public interface AssignmentIF {

	/**
	 * <p>
	 * BASE: p = &a
	 * 
	 * SIMPLE: p = a
	 * 
	 * COMPLEX_LD: *p = a
	 *
	 * COMPLEX_RD: p = *a
	 * </p>
	 */
	public static enum AssignmentKind {
		BASE, SIMPLE, COMPLEX_LD, COMPLEX_RD
	}

	/**
	 * @return: the left-hand side abstraction
	 * 
	 */
	public AssignExprIF lhs();

	/**
	 * @return the right-hand side abstraction
	 * 
	 */
	public AssignExprIF rhs();

	/**
	 * @return kind
	 */
	public AssignmentKind kind();
}