[*] up [*] contents
suivant: Dessin d'automate monter: Les automates précédent: Le tracé des transitions   Table des matières

Sous-sections

Création graphique d'automate

Généralités

Les états de l'automate seront représentés par un entier. Au cours de la création, il sera nécessaire de connaître leurs coordonnées à l'écran. Quant aux transitions, elles seront codées par un état de départ et de fin, un caractère ainsi qu'une courbe de BEZIER (cf. PROGRAMME 3.1). On utilisera donc les types décrits par le PROGRAMME 3.4.
PROGRAMME 3.4: Le type des états et transitions
\begin{table}
\begin{verbatim}type etat= {numero : int; pt : PointOrVector };;
...
... etat; fin : etat; car : char;
courbe : BezierCurve};;\end{verbatim}\end{table}

La fonction de dessin permet à l'utilisateur de créer les états, les transitions, de les supprimer et de définir les états initial et final. L'état initial est repéré par une flèche horizontale ou verticale pointant sur lui et l'état final est doublement cerclé. Les transitions sont orientées avec deux flèches placées au quart et au trois quart de la courbe, l'étiquette étant tracée en leur « milieu » (point obtenu pour la valeur 0.5 du paramètre). Toutes ces actions seront effectuées à la souris. Le résultat de la fonction de dessin est :

Création d'un automate « simple »

A partir du résultat de la fonction de dessin, il faut définir l'automate dont le type est décrit par le PROGRAMME 3.5, avec ordre le nombre d'états de l'automate.
PROGRAMME 3.5: Le type d'automate
\begin{table}
\begin{verbatim}type automate1 = {ordre : int;
initial : int; final : int -> bool;
transition : (int*char) -> int};;\end{verbatim}\end{table}

Cela nécessite néanmoins quelques transformations. Il faut en effet supprimer toutes les données nécessaires au dessin, c'est-à-dire toutes les coordonnées et autres courbes de BEZIER. Ce travail est effectué par la fonction finale (cf. PROGRAMME 3.6).

PROGRAMME 3.6: La fonction finale de création de l'automate
\begin{table}
\begin{verbatim}let boulot () = let (transit, init, fina)= (open_...
...;
transition=liste_a_fonction (transforme transit)}
;;\end{verbatim}\end{table}

La fonction liste_a_fonction permet de transformer notre liste de transitions en une véritable fonction. Elle utilise la fonction assoc de CAML qui, à un élément a, va associer b d'une liste de couples, (a,b) étant la première occurrence dans la liste. L'automate est automatiquement rendu complet car les transitions absentes tombent dans un puits, c'est-à-dire génère une erreur.

Création d'un automate avec transitions instantanées

Les modifications à apporter sont minimes. Il faut d'une part définir un nouveau type (cf. PROGRAMME 3.7). Ceci permet déjà une amélioration : on peut en effet créer un automate non déterministe puisque les transitions sont stockées en tant que liste et non plus comme une fonction.

La fonction de dessin se chargera de définir, au gré de l'utilisateur, des transitions instantanées, dessinées en vert à l'écran. Une autre modification a été aussi apportéeà cette fonction : elle permet maintenant de définir plusieurs états finaux et plusieurs états initiaux. Les mêmes transformations (cf. PROGRAMME 3.6) sont nécessaires pour la création de l'automate.


PROGRAMME 3.7: Le type d'automate avec transitions instantanées
\begin{table}
\begin{verbatim}type automate2 = {ordre : int;
initial : int lis...
... (int*int) list;
transition : ((int*char)*int) list};;\end{verbatim}\end{table}


[*] up [*] contents
suivant: Dessin d'automate monter: Les automates précédent: Le tracé des transitions   Table des matières

1999-01-29