private Expression expression_R_Compare(Expression left) {
		Expression result = left;

		if( type == EQUAL_LESS )
		{
			match( EQUAL_LESS );
			Expression higher = expression_R(higher_expression());
			result = expression_R_Compare(
				Expression.BinaryExpression.createChild(Expression.Operator.OP_Less_Equal,left,higher));
		}
		else if( type == EQUAL_GREATE )
		{
			match( EQUAL_GREATE );
			Expression higher = expression_R(higher_expression());
			result = expression_R_Compare(Expression.BinaryExpression.createChild(Expression.Operator.OP_Greater_Equal,left,higher));
		}
		else if( type == NOT_EQUAL )
		{
			match( NOT_EQUAL );
			Expression higher = expression_R(higher_expression());
			result = expression_R_Compare(Expression.BinaryExpression.createChild(Expression.Operator.OP_Not_Equal,left,higher));
		}
		else if( type == EQUAL )
		{
			match( EQUAL );
			Expression higher = expression_R(higher_expression());
			result = expression_R_Compare(Expression.BinaryExpression.createChild(Expression.Operator.OP_Equal,left,higher));
		}
		else if( type == LESS )
		{
			match( LESS );
			Expression higher = expression_R(higher_expression());
			result = expression_R_Compare(Expression.BinaryExpression.createChild(Expression.Operator.OP_Less,left,higher));
		}
		else if( type == GREATER )
		{
			match( GREATER );
			Expression higher = expression_R(higher_expression());
			result = expression_R_Compare(Expression.BinaryExpression.createChild(Expression.Operator.OP_Greater,left,higher));
		}
		return result;
	}