• Aucun résultat trouvé

Relation avec la programmation logique

Partie I Ecriture et maintenance des grammaires lexicalis´ ´ ees 31

2.4 Une solution : la m´etagrammaire

3.1.1 Relation avec la programmation logique

Mˆeme si la notion de r´eutilisation et d’alternative aurait pu ˆetre exprim´ee de diverses mani`eres, nous avons choisi d’utiliser le paradigme de la programmation logique qui nous semblait ˆetre en ad´equation avec la probl´ematique de l’organisation d’une grammaire.

Cette description concise, que l’on appelle m´etagrammaire, est `a mettre en relation avec un programme logique. Il existe une analogie entre les deux. Au niveau de l’´ecriture de cette description, la syntaxe concr`ete est influenc´ee par celle des langages de program-mation logique. Il n’y a pas d’affectation, uniquement de l’unification.

Dans un programme logique l’unit´e de base est la clause et on retrouve cette notion dans la m´etagrammaire sous la forme de fragment nomm´e et r´eutilisable, ou classe dans la terminologie de Xmg. Les clauses peuvent ´enoncer un axiome ou ˆetre construites `a partir d’autres clauses tandis que dans la m´etagrammaire on aura des fragments ind´ependants ou construits `a partir d’autres fragments. Ces constructions sont dans les deux cas similaires.

On peut indiquer grˆace `a la conjonction et `a la disjonction de clauses/fragments deux types de constructions diff´erentes :

la conjonction : elle permet de dire que l’on r´eutilise tous les fragments op´erandes de la conjonction pour construire le fragment r´esultat.

la disjonction : elle indique que l’un des fragments op´erandes doit ˆetre r´eutilis´e pour obtenir le fragment r´esultat.

Enfin, certaines classes sont annot´ees pour indiquer qu’elles repr´esentent une structure linguistique compl`ete. C’est l’´equivalent des requˆetes que l’on peut formuler dans un progamme logique et qui d´eclenchent une ´evaluation.

On le voit, dans Xmg, le nombre de primitives pour la combinaison de fragments est limit´e : il n’en existe que deux. La m´etagrammaire peut donc se repr´esenter

