这句子没错,这是用非谓语做状语的句子.
Havingdone表示完成动作完全造成的结果或者影响,nothavingdone则表示未完成这动作造成的结果或者影响,have在这里不强调完成,而是强调影响.
Doing只表示伴随状态.
其次,非持续性动作不可以用进行时.
从这两方面来讲,都必须用完成时态.
去掉否定,看下例就明白了.
Havingcompletedtheworkfast,theycanallleaveearly.
Completingtheworkfast,theycanallleaveearly.
这两句的语义是不一样的,而且第二句从语法上讲是不成立的.
必须用持续型动词才能表示伴随:
Workingalone,hecanonlyfinishthecleaningslowly.
假定两句语法成立,那么语义上:1.(由于已经)快速地完成了工作,他们能早点离开。2.快快地完成了工作,他们能早点就离开(了)。所以,havingdone强调原因,doing表示的是伴随某动作的进行或者某种动作状态的存在,某人在做某事。二楼说的不太对,其实原句写成:Theydidn'tcompletetheprogramme(yesterday),sotheyhavetostaythereforanothertwoweeks.这样也是对的。不能说因为非谓语状语是完成时,改成完整句就一定是完成时。