Vous êtes sur la page 1sur 30

Ple Universitaire Franais ` Ho Chi Minh Ville o c a Licence dinformatique L3

Universit Bordeaux 1 e J1INPW11 - Informatique thorique 2 e

Notes de cours
Anne Dicky 4 mai 2012 Table des mati`res e
1 Mots et langages 1.1 Dnitions et notations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . e 1.2 Oprations courantes sur les mots . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . e 1.3 Langages . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2 Langages et automates 2.1 Automates nis dterministes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . e 2.2 Automates non dterministes - Langages reconnaissables . . . . . . . . . . . . . . . . . . . e 2.3 Langages rationnels . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3 Grammaires algbriques e 3.1 Dnitions et notations . . . . . . . . . . . . . . . . . . . . . e 3.2 Exemple : les expressions arithmtiques . . . . . . . . . . . . e 3.3 Langages algbriques . . . . . . . . . . . . . . . . . . . . . . . e 3.4 Transformations de grammaires algbriques . . . . . . . . . . e 3.5 Algorithme de reconnaissance CYK (Cocke-Younger-Kasami) 2 2 3 3 4 5 14 20 24 25 26 28 29 30

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

Mots et langages

Le traitement automatique de linformation consiste en manipulations de la forme des donnes ` e a traiter, indpendamment du sens quon peut leur donner (exemple : lalgorithme quon applique quand on e pose une addition ou une multiplication est en fait une manipulation de signes, et non une manipulation de nombres).

1.1

Dnitions et notations e

Par analogie avec le langage crit naturel, on appelle alphabet un ensemble non vide de symboles e inscables (chires, signes...), et lettres les symboles eux-mmes (quon dsigne en gnral par des lettres e e e e e minuscules du dbut de lalphabet : a, b, c...) e Un mot est une suite nie de lettres (on dsigne gnralement les mots par des lettres minuscules de e e e la n de lalphabet : u, v, w, x, y, z...) La longueur dun mot est son nombre de lettres. Le mot vide, gnralement not , est le mot comportant zro lettre (comme la cha de caract`res vide ""). e e e e ne e Etant donn un alphabet A, on note A lensemble (inni) des mots composs de lettres de A. e e Un langage est un ensemble de mots. Exemples : Les critures dcimales dentiers naturels sont des mots non vides sur lalphabet {0, 1, . . . , 9}. e e Lensemble des mots possibles sur un alphabet ` une seule lettre correspond aux reprsentations a e unaires des entiers naturels (a pour 1, aa pour 2, aaa pour 3... et pour 0). Les critures binaires sur 1 octet (reprsentations des caract`res ASCII) forment un langage ni de e e e 256 mots sur lalphabet {0, 1}. Lensemble des mots-cls du langage C (if, else, break, while...) est un langage ni sur lalphabet e des caract`res de a ` z. e a Le contenu dun chier de texte, et en particulier le texte source dun programme C, est un mot sur lensemble des caract`res imprimables (y compris lespace, lalina, la tabulation...) De ce point de e e vue, le langage C est aussi un langage formel (inni) : lensemble de tous les programmes sources possibles, cest-`-dire des textes conformes ` la syntaxe de C. a a
Remarque : Pour viter dalourdir les notations, on notera (abusivement) de la mme faon e e c - une lettre a : dans la phrase soit a une lettre de lalphabet , a est un simple identicateur (comme un nom de variable dans un langage de programmation) - la lettre a, comme dans la phrase pour lordre usuel des caract`res ASCII, Z < a e - et le mot compos de la seule lettre a, comme dans la phrase le prxe de longueur 1 du mot e e arc est a .

1.2

Oprations courantes sur les mots e

Longueur : la longueur dun mot est son nombre de lettres. On note gnralement |u| la longueur e e dun mot u. Par exemple, |anne| = 4. Nombre doccurrences dune lettre dans un mot : on note gnralement |u|a le nombre de e e lettres a apparaissant dans le mot u. Par exemple, |anne|n = 2. Concatnation, note par un point (souvent omis) : u.v est le mot form des mots u et v mis bout e e e a ` bout. Par exemple, la concatnation des mots aab et cb est le mot aabcb. e Remarque : la concatnation est associative (identit (u.v).w = u.(v.w)) mais non commutative (on e e na pas, en gnral, u.v = v.u : si lalphabet comporte au moins deux lettres a et b, le mot ab = a.b e e est distinct du mot ba = b.a). Puissance : dnie par rcurrence ` partir de la concatnation, par u1 = u et un+1 = u.un ; par e e a e convention, u0 = . Miroir : le miroir u est le mot u renvers. Par exemple, le miroir du mot anne est enna. e Dnitions : facteur, facteur gauche ou droit e On dit quun mot u est un facteur dun mot v sil existe des mots u1 et u2 (ventuellement e vides) tels que u1 .u.u2 = v. (Si u est distinct de v, on dit que u est un facteur propre de v). On dit que u est un facteur gauche (ou prxe) de v sil existe un mot u tel que e u.u = v ; on dnit de mme les facteurs droits, ou suxes. e e

1.3

Langages

Un langage sur un alphabet A est un sous-ensemble de A : toutes les oprations ensemblistes (union, e intersection, dirence, complmentation) sappliquent donc aux langages. Lunion est souvent note ade e e ditivement (L1 + L2 pour L1 L2 ). On tend aux langages les oprations e e de concatnation : L1 L2 = {u1 u2 / u1 L1 , u2 L2 } e de puissance : L1 = L, Ln+1 = LLn . Par convention, L0 = {}. Ltoile dun langage L est la runion L = e e Ln (les mots qui se dcomposent en mots de L) 1 . e
n0

On appelle oprations rationnelles les oprations union, concatnation et toile. e e e e


Remarques : 1. Si on consid`re lensemble A comme lensemble des mots dune seule lettre, A dsigne bien e e lensemble de tous les mots possibles sur lalphabet A. 2. On crit couramment a b plutt que {a} {b} ; dune mani`re gnrale, dans une expression come o e e e portant des oprations rationnelles, on sautorise ` noter simplement u le langage {u} (langage ` e a a un seul mot).

