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**))
))