if 表虚拟,过去完成时had + 动词ed 强调事情的结果,"如果已经下过一场雨";
should have done better表示期望的结果,"第二年的庄稼将长得更好";
在这里用过去完成时,表示现实中的结果和预期中的结果相反,事实上庄稼长得并不好.
因为之前有The faimer said sadly,所以原句引号中的事情是对过去已经发生的事情(过去的时候没下雨庄稼长得不好的事实)表达期望,句中要用过去完成时表对过去事实的期望.
如果用should grow better一般时态,则表示对将来的期望(将来如果不下雨庄稼长得不好的事实).与句中时态不符(The faimer said sadly为过去时态),故不用should grow better.
if 句式过去的过去事实,而从句退后一个时态,对过去的虚拟