graphi-3.1. Principes g´en´eraux quement comme un graphe et/ou, ou de mani`ere plus compacte comme une grammaire hors-contexte. Les structures compl`etes correspondent `a la r´eunion des fragments contenus dans les classes rencontr´ees lors d’un parcours dans un tel graphe ou de mani`ere analogue `a une d´erivation dans la grammaire correspondante. Le squelette de la m´etagrammaire peut donc ˆetre vu comme une grammaire hors-contexte dont les terminaux ne sont pas des mots mais des fragments de structures. Dans Xmg, c’est plus particuli`erement l’analogie avec les grammaires de clauses d´efinies (Dcg) (´equivalentes aux Cfg dans la version simple o`u les clauses n’ont pas d’argument) qui a ´et´e retenue pour sa notion d’accumulateur et pour la place pr´epond´erante de l’op´eration d’unification. `A chaque fois qu’une classe est

´evalu´ee, on accumule le fragment qu’elle contient et on r´ealise les unifications indiqu´ees.

A la fin de l’´evaluation, on dispose d’un accumulateur contenant tous les fragments des` classes rencontr´ees lors d’une ´evaluation, dont certaines parties ont ´et´e unifi´ees.

Cette fa¸con de voir les m´etagrammaire, cette interpr´etation, nous permet de rester dans un cadre formel connu avec des algorithmes de traitement efficaces.

Combinaisons de classes

Par exemple, consid´erons l’arbre syntaxique associ´e `a une entr´ee lexicale telle quevoit (i.e. un verbe transitif). Disposant des fragments d’arbres Sujet, Actif et Objet, nous pouvons r´e´ecrire l’arbreV erbeT ransitif comme la conjonction de ces 3 fragments :

VerbeTransitif Sujet Actif Objet

S

N V N

S

N V

+

S

V

+

S

V N

Ce qui s’´ecrit ´egalement comme suit11 :

VerbeTransitif → Sujet∧Actif∧Objet (3.1) Nous nous ramenons ainsi au formalisme des grammaires de clauses d´efinies (Dcg), dans lequel les terminaux ne seraient pas des mots mais des fragments d’arbres. La conjonction permet donc d’exprimer la construction par r´eutilisation de fragments. Ces fragments sont nomm´ees. Ce nom permet de r´eutiliser cet ensemble, d’y r´ef´erer de mani`ere univoque.

Les Dcg fournissent ´egalement une autre op´eration, la disjonction. Elle va nous permettre d’´etablir les alternances, et plus g´en´eralement de nommer des ensembles de constructions alternatives. Plus pr´ecis´ement, la disjonction permet de cr´eer des classes d’´equivalences que l’on peut nommer et donc r´eutiliser. Elles servent `a expliciter les al-ternances. Ainsi, nous pouvons pr´eciser l’exemple pr´ec´edent de l’arbre associ´e aux verbes transitifs en sp´ecifiant que le sujet peut ˆetre sous forme canoniqueou sous forme relative.

Cela s’´enonce via la r`egle suivante :

Sujet → SujetCan∨SujetRel (3.2)

11. Attention, dans le cas d’une utilisation r´eelle avecXmg, il faudrait indiquer que les nœudsS et les nœudsV doivent s’unifier.

En r´ealit´e, la conjonction et la disjonction sont des coquilles vides : rien n’a encore ´et´e dit au sujet la s´emantique de la ¡¡r´eutilisation¿¿. Elles permettent uniquement de d´ecrire l’organisation des classes entre elles, en terme de r´eutilisation et d’alternance.

La conjonction va ˆetre selon le contexte instanci´ee vers une certaine op´eration logico-alg´ebrique (nous parlerons de la notion de dimension plus-bas) comme par exemple l’uni-fication ou encore la conjonction d’une certaine logique. Il n’y a pas de m´ecanisme de croisement implicite – en tout cas, dans le langage noyau. Le grammairien doit sp´ecifier tous les croisements12, ce qui lui donne un grand contrˆole sur la grammaire produite, per-met d’´eviter de g´en´erer des structures non-voulues (probl`eme de la surg´en´eration) mais peut s’av´erer fastidieux. La section 3.1.3 pr´esente une solution `a ce probl`eme pour rendre implicite une partie des croisements ou des unifications.

Gestion des identifiants

Un soin tout particulier a ´et´e pris pour assurer la facilit´e du d´eveloppement de gram-maires importantes. Un des probl`emes ´evoqu´es au chapitre pr´ec´edent est celui de la col-lision de noms qui est in´evitable dans les formalismes o`u les noms sont globaux. Dans Xmg, nous avons choisi une approche radicalement diff´erente : les noms n’ont de port´ee qu’au sein d’une classe.

Dans ce cas, les collisions ne peuvent donc se produire qu’entre identifiants d’une mˆeme classe, ce qui n’arrive pas en pratique. Cependant, cette solution est trop restrictive.

L’utilisateur a souvent besoin quand il r´eutilise des classes (par conjonction ou disjonction) de faire explicitement r´ef´erence `a des nœuds qui sont d´esign´es par des variables pour leur ajouter de l’information, les unifier, ou pour toute autre op´eration. Il convient donc de pouvoir acc´eder `a l’int´erieur d’une classe aux nœuds d´efinis dans une autre classe.

Nous avons mis en place un m´ecanisme d’import ou d’export de noms entre classes.

Une classe d´eclare donc explicitement quelles sont les variables qui seront accessibles aux classes qui la r´eutiliseront. Quand une classe A r´eutilise une classe B, elle peut acc´eder aux variables export´ees par B, par l’interm´ediaire d’une notation point´ee. Elle acc`ede uniquement `a ces variables export´ees. Les conflits de noms sont donc rares dans Xmg. H´eritage

