TD2
Génération de code d'automates

Mathieu Lafourcade

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

))