Prolog

TD n°4

But du TD

Réaliser une « analyse syntaxique » rudimentaire des questions de la forme « qui est le/la père/mère/frère/soeur... [du/de la père/mère/frère/soeur...[...]] de andré/augustine/bernard... » (les crochets designent ce qui est facultatif, les barres obliques « / » désignent les choix multiples) sachant que : Autrement dit, on vise l'écriture d'un prédicat analyse(L) qui est vrai si L est une liste de la bonne forme, faux sinon.

Problème

Ces questions sont construites sur un vocabulaire fini mais il y en a une infinité possible à cause des appels successifs non bornés autorisés. Il va falloir utiliser de la récursivité !

Solution

L'analyse syntaxique va être réalisée par un dispositif très utile en informatique : un automate fini.

Automates

Définition

Un automate est un dispositif constitué de : Un chemin dans un automate commence nécessairement à partir d'un état initial, suit les transitions et aboutit à un état final. Une suite de mots est reconnue par l'automate s'il existe un chemin dans cet automate dont les transitions successives coincident avec cette suite de mots.
Un automate réalise exactement ce que l'on veut, à savoir trier un suite de mots en correcte ou pas correcte.

Remarques

Exercices sur papier : l'automate

  1. Écrire (sur papier) un automate qui reconnaît tous les groupes nominaux masculins singuliers possibles des questions, sans emboîtement : le père/frère/grand-père... de andré/augustine/bernard.
    Attention aux cas particuliers « oncle », « enfant » et « ancêtre » : comme ils commencent par une voyelle, ils sont précédés de « l' » et non de « le ».
  2. Écrire maintenant la même chose pour les groupes nominaux féminins singuliers, puis assembler les deux, et compléter pour avoir un automate avec un seul état initial et reconnaissant les questions quelconques avec un seul lien de parenté (sans emboîtement). Numéroter les états : l'état initial a le numéro 1.
  3. Que faut-il ajouter pour emboîter les liens de parenté ?

Traduction en Prolog

Pour traduire en Prolog ce que réalise cet automate, il suffit de se rendre compte qu'en fait, chaque état (de numéro n) de l'automate peut être associé à un prédicat étatn(L) qui est vrai si la liste L permet, à partir de l'état n, d'arriver à un état final. Alors, le prédicat analyse(L) se confondra avec le prédicat etat1(L).
Il reste à donner la définition de chacun des prédicats étatn(L) :  
Dernière modification : 9/9/2011
Valid HTML 4.01! Valid CSS!