D’autres op´erations peuvent ˆetre construites `a partir des deux primitives. Par exemple, la notion d’h´eritage entre fragments utilise la conjonction en lui ajoutant un import d’iden-tifiants qui est une op´eration que nous d´efinirons plus bas.

Intuitivement, si la classe B d´efinit un fragment b et h´erite de la classe A qui, elle, d´efinit un fragment a alors le contenu de B est la conjonction des fragments a et b et l’espace de nommage de A est fusionn´e `a celui de B, c’est `a dire que les variables locales de la classeAsont ajout´ees aux variables locales deB. L’h´eritage permet de partager des variables entre plusieurs classes.

Xmg autorise l’h´eritage multiple. Une classe peut importer le contenu et l’espace de nommage de plusieurs autres classes. Si plusieurs classes exportent les mˆemes noms,

12. Nous appelons ici croisement tout emploi de la conjonction ou de la disjonction.

3.1. Principes g´en´eraux le syst`eme devrait ´echouer. Pour des raisons pratiques13, dans l’implantation seule la derni`ere classe import´ee exportera r´eellement ce nom et un message d’avertissement si-gnale le probl`eme.

Evaluation´

Enfin, dans un programme logique, une ex´ecution correspond `a une requˆete. De mani`ere analogue, on peut demander `a ´evaluer un ou plusieurs fragments de la m´etagrammaire.

Cette ´evaluation va d´eclencher tous les croisements indiqu´es par les conjonctions et dis-jonctions, `a partir du fragment soumis `a ´evaluation. Comme notre m´etagrammaire est un programme logique, ceci revient `a retrouver toutes les d´erivations de la classe ´evalu´ee dans une Dcg.

Dans notre exemple si l’on demande l’´evaluation de la classe associ´ee aux verbes tran-sitifs (dans notre outilvalue VerbeTransitif), on va expliciter la classe en rempla¸cant chaque nom par son contenu. Ici, on va remplacer l’appel `a Sujet par la disjonction as-soci´ee. Ceci nous donnera :

VerbeTransitif → (SujetCan∨SujetRel)∧Actif∧Objet (3.3) On calcule la forme normale disjonctive de la formule associ´ee `aVerbeTransitif et pour chaque membre de la disjonction on utilise la s´emantique associ´ee `a la conjonction pour assembler les fragments.

VerbeTransitif → (SujetCan∧Actif∧Objet)∨(SujetRel∧Actif∧Objet) (3.4)

VerbeTransitif1 → SujetCan∧Actif∧Objet (3.5)

VerbeTransitif2 → SujetRel∧Actif∧Objet (3.6)

Xmg va ensuite pour chacune des formules inf´er´ees ´enum´erer les mod`eles. Un mod`ele est un n-uplet (D1, . . . , Dn) o`u Di est la restriction d’un mod`ele pour un type d’infor-mation donn´e, ce que nous appelons une dimension. En pratique, Xmg permet d’´ecrire des classes `a trois dimensions. Les mod`eles sont donc des triplets (D1, D2, D3) o`u D1 est une description d’arbres,D2 est une description de pr´edicats, et D3 est une structure de traits.

En pratique, on ne calcule pas la forme normale disjonctive, on utilise une m´ethode plus efficace. La recherche de mod`eles s’effectue selon la m´ethode de r´esolution qui fonde la programmation logique, d´efinie par [Rob65]. En d’autres termes, on ne calcule pas explicitement la forme normale disjonctive mais on utilise le m´ecanisme de retour arri`ere (backtracking) pour factoriser les parties communes.

Le but de cette section ´etait de pr´esenter l’organisation des fragments dans notre formalisme et de montrer qu’il y a bien une interpr´etation dynamique de ces classes. Le comportement deXmg est donc tr`es similaire `a un interpr`ete Prolog.

13. Nous avons consid´er´e que le compilateur ne devait pas imposer une politique de nommage aux utilisateurs. Ce choix est discutable, il est vrai.