Reconnissnce de motifs Prolème locliser les segments d'un texte décrits pr une expression rtionnelle (régulière) r texte t segment x décrit pr r Applictions édition : vi, emcs, sed, ed,... recherche : grep, egrep,... trduction : lex, sed, lngges : wk, perl, compression : compress, gzip, 701 GREP unix > grep toto t.txt produit les lignes de t.txt qui contiennent le mot toto Applictions recherche de fichiers pr le contenu contrôle du contenu d un fichier Versions egrep, fgrep,... 702
Algorithme de se Deux phses 1 génértion d un utomte A( r ) 2 nlyse du texte vec A( r ) les phses peuvent être intégrées texte r génértion A( r ) utomte équivlent nlyse segments reconnus 703 Expression / lngge Expression rtionnelle r Lngge représenté L( r ),, {, {,, A, e, {mot vide [ u, v L(u), L(v) ] (u) L(u) u + v L(u) L(v) uv { xy x L(u), y L(v) u* { x 1 x 2 x k k 0, x i L(u) 1(0+1)*0 {écritures inires des entiers pirs (*)** {suites finies de et (c*l)*c*f {fichiers textes 704
Anlyse des expressions Une grmmire des expressions rtionnelles E fi T T + E T fi F F T F fi S G G fi e * G S fi e ( E ) E expression, T terme F fcteur, S fcteur simple (+)*c {suites finies de et terminées pr c 705 Anlyse de (+)*c E Arre de l nlyse T Grmmire E fi T T + E T fi F F T F fi S G G fi e * G S fi e ( E ) S ( E ) T + E F G * G ε T S c F G ε F T S G F ε S G ε 706
Digrmmes syntxiques Expression Terme + Expression Terme Fcteur Terme Fcteur e ( Expression ) * 707 Algorithme d nlyse crctère cr; /* crctère suivnt, glol */ Anlyse(expression rtionnelle r){ cr premier crctère de r ; Expression(); si(cr fin d expression) erreur(); Expression(){ Terme(); si(cr = + ){ cr crctère suivnt; Expression(); Terme(){ Fcteur(); si(cr {,,, e, ( ) Terme(); 708
Algorithme d nlyse (suite) Fcteur(){ si(cr {,,, e ){ cr crctère suivnt; sinon si(cr = ( ){ cr crctère suivnt; Expression(); si(cr = ) ) cr crctère suivnt; sinon erreur(); sinon erreur(); tnt que(cr = * ) cr crctère suivnt; 709 Digrmmes syntxiques (utre) Expression Terme + Terme Fcteur Fcteur e ( Expression ) * 710
Algorithme d nlyse (utre) crctère cr; /* crctère suivnt, glol */ Anlyse(expression rtionnelle r){ cr premier crctère de r ; Expression(); si(cr fin d expression) erreur(); Expression(){ Terme(); tnt que(cr = + ){ cr crctère suivnt; Terme(); Terme(){ répéter Fcteur(); tnt que(cr {,,, e, ( ) 711 Expression / utomte A( r ) utomte ssocié à l expression rtionnelle r sur l lphet A Invrints de l construction A( r ) possède un seul étt initil i un seul terminl t ucune flèche n entre dns i ucune flèche ne sort de t Grphique A( r ) : i r t 712
Trnsformtion Expr. rt. Aut. équiv. Expr. rt. Aut. équiv. e u + v u v (u) u u* u uv u v 713 Automte otenu Proposition A( r ) reconnît le lngge L( r ) Propriétés supplémentires A( r ) possède 2. r étts, sns compter ( ni ) de chque étt sortent u plus 2 flèches si exctement 2, elles sont sns étiquette sur chque étt rrivent u plus 2 flèches 714
Exemple Expression : (* + + )* 1 2 9 3 4 10 15 5 6 7 8 16 11 12 13 14 17 18 19 20 reconnu? non, mis infinité de chemins d origine 17 et d'étiquette 715 étt = indice tle des flèches struct{ crctère lettre; étt suiv1, suiv2; Trns[MAX]; utomte (identifié à 2 étts) struct{ étt initil; étt terminl; utomte; Trns p p1 q q1 q2 Implnttion dptée initil = 17 terminl = 20 1 2 2 1 4 3 1 4 4 10 5 6 6 7 7 8 8 10 9 3 5 10 16 11 12 12 13 13 14 14 16 15 9 11 16 15 18 17 15 18 18 19 19 20 20 716
Algorithme de trduction Production de l utomte A( r ) ssocié à l expression rtionnelle r Anlyse(expression rtionnelle r){ cr premier crctère de r ; A Expression(); si(cr fin d expression) erreur(); sinon retour A; 717 Algorithme de trduction (suite) Expression(){ A Terme(); tnt que(cr = + ){ cr crctère suivnt; B Terme(); A Union(A,B); retour A; Terme(){ A Fcteur(); tnt que(cr {,,, e, ( ){ B Fcteur(); A Produit(A,B); retour A; 718
Algorithme de trduction (suite) Fcteur(){ si(cr {,,, e ){ A Automte-élémentire(cr); cr crctère suivnt; sinon si(cr = ( ){ cr crctère suivnt; A Expression(); si(cr = ) ) cr crctère suivnt; sinon erreur(); sinon erreur(); tnt que(cr = * ){ A Etoile(A); cr crctère suivnt; retour A ; 719 Reconnissnce (vec utomte non-déterministe) Écrire une fonction ooléen reconnît( utomte A, mot x ) qui prend l vleur vrie ssi il existe un chemin d'étiquette x depuis A.initil jusqu à A.terminl Progrmmtion pr essis et erreurs (ttention ux cycles) progrmmtion dynmique (mémoristion des étts possiles) Clôture clôture(p) = { étts ccessiles à prtir p pr chemins sns étiquette 720
Clôture Clôture de 17 = {1,3,4,5,9,10,11,15,16,17,18,19 17 15 18 1 2 3 9 5 11 19 9 3 4 10 1 4 15 5 6 7 8 16 10 11 12 13 14 17 18 19 20 16 721 Reconnissnce Expression : (* + + )* Reconnissnce de 1 2 9 3 4 10 15 5 6 7 8 16 11 12 13 14 17 18 19 20 Étt initil 17 Clôture {1, 3, 4, 5, 9, 10, 11, 15, 16, 17, 18, 19 722
Reconnissnce (suite) Expression : (* + + )* Reconnissnce de 1 2 9 3 4 10 15 5 6 7 8 16 11 12 13 14 17 18 19 20 {1, 3, 4, 5, 9, 10, 11, 15, 16, 17, 18, 19 Trnsition pr {2, 20 Clôture {1, 2, 3, 4, 5, 9, 10, 11, 15, 16, 18, 19, 20 723 Reconnissnce (suite) Expression : (* + + )* Reconnissnce de 1 2 9 3 4 10 15 5 6 7 8 16 11 12 13 14 17 18 19 20 {1, 2, 3, 4, 5, 9, 10, 11, 15, 16, 18, 19, 20 Trnsition pr {6, 12 Clôture {6, 7, 12, 13 724
Reconnissnce (suite) Expression : (* + + )* Reconnissnce de 1 2 9 3 4 10 15 5 6 7 8 16 11 12 13 14 17 18 19 20 {6, 7, 12, 13 Trnsition pr {14 Clôture {1, 3, 4, 5, 9, 10, 11, 14, 15, 16, 18, 19 non reconnu cr 20 non tteint 725 Algorithme de reconnissnce ooléen reconnît(utomte A, mot x){ ensemle E; E clôture(a.initil); tnt que(non fin de x){ cr lettre suivnte de x; E clôture(trnsition(e,cr)); si(a.terminl E) retour(vri); sinon retour(fux); Lecture séquentielle du mot. Mémoristion (tmpon) d'une seule lettre de x. Temps : O(n étts de A. x ) (si onne gestion de l ensemle E) 726
Recherche de motif Motif défini pr l'expression rtionnelle r A( r ) utomte ssocié à r Motif dns le texte texte t segment x reconnu pr A( r ), x L(r) Principe de l recherche comme reconnissnce vec : jout l étt initil à chque position rrêt de l recherche dès que l étt terminl est tteint 727 Algorithme de recherche ooléen recherche(utomte A, mot t){ ensemle E; E clôture(a.initil); tnt que(non fin de t){ cr lettre suivnte de t; E clôture({a.initil trnsition(e,cr)); si(a.terminl E) retour(vri); retour(fux); Lecture séquentielle du texte. Mémoristion (tmpon) d'une seule lettre de t. Temps : O(n étts de A. t ) (si onne gestion de l ensemle E) 728
Compromis temps-espce expression rtionnelle r utomte non-déterministe A ( n d'étts 2 r ) déterministion utomte déterministe (n d'étts = O(2 r ) ) simultion de l'utomte déterministe recherche dns t en temps O( t ) recherche dns t en temps O( r. t ) 729 déterministion simultion temps de O( t ) O( r. t ) l recherche espce O(2 r ) O( r ) 730
LEX Crétion d'nlyseurs lexicux ou de trducteurs lex.1 spécifictions en Lex compilteur Lex lex.yy.c nlyseur lexicl en C compilteur C.out nlyseur lexicl source Spécifictions : déclrtions %% règles de trductions %% procédures uxiliires suite des unités lexicles (trduction) 731 % {/* définitions des constntes littérles */ PPQ, PPE, EGA, DIF, PGQ, PGE, SI, ALORS, SINON, ID, NB, OPREL % /* définitions régulières */ délim [ \t\n] l {delim+ lettre [A-Z-z] chiffre [0-9] id {lettre+({lettre {chiffre)* nomre {chiffre+(\.{chiffre+)?(e[+\-]?{chiffre+)? %% {l {/* ps d'ction et ps de retour */ si {return (SI) ; lors {return (ALORS) ; sinon {return (SINON) ; {id {yylvl = RngerId ( ) ; return (ID) ; {nomre {yylvl = RngerN ( ) ; return (NB) ; "<" {yylvl = PPQ ; return (OPREL) ; "<=" {yyvl = PPE ; return (OPREL) ; "=" {yyvl = EGA ; return (OPREL) ; "<>" {yyvl = DIF ; return (OPREL) ; ">" {yyvl = PGQ ; return (OPREL) ; ">=" {yyvl = PGE ; return (OPREL) : 732
%% RngerId(){ /* procédure qui rnge dns l tle des symoles le lexème dont le premier crctère est pointé pr yytext et dont l longueur est yyleng, et retourne un pointeur sur son entrée */... RngerN(){ /* procédure similire pour rnger un lexème qui est un nomre */... 733 Recherche d'un mot Recherche des positions du mot x dns le texte t Pr lyges (guche-droite) et déclges texte t mot x fenêtre c c d... c d Vriles de trvil 0 pos j n texte t mot x 0 i m 734
Algorithme nïf Nif(mot x, longueur m, mot t, longueur n){ j 0; i 0; tnt que (i < m) et (j < n){ si (x[i] = t[j]){ j j+1; i i+1; sinon { j j-i+1; i 0; fin ; si (i > m) écrire(mot trouvé à l position j-i); sinon écrire(ps d'occurrence de x dns t); Temps mximl O(m.n)» m.n comprisons u pire Temps moyen O(n)» 2.n comprisons moyennes sur lphet inire (équiproilité et indépendnce) 735 Méthode de Knuth, Morris & Prtt KMP : lyges guche-droite et déclges comptiles texte t mot x fenêtre c c d... c d c d Bords : Bord(c) = Longueur des ords des préfixes : ord [ i ] = Bord( x[0..i-1] ) i 0 1 2 3 4 5 6 7 8 x[ i ] c d ord [ i ] -1 0 0 1 0 1 2 3 0 736
Recherche KMP 0 pos j n texte t mot x i = ord [ i ] 0 i m 0 i m 737 Algorithme KMP(mot x, longueur m, mot t, longueur n){ j 0 ; i 0 ; tnt que (i < m) et (j < n){ tnt que (i > 0) et (x[i] t[j]) i ord[i] ; j j+1 ; i i+1 ; si (i = m) écrire(mot trouvé à l position j-m); sinon écrire(ps d'occurrence de x dns t); Temps O(n) moins de 2.n comprisons recherche séquentielle (j ne décroît jmis) recherche linéire mis ps en temps réel 738
Clcul des ords Bords : Bord(u) = plus long préfixe et suffixe propre de u Note : le ord d un ord est un ord Bord( c c) = c Bord( c ) = Bord( c d) = ε mot x 0 j i m j = ord [ i ] si = ord [ i+1 ] = ord [ i ] +1 = j +1 sinon fire le clcul vec sur Bord(x[0.. j-1]) 739 Algorithme BORDS(mot x, longueur m){ ord[0] -1 ; pour i 0 à m-1 fire { j ord[i] ; tnt que (j 0) et (x[i] x[j]) j ord[j] ; ord[i+1] j+1 ; retour ord ; Temps O(m), moins de 2.m comprisons Comme l recherche! mot x 0 j i m j = ord [ i ] 740
Méthode de Boyer-Moore (simplifiée) BM : lyges droite-gucheet déclges comptiles vec l lettre différente du texte texte t mot x fenêtre d c d... c c c c c c Positions c d e... Pos x [ ] 1 6 2 8 8... c c c Pos x [ ]=6 741 Recherche BM texte t mot x 0 j j n 0 i m 0 i Vleurs de i et j près déclge Pos[ ] i = m j = j + Pos x [ t [ j ] ] si Pos x [ t [ j ] ] > m - i + 1 m - i + 1 sinon 742
Algorithme BM BM(mot x, longueur m, mot t, longueur n){ j m-1 ; j m-1 ; tnt que (i 0) et (j < n) si(x[i] = t[j]){ j j-1 ; i i-1 ; sinon { j j + mx{pos[j],m-i+1 ; i m-1 ; si (i = -1) écrire(mot trouvé à l position j+1); sinon écrire(ps d'occurrence de x dns t); Temps mximl O(m.n) Temps, sur des textes en lngue nturelle, proche du miniml : Θ(n / m) 743 Clcul de Pos Positions(mot x, longueur m){ pour chque lettre fire Pos[] m ; pour i 0 à m-2 fire Pos[x[i]] m-i-1 ; retour Pos ; 0 1 7 c c c Pos[]=6 Temps O(m + crd A) 744