BinaryExpression.java
/**
*
*/
package dev.civl.mc.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, SHIFTLEFT, SHIFTRIGHT, TIMES,
/**
* VALID: a binary operator on a pair of a pointer p and an offsets
* expression e: (p + e) is/are valid pointers
*/
VALID
};
/**
* @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();
}