}else if (e instanceof Expression) { if (e instanceof SelectExpression) { SelectExpression se = (SelectExpression) e;     } } if( e instanceof BinaryOperation ) {
} else if (e instanceof SelectExpression) { SelectExpression se = (SelectExpression) e;  } else if( e instanceof BinaryOperation ) {
    public Variable evaluateExpression( Expression e, Context c ) throws LemRuntimeException {        if( e instanceof Literal ) {            Literal l = (Literal)e;            // TODO: Testing only            Variable v = VariableFactory.newVariable(  l.getType(), l.getValue() );            return v;        }else if (e instanceof Expression) {            if (e instanceof SelectExpression) {                SelectExpression se = (SelectExpression) e;                //HashMap vl = c.variableList ;                 /** get the list of all variables from same class                  *and compare them agains the condition */                               // return v ;            }        }        if( e instanceof BinaryOperation ) {            BinaryOperation o = (BinaryOperation) e;            Variable left = evaluateExpression( o.getLeft(), c );            Variable right = evaluateExpression( o.getRight(), c );                        switch( o.getType() ) {                case BinaryOperation.ADDITION:                    return left.add( right );                case BinaryOperation.SUBTRACTION:                    return left.subtract( right );                case BinaryOperation.MULTIPLICATION:                    return left.multiply( right );                case BinaryOperation.DIVISION:                    return left.divide( right );                case BinaryOperation.EXPONENTIATION:                    return left.exp( right );                case BinaryOperation.EQUAL:                    return left.equal( right );                case BinaryOperation.LESS_THAN:                    return left.lessThan( right );                case BinaryOperation.LESS_THAN_OR_EQUAL:                    return left.lessThanOrEqual( right );                case BinaryOperation.GREATER_THAN:                    return left.greaterThan( right );                case BinaryOperation.GREATER_THAN_OR_EQUAL:                    return left.greaterThanOrEqual( right );                case BinaryOperation.MODULO:                    return left.mod( right );                case BinaryOperation.NOT_EQUAL:                    return left.notEqual( right );                case BinaryOperation.LOGICAL_AND:                    return left.logicalAnd( right );                case BinaryOperation.LOGICAL_OR:                    return left.logicalOr( right );            }                        throw new LemRuntimeException( "Unknown operation ID: " + o.getType() );        }                if( e instanceof VariableReference ) {            // Must look up Variable            return getVariable( (VariableReference) e, c );        }                if( e instanceof UnaryOperation ) {            UnaryOperation o = (UnaryOperation) e;            Variable operand = evaluateExpression( o.getOperand(), c );                        switch( o.getType() ) {                case UnaryOperation.NEGATION:                    return operand.negation();                case UnaryOperation.LOGICAL_NOT:                    return operand.logicalNot();            }                        throw new LemRuntimeException( "Unknown unary operation ID: " + o.getType() );        }                return null;    }