Bonjour,
J'ai corrigé votre dm, vous avez joué le jeu pour la pluspart d'entre vous,
bravo!
La plus part on proche de 20/20 sauf deux ou trois qui ont juste la moyenne.
Je vous donnerez la note quand j'aurais aussi corrigé la 2eme partie
qui consiste à transformer votre dm en un programme caml.
Je vous envoie le corrigé résumé de la premiére partie, afin de vous faciliter la 2eme partie.
Je vous le fait faire en caml, car c'est plus facile en caml.
L'idée est que vous preniez conscience que on peut assez facilement faire
des caluls sur des expression rationnelle.
Une fois compris le principe cela ne devrait pas vous prendre trop de temps.
Bon courage,
Fred
ContientEpsilon(exp)
vrai pour epsilon, exp=e*
Faux pour un caractére, et pour ensemble vide
si exp=e1+e2 egal à ContientEpsilon(e1) ou ContientEpsilon(e2)
si exp=e1.e2 egal à ContientEpsilon(e1) ou ContientEpsilon(e2)
Résidu du langage L proposé
par b c'est L
par a c'est L+epsilon
Calcul du Residu(exp, c)
vide pour epsilon, et ensemble vide
pour exp=caractére; epsilon si ce caractére est c, vide sinon
si exp =e1+e2 c'est residu(e1,c) + résidu(e2,c)
si exp= e1* c'est residu(e1,c). e1*
si exp=e1.e2 c'est residu(e1.c).e2, ajouter residu(e2,c) si contientEpsilon(e1)
Reconnait(mot, exp)
si le mot est vide c'est contientEpsilon(mot)
sinon rapeller récursivement Reconnait(m', residu(c,exp))
ou c est le premier caractére du mot et m' les caractéres suivant