• Aucun résultat trouvé

TP 4 : Procédure de Berry-Sethi

N/A
N/A
Protected

Academic year: 2022

Partager "TP 4 : Procédure de Berry-Sethi"

Copied!
2
0
0

Texte intégral

(1)

Lycée La Martinière Monplaisir

Option Informatiqe 2eannée TP 4 : Procédure de Berry-Sethi

TP 4 : Procédure de Berry-Sethi

Judicaël Courant 2017-W48-4 (30 novembre)

Le but de ce problème est d’implanter la pro- cédure de Berry-Sethi de construction d’un au- tomate (automate de Glushkov) reconnaissant une expression rationnelle donnée. Un fichier berry-sethi.mlcontenant les définitions de type données ci-dessous est disponible sur le site.

On commence par définir un type des ensembles finis. Il s’agit en fait juste d’une abréviation : hberry-sethi.mli≡

(* type des ensembles finis *) type ’a ensf == ’a list;;

Cependant, par la suite, lorsqu’on utilisera le type’a ensf, ce sera toujours pour désigner une liste triée par ordre croissant, sans répétition : lors- qu’on demandera une fonction prenant un argu- ment de type’a ensf, on pourra toujours suppo- ser que cet argument est bien une liste triée sans répétition ; lorsqu’on demandera une fonction re- tournant un résultat de type ’a ensf, il faudra s’assurer que le résultat est bien trié et sans répéti- tion.

Q0 Définir une fonction inter : ’a ensf -> ’a ensf -> ’a ensf retournant l’intersec- tion des deux ensembles qui lui sont passées en ar- gument. On utilisera le fait que les listes passées en argument sont bien triées pour faire en sorte que l’appel(inter u v)s’exécute en tempsO(n)où nest le maximum des cardinaux deuetv.

Q1 Définir une fonction union : ’a ensf -> ’a ensf -> ’a ensfretournant l’union des deux ensembles qui lui sont passées en argument.

On utilisera le fait que les listes passées en argu- ment sont bien triées pour faire en sorte que l’appel (union u v)s’exécute en tempsO(n)oùnest le maximum des cardinaux deuetv.

Q2 Définir une fonction union_liste :

’a ensf list -> ’a ensf retournant l’union d’une liste d’ensembles. Indication : pour respec- ter les contraintes données plus loin sur la fonction ensemble, il peut être malin d’écrire cette fonction de la façon suivante : le cas où la liste est vide ou ne contient qu’un élément est trivial, et le cas où la liste contient au moins deux éléments peut se faire en prenant l’union deux à deux des éléments de la liste ; il ne reste alors plus qu’à calculer l’union d’une liste deux fois plus courte.

Q3 Définir une fonction union_fun : ’a list -> (’a -> ’b ensf) -> ’b ensf qui, étant donné un ensemble I et une fonction f, calculeS

i∈If(i).

Q4 En déduire une fonction ensemble : ’a list -> ’a ensfprenant en argument une liste et retournant l’ensemble de ses éléments, c’est-à- dire la triant et expurgeant les doublons. On fera en sorte que cette fonction s’exécute en temps O(nlogn)oùnest la longueur de la liste. Indica- tion : cette fonction peut s’écrire en une ligne.

Q5 Écrire une fonction ajoute : ’a -> ’a ensf -> ’a ensf ajoutant un élément à un en- semble.

Q6 Définir une fonctionparties : ’a ensf -> ’a ensf ensf calculant l’ensemble des par- ties d’un ensemble.

On représentera les automates finis (détermi- nistes ou non) par le type suivant :

hberry-sethi.mli+≡

