Ce cours se propose d’étudier en détail la notion de langage formel, initialement introduite par Noam Chomsky et son équipe dans le but de formaliser les langues naturelles. Si l’application aux langues naturelles a révolutionné leur étude, le but ultime consistant à automatiser le traitement de ces langues a largement échoué, au jour d’aujourd’hui en tout cas. Par contre, les travaux qui en ont résulté ont trouvé leur application naturelle dans le traitement automatisé des langages infor-matiques : la compilation, généralement découpée en analyse lexicale, analyse syntaxique, analyse sémantique et génération de code est une suite de traitements langagiers de complexité croissante : l’analyse lexicale met en oeuvre les traitements les plus simples, qui relèvent des langages dits ré-guliers ; l’analyse syntaxique a pour but d’analyser la structure syntaxique des phrases, qui relève des langages dits “hors-contxte ; enn, les traitements dits sémantiques, comme le typage, mettent en jeu des structures langagières complexes, dites contextuelles. On retrouve également la notion de langage en théorie de la calculabilité, et en théorie de la complexité. On la retrouve enn au coeur de l’un des grands succès de la discipline, la vérication de programmes, qui a réussi ces dernières années une percée industrielle remarquée. Le but de ce cours est de faire le tour de ces différentes notions dans le contexte informatique : les automates nis et les expressions rationnelles, qui se sont révélés un outil de modélisation excep-tionnel et ont, à ce titre, envahi tout le paysage scientique, informatique, mathématiques, physique, biologie, etc ; leur application à l’analyse lexicale ; les grammaires hors-contexte et les automates à pile, autres outils de modélisation très commode dont les utilisations ont moins débordé la sphère informatique ; leur application à l’analyse syntaxique. Comme tout cours, celui-ci fait de nombreux emprunts, en particulier à [2], ouvrage remarquable dont une lecture approfondie est recommandée.
Université Paris Sud
Chapitre
2
Langages
formels
On appelleravocabulaireun ensemble niVtdont les éléments sont appelléslettres, etmot toute suite nie de lettres, notéeu=u1. . . unpour un motudelongueurn. On notera parV T∗ l’ensemble des mots, et parεle mot de longueur nulle, appellémot vide. L’ensemble des mots est muni d’une opération interne, leproduit de concaténation, telle que si u=u1. . . unetv=v1. . . vp, alors le produituvest le motwtel quewi=uipouri∈[1..n]et wn+j=vjpourj∈[1..p]. Il est aisé de vérier que la concaténation des mots est associative et possèdeεélément neure. On notera parfois le produit sous la formepour u∙van d’éviter certaines ambiguités. Tout produit, par répétition, donne naissance à une notion de puissance. La puissance nème d’un mot est dénie par récurrence surncomme suit :u0=εetun+1=u∙un. Muni du produit de concaténation et de son élément neutre,Vt∗est appellé lemonoïde libresur Vt. Cette dénomination fait référence au fait que tout motuest soit le mot videε, soit commence par une certaine lettreaauquel cas il s’écrit de manière unique sous la formeavpour un certain motv de taille diminuée de une unité. Il sera donc possible de prouver une propriétéPd’un ensemble de mots en montrantP(ε), puis en montrantP(av)en supposantP(v). Il s’agit là d’un raisonnement par récurrence classique lié à cette décomposition des mots. Mais on peut aussi décomposer un mot uen exhibant sa dernière lettre : tout motuest soit le mot videεsoit s’écrit de manière unique sous la formevaoùa∈Vtetv∈Vt∗, ce qui fournit un autre principe de récurrence. Nous utiliserons l’un ou l’autre suivant les cas. Toute partie deVt∗est appelléelangage. On disnguera deux langages très particuliers, lelangage videnoté∅qui ne possède aucun mot, et lelangage unité{ε}réduit au mot vide. On dénit à nouveau des opérations sur les langages, opérations ensemblistes classiques ou opé-rations qui font référence aux opérations correspondantes sur les mots :
L1∪L2désigne l’union des langagesL1etL2 L1∩L2désigne l’intersection des langagesL1etL2 Ldésigne le complémentaire dansVt∗du langageL L1×L2={uv|u∈L1etv∈L2}désigne le produit des langagesL1etL2 Lntel queL0={ε}etLn+1=L×Lndésigne la puissance nème du langageL L∗=Si∈NLidésigne l’itéré du langageL L+=Si>0Lidésigne l’itéré strict du langageL Le lecteur est invité à montrer les propriétés suivantes : 1. Pour tout motuet tous entiersn, m,un+m=um+n=un∙um=um∙un. 2. Pour tout langageLet tous entiersn, m,Ln+m=Lm+n=Ln×Lm=Lm×Ln. 3. Siε∈L, alorsL∗=L+.
J.-P. Jouannaud
3
Université Paris Sud
4
J.-P. Jouannaud
Chapitre
3
Automates
de
mots
nis
Automates de mots nis
Les automates sont un outil de modélisation fondamental, qui servent à représenter des disposi-tifs automatiques, par exemples des systèmes réactifs, tout autant que des objets mathématiques ou physiques. Dans ce capitre, nous nous intéressons aux automates de mots nis, le cas important des mots innis étant abordé dans un chapitre ultérieur.
3.1
Automates déterministes
Dénition 3.1Unautomate ni déterministeAest un triplet(Vt, Q, T)où 1.Vtest levocabulairede l’automate ; 2.Qest l’ensemble ni desétatsde l’automate ; 3.T:Q×Vt→Q, est une application partielle appelléefonction de transitionde l’automate.
a On noteraq−→q0pourT(q, a) =q0. LorsqueTtotale, autrement dit s’il y a dans chaqueest état exactement une transition pour toute lettre de l’alphabet, l’automate est ditcomplet. On omettra souvent le qualicatif ni.
Dénition 3.2Étant donné un automate déterministeA= (Vt, Q, T), on appellecalcultoute suite (éventuellement vide) de transitionsq0−α→1q1∙ ∙ ∙qn−1−αn→qn, aussi notéeq0−w→Aqn, ou encore sim-plementq0−w→qnen l’absence d’ambiguités, issue d’un étatq0et atteignant un étatqnen ayant lu le motw=α1∙ ∙ ∙αn.
Notons que le calcul produit par la lecture d’un motwpar un automate ni déterministe est au-tomatique et se trouve donc exempte d’ambiguïté : la lecture des lettres composant le mot provoque des transitions bien dénies jusqu’à être bloqué en cas de transitions manquantes, ou bien jusqu’à atteindre un certain état après la lecture complète du mot. On en déduit la propriété fondamentale des automates déterministes complets :
Lemme 3.3SoitA= (Vt, Q, T)déterministe complet. Alors, pour tout motun automate ni u∈ Vt∗et tout étatq∈Q, il existe un unique étatq0∈Qtel queq−u→Aq0.
En pratique, il peut être utile de rendre un automate complet en ajoutant un nouvel état appelé poubelle, étiqueté par⊥, vers lequel vont toutes les transitions manquantes. Les calculs bloquants aboutissent alors dans la poubelle où ils restent capturés.
Dénition 3.4Un automate déterministe vient avec la donnée •d’unétat initiali∈Q; •d’un ensemble d’états acceptantsF⊆Q;
Université Paris Sud
3.2 Automates non déterministes
0,011
q0
q2
q1
FIGAutomate déterministe reconnaissant les entiers naturels en numération binaire.. 3.1
0,101
q0
q2
q1
⊥
FIG. 3.2 Automate déterministe complet reconnaissant les entiers naturels en numération binaire.
On notera parAFile quintuplet(Vt, Q, i, F, T), ou plus simplementAsiietFsont donnés sans ambiguité dans le contexte. Un motwestreconnupar l’automateAiFs’il existe un calcul ditréussiissu de l’état initiali et terminant en état acceptant après avoir lu le motw. On note parLang(A)le langage des mots reconnus par l’automateA. Un langage reconnu par un automate est ditreconnaissable. On note parRecl’ensemble des langages reconnaissables.
Il est clair que l’ajout d’une poubelle ne change pas les mots reconnus. On a l’habitude de dessiner les automates, en gurant les états par des cercles, en indiquant l’état initial par une èche entrante, les états acceptants par un double cercle ou une èche sortante, et la transition de l’étatqà l’étatq0en lisant la lettreαpar une èche allant deqversq0et étiquetée par α3.1 représente un automate (incomplet) reconnaissant le langage des entiers naturels en. La gure représentation binaire. L’automate obtenu reconnaît exactement le même langage si l’on convient que le nouvel état poubelle n’est pas acceptant. Ainsi, la gure 3.2 présente un automate complet reconnaissant le langage des entiers naturels en représentation binaire. Si l’automateAest complet, on pourra donc étendre l’applicationTaux mots, en posant T(q, u) =q0∈Qtel queq−→uq0. On peut donc dans ce cas reformuler la condition d’acceptation des mots commeu∈ Lang(A)ssiT(i, u)∈F.
3.2
Automates non déterministes
Dénition 3.5Unautomate non-déterministeAest un triplet(Vt, Q, T)où 1.Vtest levocabulairede l’automate ;
J.-P. Jouannaud
5
Université Paris Sud
6
J.-P. Jouannaud
Automates de mots nis
FIGdes calculs d’un automate non déterministe.. 3.3 Arbre
2.Qest l’ensemble desétatsde l’automate ; 3.T:Q×Vt→ P(Q), est lafonction de transitionde l’automate. On notera comme précédemmentq−→αq0pourq0∈T(q, α)avecα∈Vt, et parT(q, u)l’ensemble (peut-être vide) des états atteignables depuisqen lisant le motu.
Notons qu’un automate déterministe est un cas particulier d’automate non-déterministe qui as-socie à tout élément deQ×Vtune partie deQpossédant zéro ou un élément (exactement un si c’est un automate complet). On pourra dire d’un automate déterministe qu’il est incomplet s’il peut se bloquer, c’est-à-dire s’il existe un étatqet une lettreatels queT(q, a) =∅. Si l’automate est complet, nous aurons une forme affaiblie du Lemme 3.3 :
Lemme 3.6SoitA= (Vt, Q, i, F, T)un automate ni non-déterministe complet. Alors, pour tout motu∈Vt∗et tout étatq∈Q, il existe un (non nécessairement unique) étatq0∈Qtel queq−→uAq0.
La notion de calcul est la même pour cette nouvelle variété d’automates que pour les automates déterministes, ainsi que la notion de reconnaissance, nous ne les répètons pas. Le non-déterministe a toutefois une conséquence essentielle : il peut y avoir plusieurs calculs issus de l’état initiali qui lisent un motwdonné, dont certains peuvent se bloquer et d’autres pas, et dans ce dernier cas certains peuvent terminer en état acceptant et d’autres pas. L’acceptation a lieu s’il existe au moins un calcul réussi. Si tous les calculs échouent, il n’y aura pas d’autre moyen de le savoir que de les explorer tous avant de savoir que le motwn’est pas reconnu. La bonne notion n’est donc pas celle de calcul, mais d’arbre de calcul associé à un mot lu par l’automate :
Dénition 3.7Étant donné un automate non déterministeA, l’arbre de calcul de racineq∈Q engendré par la lecture du motuest un arbre doublement étiquetté déni par récurrence suru: Siu=ε, alors l’arbre est réduit à sa racineq; Siu=av, la racineqpossède des transitions sortantes étiquettées para∈Vtvers différents arbres de calcul engendrés par la lecture devet dont les racines sont étiquettées par les états de T(q, a).
Un arbre de calcul est représenté à la gure 3.3. On a la propriété évidente :
Lemme 3.8Un motu∈Vt∗est reconnu par un automate non déterministeAssi l’une des feuilles de son arbre de calcul est étiquettée par un état acceptant.
Déterminisation d’un automate non-déterministeNous allons maintenant déterminiser un au-tomate non-déterministe (sans transitions vides) en ajoutant de nouveaux états : siQest l’ensemble des états d’un automate non-déterministe, l’ensemble des états de l’automate déterministe associé seraP(Q), l’ensemble des parties deQ.
Dénition 3.9SoitA= (Vt, Q, T)un automate non-déterministe. On dénitDet(A)comme l’au-tomate(Vt,P(Q), Tdet)oùTdet(K, a) =Sq∈KT(q, a).
Théorème 3.10SoitAun automate non-déterministe. AlorsDet(A){{KiP∈}(Q)|K∩F6=∅}est déter-ministe et reconnaît le même langage queAiF.