Proposition 1. Les identits suivantes sont vraies pour tous langages X, Y , Z (dmonstrations laisses e e e en exercice) : X(Y Z) = (XY )Z X = X = X X(Y + Z) = XY + XZ et (X + Y )Z = XZ + Y Z XX + = X (X ) = X
1. De la convention 0 = {} rsulte lidentit = {} : langage des mots qui ne se dcomposent en rien , quon e e e peut galement considrer comme une convention a la limite. Ne pas confondre le langage {} (contenant un seul mot, le mot e e ` vide) avec lensemble vide (langage ne comportant aucun mot).

Langages et automates

Probl`me introductif : la reconnaissance de motifs dans un texte e On cherche ` savoir si un chier donn, que lon suppose trop grand pour tre charg tout entier en a e e e mmoire, contient ou non un mot donn de m lettres. e e Un algorithme simple (ce nest pas forcment le plus ecace) consiste ` lire le chier caract`re par e a e caract`re, en ne conservant en mmoire que les m derniers caract`res lus, et ` comparer le mot form par e e e a e ces m caract`res avec le mot cherch. e e

Le probl`me est plus dicile si lon cherche une occurrence dun motif donn par une expression e e rationnelle (au sens de certaines commandes UNIX), par exemple a(go) s. Les mots correspondants ` ce a motif sont as, agos, agogos, agogogos, etc. Faute de mmoire, on ne peut pas appliquer lalgorithme prcdent pour chacun des mots possibles e e e (qui peuvent tre arbitrairement longs), mais ce nest pas ncessaire ; il sut de lire le chier caract`re e e e par caract`re en gardant en mmoire un petit nombre dinformations sur le mot lu jusque-l` : e e a soit il admet un suxe correspondant au motif a(go) (dans ce cas, si on lit le caract`re s, on a e trouv le motif cherch et lalgorithme se termine) ; e e soit il admet un suxe correspondant au motif a(go) g ; soit il nadmet aucun suxe correspondant ` lun de ces deux motifs (cest notamment le cas au a dbut de lalgorithme). e La faon dont linformation en mmoire change suivant le caract`re quon lit est rsume dans la gure c e e e e suivante :

Figure 1 Reconnaissance du motif a(go) s

2.1

Automates nis dterministes e

Dnitions : automate ni dterministe (DFA) ; automate complet e e Un automate ni dterministe (en abrg : DFA, deterministic nite automaton) est la e e e donne e dun ensemble ni S (ensemble des tats) e dun alphabet ni X dune fonction : S X S (fonction de transition) dun lment i de S (tat initial) ee e dune partie F de S (ensemble des tats naux, ou tats terminaux) e e Notation usuelle : A = (S, X, , i, F ). Lautomate est dit complet si sa fonction de transition est partout dnie. e

Le graphe associ ` un automate ni dterministe est un graphe orient tiquet, dont les sommets ea e ee e a sont les tats de lautomate, et dont les arcs, ou transitions de lautomate, sont les q q tels que e q = (q, a) ; on dit que a est ltiquette de la transition, que ltat q en est lorigine (ou la source), e e et que ltat q en est le but. Pour simplier le dessin, on reprsente en gnral tous les arcs allant dun e e e e tat q ` un tat q par une seule `che, tiquete par toutes les lettres des transitions de q ` q . Ltat e a e e e e a e initial est gnralement indiqu par une `che entrante (souvent double), les tats naux par des `ches e e e e e e sortantes. Lautomate (S, X, , i, F ) o` S = {0, 1, 2}, X = {a, b, c}, i = 0, F = {1, 2} et o` la fonction est u u donne par le tableau suivant : e 0 1 2 est ainsi reprsent par le graphe e e a 0 1 1 b 1 non dni e 1 c 1 2 non dni e

Figure 2 Exemple dautomate ni dterministe (incomplet) e

La fonction de transition stend aux mots : (q, a1 a2 . . . an ) = q si la lecture du mot a1 a2 . . . an fait e passer lautomate de ltat q ` ltat q , cest-`-dire sil existe dans le graphe un chemin e a e a
1 2 n q = q0 q1 . . . qn = q

Formellement, on dnit lextension : S X S par induction, en posant e (q, ) = q (q, au) = ((q, a), u) si (q, a) est dni e (si lautomate se bloque en lisant une lettre du mot, (q, u) nest pas dni) e

On dit que lautomate accepte le mot u si (i, u) est dni et appartient ` F . e a Le langage reconnu par un automate ni dterministe A est lensemble des mots quil accepte e (notation usuelle : L(A)).
Remarques : 1. Dire quun automate A reconna un langage L, cest armer dune part que A accepte tous t les mots de L (inclusion L L(A)), dautre part que A naccepte que des mots de L (inclusion L(A) L). Par exemple, lautomate reprsent ci-dessous e e

Figure 3 Automate acceptant toutes les critures dcimales dentiers pairs e e


accepte toutes les critures dcimales dentiers naturels pairs, mais il accepte galement le mot e e e vide, qui nen fait pas partie. Pour construire un automate reconnaissant les critures dcimales e e dentiers pairs (cest-`-dire toutes ces critures, et seulement ces critures), il faut distinguer ltat a e e e pair de ltat initial : e

Figure 4 Automate reconnaissant les critures dcimales dentiers pairs e e

2. Les coliers apprennent ` reconna par leur forme les nombres pairs (ceux dont lcriture de a tre e e cimale se termine par un chire pair), mais utilisent un procd arithmtique pour reconna e e e tre les multiples de 3 (le calcul modulo 9). En fait, une caractrisation automatique des multiples de e trois est possible :

Figure 5 Automate reconnaissant les critures dcimales des multiples de trois e e


Dune mani`re gnrale, on peut utiliser une machine dtats nis pour compter modulo n (le e e e e compteur kilomtrique dune vieille automobile, par exemple, compte modulo 100 000). e

3. Il peut y avoir plusieurs automates reconnaissant le mme langage : cest pourquoi on dira le e langage reconnu par lautomate A, mais un automate reconnaissant le langage L.

Figure 6 Automates reconnaissant le mme langage e

Compltion dun automate ni dterministe e e Construction. Il sut dajouter ` lautomate un tat puits p (non terminal) absorbant les a e cas o` la fonction de transition nest pas dnie : formellement, on pose A = (S , X, , i, F ) u e o` S = S {p}, et u (q, a) si (q, a) est dnie e (q, a) = p sinon (en particulier si q = p)

Preuve de correction de la construction. A accepte tous les mots de L(A) : en eet, si (i, u) est dni, on a (i, u) = (i, u) e (facile ` prouver par induction) ; donc, si u est accept par A, (i, u) est un tat nal de a e e A , et A reconna u. t A naccepte que des mots de L(A) : en eet, si u nest pas accept par A, ou bien (i, u) e est dni mais nest pas un tat nal de A (dans ce cas, (i, u) = (i, u) nest pas un tat e e e nal de A ), ou bien (i, u) nest pas dni (dans ce cas, on montre facilement par induction e que (i, u) = p, or p nest pas non plus un tat nal de A ) ; dans tous les cas, u nest pas e accept par A . e

Figure 7 Compltion dun automate ni dterministe e e

Lalgorithme de compltion et sa preuve constituent une dmonstration constructive de la e e

Proposition 2. Si un langage est reconnu par un automate ni dterministe, il existe un automate ni e dterministe complet qui le reconna aussi. e t

Complmentation e Proposition 3. Soit A un automate ni dterministe. Il existe un automate ni dterministe reconnaise e sant L(A). Construction. Il sut dinverser les tats terminaux et non terminaux dun DFA complet e reconnaissant L(A) (preuve de correction : laisse en exercice). e

Intersection Proposition 4. Soient A1 et A2 des automates nis dterministes. Il existe un automate ni dterministe e e reconnaissant L(A1 ) L(A2 ). Construction. Lide consiste ` faire tourner en parall`le les A1 et A2 sur les mots de X : le e a e syst`me rsultant peut tre considr comme un seul automate, le produit des automates A1 e e e ee et A2 (au sens du produit cartsien densembles). Si A1 et A2 sarrtent tous deux dans un e e tat nal, le mot est reconnu. e Formellement, on pose A = (S1 S2 , X, , (i1 , i2 ), F1 F2 ) o` est dni par u e ((q1 , q2 ), a) = (1 (q1 , a), 2 (q2 , a)) (si 1 (q1 , a) ou 2 (q2 , a) nest pas dni, ((q1 , q2 ), a) non plus) e
Preuve de correction de la construction.On montre facilement par induction que lidentit dnissant e e stend aux mots (en remplaant a par un mot queconque u X ). De lidentit e c e ((i1 , i2 ), u) = (1 (i1 , u), 2 (i2 , u)) on dduit quun mot u est accept par A si et seulement sil est accept par A1 et par A2 . e e e

Figure 8 Produit dautomates pour lintersection de langages

Union Proposition 5. Soient A1 et A2 des automates nis dterministes. Il existe un automate ni dterministe e e reconnaissant L(A1 ) L(A2 ) (construction laisse en exercice). e

Le probl`me de la concatnation e e Soient A1 et A2 des automates nis dterministes. Peut-on construire un automate reconnaissant L(A1 ).L(A2 ) ? e

Exemple : A1 est un automate reconnaissant a , et A2 est un automate reconnaissant ab .

La construction dun automate dterministe reconnaissant a ab nest pas vidente. On est tent e e e didentier ltat terminal de A1 ` ltat initial de A2 : e a e

Figure 9 Automate susceptible de reconna a ab tre


mais lautomate obtenu est non dterministe : son comportement, lorsquil se trouve dans ltat initial et e e quil lit le caract`re a, nest pas bien dni (il peut soit rester dans cet tat, soit passer dans ltat nal). e e e e Si lautomate est pilot par un programme intelligent, le passage ` ltat nal naura lieu que e a e lors de la lecture de la derni`re occurrence de la lettre a, de faon ` reconna tous les mots de a ab e c a tre (il est clair quaucun comportement de lautomate ne permet den accepter dautres).

10

Minimisation dun automate dterministe e Soit A = (S, X, , i, F ) un DFA complet reconnaissant un langage L. On cherche ` construire un DFA a complet reconnaissant le mme langage, mais comportant le moins possible dtats. e e 1 - Rduction e Une premi`re tape consiste ` supprimer les tats non accessibles depuis ltat initial : par exemple, e e a e e dans lautomate b a b s2 a a b

s1

initial

nal a puits

a, b

les tats s1 et s2 sont inutiles (en lisant un mot depuis ltat initial, lautomate ne se trouvera jamais e e dans lun de ces tats) : cet automate reconna le mme langage (ab , en loccurrence) que lautomate e t e b a b

initial

nal a puits

a, b obtenu en supprimant les tats s1 et s2 , ainsi que les transitions qui y conduisent. e On dira quun automate est rduit si tous ses tats sont accessibles depuis ltat initial. e e e

11

2 - Algorithme de minimisation dun automate rduit e Une deuxi`me tape consiste ` fusionner les tats quivalents de lautomate, en considrant que des e e a e e e tats s et s sont quivalents si, pour tout mot v, soit les tats (s, v) et (s , v) sont tous deux naux, e e e soit aucun nest un tat nal. e Lalgorithme de minimisation dun automate dterministe consiste ` calculer les classes dquivalence e a e par ranements successifs : on ne distingue au dpart que deux classes dquivalence, F (tats naux) et S F (non naux) ; e e e ` chaque tape, on partitionne chaque classe dquivalence en sous-classes : deux tats s et s sont a e e e dans la mme sous-classe si et seulement si pour toute lettre a, (s, a) et (s , a) sont dans la e mme classe dquivalence. Les sous-classes ainsi obtenues seront les classes dquivalence de ltape e e e e suivante ; on sarrte quand on ne peut plus sparer deux tats dune mme classe. e e e e Lquivalence obtenue ` la n de lalgorithme a donc la proprit e a ee s s = a X (s, a) (s , a) soit encore, en notant [s] la classe dquivalence dun tat s : e e [s] = [s ] = a X [(s, a)] = [(s , a)] On construit alors lautomate Amin dont les tats sont les classes dquivalence des tats de A, ltat e e e e initial est [i], les tats naux sont les classes dquivalence des tats naux de A, et dont la fonction de e e e transition est dnie par min ([s], a) = [(s, a)] e

Correction de la construction. Lalgorithme de minimisation termine en au plus |S| itrations (le nombre de classes dquivalence e e tant au plus gal au nombre dtats de lautomate). e e e a1 a2 a1 a2 an an Pour tout chemin i s1 s2 . . . sn F dans lautomate A, [i] [s1 ] [s2 ] . . . [sn ] est un chemin de lautomate Amin , et [sn ] est un tat nal de Amin : par consquent, tout mot a1 a2 . . . an e e accept par A est aussi accept par Amin . e e a1 a2 an Rciproquement, ` tout chemin [i] [s1 ] [s2 ] . . . [sn ] de lautomate Amin correspond dans A un e a a1 a2 an e chemin i s1 s2 . . . sn avec s1 [s1 ], s2 [s2 ], . . . , sn [sn ] ; si [sn ] est un tat nal de Amin , sn est quivalent ` un tat de F , donc sn aussi, et par consquent sn F . Donc tout mot a1 a2 . . . an e a e e accept par Amin est aussi accept par A. e e En dnitive, Amin et A reconnaissent le mme langage. e e

On admettra que lautomate rsultant (lui aussi dterministe) est minimal pour le nombre dtats, et e e e ne dpend que du langage reconnu (et non de lautomate particulier quon a choisi de minimiser). e

12

Exemple : soit ` minimiser le DFA complet ` 10 tats s0 (initial), s1 , . . . , s9 sur lalphabet X = {a, b}, a a e dont les tats naux sont s2 , s4 , s5 et s8 , et dont la fonction de transition est donne par le tableau e e a b s0 s9 s8 s1 s6 s1 s2 s1 s9 s3 s0 s4 s4 s2 s9 s5 s7 s3 s6 s7 s7 s7 s7 s1 s8 s5 s3 s9 s3 s4

1. Initialisation : on partitionne lensemble des tats en deux classes dquivalence e e s2 , s4 , s5 , s8 (naux) et s0 , s1 , s3 , s6 , s7 , s9 (non naux). 2. Lexamen des transitions partant des tats de la classe s2 , s4 , s5 , s8 : e s4 s8 b a a s2 b a, b a, b s5

s2 , s4 , s5 , s8 conduit ` casser cette classe en s4 , s8 et s2 , s5 . a

s0 , s1 , s3 , s6 , s7 , s9

Lexamen des transitions partant des tats de la classe s0 , s1 , s3 , s6 , s7 , s9 : e s0 b b s2 , s4 , s5 , s8 conduit ` casser cette classe en s0 , s3 , s9 et s1 , s6 , s7 . a 3. Ltape suivante ne permet de sparer les tats daucune des quatre classes prcdemment obtenues : e e e e e De chacun des tats de s4 , s8 , a conduit ` s2 , s5 et b ` s0 , s3 , s9 e a a De chacun des tats de s2 , s5 , a conduit ` s1 , s6 , s7 et b ` s0 , s3 , s9 e a a De chacun des tats de s0 , s3 , s9 , a conduit ` s0 , s3 , s9 et b ` s4 , s8 e a a De chacun des tats de s1 , s6 , s7 , a et b conduisent ` s1 , s6 , s7 e a b Automate rsultant : e a s0 , s3 , s9 b s2 , s5 a b a s1 , s6 , s7 a, b s4 , s8 b s3 a s9 a s1 a a, b a, b a, b s6 s7

s0 , s1 , s3 , s6 , s7 , s9

13

2.2

Automates non dterministes - Langages reconnaissables e

Dans les (tr`s nombreux) livres et articles traitant des automates nis, on trouve diverses variantes e de la dnition des automates non dterministes. Nous donnons ici la plus gnrale. e e e e

Dnition : automate ni non dterministe e e Un automate ni non dterministe (en abrg : NFA, nondeterministic nite automaton) e e e est la donne e dun ensemble ni dtats S e dun alphabet ni X a dun ensemble T de transitions de la forme q q avec q, q S, a X {} dun ensemble I S dtats initiaux e dunun ensemble F S dtats terminaux e On dira quun tel automate est standard sil a un et un seul tat initial. e Les transitions dtiquette , ou -transitions, encore appeles transitions spontanes, reprsentent e e e e le passage dun tat ` un autre sans avoir lu de lettre 1 . e a

Le langage reconnu par un NFA est lensemble des mots u = a1 a2 . . . an tels quil existe dans le graphe un chemin dtiquette u allant dun tat initial ` un tat nal, cest-`-dire un chemin e e a e a
1 2 n i I . . . q1 q1 . . . q2 q2 . . . qn qn . . . f F

Figure 10 Exemple : NFA standard reconnaissant a b + a acb

On peut voir un DFA comme un NFA satisfaisant les conditions suivantes : il y a un seul tat initial e il ny a pas d-transitions a pour tout tat q et toute lettre a X, il y a au plus une transition q q dorigine q et dtiquette a. e e

1. En modlisation des syst`mes, on utilise les -transitions pour reprsenter des changements dtat dus a des vnements e e e e ` e e non observables, tels quune rception de signal dclenchant une interruption. e e

14

Proposition 6. Soient A1 et A2 des NFA. Il existe un NFA reconnaissant L(A1 ) L(A2 ). Construction. Il sut de prendre la runion 1 des deux graphes : e A = (S1 S2 , X, T1 T2 , I1 I2 , F1 F2 )

Proposition 7. Soit A un NFA. Il existe un NFA standard reconnaissant L(A). Construction. Il sut dajouter ` A un tat initial i et une transition i q pour chaque tat a e e q de I (preuve laisse au lecteur). e

Proposition 8. Soient A1 et A2 des NFA. Il existe un NFA reconnaissant L(A1 ).L(A2 ). Construction. On peut supposer A1 et A2 standards (sinon, on commence par les standardiser), et leurs ensembles dtats disjoints (sinon, on remplace lun des automates par une copie). e On pose A = (S1 S2 , X, T1 T2 T, i1 , F2 ) o` T est lensemble des -transitions q i2 , u avec q F1 :

Figure 11 Concatnation e
Preuve de correction. A accepte tous les mots de L(A1 ).L(A2 ) : en eet, si u1 L(A1 ) et u2 L(A2 ), il existe dans A1 un chemin i1 . . . f1 dtiquette u1 se terminant en un tat de F1 , et il existe dans A2 un chemin e e i2 . . . f2 dtiquette u2 se terminant en un tat de F2 . Dans A, u1 u2 est donc ltiquette dun e e e chemin i1 . . . f1 i2 . . . f2 , avec f2 F . A naccepte que des mots de L(A1 ).L(A2 ) : les chemins allant de i1 ` un tat de F2 passent a e ncessairement par une et une seule transition q i2 (q tant le dernier tat de S1 sur le chemin), e e e leurs tiquettes ont donc la forme u1 u2 o` u1 est accept par A1 et u2 par A2 . e u e

1. En toute rigueur, leur runion disjointe, cest-`-dire que si A1 et A2 ont des tats en commun, on remplace lun des e a e automates par une copie.

15

Proposition 9. Soit A un NFA. Il existe un NFA standard reconnaissant L(A) . Construction. On peut toujours supposer A standard. On ajoute un nouvel tat i et on pose e A = S {i }, X, T T , {i }, {i }) o` T est lensemble contenant dune part l-transition u i i, dautre part toutes les -transitions q i , avec q F :

Figure 12 Etoile
Preuve de correction. A accepte tous les mots de L(A) : en eet, A accepte (puisque son tat initial est aussi nal) ; e supposons que A accepte tous les mots de L(A)n ; tout mot de L(A)n+1 peut scrire uv o` u L(A) et e u v L(A)n ; u est dans A ltiquette dun chemin i . . . f avec f F , et v, tant accept par A e e e (hypoth`se de rcurrence), est dans A ltiquette dun circuit dorigine i ; uv est donc ltiquette dun e e e e chemin i i . . . f i . . . i de A , il est donc accept. Par rcurrence, pour e e tout n, A accepte tous les mots de L(A)n . A naccepte que des mots de L(A) : les mots accepts par A sont dune part le mot vide, dautre e part les tiquettes des circuits au dpart de i ; un tel circuit, sil ne passe quune fois par le sommet i , e e est ncessairement de la forme i i . . . f i , donc a pour tiquette un mot reconnu e e par A ; on montre facilement, par rcurrence sur n, que, sil repasse n fois par le sommet i , il a pour e tiquette un mot de L(A)n . e

16

Thor`me de dterminisation : Soit A un NFA. Il existe un DFA reconnaissant L(A). e e e Construction. On pose A = (S , X, , i , F ) o` u S = P(S) est lensemble des parties de S i =I pour toute partie Q de S et toute lettre a X, (Q, a) est lensemble des tats q tels e quil existe dans A un chemin q . . . q1 q avec q Q F est lensemble des parties de S contenant au moins un tat q S tel quil existe e dans A un chemin q . . . qf F
a

Preuve de correction de la construction. A accepte tous les mots de L(A) : soit en eet u = a1 a2 . . . an un mot accept par A. Il existe donc e dans A un chemin
1 2 n i I . . . q1 q1 . . . q2 q2 . . . qn qn . . . qf F

Posons Q1 = (i , a1 ), Q2 = (i , a1 a2 ),...,Qn = (i , a1 a2 . . . an ) = (i , u) : par dnition de , on a e e q1 Q1 , q2 (Q1 , a2 ) = Q2 ,...,qn Qn ; et Qn F . Donc u est accept par A . A naccepte que des mots de L(A) : soit en eet u = a1 . . . an1 an un mot accept par A ; il existe e an1 a1 an donc dans A un chemin I . . . Qn1 Qn F . De Qn F on dduit quil existe dans A un chemin qn Qn . . . qf F . e an Comme Qn1 Qn est une transition de A , il existe dans A un chemin
n qn1 Qn1 . . . qn qn

Par rcurrence (cette fois de droite ` gauche), on peut montrer quil existe dans A un chemin e a
1 n i I . . . q1 q1 . . . qn1 qn1 . . . qn qn . . . qf F

an1

et donc que u est accept par A. e

Remarque : La construction prsente ici donne un automate de taille exponentielle par rapport ` e e a lautomate dorigine (2|S| tats). e

17

Algorithme de dterminisation ` la vole e a e Pour viter de construire des tats inutiles, on maintient une liste dtats ` traiter, qui au dbut ne e e e a e contient que ltat initial I ; pour tout tat Q non encore trait, et toute lettre a, on calcule Q = (Q, a) ; e e e si Q na pas encore t vu, on lajoute ` la liste des tats ` traiter (si Q = il est inutile de le traiter, ee a e a cela correspondrait ` un tat puits dans lautomate dterministe). a e e Dans lexemple ci-dessous, on construit ainsi un automate dterministe ` 5 tats (au lieu de 23 = 8). e a e

Figure 13 Dterminisation dautomate e

Remarque : on peut construire (sujet de probl`me) une suite An dautomates non dterministes ` n e e a tats qui nont pas dquivalent dterministe complet ` moins de 2n tats : quel que soit lalgorithme e e e a e utilis, la dterminisation est de complexit exponentielle. e e e

On a dmontr lquivalence des dirents mod`les dautomates dnis jusquici : e e e e e e automate ni dterministe (cas particulier dautomate ni non dterministe) e e automate ni non dterministe (quon peut dterminiser) e e On dit quun langage L est reconnaissable sil existe un automate ni qui le reconna t.
Remarque : On peut supposer cet automate dterministe et complet, puisqu` partir dun automate e a ni on peut construire un automate dterministe complet reconnaissant le mme langage. e e

18

Il existe des langages non reconnaissables. Exemples :

Proposition 10. Le langage L1 = {an bn / n 0} nest pas reconnaissable.


Dmonstration. Supposons L1 reconnu par un automate ni A, quon peut supposer dterministe et e e complet : A = (S, {a, b}, , i, F ). Pour tout entier n > 0, soit sn = (i, an b) ltat atteint par lautomate apr`s avoir lu le mot an b e e depuis son tat initial. Comme L contient an bn , (sn , bn1 ) est un tat nal de lautomate ; mais, pour e e tout entier positif p = n, comme L1 ne contient pas le mot ap bn , (sp , bn1 ) nest pas un tat nal : e par consquent sp = sn . e Les tats s1 , s2 , . . . , sn , . . . sont donc deux ` deux distincts, et lautomate A a une innit dtats : e a e e contradiction.

Remarque : Dune faon gnrale, pour prouver quun langage L sur un alphabet X nest pas reconc e e naissable, il sut dexhiber une suite innie de mots un tels que les langages Ln = {v X / un v L} soient deux ` deux distincts. a Comme dans la preuve ci-dessus, on suppose que L est reconnu par un automate dterministe complet e A = (S, X, , i, F ), et on pose sn = (i, un ). Pour p = n, lingalit Lp = Ln quivaut ` dire quil existe un mot v tel quun et un seul des mots un v e e e a et up v soit dans L. Donc un et un seul des tats (sn , v) et (sp , v) est un tat nal de lautomate A, e e et par consquent sp = sn . e Lautomate A contient donc une innit dtats : contradiction. e e

Autre technique pour prouver quun langage nest pas reconnaissable :

Proposition 11. Le langage L2 = {u {a, b} / |u|a = |u|b } nest pas reconnaissable.


Dmonstration. Si L2 tait reconnaissable, il en serait de mme de son intersection avec a b (en e e e eet, ` partir dautomates dterministes reconnaissant L2 et a b on pourrait construire un automate a e dterministe reconnaissant leur intersection). e Or L2 a b = {an bn / n 0}, qui, dapr`s la proposition 10 nest pas reconnaissable : contrae diction.

19

2.3

Langages rationnels

Une expression rationnelle (ou rguli`re, regular expression) est lexpression dun langage au e e moyen de lettres, du symbole , des oprations rationnelles (union, concatnation et toile) et de parene e e th`ses. Par exemple, (ab + (a + c) ) est une expression rationnelle. e

Dnition : langage rationnel e Les langages rationnels sur un alphabet X sont dnis par induction : e tout langage ni est rationnel ; si L1 et L2 sont des langages rationnels, L1 + L2 et L1 L2 aussi ; si L est un langage rationnel, L aussi.

Clairement, tout langage ni non vide admet une expression rationnelle (par exemple, {ab, c, bbc} peut scrire ab + c + bbc) ; par consquent, toute expression rationnelle reprsente un langage rationnel ; e e e et rciproquement, tout langage rationnel non vide peut sexprimer par une expression rationnelle. e Exemples et contre-exemples : m n / m 0, n 0} est un langage rationnel, dont une expression rationnelle est a b (mais la {a b notation {am bn / m 0, n 0} nest pas une expression rationnelle). (a + b) c a b c est un langage rationnel, dont une expression rationnelle est a b c (mais lex c a b c nest pas une expression rationnelle). pression (a + b)

Proposition 12. Tout langage rationnel est reconnaissable.


Dmonstration. Preuve par induction : e tout langage ni L est reconnaissable : pour obtenir un automate qui le reconnaisse, il sut de partir dun tat initial i (nal si L contient le mot vide) et dajouter, pour chaque mot e a1 a2 . . . an1 an du langage L, un tat nal sn , des tats non naux s1 , . . . , sn1 , et des transitions e e an1 a1 a2 an i s1 . . . sn1 sn ; si des langages rationnels L1 et L2 sont reconnaissables, L1 +L2 est reconnaissable (proposition 6, p. 15) et L1 L2 est reconnaissable (proposition 8, p. 15) ; si un langage rationnel L est reconnaissable, L est reconnaissable (proposition 9, p. 16).

On admettra la rciproque : e

Proposition 13. Tout langage reconnaissable est rationnel. en donnant plus loin (sans en prouver la correction) un algorithme permettant de passer dun automate a ` une expression rationnelle du langage quil reconna t.

Des propositions 12 et 13 on dduit le e

Thor`me de Kleene : Un langage est reconnaissable si et seulement sil est rationnel. e e

20

Passage dun automate ` une expression rationnelle a Principe : on consid`re lautomate donn comme un automate gnralis dont les transitions sont e e e e e tiquetes non par des lettres (ou par ), mais par des expressions rationnelles ; et on modie lautomate e e de faon ` obtenir lexpression rationnelle cherche. c a e La construction est la suivante : 1. on modie lautomate de faon quil nait quun seul tat initial i, o` naboutit aucune transition c e u (si ce nest pas dj` le cas, on ajoute un tat i, et, pour chaque tat initial s de lautomate, une ea e e -transition i s) ; 2. on modie lautomate de faon quil nait quun seul tat nal f , do` ne part aucune transition c e u (si ce nest pas dj` le cas, on ajoute un tat f , et, pour chaque tat nal s de lautomate, une ea e e -transition s f ) ; 3. on rassemble toutes les transitions allant dun tat donn s ` un tat donn s en une seule transition, e e a e e que lon tiquette par la somme des tiquettes (par exemple, si lautomate contient les transitions e e s s , s s et s s , on les remplace par s s ) ; 4. on supprime un par un les tats distincts de i et f : pour supprimer un tat s, on examine tous e e L1 L2 les couples dtats (s1 , s2 ) distincts de s tels quil existe des transitions s1 s et s s2 (on e
0 peut avoir s1 = s2 ) ; on pose L = L1 L L2 sil existe une boucle s s, et L = L1 L2 sinon ; sil 0

a+b+

existe une transition s1 s2 on remplace son tiquette par L + L , sil nen existe pas on cre une e e transition s1 s2 . Lorsque tous les couples (s1 , s2 ) ont t examins, on supprime ltat s et les ee e e transitions qui y conduisent ou qui en partent. Lorsque tous les tats distincts de i et f ont t supprims, il ne reste plus quune transition i f , e ee e dont ltiquette est une expression rationnelle du langage reconnu par lautomate. e Exemple : Soit L le langage reconnu par lautomate suivant : b a, b
L

2 a 3

a, b

On modie lautomate de faon quil nait quun tat initial i sans transitions entrantes, et quun tat c e e nal f sans transitions sortantes, et on tiquette les transitions multiples par des expressions rationnelles : e b a+b

a+b

21

On supprime ltat 1, ce qui revient ` crer une transition entre les tats i et 2, tiquete b (a + b) = e a e e e e (a + b) : b b (a + b) i 2

a+b 3

On supprime ltat 2 : il y a cette fois quatre couples ` considrer, (i, 3) (ajout de b (a + b)a ` e a e a ltiquette dune transition existante), (i, f ) (cration dune transition dtiquette b (a + b) = b (a + b)), e e e (3, 3) (cration dune boucle dtiquette (a + b)a) et (3, f ) (ajout de a + b ` ltiquette dune transition e e a e dj` existante) : ea b (a + b) i + b (a + b)a 3 f +a+b

(a + b)a On supprime enn ltat 3, ce qui revient ` ajouter ( + b (a + b)a)((a + b)a) ( + a + b) ` ltiquette e a a e dune transition dj` existante : ea b (a + b) + ( + b (a + b)a)((a + b)a) ( + a + b) i Le langage reconnu par lautomate est ltiquette de lunique transition : e L = b (a + b) + ( + b (a + b)a)((a + b)a) ( + a + b) f

22

Proprits de clture des langages rationnels (rcapitulatif ) e e o e

Oprations e intersection complmentation e union concatnation e toile e

Construction ` partir dautomates nis a dterministes e non dterministes e produit dautomates, prservant le dterminisme e e compltion, puis inversion des naux e produit dautomates union non dterministe de copies disjointes e ne prserve pas le dterminisme e e ne prserve pas le dterminisme e e

Comparaison de langages rationnels : exemples de probl`mes e

1. Dterminer si le langage reconnu par un automate ni donn est ou non vide. e e Il sut de dterminer si, dans le graphe orient reprsentant lautomate, lun des tats naux est e e e e accessible ` partir de lun des tats initiaux (parcours de graphe orient : complexit linaire par a e e e e rapport ` la taille du graphe, cest-`-dire ` la somme du nombre dtats et du nombre de transitions a a a e de lautomate).

2. Dterminer si deux automates nis donns reprsentent le mme langage. e e e e On se ram`ne au probl`me prcdent en remarquant que linclusion L(A1 ) L(A2 ) quivaut ` e e e e e a L(A1 ) L(A2 ) = , donc que lgalit L(A1 ) = L(A2 ) quivaut ` e e e a (L(A1 ) L(A2 )) (L(A2 ) L(A1 )) = Il sut donc de construire un automate reconnaissant L = (L(A1 ) L(A2 )) (L(A2 ) L(A1 )), et de dterminer si le langage quil reconna est ou non vide. Complexit : polynomiale si les automates e t e A1 et A2 sont dterministes (la complmentation ajoute au plus un tat, lintersection se fait par e e e un produit dautomates), exponentielle sinon (dterminisation ncessaire). e e

3. Dterminer si deux expressions rationnelles donnes reprsentent le mme langage. e e e e On se ram`ne au probl`me prcdent en construisant des automates reconnaissant les langages e e e e dont on donne les expressions. La construction des automates (non dterministes) est de complexit e e polynomiale par rapport ` la taille des expressions, mais ltape nale ncessite la dterminisation. a e e e

23

Grammaires algbriques e

Les grammaires algbriques sont utilises pour dnir la syntaxe et la smantique de la plupart des e e e e langages de programmation, et aussi pour mettre en uvre les programmes (analyse pralable ` lintere a prtation ou ` la compilation). e a Ide : structurer les mots du langage en les dcomposant de faon rcursive en motifs, ce qui permet e e c e dobtenir un arbre syntaxique analogue ` ceux des phrases du langage naturel. La formalisation de toutes a les dcompositions possibles permet de dnir le langage. e e

Exemples :

Le manuel de la commande UNIX cp commence par NOM cp - Copier des fichiers et des rpertoires e SYNOPSIS cp [OPTION]... [-T] SOURCE CIBLE E cp [OPTION]... SOURCE... RPERTOIRE cp [OPTION]... -t RPERTOIRE SOURCE... E La partie SYNOPSIS dnit ` la fois la forme dune commande cp (syntaxe) et, de faon intuitive, e a c son eet (smantique). e Dans le texte, "cp", "-t" et "-T" sont ` prendre au sens littral, au contraire des mots en majuscules, a e qui dsignent des motifs : OPTION reprsente un mot commenant par le caract`re '-', SOURCE, e e c e CIBLE et RPERTOIRE reprsentent des noms de chiers. La description comporte galement des E e e mta-caract`res : crochets et points de suspension indiquent le nombre doccurrences possible dun e e motif, le caract`re despacement ' ' dsigne un dlimiteur (qui peut tre une suite despaces, ou une e e e e tabulation).

Dans le manuel de rfrence du langage C, la syntaxe des instructions est donne par une srie de ee e e r`gles telles que e instruction: instruction-conditionnelle ... instruction-conditionnelle: if ( expression ) instruction if ( expression ) instruction else instruction ... o` les mots en italiques reprsentent des motifs. u e

24

3.1

Dnitions et notations e

Une grammaire algbrique G = (XN , XT , R, I) est la donne e e de deux alphabets disjoints, XN (dont les lettres sont appeles symboles non terminaux, ou e simplement non-terminaux) et XT ( terminaux) ; dun ensemble ni R de r`gles de drivation de la forme A u, o` A XN et u est un mot de e e u (XN + XT ) ; dun symbole initial I XN .

En thorie des langages, on dsigne habituellement les non-terminaux par des majuscules (ou des e e lettres grecques). Dans les applications pratiques, les symboles non terminaux sont gnralement dsigns e e e e par des noms parlants pour lesquels on utilise une police dirente (majuscules, italiques...) ou quon e met entre chevrons (<nom-de-fichier>). Dans les r`gles de drivation, le symbole est parfois remplac par ::=. Les r`gles permettant de e e e e driver un non-terminal donn sont rassembles en une multi-r`gle ` plusieurs membres droits spars par e e e e a e e le caract`re |. e

Lapplication dune r`gle A u ` un mot de (XN + XT ) consiste ` remplacer dans ce mot une e a a occurrence du symbole A par u (notation : xAy xuy, o` x et y sont des mots quelconques). Une u drivation est une suite dapplications de r`gles : on dit que u se drive en v (notation : u v) si une e e e suite dapplications de r`gles permet dobtenir v ` partir du mot u. Le langage L(G) engendr par e a e la grammaire algbrique G est lensemble des mots sur lalphabet terminal quon peut obtenir par e drivation du symbole initial. e Exemple : Considrons la grammaire G ` un seul non-terminal I (initial), dont lalphabet terminal est {a, b, c}, e a et dont les r`gles sont I aIbI et I c 1 . e Par drivation de I, on obtient soit c (mot terminal), soit aIbI que lon peut ` nouveau driver ; si on e a e remplace successivement chacun des symboles I par c on obtiendra acbc. Mais comme I peut se driver e en c ou en acbc, ` partir de aIbI on peut aussi obtenir a(c)b(acbc) : a I aIbI acbI acbaIbI acbacbI acbacbc Plus gnralement, si u et v sont des mots de L(G), aubv aussi : la r`gle I aIbI ne signie pas que e e e les mots de L(G) ont la forme aubu, les deux symboles I de aIbI se drivent indpendamment lun de e e lautre.
Remarque : On utilise couramment des grammaires algbriques pour analyser des textes en langage e naturel, mais cela ne signie pas que tous les textes quon peut obtenir par drivation dun symbole e soient syntaxiquement corrects : par exemple, la r`gle groupe-nominal article nom ne tenant e pas compte des accords, son application permettrait dobtenir des formes inacceptables telles que la chien ou les bocal. En dautres termes, le langage analys est seulement inclus dans L(G). e Au contraire, lorsquon dnit un langage de programmation par une grammaire algbrique, on e e garantit que lensemble des programmes syntaxiquement corrects est gal ` L(G) : nimporte quel e a programme de L(G) passe ` la compilation, ce qui nempche pas dventuelles erreurs ` lexcution. a e e a e

1. Cet exemple nest pas articiel : en remplaant a par if (condition) et b par else, on trouve le schma gnral des c e e e instructions conditionnelles imbriques du langage C. e

25

3.2

Exemple : les expressions arithmtiques e

Considrons tout dabord les expressions arithmtiques que lon peut former avec les variables x, y e e et z, et les oprateurs binaires + et : x + y z est une expression correcte, x ou y + +z sont des e expressions incorrectes. Lide quune expression est soit rduite ` une variable, soit une somme ou une dirence dexpressions, e e a e est formalise par la grammaire G1 = ({E}, X1 , R1 , E) o` X1 = {x, y, z, +, } et e u R1 = {E x, E y, E z, E E + E, E E E} Suivant cette grammaire, lexpression x + y peut tre drive de deux faons direntes ` partir du e e e c e a symbole initial : E E+E x+E x+y ou E E+E E+y x+y mais que lon commence par rcrire le symbole E de droite ou de gauche ne change rien ` larbre ee a syntaxique de lexpression :

Par contre, lexpression x y + z peut tre analyse de deux faons direntes : e e c e

Une grammaire suivant laquelle ` un mme mot peuvent correspondre plusieurs arbres syntaxiques a e est dite ambigu. e

Lambiguu e de la grammaire G1 est rdhibitoire : x y + z svalue comme (x y) + z dapr`s le t e e e premier arbre syntaxique, et comme x (y + z) dapr`s le second. e

26

Pour corriger le probl`me, on peut dnir le langage par la grammaire G1 = ({E}, X1 , R1 , E) o` e e u R1 = {E x, E y, E z, E E + x, E E + y, E E + z, E E x, E E y, E E z} ce qui force lvaluation de gauche ` droite : e a

Considrons ` prsent les expressions arithmtiques que lon peut former avec les variables x, y et z, e a e e et les oprateurs binaires +, et . On pourrait les engendrer par une grammaire analogue ` G1 , mais e a cela conduirait ` valuer x + y z comme (x + y) z. ae Pour tenir compte de la priorit de sur + et , on consid`re quune expression est une somme e e (ou une dirence) dun ou plusieurs termes, chaque terme tant lui-mme un produit dun ou plusieurs e e e facteurs ; et un facteur peut tre constitu de nimporte quelle expression entre parenth`ses. Ce qui peut e e e se formaliser par la grammaire G2 = ({E, T, F }, X2 , R2 , E) o` X2 = {x, y, z, +, , , (, )} et u R2 = {E T, E E + T, E E T, T F, T T F, F x, F y, F z, F (E)} On obtient ainsi par exemple

27

3.3

Langages algbriques e

Un langage est dit algbrique sil existe une grammaire algbrique qui lengendre. e e La dnition rcursive du langage reconnu par un automate dterministe montre que ce langage est le e e e langage engendr par la grammaire algbrique construite de la faon suivante : ` tout tat s de lautomate e e c a e a on associe un non-terminal Ns ; pour toute transition s s on cre une r`gle Ns aNs ; pour tout e e tat nal s, on cre une r`gle Ns ; et le symbole initial est le non-terminal associ ` ltat initial de e e e ea e lautomate. Par exemple, lensemble des expressions arithmtiques que lon peut former avec les variables x, y et e z, et les oprateurs binaires +, et est le langage reconnu par lautomate dterministe e e

et engendr par la grammaire G3 = ({Ni , Nf }, X3 , R3 , Ni ) o` X3 = {x, y, z, +, , } et e u R3 = {Ni xNf , Ni yNf , Ni zNf , Nf +Ni , Nf Ni , Nf Ni , Nf } suivant laquelle les expressions sanalysent de droite ` gauche : a

Il sensuit que tout langage rationnel est algbrique ; la rciproque est fausse, comme le montre e e n bn / n N}, qui est algbrique (cest le langage engendr par la grammaire I |aIb), lexemple de {a e e mais non rationnel.

Il ment

existe des langages formels (dnissables mathmatiquement) qui ne sont pas algbriques, notame e e (on admettra le rsultat) : e {an bn cn / n 0} lensemble des mots carrs sur {a, b} (de la forme uu) : on peut dmontrer (exercice) que lensemble e e des mots qui ne sont pas des carrs est, lui, un langage algbrique. e e

28

3.4

Transformations de grammaires algbriques e

Dnition : Grammaire algbrique rduite e e e Une grammaire algbrique G est dite rduite si elle a les deux proprits suivantes : e e ee 1. pour tout non-terminal A, le symbole initial I peut se driver en un mot contenant A ; e 2. tout non-terminal peut se driver en un mot terminal. e En dautres termes, dans une grammaire rduite, il ny a pas de symboles non-terminaux inutiles. e Des algorithmes de graphes permettent de rduire une grammaire donne, cest-`-dire de construire e e a une grammaire algbrique rduite engendrant le mme langage : e e e 1. On construit le graphe dont les sommets sont les ensembles de non-terminaux (les sous-ensembles de XN ), et dont les arcs sont les A1 , A2 , . . . , A k F tels quil existe des r`gles de drivation e e A1 u1 , A2 u2 , . . . , Ak uk de faon que F soit lensemble des non-terminaux apparaissant c dans les membres droits u1 , u2 , . . . , uk ; on supprime alors les non-terminaux depuis lesquels on ne peut pas atteindre le sommet correspondant ` lensemble vide (ainsi que les r`gles de drivation a e e dans lesquelles ils apparaissent). 2. On construit le graphe de dpendance des non-terminaux : cest le graphe dont les sommets e sont les non-terminaux, et dont les arcs sont les A B tels quil existe une r`gle de production de e la forme A uBv ; on supprime les nont-terminaux correspondant ` des sommets non accessibles a depuis le sommet I.

Dnition : Grammaire algbrique propre e e Une grammaire algbrique G est dite propre si elle ne contient aucune r`gle de drivation e e e de la forme A , ni aucune drivation de la forme A B. e ` A toute grammaire G on peut associer une grammaire propre G telle que L(G ) = L(G) {} (engendrant les mmes mots que G, sauf peut-tre le mot vide) en appliquant les techniques suivantes : e e 1. pour supprimer une r`gle A , on ajoute ` la grammaire toutes les r`gles de drivation obtenues e a e e en remplaant, dans une r`gle C u o` le non-terminal A gure dans le mot u, chaque occurrence c e u du symbole A dans u par lun des mots v tels que la grammaire contienne une r`gle A v ; on e recommence jusqu` ce quil ny ait plus aucune r`gle A ; a e 2. pour supprimer une r`gle A B avec B = A (on peut videmment supprimer toute r`gle de la e e e forme A A sans rien changer), on ajoute ` la grammaire toutes les r`gles de drivation obtenues a e e en remplaant, dans une r`gle C u o` le non-terminal A gure dans le mot u, chaque occurrence c e u de A dans u soit par B, soit par lun des mots v tels que la grammaire contienne une r`gle A v. e On recommence jusqu` ce quil ny ait plus aucune r`gle de la forme A B. a e
Remarque : Une grammaire rduite propre engendre un langage inni si et seulement si le graphe de e dpendance des non-terminaux contient un cycle. Les techniques prcdentes permettent de dterminer, e e e e pour toute grammaire algbrique, si elle engendre un langage ni ou inni. e

29

Dnition : Forme normale de Chomsky e Une grammaire algbrique G est dite en forme normale de Chomsky si toutes ses r`gles e e de drivation ont soit la forme A a o` a est un symbole terminal, soit la forme A BC e u o` B et C sont des symboles non-terminaux. u ` A toute grammaire algbrique propre G on peut associer une grammaire G en forme normale de e Chomsky telle que L(G ) = L(G), en appliquant les techniques suivantes jusqu` ce que le rsultat soit a e obtenu : 1. on remplace toute r`gle de la forme A aB o` a XT et B XN par les r`gles A CB et e u e C a, o` C est un nouveau symbole non-terminal ; u 2. on remplace toute r`gle de la forme A au o` a XT et o` u nest ni le mot vide, ni un mot e u u compos dun seul non-terminal, par les r`gles A BC, B a et C u, o` B et C sont deux e e u nouveaux symboles non-terminaux ; 3. on remplace toute r`gle de la forme A Bu, o` a XT et u XN , par les r`gles A BC et e u / e C u, o` C est un nouveau symbole non-terminal. u Dans le premier cas, on ne cre que des r`gles conformes ` la dnition de la forme normale de e e a e Chomsky. Dans les deux derniers cas, on cre une r`gle C u qui peut ne pas tre de la forme voulue, e e e mais elle est plus courte que la r`gle A au ou A Bu dont elle provient : par consquent, ou bien e e on supprime une r`gle non conforme, ou bien le nombre de r`gles non conformes ne change pas, mais la e e somme de leurs longueurs diminue strictement. On en dduit que lalgorithme termine. e

3.5

Algorithme de reconnaissance CYK (Cocke-Younger-Kasami)

Donnes : une grammaire rduite propre G en forme normale de Chomsky, et un mot u = a1 a2 . . . an e e de terminaux. On cherche ` dterminer si u L(G). Pour cela, on calcule, pour chaque facteur ai ai+1 . . . aj de u, a e lensemble Ei,j des non-terminaux A tels que A ai ai+1 . . . aj : si j = i, lensemble cherch Ei,i est celui des non-terminaux A tels quil existe une r`gle A ai ; e e si j > i, Ei,j est lensemble des non-terminaux A tels quil existe un entier k (i k < j) et une r`gle A BC avec B Ei,k et C Ek+1,j . e On continue jusqu` ce quon ait obtenu E1,n , cest-`-dire lensemble des non-terminaux qui se drivent a a e en u : on a u L(G) si et seulement si le symbole initial appartient ` cet ensemble. a Le calcul des Ei,j par valeurs croissantes de j i donne un algorithme de complexit O(n3 ) (rsultat e e admis). Pour lanalyse des programmes dans les langages de programmation usuels, ce nest pas un bon algorithme (temps dexcution trop long) ; le cours de Compilation en donne de plus ecaces, mais qui e ne sappliquent qu` certains types de grammaires. a

30

Vous aimerez peut-être aussi