Cette section d´ecrit l’application de la m´ethode DEMRAL `a l’´elaboration d’une librairie active de machines `a ´etat capable de construire des types de containers et de curseurs `a partir de sp´ecifications abstraites.
Dans la suite de l’expos´e, les termes machine et machines `a ´etats d´esigneront tous les mod`eles math´ematiques bas´es sur les graphes, y compris ces derniers.
Le rˆole du programmeur utilisant une librairie active consiste `a construire ses sp´ecifica-tions selon la grammaire d´efinie. Le rˆole de la librairie consiste `a :
– Parser les sp´ecifications ;
– Assigner les valeurs par d´efaut des param`etres non sp´ecifi´es ; – Assembler les composants suivant les sp´ecifications ;
– R´ealiser l’ensemble des optimisations possibles ;
– Mettre `a disposition le composant final en encapsulant les ´el´ements dans une interface appropri´ee.
Les sp´ecifications de l’utilisateur expriment ses besoins quant `a la nature de la machine `a ´etats d´esir´ee. Elles portent sur tous les aspects du domaine et doivent permettre la construction de tous les types de machines `a ´etats au sens large : graphes, arbres, automates, transducteurs [55] ainsi que leurs g´en´eralisations et leurs extensions comme les automates et les transducteurs
6.3. VERS UNE LIBRAIRIE ACTIVE DE MACHINES `A ´ETATS 117 pond´er´es [37], le but ´etant d’´etendre les concepts d’automate d’ASTL et de la faire apparaˆıtre comme un cas particulier d’une librairie plus g´en´erale.
6.3.1 Domaine
Avant d’aborder la grammaire du DSL, il est n´ecessaire de d´efinir pr´ecis´ement l’´etendue du domaine et d’introduire quelques concepts et notations.
Le but de notre travail est de d´evelopper une librairie de machine `a ´etats contenant des types de donn´ees abstraits et des algorithmes destin´es `a ˆetre int´egr´es dans des applications plus larges. Les principales applications d’une telle librairie sont :
– recherche de motifs
– reconnaissance de la parole – indexation
– mod´elisation de grammaire – compression de donn´ees
– analyses morphologigue, syntaxique et s´emantique – d´esambigu¨ısation de phrases
– dictionnaires
– correcteurs orthographiques – mod´elisation du comportement – r´eaccentuation de texte
– flexions, conjugaisons en langue naturelle – traduction automatique
– apprentissage inductif de grammaire
– phon´etisation et plus g´en´eralement l’impl´ementation de r`egle de re´ecriture.
Le mod`ele math´ematique de machines repr´esentables par des nœuds reli´es entre eux par des arcs se d´ecompose en trois principaux sous-mod`eles : graphe, automate, transducteur. On consid`erera aussi comme machine `a ´etats tout ce qui est repr´esentable par des ´etats et des transitions, c’est-`a-dire les machines de Moore et de Mealy, les automates et transducteurs pond´er´es, les r´eseaux de P´etri et neuronaux.
6.3.2 Concepts
Les concepts cl´es sont au nombre de quatre : 1. Etat´ ou nœud.
2. Un ´etat peut ˆetre pourvu d’une information appel´eetag.
3. Transition ou arc. Un arc est orient´e si la distinction est faite entre le nœud source et
le nœud cible. Dans le cas contraire, l’arc est dit non-orient´e.
4. Une transition porte ´eventuellement une information appel´ee´etiquette.
Nous allons maintenant aborder les d´efinitions de nos principaux mod`eles, les graphes, les automates et les transducteurs. On construira ensuite `a partir de ces trois mod`eles le concept g´en´eral de machine `a ´etats.
118 CHAPITRE 6. M ´ETAPROGRAMMATION STATIQUE
6.3.3 D´efinitions
6.3.3.1 Graphe
Couple constitu´e de deux ensembles de nœuds et d’arcs (ou arˆetes) G = (Q,∆) avec ∆⊂Q×Qpour le cas le plus simple.
Un graphe estvalu´elorsque les arcs portent une information et la valuation est une fonction associant les ´el´ements de ∆ `a des ´el´ements d’un ensemble quelconque I. Il est souvent aussi n´ecessaire de consid´erer des graphes o`u les nœuds portent une information accessible grˆace `a
t : Q→T o`uT repr´esente l’ensemble des valeurs associ´ees aux nœuds. Lorsque le sens des arcs est pertinent, on parle de graphe orient´e.
6.3.3.2 Automate
D´efinition formelle au chapitre 2.
6.3.3.3 Transducteur
Un transducteur peut ˆetre consid´er´e comme un automate dont l’alphabet est constitu´e de couples de lettres. La premi`ere permet de reconnaˆıtre des mots en entr´ee et la seconde d’en ´emettre en sortie ; un transducteur d´efinit donc une fonction de l’ensemble des mots d’entr´ee vers l’ensemble des mots ´emis. C’est un sextuplet (Σ1,Σ2, Q, i, F,∆) o`u :
Σ1 L’alphabet d’entr´ee Σ2 L’alphabet de sortie
Q Un ensemble d’´etats
i∈Q L’´etat initial
F ⊆Q Un ensemble d’´etats terminaux ∆⊆(Q×(Σ1∪ǫ)×(Σ2∪ǫ)×Q) Un ensemble de transitions
On peut naturellement y adjoindre la notion de tags utilis´ee pour les automates.
6.3.3.4 Acc`es nomm´es aux transitions, cl´es, labels et ´etiquettes
On appelle acc`es nomm´e aux transitions sortant d’un ´etat q ∈ Q l’action de s’informer sur l’existence, la destination ou l’information port´ee par une transition de q `a partir d’une cl´e k∈ K. Plus formellement, un acc`es nomm´e est une fonction f :Q×K →∆, avec ∆ le sous ensemble des triplets (q, d, p) d´efinis par la machine o`u d repr´esente le type d’informa-tion port´e par les transid’informa-tions appel´ee ´etiquette (on notera D l’ensemble des ´etiquettes). Par exemple dans le cas des automates, l’´etiquette d ∈ Σ est une lettre de l’alphabet et k ∈ Σ pour permettre des acc`es nomm´es aux transitions lors de la reconnaissance d’un mot. Pour les transducteurs,d∈Σ1×Σ2 est un couple d’´el´ements de l’alphabet d’entr´ee et de l’alphabet de sortie mais k∈Σ1. Ici,ketdne sont pas de mˆeme nature. G´en´eralement pour un graphe on n’a pas besoin de cl´e, les algorithmes ne n´ecessitant pas d’acc`es nomm´es mais cela ne signifie pas forc´ement que les arcs ne portent pas d’information. Par exemple, le probl`eme du voyageur de commerce o`u les villes sont mod´elis´ees par les nœuds et les arcs portent la distance entre deux villes, ne requiert pas d’acc`es aux arcs `a l’aide d’une cl´e mais ils portent tout de mˆeme
6.3. VERS UNE LIBRAIRIE ACTIVE DE MACHINES `A ´ETATS 119 une information. C’est pourquoi il faut faire une distinction claire entre la donn´ee stock´ee sur une transition et la cl´e permettant d’y acc´eder. Dans la grammaire du DSL, l’´etiquette port´ee par une transition est constitu´ee d’une cl´e et d’un label, le label n’intervenant pas dans l’acc`es nomm´e aux transitions. L’existence d’une cl´e est uniquement conditionn´ee par l’algorithme destin´e `a ˆetre appliqu´e `a la machine.
Muni des concepts de cl´e, de label et d’´etiquette nous pouvons donner la d´efinition de ce que nous appellerons une machine `a ´etats.
6.3.3.5 Machine `a ´etats (FSM, Finite State Machine)
Une machine `a ´etats Aest un nonuplet (Q, K, L, D, I, F,∆, T, τ) d’ensembles finis o`u :
Q est un ensemble de nœuds ou ´etats
K est un ensemble de cl´es
L est un ensemble de labels
D⊆K×L est un ensemble d’´etiquettes, c’est-`a-dire de couples cl´e/label (k, l)
I ⊆Q est un ensemble d’´etats initiaux
F ⊆Q est un ensemble d’´etats finaux ou terminaux ∆⊆Q×D×Q est un ensemble d’arcs ou transitions
T est un ensemble de tags
τ ⊆Q×T l’ensemble des couples (q, t) associant un tag `a chaque ´etat
Plus fonctionnellement, on consid`ere l’ensemble ∆ sous forme d’une fonction de transitionδ1
associant un ´etat et une cl´e `a un ensemble de couples ´etiquette/but :
δ1 : Q×K →D×Q
δ1(q, k) ={(d, p)∈D×Q|(q, d, p)∈∆et d= (k, l)}
Le d´eterminisme limite `a un le nombre d’´el´ements de cet ensemble.
On d´efinit aussi la fonction δ2 associant un ´etat `a l’ensemble de ses transitions sortantes :
δ2 : Q→D×Q
δ2(q) ={(d, p)∈D×Q|(q, d, p)∈∆}
De plus, les arcs de la machine sont toujours consid´er´es comme orient´es. On verra un arc (q, p) non orient´e comme une paire d’arcs orient´es (p, q) et (q, p).
Cette d´efinition recouvre les notions de graphe, arbre, automate d´eterministe ou pas, transducteur, machine de Moore et machine de Mealy, automate et transducteur pond´er´es, r´eseau de P´etri, bimachine. Tous les concepts d´efinis ici ne sont pas forc´ement n´ecessaires dans une situation donn´ee et certains ensembles peuvent ˆetre vides, c’est pourquoi la librairie doit pouvoir donner `a l’utilisateur la possibilit´e de choisir ceux qui sont appropri´es et d’ignorer ceux qui ne sont pas pertinents.
120 CHAPITRE 6. M ´ETAPROGRAMMATION STATIQUE
6.4 Le DSL « machine `a ´etat »
La grammaire permettant `a l’utilisateur de construire ses sp´ecifications et de d´ecrire le genre de machine qui l’int´eresse est not´ee plus bas selon un formalisme GenVoca (un mod`ele de construction de g´en´erateur de code [4]) se rapprochant des d´eclarations de patrons en C++ ; cette ´ecriture facilitera le passage `a l’´ecriture du code.
6.4.1 Grammaire
Les symboles non terminaux sont param´etr´es par une liste de symboles entre crochets. Les symboles terminaux sont ´ecrits en gras, Trepr´esente un type quelconque :
fsm : fsm[ transition container type, tag type, optimization flag, edges orientation, final states, initial states, bounds checking ]
transition container type : transition container type[ container multiplicity, key, la-bel type, optimization flag, access complexity ]
container multiplicity : unique|multiple
key : key[ key type, key multiplicity ]|none
key multiplicity : unique|multiple
key type : T|state
label type : T|none
acces complexity : constant time[ mapping, reverse mapping,size_t]|
logarithmic[ order relation ]|
linear[ equiv relation ]|
hashing[ hash function ]
mapping : unary function : key type → unsigned long
reverse mapping : unary function : unsigned long → key type
order relation : binary function : key type × key type → bool equiv relation : binary function : key type × key type → bool hash function : unary function : key type → unsigned long optimization flag : space|speed |tradeoff
tag type : T|none
edges orientation : directed|nondirected
final states : with final states|no final states
initial states : one initial state|several initial states|no initial states
bounds checking : check bounds|no bounds checking
L’axiome, le fsm, est compl`etement d´efini par sept variables : le type du container de tran-sition, le type du tag associ´e `a chaque ´etat, une directive d’optimisation, l’existence d’´etats terminaux et initiaux, deux variables binaires concernant la pr´esence ou l’abscence d’orienta-tion des transid’orienta-tions et la n´ecessit´e ou pas de v´erifier `a l’ex´ecution la validit´e des op´erations demand´ees par l’utilisateur.
Avec une telle grammaire, on est capable de g´en´erer approximativement 3000 structures de donn´ees valides.
6.4. LE DSL «MACHINE `A ´ETAT» 121