TD(s) de LEC - gŽnŽration de code ------------ Generation de code LISP ----------------------- dŽfinition de fonctions a partir de macro en LISP. Application a lancer-automate. Version iterative de lancer-automate (la moins efficace - la plus simple) (defun lancer-automate (auto mot) (let ((mc (copy-mot mot)) (ec (etat-initial auto)) cc erreur fini (do () ((or erreur fini)) (setf cc (premier mc)) (if cc (setf mc (reste mc)) (setf fini T) ) (unless fini (setf ec (etat-suivant auto ec cc))) (unless ec (setf erreur T)) ) (unless erreur (etat-final-p auto ec)) )) On veut produire pour un automate x le code (ˆ partir de la version iterative de lancer-automate : (defun lancer-automate-x (mot) (let ((mc (copy-mot mot)) (ec **l'etat-initial**) cc erreur fini (do () ((or erreur fini)) (setf cc (premier mc)) (if cc (setf mc (reste mc)) (setf fini T) ) (unless fini (setf ec ** le code - double cond - permettant de trouver l'etat d'arrive sinon nil* * )) (unless ec (setf erreur T)) ) (unless erreur (member ec **liste de etats finaux**)) ))