Carlos Alcaraz moves a step closer to a maiden French Open title by beating incoming world number one Jannik Sinner in an engrossing semi-final.