• Aucun résultat trouvé

Vers une librairie active de machines ` a ´etats

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 (Σ12, 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