BinaryExpression.java
/**
*
*/
package edu.udel.cis.vsl.civl.model.IF.expression;
/**
* A binary operation.
*
* @author Timothy K. Zirkel (zirkel)
*
*/
public interface BinaryExpression extends Expression {
/**
* This defines all CIVL binary operators: <br>
*
* <ui> <li>AND: <code>&&</code> (logical and);</li> <li>LEFT_SHIFT:
* <code><</code> (bitwise left shift);</li> <li>RIGHT_SHIFT:
* <code>>></code> (bitwise right shift);</li> <li>BITAND: <code>&</code>
* (bitwise and);</li> <li>BITCOMPLEMENT: <code>~</code> (bitwise
* complement);</li> <li>BITOR: <code>|</code> (bitwise or);</li> <li>
* BITXOR: <code>^</code> (bitwise xor);</li> <li>DIVIDE: <code>/</code>
* (division);</li> <li>EQUAL: <code>==</code> (equal to);</li> <li>IMPLIES:
* <code></code> (implication);</li> <li>LESS_THAN: <code><</code> (less
* than);</li> <li>LESS_THAN_EQUAL: <code><=</code> (less than or equal to);
* </li> <li>MINUS: <code>-</code> (subtraction);</li> <li>MODULO:
* <code>%</code> (modulo);</li> <li>NOT_EQUAL: <code>!=</code> (not equal
* to);</li> <li>OR: <code>||</code> (logical or);</li> <li>PLUS:
* <code>+</code> (addition);</li> <li>POINTER_ADD: <code>+</code> (pointer
* addition);</li> <li>POINTER_SUBTRACT: <code>-</code> (pointer
* subtraction);</li> <li>TIMES: <code>*</code> (multiplication);</li> </ui>
*
* @author Manchun Zheng (zmanchun)
*
*/
public enum BINARY_OPERATOR {
AND, BIT_AND, BITCOMPLEMENT, BIT_OR, BIT_XOR, DIVIDE, EQUAL, IMPLIES, LESS_THAN, LESS_THAN_EQUAL, MINUS, MODULO, NOT_EQUAL, OR, PLUS, POINTER_ADD, POINTER_SUBTRACT, REMOTE, SHIFTLEFT, SHIFTRIGHT, TIMES
};
/**
* @return The left operand.
*/
Expression left();
/**
* @return The binary operator
*/
BINARY_OPERATOR operator();
String operatorToString();
/**
* @return The right operand.
*/
Expression right();
void setAssignToLeft(boolean value);
/**
* Is the value of this binary expression going to be assigned to the
* left-hand-side operand?
*
* @return
*/
boolean isAssignToLeft();
/**
* Switch the left and right operands when the operator is symmetric, and
* return true; If the operator is not symmetric, then do nothing and return
* false.
*
* @return
*/
boolean switchOperands();
}