type (’a, ’b) automate = { alphabet : ’a ensf;

etats : ’b ensf;

initiaux : ’b ensf;

finaux : ’b ensf;

transitions : (’b * ’a * ’b) ensf;

Judicaël Courant - 2017-W48-4 (30 novembre) 1/2 Document sous licence Art Libre (http://artlibre.org)

(2)

Lycée La Martinière Monplaisir

Option Informatiqe 2eannée TP 4 : Procédure de Berry-Sethi

}

;;

type ’a mot = ’a list;;

Lorsque l’automate sera déterministe, l’en- semble des états initiaux sera un singleton et l’en- semble des transitions sera tel que pour tout état couple(q, x)d’un étatq et d’une lettrex il existe au plus une transition(q, x, q0).

Q7 Écrire une fonction execute_lettre : (’a, ’b) automate -> ’b -> ’a -> ’b ensf qui, à partir d’un automate A, d’un état q et d’une lettre x calcule l’ensemble, noté δ(q, x), constitué des états sur lesquels arrive une transition venant de l’étatqétiquetée parx.

Q8 Écrire une fonction execute : (’a,

’b) automate -> ’b ensf -> ’a mot -> ’b ensfqui, à partir d’un automateA, d’un ensemble d’états E et d’un mot u calcule l’ensemble, noté δ(E, u), constitué des états pouvant être atteints dans l’automate A à partir d’un état de E en exécutant le motu.

Q9 Écrire une fonctionest_reconnu : (’a,

’b) automate -> ’a mot -> booldisant si le mot donné est reconnu par l’automate donné.

Q10 Écrire une fonctiondeterminise : (’a,

’b) automate -> (’a, ’b ensf) automate retournant l’automate déterministe associé à un automate donné.

On définit le type des expressions rationnelles comme suit :

hberry-sethi.mli+≡

type ’a rat =

| Zero

| Un

| Lettre of ’a

| Somme of ’a rat * ’a rat

| Produit of ’a rat * ’a rat

| Etoile of ’a rat

;;

Q11 Écrire une fonctionalphabet : ’a rat -> ’a set retournant l’alphabet employé dans une expression rationnelle, c’est-à-dire l’ensemble desxpour lesquels(Lettre x)apparaît dans l’ex- pression.

Q12 Écrire une fonctioncontient_epsilon :

’a rat -> booldisant si une expression ration-

nelle contient le mot vide (cf cours).

Q13 Écrire une fonctionpref1 : ’a rat ->

’a setretournant l’ensemble des préfixes de lon- gueur 1 d’une expression rationnelle. Écrire de même une fonctionsuf1 : ’a rat -> ’a suf retournant l’ensemble des suffixes de longueur1.

Q14 Écrire une fonction succ : ’a rat ->

’a -> ’a settelle que(succ e x)retourne l’en- semble des lettresytelles quexysoit un facteur du langage associé àe.

Q15 Écrire une fonction aut_local : ’a rat -> (’a, ’a option) automate telle que (aut_local e), où le langage associé àeest sup- posé être local, retourne l’automate local associé à ce langage. L’ensemble des états sera représenté par le type Caml’a option: l’état initial sera re- présenté parNoneet pour tout lettrea, les transi- tions étiquetées paraarriveront sur l’étatSome a.

Q16 Écrire une fonctionlinearise : ’a rat -> (’a * int) rat telle que (linearise e) retourne une expression rationnelle linéaire obte- nue en remplaçant chaque lettre x de e par une lettre (x, i) où i est un entier, de façon à ce que les entiers soient tous distincts.

Q17 Écrire une fonction

applique_morphisme : (’a, ’b) automate -> (’a -> ’c) -> (’c, ’b) automate telle que (applique_morphisme a f) retourne l’automate ayant les mêmes états queamais dans lequel chaque transition étiquetée par une lettre xa été remplacée par une transition étiquetée par (f x).

Q18 Écrire une fonction glushkov : ’a rat -> (’a, (’a * int) option) automate retournant l’automate de Glushkov associé à une expression rationnelle.

Q19 Écrire une fonction afd : ’a rat ->

(’a, (’a * int) option set) automate telle que (afd e) retourne le déterminisé de l’automate de Glushkov associé à l’expression rationnellee.

Judicaël Courant - 2017-W48-4 (30 novembre) 2/2 Document sous licence Art Libre (http://artlibre.org)

Références

Documents relatifs

[r]

(b) Cette proposition réciproque est-elle

Donc l’expression est positive à l’extérieur des racines... Il suffit de donner

[r]

[r]

ATTENTION : La lecture de cette fiche de révision ne remplace en rien l’étude approfondie du cours (lecture attentive). Cette fiche a uniquement pour but de vous donner des points de

D´ emontrer que f est born´ ee, continue et d´ erivable

[r]