Vous êtes sur la page 1sur 188

Thorie des langages

Notes de Cours

Franois Yvon et Akim Demaille


avec la participation
de Pierre Senellart

26 Septembre 2016
(rev. 427418d)
Avertissement au lecteur
Ces notes documentent le cours de thorie des langages enseign dans le cadre
de la BCI dinformatique. Elles sont, malgr nos efforts (et ceux de plusieurs g-
nrations dtudiants qui nous ont aid lamliorer, en dernier lieu A. Amarilli),
encore largement perfectibles et probablement non-exemptes derreurs. Merci de
bien vouloir signaler toute erreur, de syntaxe (un comble !) ou autre, aux auteurs
(yvon@limsi.fr, akim@lrde.epita.fr, pierre@senellart.com).

Dans ce polycopi, sont au programme du cours (et de lexamen) :


Gnralits sur les langages (chapitre 2) ; les notions dordre, de quotient, de
distance ne sont pas spcifiquement au programme et seront rintroduites
dans lexamen si elles y sont utiles.
Langages rationnels, expressions rationnelles, automates (chapitres 3 et 4,
cf. aussi TD 1, TP 1).
Introduction aux grammaires gnratives et la hirarchie de Chomsky
(chapitre 5).
Grammaires et langages hors-contexte : dfinitions, arbres de drivation,
lemme de pompage pour les grammaires hors-contexte, problmatique de
lanalyse de grammaire (chapitres 5 et 6, cf. aussi TD 2, TP 2).
Notions de calculabilit (chapitre 10) ; la dfinition formelle des modles de
calcul (machines de Turing) nest pas au programme.
Le chapitre 7 est partiellement couvert en cours mais nest pas au programme de
lexamen. Les chapitres 8 et 9 ne sont pas au programme de lexamen ; certains
sujets dannales font rfrence ces notions (analyseurs LL ou LR) car le contenu
du cours a chang depuis. Le chapitre 11 (Complments historiques) nest pas au
programme mais pourra tre utilis pendant le cours.

2
Chapitre 1

Table des matires

1 Table des matires 3

I Notes de Cours 9

2 Mots, Langages 11
2.1 Quelques langages rels . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
2.1.1 La compilation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
2.1.2 Bio-informatique . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
2.1.3 Les langues naturelles . . . . . . . . . . . . . . . . . . . . . . . . . . 13
2.2 Terminologie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
2.2.1 Bases . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
2.2.2 Quelques notions de calculabilit . . . . . . . . . . . . . . . . . . . . . . 14
2.3 Oprations sur les mots . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
2.3.1 Facteurs et sous-mots . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
2.3.2 Quotient de mots . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
2.3.3 Ordres sur les mots . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
2.3.4 Distances entre mots . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
2.3.5 Quelques rsultats combinatoires lmentaires . . . . . . . . . . . . . . 19
2.4 Oprations sur les langages . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
2.4.1 Oprations ensemblistes . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
2.4.2 Concatnation, toile de Kleene . . . . . . . . . . . . . . . . . . . . . . 21
TABLE DES MATIRES

2.4.3 Plus doprations dans P(? ) . . . . . . . . . . . . . . . . . . . . . . . 21


2.4.4 Morphismes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22

3 Langages et expressions rationnels 23


3.1 Rationalit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
3.1.1 Langages rationnels . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
3.1.2 Expressions rationnelles . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
3.1.3 quivalence et rductions . . . . . . . . . . . . . . . . . . . . . . . . . . 26
3.2 Extensions notationnelles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27

4 Automates finis 31
4.1 Automates finis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
4.1.1 Bases . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
4.1.2 Spcification partielle . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35
4.1.3 tats utiles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37
4.1.4 Automates non-dterministes . . . . . . . . . . . . . . . . . . . . . . . . 37
4.1.5 Transitions spontanes . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42
4.2 Reconnaissables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45
4.2.1 Oprations sur les reconnaissables . . . . . . . . . . . . . . . . . . . . . 45
4.2.2 Reconnaissables et rationnels . . . . . . . . . . . . . . . . . . . . . . . . 48
4.3 Quelques proprits des langages reconnaissables . . . . . . . . . . . . . . . . 53
4.3.1 Lemme de pompage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53
4.3.2 Quelques consquences . . . . . . . . . . . . . . . . . . . . . . . . . . . 54
4.4 Lautomate canonique . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55
4.4.1 Une nouvelle caractrisation des reconnaissables . . . . . . . . . . . . 55
4.4.2 Automate canonique . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57
4.4.3 Minimisation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58

5 Grammaires syntagmatiques 63
5.1 Grammaires . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63
5.2 La hirarchie de Chomsky . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65
5.2.1 Grammaires de type 0 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65
5.2.2 Grammaires contextuelles (type 1) . . . . . . . . . . . . . . . . . . . . . 66

4
TABLE DES MATIRES

5.2.3 Grammaires hors-contexte (type 2) . . . . . . . . . . . . . . . . . . . . . 69


5.2.4 Grammaires rgulires (type 3) . . . . . . . . . . . . . . . . . . . . . . . 70
5.2.5 Grammaires choix finis (type 4) . . . . . . . . . . . . . . . . . . . . . . 73
5.2.6 Les productions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73
5.2.7 Conclusion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74

6 Langages et grammaires hors-contexte 77


6.1 Quelques exemples . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 77
6.1.1 La grammaire des djeuners du dimanche . . . . . . . . . . . . . . . . 77
6.1.2 Une grammaire pour le shell . . . . . . . . . . . . . . . . . . . . . . . . 79
6.2 Drivations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81
6.2.1 Drivation gauche . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 82
6.2.2 Arbre de drivation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83
6.2.3 Ambigut . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 84
6.2.4 quivalence . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 86
6.3 Les langages hors-contexte . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 86
6.3.1 Le lemme de pompage . . . . . . . . . . . . . . . . . . . . . . . . . . . . 86
6.3.2 Oprations sur les langages hors-contexte . . . . . . . . . . . . . . . . . 87
6.3.3 Problmes dcidables et indcidables . . . . . . . . . . . . . . . . . . . 88

7 Introduction au parsage de grammaires hors-contexte 91


7.1 Graphe de recherche . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 92
7.2 Reconnaissance ascendante . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 92
7.3 Reconnaissance descendante . . . . . . . . . . . . . . . . . . . . . . . . . . . . 95
7.4 Conclusion provisoire . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 97

8 Introduction aux analyseurs dterministes 99


8.1 Analyseurs LL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 100
8.1.1 Une intuition simple . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 100
8.1.2 Grammaires LL(1) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 103
8.1.3 NULL, FIRST et FOLLOW . . . . . . . . . . . . . . . . . . . . . . . . . . 103
8.1.4 La table de prdiction . . . . . . . . . . . . . . . . . . . . . . . . . . . . 107
8.1.5 Analyseurs LL(1) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 109

5
TABLE DES MATIRES

8.1.6 LL(1)-isation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 109


8.1.7 Quelques complments . . . . . . . . . . . . . . . . . . . . . . . . . . . 111
8.1.8 Un exemple complet comment . . . . . . . . . . . . . . . . . . . . . . 112
8.2 Analyseurs LR . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 113
8.2.1 Concepts . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 113
8.2.2 Analyseurs LR(0) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 115
8.2.3 Analyseurs SLR(1), LR(1), LR(k)... . . . . . . . . . . . . . . . . . . . . . 122
8.2.4 Complments . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 128

9 Normalisation des grammaires CF 129


9.1 Simplification des grammaires CF . . . . . . . . . . . . . . . . . . . . . . . . . 129
9.1.1 Quelques prliminaires . . . . . . . . . . . . . . . . . . . . . . . . . . . 129
9.1.2 Non-terminaux inutiles . . . . . . . . . . . . . . . . . . . . . . . . . . . 130
9.1.3 Cycles et productions non-gnratives . . . . . . . . . . . . . . . . . . . 132
9.1.4 Productions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 134
9.1.5 limination des rcursions gauches directes . . . . . . . . . . . . . . . 135
9.2 Formes normales . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 136
9.2.1 Forme normale de Chomsky . . . . . . . . . . . . . . . . . . . . . . . . 137
9.2.2 Forme normale de Greibach . . . . . . . . . . . . . . . . . . . . . . . . . 138

10 Notions de calculabilit 143


10.1 Dcidabilit et semi-dcidabilit . . . . . . . . . . . . . . . . . . . . . . . . . . 143
10.2 Langages non semi-dcidables . . . . . . . . . . . . . . . . . . . . . . . . . . . 144
10.3 Langages non dcidables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 146
10.4 Modles de calculs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 148

II Annexes 151

11 Complments historiques 153


11.1 Brves biographies . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 153
11.2 Pour aller plus loin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 158

12 Correction des exercices 161

6
TABLE DES MATIRES

12.1 Correction de lexercice 4.5 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 161


12.2 Correction de lexercice 4.10 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 162
12.3 Correction de lexercice 4.14 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 162
12.4 Correction de lexercice 4.15 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 165
12.5 Correction de lexercice 4.19 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 165
12.6 Correction de lexercice 4.20 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 167
12.7 Correction de lexercice 4.35 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 167
12.8 Correction de lexercice 5.21 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 169

III Rfrences 171

13 Liste des automates 175

14 Liste des grammaires 177

15 Liste des tableaux 179

16 Table des figures 181

17 Bibliographie 183

18 Index 185

7
TABLE DES MATIRES

8
Premire partie

Notes de Cours
Chapitre 2

Mots, Langages

Lobjectif de ce chapitre est de fournir une introduction aux modles utiliss en informatique
pour dcrire, reprsenter et effectuer des calculs sur des squences finies de symboles. Avant
dintroduire de manire formelle les concepts de base auxquels ces modles font appel (
partir de la section 2.2), nous prsentons quelques-uns des grands domaines dapplication
de ces modles, permettant de mieux saisir lutilit dune telle thorie. Cette introduction
souligne galement la filiation multiple de ce sous-domaine de linformatique thorique dont
les principaux concepts et outils trouvent leur origine aussi bien du ct de la thorie des
compilateurs que de la linguistique formelle.

2.1 Quelques langages rels

2.1.1 La compilation

On dsigne ici sous le terme de compilateur tout dispositif permettant de transformer un


ensemble de commandes crites dans un langage de programmation en un autre langage (par
exemple une srie dinstructions excutables par une machine). Parmi les tches prliminaires
que doit effectuer un compilateur, il y a lidentification des squences de caractres qui
forment des mots-cls du langage ou des noms de variables licites ou encore des nombres
rels : cette tape est lanalyse lexicale. Ces squences scrivent sous la forme dune succession
finie de caractres entrs au clavier par lutilisateur : ce sont donc des squences de symboles.
Dun point de vue formel, le problme que doit rsoudre un analyseur lexical consiste donc
caractriser et discriminer des squences finies de symboles, permettant de segmenter le
programme, vu comme un flux de caractres, en des units cohrentes et de catgoriser ces
units entre, par exemple : mot-cl, variable, constante...
Seconde tche importante du compilateur : dtecter les erreurs de syntaxe et pour cela
identifier, dans lensemble des squences dfinies sur un alphabet contenant les noms de
catgories lexicales (mot-cl, variable, constante...), ainsi quun certain nombre doprateurs
(+, , , :, ...) et de symboles auxiliaires ({, }, . . . ), les squences qui sont des programmes
correctement forms (ce qui ne prsuppose en rien que ces programmes seront sans bogue,
ni quils font exactement ce que leur programmeur croit quils font !). Lanalyse syntaxique se
CHAPITRE 2. MOTS, LANGAGES

proccupe, en particulier, de vrifier que les expressions arithmtiques sont bien formes,
que les blocs de programmation ou les constructions du langages sont respectes... Comme
chacun en a fait lexprience, tous les programmes ne sont pas syntaxiquement corrects,
gnrant des messages de plainte de la part des compilateurs. Lensemble des programmes
corrects dans un langage de programmation tel que Pascal ou C est donc galement un sous-
ensemble particulier de toutes les squences finies que lon peut former avec les atomes du
langage.
En fait, la tche de lanalyseur syntaxique va mme au-del de ces contrles, puisquelle vise
mettre en vidence la structure interne des squences de symboles quon lui soumet. Ainsi
par exemple, un compilateur dexpression arithmtique doit pouvoir analyser une squence
telle que Var + Var Var comme Var + (Var Var), afin de pouvoir traduire correctement le
calcul requis.
Trois problmes majeurs donc pour les informaticiens : dfinir la syntaxe des programmes
bien forms, discriminer les squences datomes respectant cette syntaxe et identifier la
structuration interne des programmes, permettant de dterminer la squence dinstructions
excuter.

2.1.2 Bio-informatique

La biologie molculaire et la gntique fournissent des exemples naturels dobjets mod-


lisables comme des squences linaires de symboles dans un alphabet fini.
Ainsi chaque chromosome, porteur du capital gntique, est-il essentiellement form de deux
brins dADN : chacun de ces brins peut tre modlis (en faisant abstraction de la structure
tridimensionnelle hlicodale) comme une succession de nuclotides, chacun compos dun
phosphate ou acide phosphorique, dun sucre (dsoxyribose) et dune base azote. Il existe
quatre bases diffrentes : deux sont dites puriques (la guanine G et ladnine A), les deux
autres sont pyrimidiques (la cytosine C et la thymine T), qui fonctionnent par paire ,
la thymine se liant toujours ladnine et la cytosine toujours la guanine. Linformation
encode dans ces bases dterminant une partie importante de linformation gntique, une
modlisation utile dun brin de chromosome consiste en la simple squence linaire des bases
qui le composent, soit en fait une (trs longue) squence dfinie sur un alphabet de quatre
lettres (ATCG).
partir de ce modle, la question se pose de savoir rechercher des squences particulires
de nuclotides dans un chromosome ou de dtecter des ressemblances/dissemblances entre
deux (ou plus) fragments dADN. Ces ressemblances gntiques vont servir par exemple
quantifier des proximits volutives entre populations, localiser des gnes remplissant
des mmes fonctions dans deux espces voisines ou encore raliser des tests de familiarit
entre individus. Rechercher des squences, mesurer des ressemblances constituent donc deux
problmes de base de la bio-informatique.
Ce type de calculs ne se limite pas aux gnes et est aussi utilis pour les protines. En effet,
la structure primaire dune protine peut tre modlise par la simple squence linaire des
acides amins quelle contient et qui dtermine une partie des proprits de la protine. Les
acides amins tant galement en nombre fini (20), les protines peuvent alors tre modlises

12
2.2. TERMINOLOGIE

comme des squences finies sur un alphabet comportant 20 lettres.

2.1.3 Les langues naturelles

Par langue naturelle, on entend tout simplement les langues qui sont parles (parfois aussi
crites) par les humains. Les langues humaines sont, de multiples niveaux, des systmes
de symboles :
les suites de sons articules pour changer de linformation sanalysent, en dpit de la
variabilit acoustique, comme une squence linaire unidimensionnelle de symboles
choisis parmi un inventaire fini, ceux que lon utilise dans les transcriptions phon-
tiques. Toute suite de sons nest pas pour autant ncessairement une phrase articulable,
encore moins une phrase comprhensible ;
les systmes dcriture utilisent universellement un alphabet fini de signes (ceux du
franais sont des symboles alphabtiques) permettant de reprsenter les mots sous la
forme dune suite linaire de ces signes. L encore, si tout mot se reprsente comme
une suite de lettres, la rciproque est loin dtre vraie ! Les suites de lettres qui sont des
mots se trouvent dans les dictionnaires 1 ;
si lon admet, en premire approximation, que les dictionnaires reprsentent un nombre
fini de mots, alors les phrases de la langue sont aussi des squences dlments pris
dans un inventaire fini (le dictionnaire, justement). Toute suite de mots nest pas une
phrase grammaticalement correcte, et toutes les phrases grammaticalement correctes
ne sont pas ncessairement comprhensibles.
Sattaquer au traitement informatique des noncs de la langue naturelle demande donc, de
multiples manires, de pouvoir distinguer ce qui est de la langue de ce qui nen est pas.
Ceci permet par exemple denvisager de faire ou proposer des corrections. Le traitement
automatique demande galement didentifier la structure des noncs ( o est le sujet ? ,
o est le groupe verbal ? ...) pour vrifier que lnonc respecte des rgles de grammaire
( le sujet saccorde avec le verbe ) ; pour essayer de comprendre ce que lnonc signifie :
le sujet du verbe est ( lactif) lagent de laction ; voire pour traduire dans une autre langue
(humaine ou informatique !). De nombreux problmes du traitement des langues naturelles
se modlisent comme des problmes de thorie des langages, et la thorie des langages doit
de nombreuses avances aux linguistes formels.

2.2 Terminologie

2.2.1 Bases

tant donn un ensemble fini de symboles , que lon appelle lalphabet, on appelle mot toute
suite finie (ventuellement vide) dlments de . Par convention, le mot vide est not ;
certains auteurs le notent 1, voire 1 . La longueur dun mot u, note |u|, correspond au nombre
total de symboles de u (chaque symbole tant compt autant de fois quil apparat). Bien

1. Pas toutes : penser aux formes conjugues, aux noms propres, aux emprunts, aux nologismes, aux argots. . .

13
CHAPITRE 2. MOTS, LANGAGES

entendu, || = 0. Autre notation utile, |u|a compte le nombre total doccurrences du symbole
a dans le mot u. On a naturellement : |u| = a |u|a .
P

Lensemble de tous les mots forms partir de lalphabet (resp. de tous les mots non-vides)
est not ? (resp. + ). Un langage sur est un sous-ensemble de ? .
Lopration de concatnation de deux mots u et v de ? rsulte en un nouveau mot uv, constitu
par la juxtaposition des symboles de u et des symboles de v. On a alors |uv| = |u| + |v| et
une relation similaire pour les dcomptes doccurrences. La concatnation est une opration
interne de ? ; elle est associative, mais pas commutative (sauf dans le cas dgnr o
ne contient quun seul symbole). est llment neutre pour la concatnation : u = u = u ;
ceci justifie la notation 1 ou encore 1 . Conventionnellement, on notera un la concatnation
de n copies de u, avec bien sr u0 = . Si u se factorise sous la forme u = xy, alors on crira
y = x1 u et x = uy1 .
? , muni de lopration de concatnation, possde donc une structure de monode (rappelons :
un monode est un ensemble muni dune opration interne associative et dun lment neutre ;
lorsquil ny a pas dlment neutre on parle de semi-groupe). Ce monode est le monode libre
engendr par : tout mot u se dcompose de manire unique comme concatnation de
symboles de .
Quelques exemples de langages dfinis sur lalphabet = {a, b, c}.
? = {, a, b, c, aa, ab, ac, ba, . . .}, soit lensemble de tous les mots composs de lettres
de ;
{, a, b, c}, soit tous les mots de longueur strictement infrieure 2 ;
{ab, aab, abb, acb, aaab, aabb, . . .}, soit tous les mots qui commencent par un a et finissent
par un b ;
{, ab, aabb, aaabbb, . . .}, soit tous les mots commenant par n a suivis dautant de b. Ce
langage est not {an bn | n 0} ;
{, abc, aabbcc, aaabbbccc, . . .}, soit tous les mots contenant n occurrences de la lettre a,
suivies de n occurrences de la lettre b, suivies dautant de fois la lettre c. Ce langage est
not {an bn cn | n 0}.
{aa, aaa, aaaaa, . . .}, tous les mots composs dun nombre premier de a.
Il existe un nombre dnombrable de mots dans ? , mais le nombre de langages dans ? est
indnombrable. Parmi ceux-ci, tous ne sont pas la porte des informaticiens : il existe, en
effet, des langages qui rsistent tout calcul, cest--dire, plus prcisment, qui ne peuvent
pas tre numrs par un algorithme.

2.2.2 Quelques notions de calculabilit

Plus prcisment, la thorie de la calculabilit introduit les distinctions suivantes :


Dfinition 2.1 (Langage rcursivement numrable). Un langage L est rcursivement num-
rable sil existe un algorithme A qui numre tous les mots de L.

En dautres termes, un langage L est rcursivement numrable sil existe un algorithme A


(ou, de manire quivalente, une machine de Turing) tel que tout mot de L est produit par un

14
2.3. OPRATIONS SUR LES MOTS

nombre fini dtapes dexcution de A. Autrement dit, si L est rcursivement numrable et


u est un mot de L, alors en laissant tourner A assez longtemps , lalgorithme numrateur
A finira par produire u.
Il est quivalent de dfinir les langages rcursivement numrables comme les langages L
pour lesquels il existe une machine de Turing qui reconnat les mots de L, cest--dire qui sar-
rte dans un tat dacceptation pour tout mot de L. Cela ne prjuge en rien du comportement
de la machine pour un mot qui nest pas dans L : en particulier cette dfinition est compatible
avec une machine de Turing bouclant sans fin pour certains mots nappartenant pas L.

Dfinition 2.2 (Langage rcursif). Un langage L est rcursif sil existe un algorithme A qui,
prenant un mot u de ? en entre, rpond oui si u est dans L et rpond non sinon. On dit alors que
lalgorithme A dcide le langage L.

Tout langage rcursif est rcursivement numrable : il suffit, pour construire une num-
ration de L, de prendre une procdure quelconque dnumration de ? (par exemple par
longueur croissante) et de soumettre chaque mot numr lalgorithme A qui dcide L. Si la
rponse de A est oui, on produit le mot courant, sinon, on passe au suivant. Cette procdure
numre effectivement tous les mots de L. Seuls les langages rcursifs ont un rel intrt
pratique, puisquils correspondent des distinctions qui sont calculables entre mots dans L
et mots hors de L.
De ces dfinitions, retenons une premire limitation de notre savoir dinformaticien : il existe
des langages que ne nous savons pas numrer. Ceux-ci ne nous intresseront plus gure.
Il en existe dautres que nous savons dcider et qui recevront la majeure partie de notre
attention.
Au-del des problmes de la reconnaissance et de la dcision, il existe dautres types de
calculs que nous envisagerons et qui ont des applications bien pratiques dans les diffrents
domaines dapplications voqus ci-dessus :
comparer deux mots, valuer leur ressemblance
rechercher un motif dans un mot
comparer deux langages
apprendre un langage partir dexemples
...

2.3 Oprations sur les mots

2.3.1 Facteurs et sous-mots

On dit que u est un facteur de v sil existe u1 et u2 dans ? tels que v = u1 uu2 . Si u1 = (resp.
u2 = ), alors u est un prfixe (resp. suffixe) de v. Si w se factorise en u1 v1 u2 v2 . . . un vn un+1 , o
tous les ui et vi sont des mots de ? , alors v = v1 v2 . . . vn est sous-mot 2 de w. Contrairement
2. Attention : il y a ici dsaccord entre les terminologies franaises et anglaises : subword ou substring signifie
en fait facteur et cest subsequence ou scattered subword qui est lquivalent anglais de notre sous-mot.

15
CHAPITRE 2. MOTS, LANGAGES

aux facteurs, les sous-mots sont donc construits partir de fragments non ncessairement
contigus, mais dans lesquels lordre dapparition des symboles est toutefois respect. On
appelle facteur (resp. prfixe, suffixe, sous-mot) propre de u tout facteur (resp. prfixe, suffixe,
sous-mot) de u diffrent de u.
On notera |pref |k (u) (resp. |suff |k (u)) le prfixe (resp. le suffixe) de longueur k de u. Si k |u|,
|pref |k (u) dsigne simplement u.
Les notions de prfixe et de suffixe gnralisent celles des linguistes 3 : tout le monde saccorde
sur le fait que in est un prfixe de infini ; seuls les informaticiens pensent quil en va de mme
pour i, inf ou encore infi. De mme, tout le monde est daccord pour dire que ure est un suffixe
de voilure ; mais seuls les informaticiens pensent que ilure est un autre suffixe de voilure.
Un mot non-vide u est primitif si lquation u = vi nadmet pas de solution pour i > 1.
Deux mots x = uv et y = vu se dduisant lun de lautre par change de prfixe et de suffixe
sont dits conjugus. Il est facile de vrifier que la relation de conjugaison 4 est une relation
dquivalence.
Le miroir ou transpos uR du mot u = a1 . . . an , o ai , est dfini par : uR = an . . . a1 . Un mot
est un palindrome sil est gal son miroir. radar, sas sont des palindromes du vocabulaire
commun. On vrifie simplement que les prfixes de uR sont prcisment les transposs des
suffixes de u et rciproquement.

2.3.2 Quotient de mots

Dfinition 2.3 (Quotient droit dun mot). Le quotient droit dun mot u par le mot v, dnot
uv1 ou encore u/v , est dfini par :

si u = wv
(
w
u/v = uv 1
=
pas dfini si v nest pas un suffixe de u

Par exemple abcde(cde)1 = ab, et abd(abc)1 nest pas dfini. Il ne faut pas voir uv1 comme un
produit : v1 ne reprsente pas un mot. On peut dfinir de la mme faon le quotient gauche
de v par u : u1 v ou u\ v.

2.3.3 Ordres sur les mots

Une famille dordres partiels

Les relations de prfixe, suffixe, facteur et sous-mot induisent autant de relations dordre
sur ? : ce sont, en effet, des relations rflexives, transitives et antisymtriques. Ainsi pourra-
t-on dire que u p v si u est un prfixe de v. Deux mots quelconques ne sont pas ncessairement
comparables pour ces relations : ces ordres sont partiels.

3. On parle aussi en linguistique de terminaison au lieu de suffixe.


4. Ici, rien voir avec la conjugaison des grammairiens.

16
2.3. OPRATIONS SUR LES MOTS

Des ordres totaux

Il est possible de dfinir des ordres totaux sur ? , la condition de disposer dun ordre total
sur .

Dfinition 2.4 (Ordre lexicographique). Lordre lexicographique sur ? not l est dfini par
u l v ssi
soit u est un prfixe de v
soit sinon u = tu0 , v = tv0 avec u0 , et v0 , , et le premier symbole de u0 prcde celui de v0
pour .

Cet ordre conduit des rsultats contre-intuitifs lorsque lon manipule des langages in-
finis. Par exemple il existe un nombre infini de prdcesseurs au mot b dans {a, b}? :
{, a, aa, ab, aaa, . . .}.
Lordre radiciel (ou ordre alphabtique, ou encore ordre militaire) utilise galement , mais
privilgie, lors des comparaisons, la longueur des chanes.

Dfinition 2.5 (Ordre radiciel). Lordre radiciel sur ? not a est dfini par u a v ssi
soit |u| |v|
soit sinon |u| = |v| et u l v

Contrairement lordre lexicographique, il sagit dun ordre bien fond : les mots plus petits
quun mot arbitraire u sont en nombre fini. Dautre part pour tout w, w0 si u a v alors
wuw0 a wvw0 , ce qui nest pas le cas pour lordre lexicographique (p.ex. : a l ab, mais
c a d >l c ab d).
On notera que les dictionaires utilisent lordre lexicographique et non celui nomm ici al-
phabtique .

2.3.4 Distances entre mots

Une famille de distances

Pour toute paire de mots il existe un plus long prfixe (resp. suffixe, facteur, sous-mot)
commun. Dans le cas des suffixes et prfixes, ce plus long facteur commun est de plus
unique.
Si lon note plpc(u, v) le plus long prfixe commun u et v, alors la fonction dp (u, v) dfinie
par :
dp (u, v) = |uv| 2|plpc(u, v)|

dfinit une distance sur ? , la distance prfixe. On vrifie en effet que :


dp (u, v) 0
dp (u, v) = 0 u = v

17
CHAPITRE 2. MOTS, LANGAGES

dp (u, w) dp (u, v) + dp (v, w).


La vrification de cette ingalit utilise le fait que le plus long prfixe commun u et
w est au moins aussi long que le plus long prfixe commun plpc(u, v) et plpc(v, w).
On obtient galement une distance lorsque, au lieu de considrer la longueur des plus longs
prfixes communs, on considre celle des plus longs suffixes (ds ), des plus longs facteurs (d f )
ou des plus longs sous-mots communs (dm ).

Dmonstration. Dans tous les cas, la seule proprit demandant un effort de justification est
lingalit triangulaire. Dans le cas des suffixes, elle se dmontre comme pour les prfixes.
Pour traiter le cas des facteurs et des sous-mots, il est utile de considrer les mots sous une
perspective un peu diffrente. Il est en effet possible denvisager un mot u de + comme une
fonction de lintervalle I = [1 . . . |u|] vers , qui chaque entier i associe le ie symbole de u :
u(i) = ui . toute squence croissante dindices correspond alors un sous-mot ; si ces indices
sont conscutifs on obtient un facteur.
Nous traitons dans la suite le cas des sous-mots et notons plsmc(u, v) le plus long sous-mot
commun u et v. Vrifier dm (u, w) dm (u, v) + dm (v, w) revient vrifier que :

|uw| 2|plsmc(u, w)| |uv| 2|plsmc(u, v)| + |vw| 2|plsmc(v, w)|

soit encore :
|plsmc(u, v)| + |plsmc(v, w)| |v| + |plsmc(u, w)|
En notant I et J les squences dindices de [1 . . . |v|] correspondant respectivement plsmc(u, v)
et plsmc(v, w), on note tout dabord que :

|plsmc(u, v)| + |plsmc(v, w)| = |I| + |J|


= |I J| + |I J|

On note ensuite que le sous-mot de v construit en considrant les symboles aux positions de
I J est un sous-mot de u et de w, donc ncessairement au plus aussi long que plsmc(u, w).
On en dduit donc que : |I J| |plsmc(u, w)|. Puisque, par ailleurs, on a |I J| |v|, on peut
conclure que :
|plsmc(u, w)| + |v| |I J| + |I J|
Et on obtient ainsi prcisment ce quil fallait dmontrer. Le cas des facteurs se traite de
manire similaire. 

Distance ddition et variantes

Une autre distance communment utilise sur ? est la distance ddition, ou distance de
Levenshtein, dfinie comme tant le plus petit nombre doprations ddition lmentaires
ncessaires pour transformer le mot u en le mot v. Les oprations ddition lmentaires
sont la suppression ou linsertion dun symbole. Ainsi la distance de chien chameau est-elle
de 6, puisque lon peut transformer le premier mot en lautre en faisant successivement les
oprations suivantes : supprimer i, insrer a, puis m, supprimer n, insrer a, puis u. Cette
mtamorphose dun mot en un autre est dcompose dans le tableau 2.1.

18
2.3. OPRATIONS SUR LES MOTS

mot courant opration


chien supprimer i
chen insrer a
chaen insrer m
chamen supprimer n
chame insrer a
chamea insrer u
chameau
Deux mots conscutifs sont distance 1. Lordre des oprations lmentaires est arbitraire.

Table 2.1 Mtamorphose de chien en chameau

De multiples variantes de cette notion de distance ont t proposes, qui utilisent des en-
sembles doprations diffrents et/ou considrent des poids variables pour les diffrentes
oprations. Pour prendre un exemple rel, si lon souhaite raliser une application qui cor-
rige les fautes de frappe au clavier, il est utile de considrer des poids qui rendent dautant
plus proches des squences quelles ne diffrent que par des touches voisines sur le clavier,
permettant dintgrer une modlisation des confusions de touches les plus probables. On
considrera ainsi, par exemple, que batte est une meilleure correction de bqtte que botte ne
lest 5 , bien que les deux mots se transforment en bqtte par une srie de deux oprations
lmentaires.
Lutilitaire Unix diff implante une forme de calcul de distances. Cet utilitaire permet de
comparer deux fichiers et dimprimer sur la sortie standard toutes les diffrences entre leurs
contenus respectifs.

2.3.5 Quelques rsultats combinatoires lmentaires

La proprit suivante est trivialement respecte :


Lemme 2.6.

u, v, x, y ? , uv = xy t ? tq. soit u = xt et tv = y, soit x = ut et v = ty.

Cette proprit est illustre sur la figure suivante :

x y

u v

u t y

5. Cest une premire approximation : pour bien faire il faudrait aussi prendre en compte la frquence relative
des mots proposs... Mais cest mieux que rien.

19
CHAPITRE 2. MOTS, LANGAGES

Ce rsultat est utilis pour dmontrer deux autres rsultats lmentaires, qui dcoulent de la
non-commutativit de la concatnation.

Thorme 2.7. Si xy = yz, avec x , , alors u, v ? et un entier k 0 tels que : x = uv,


y = (uv)k u = u(vu)k , z = vu.

Dmonstration. Si |x| |y|, alors le rsultat prcdent nous permet dcrire directement x = yt,
ce qui, en identifiant u et y, et v t, nous permet de driver directement les galits voulues
pour k = 0.
Le cas o |x| < |y| se traite par induction sur la longueur de y. Le cas o |y| vaut 1 tant
immdiat, supposons la relation vraie pour tout y de longueur au moins n, et considrons
y avec |y| = n + 1. Il existe alors t tel que y = xt, do lon drive xtz = xxt, soit encore
tz = xt, avec |t| n. Lhypothse de rcurrence garantit lexistence de u et v tels que x = uv et
t = (uv)k u, do y = uv(uv)k u = (uv)k+1 u. 

Thorme 2.8. Si xy = yx, avec x , , y , , alors u ? et deux indices i et j tels que x = ui et


y = u j.

Dmonstration. Ce rsultat sobtient de nouveau par induction sur la longueur de xy. Pour
une longueur gale 2 le rsultat vaut trivialement. Supposons le valable jusqu la longueur
n, et considrons xy de longueur n + 1. Par le thorme prcdent, il existe u et v tels que
x = uv, y = (uv)k u, do on dduit : uv(uv)k u = (uv)k uuv, soit encore uv = vu. En utilisant
lhypothse de rcurrence il vient alors : u = ti , v = t j , puis encore x = ti+j et y = ti+k(i+j) , qui
est le rsultat recherch. 

Linterprtation de ces rsultats est que les quations du type xy = yx nadmettent que des
solutions priodiques, cest--dire des squences qui sont construites par itration dun mme
motif de base.

2.4 Oprations sur les langages

2.4.1 Oprations ensemblistes

Les langages tant des ensembles, toutes les oprations ensemblistes classiques leur
sont donc applicables. Ainsi, les oprations dunion, dintersection et de complmentation
(dans ? ) se dfinissent-elles pour L, L1 et L2 des langages de ? par :

L1 L2 = {u ? | u L1 ou u L2 }
L1 L2 = {u ? | u L1 et u L2 }
L = {u ? | u < L}

Les oprations et sont associatives et commutatives.

20
2.4. OPRATIONS SUR LES LANGAGES

2.4.2 Concatnation, toile de Kleene

Lopration de concatnation, dfinie sur les mots, engendre naturellement la concatnation


de langages (on dit galement le produit de langages, mais ce nest pas le produit cartsien) :

L1 L2 = {u ? | (x, y) L1 L2 tq. u = xy}

On note, de nouveau, que cette opration est associative, mais pas commutative. Comme
prcdemment, litration de n copies du langage L se notera Ln , avec, par convention :
L0 = {}. Attention : ne pas confondre Ln avec le langage contenant les puissances nimes des
mots de L et qui serait dfini par {u ? | v L, u = vn }.
Lopration de fermeture de Kleene (ou plus simplement ltoile) dun langage L se dfinit par :
[
L? = Li
i0

L? contient tous les mots quil est possible de construire en concatnant un nombre fini
(ventuellement rduit zro) dlments du langage L. On notera que si est un alphabet,
? , tel que dfini prcdemment, reprsente 6 lensemble des squences finies que lon peut
construire en concatnant des symboles de . Remarquons que, par dfinition, ? nest pas
vide, puisquil (ne) contient (que) .
On dfinit galement
[
L+ = Li
i1

la diffrence de L? qui contient toujours , L+ ne contient que si L le contient. On a :


L+ = LL? .
Un des intrts de ces notations est quelles permettent dexprimer de manire formelle (et
compacte) des langages complexes, ventuellement infinis, partir de langages plus simples.
Ainsi lensemble des suites de 0 et de 1 contenant la squence 111 scrira par exemple :
{0, 1}? {111}{0, 1}? , la notation {0, 1}? permettant un nombre arbitraire de 0 et de 1 avant la
squence 111. La notion dexpression rationnelle, introduite au chapitre 3, dveloppe cette
intuition.

2.4.3 Plus doprations dans P(? )

Pour un langage L sur ? , on dfinit les concepts suivants :

Dfinition 2.9 (Langage des prfixes). Soit L un langage de ? , on dfinit le langage des prfixes
de L, not Pref (L) par :
Pref (L) = {u ? | v ? , uv L}
6. Notez que, ce faisant, on identifie un peu abusivement les symboles (les lments de ) et les squences
formes dun seul symbole de .

21
CHAPITRE 2. MOTS, LANGAGES

Attention ne pas confondre cette notion avec celle des langages prfixes. On dit quun
langage L est un langage prfixe si pour tout u, v, L, u , v, on a u < Pref (v). En utilisant
un langage prfixe fini, il est possible de dfinir un procd de codage donnant lieu des
algorithmes de dcodage simples : ces codes sont appels codes prfixes. En particulier, les
codes produits par les codages de Huffman sont des codes prfixes.
Exercice 2.10. Petite application du concept : montrez que le produit de deux langages prfixes est
encore un langage prfixe.
Dfinition 2.11 (Langage des suffixes). Soit L un langage de ? , on dfinit le langage des suffixes
de L, not Suff (L) par :
Suff (L) = {u ? | v ? , vu L}
Dfinition 2.12 (Langage des facteurs). Soit L un langage de ? , on dfinit le langage des
facteurs de L, not Fac(L) par :
Fac(L) = {v ? | u, w ? , uvw L}

Les quotients de mots gauche et droit stendent additivement aux langages.


Dfinition 2.13 (Quotient droit dun langage). Le quotient droit dun langage L par le mot u
est dfini par : [
L/u = Lu1 = {vu1 } = {w ? | wu L}
vL

Le quotient droit de L par u est donc lensemble des mots de ? dont la concatnation par
u est dans L. De mme, le quotient gauche de L par u, u1 L =u\ L, est lensemble des mots
de ? qui, concatns u, produisent un mot de L.
Dfinition 2.14 (Congruence droite). Une congruence droite de ? est une relation R de ? qui
vrifie :
w, w0 ? , w R w0 u, wu R w0 u
Dfinition 2.15 (Congruence droite associe un langage L). Soit L un langage et soient
w1 , w2 deux mots tels que L/w1 = L/w2 . Il est clair, par dfinition du quotient, que lon a alors
u, L/w1 u = L/w2 u . Sen dduit une congruence droite RL naturellement associe L et dfinie par :
w1 RL w2 L/w1 = L/w2

2.4.4 Morphismes

Dfinition 2.16 (Morphisme). Un morphisme dun monode M dans un monode N est une
application telle que :
(M ) = N : limage de llment neutre de M est llment neutre de N.
(uv) = (u)(v)

Lapplication longueur est un morphisme de monode de (? , .) dans (N, +) : on a trivialement


|| = 0 et |uv| = |u| + |v|. On vrifie simplement quil en va de mme pour les fonctions de
comptage des occurrences.
Dfinition 2.17 (Code). Un code est un morphisme injectif : (u) = (v) entrane u = v.

22
Chapitre 3

Langages et expressions rationnels

Une premire famille de langages est introduite, la famille des langages rationnels. Cette
famille contient en particulier tous les langages finis, mais galement de nombreux langages
infinis. La caractristique de tous ces langages est la possibilit de les dcrire par des formules
(on dit aussi motifs, en anglais patterns) trs simples. Lutilisation de ces formules, connues
sous le nom dexpressions rationnelles 1 , sest impose sous de multiples formes comme la
bonne manire de dcrire des motifs reprsentant des ensembles de mots.
Aprs avoir introduit les principaux concepts formels ( la section 3.1), nous tudions
quelques systmes informatiques classiques mettant ces concepts en application.

Les concepts introduits dans ce chapitre et le suivant seront illustrs en utilisant


Vcsn (http://vcsn.lrde.epita.fr). Il sagit dune plate-forme de manipulation
dautomates et dexpressions rationnelles rsultant dune collaboration entre Tlcom
ParisTech, le Laboratoire Bordelais dInformatique (LaBRI), et le Laboratoire de R&D de
lEPITA (LRDE). La documentation est en ligne : http://vcsn-sandbox.lrde.epita.
fr/notebooks/Doc/index.ipynb.
La commande shell vcsn notebook ouvre une session interactive sous IPython. d-
faut, elle est disponible en ligne, http://vcsn-sandbox.lrde.epita.fr.
Crez une nouvelle page, ou bien ouvrez une page existante. Dans cet environnement
enter insre un saut de ligne, et shift-enter lance lvaluation de la cellule courante et
passe la suivante. Une fois la session interactive lance, excuter import vcsn.

1. On trouve galement le terme dexpression rgulire, mais cette terminologie, quoique bien installe, est
trompeuse et nous ne lutiliserons pas dans ce cours.
CHAPITRE 3. LANGAGES ET EXPRESSIONS RATIONNELS

3.1 Rationalit

3.1.1 Langages rationnels

Parmi les oprations dfinies dans P(? ) la section 2.4, trois sont distingues et sont
qualifies de rationnelles : il sagit de lunion, de la concatnation et de ltoile. A contrario,
notez que la complmentation et lintersection ne sont pas des oprations rationnelles. Cette
distinction permet de dfinir une famille importante de langages : les langages rationnels.
Dfinition 3.1 (Langage rationnel). Soit un alphabet. Les langages rationnels sur sont dfinis
inductivement par :
(i) {} et sont des langages rationnels
(ii) a , {a} est un langage rationnel
(iii) si L1 et L2 sont des langages rationnels, alors L1 L2 , L1 L2 , et L1 ? sont galement des langages
rationnels.

Bien entendu, dans cette dfinition inductive on na le droit qu un nombre fini dapplications
de la rcurrence (iii).
Tous les langages finis sont rationnels, puisquils se dduisent des singletons par un nombre
fini dapplications des oprations dunion et de concatnation. Par dfinition, lensemble
des langages rationnels est clos pour les trois oprations rationnelles (on dit aussi quil est
rationnellement clos).
La famille des langages rationnels correspond prcisment au plus petit ensemble de langages
qui (i) contient tous les langages finis, (ii) est rationnellement clos.
Un langage rationnel peut se dcomposer sous la forme dune formule finie, correspondant
aux oprations (rationnelles) qui permettent de le construire. Prenons lexemple du langage
sur {0, 1} contenant tous les mots dans lesquels apparat au moins une fois le facteur 111. Ce
langage peut scrire : ({0} {1})? {1}{1}{1}({0} {1})? , exprimant que les mots de ce langage
sont construits en prenant deux mots quelconques de ? et en insrant entre eux le mot 111 :
on peut en dduire que ce langage est bien rationnel. Les expressions rationnelles dfinissent un
systme de formules qui simplifient et tendent ce type de notation des langages rationnels.

3.1.2 Expressions rationnelles

Dfinition 3.2 (Expression rationnelle). Soit un alphabet. Les expressions rationnelles (RE)
sur sont dfinies inductivement par :
(i) et sont des expressions rationnelles
(ii) a , a est une expression rationnelle
(iii) si e1 et e2 sont deux expressions rationnelles, alors (e1 + e2 ), (e1 e2 ), et (e1 ? ) sont galement des
expressions rationnelles.

Une expression rationnelle est donc toute formule construite par un nombre fini dapplica-
tions de la rcurrence (iii).

24
3.1. RATIONALIT

Illustrons ce nouveau concept, en prenant maintenant lensemble des caractres alphab-


tiques comme ensemble de symboles :
r, e, d, e, sont des RE (par (ii))
(re) et (de) sont des RE (par (iii))
(((( f a)i)r)e) est une RE (par (ii), puis (iii))
((re) + (de)) est une RE (par (iii))
((((re) + (de)))? ) est une RE (par (iii))
(((((re) + (de)))? )(((( f a)i)r)e)) est une RE (par (iii))
...
quoi servent ces formules ? Comme annonc, elles servent dnoter des langages ration-
nels. Linterprtation (la smantique) dune expression est dfinie par les rgles inductives
suivantes :
(i) dnote le langage {} et dnote le langage vide.
(ii) a , a dnote le langage {a}
(iii.1) (e1 + e2 ) dnote lunion des langages dnots par e1 et par e2
(iii.2) (e1 e2 ) dnote la concatnation des langages dnots par e1 et par e2
(iii.3) (e? ) dnote ltoile du langage dnot par e
Pour allger les notations (et limiter le nombre de parenthses), on imposera les rgles de
priorit suivantes : ltoile (?) est loprateur le plus liant, puis la concatnation, puis lunion
(+). Les oprateurs binaires sont pris associatifs gauche. Ainsi, aa? + b? sinterprte-t-il
comme ((a(a? )) + (b? )), et (((((re) + (de)))? )(((( f a)i)r)e)) peut scrire (re + de)? f aire.
Revenons la formule prcdente : (re + de)? f aire dnote lensemble des mots forms en
itrant volont un des deux prfixes re ou de, concatn au suffixe f aire : cet ensemble dcrit
en fait un ensemble de mots existants ou potentiels de la langue franaise qui sont drivs
par application dun procd tout fait rgulier de prfixation verbale.
Par construction, les expressions rationnelles permettent de dnoter prcisment tous les
langages rationnels, et rien de plus. Si, en effet, un langage est rationnel, alors il existe une
expression rationnelle qui le dnote. Ceci se montre par une simple rcurrence sur le nombre
doprations rationnelles utilises pour construire le langage. Rciproquement, si un langage
est dnot par une expression rationnelle, alors il est lui-mme rationnel (de nouveau par
induction sur le nombre dtapes dans la dfinition de lexpression). Ce dernier point est
important, car il fournit une premire mthode pour prouver quun langage est rationnel : il
suffit pour cela dexhiber une expression qui le dnote.

Vcsn travaille sur des expressions rationnelles (et des automates) de types plus
gnraux. Le concept de type se nomme contexte dans Vcsn. Nous utiliserons le
contexte le plus simple, lal_char(a-z), b, qui dsigne les expressions sur lalphabet
{a, b, . . . , z} qui calculent un boolen (B). Le cryptique lal_char signifie que les
tiquettes sont des lettres (labels are letters) et que les lettres sont de simples char.
Dfinissons ce contexte.

25
CHAPITRE 3. LANGAGES ET EXPRESSIONS RATIONNELS

>>> import vcsn


>>> ctx = vcsn.context(lal_char(abc), b)

Puis construisons quelques expressions rationnelles.

>>> ctx.expression((a+b+c)*)
>>> ctx.expression((a+b+c)*abc(a+b+c)*)

La syntaxe des expressions rationnelles est documente sur la page Expressions.

3.1.3 quivalence et rductions

La correspondance entre expression et langage nest pas biunivoque : chaque expression


dnote un unique langage, mais un langage donn peuvent correspondre plusieurs ex-
? ?
pressions diffrentes. Ainsi, les deux expressions suivantes : a? (a? ba? ba? ) et a? (ba? ba? )
sont-elles en ralit deux variantes notationnelles du mme langage sur = {a, b}.

Dfinition 3.3 (Expressions rationnelles quivalentes). Deux expressions rationnelles sont qui-
valentes si elles dnotent le mme langage.

Comment dterminer automatiquement que deux expressions sont quivalentes ? Existe-


t-il une expression canonique, correspondant la manire la plus courte de dnoter un
langage ? Cette question nest pas anodine : pour calculer efficacement le langage associ
une expression, il semble prfrable de partir de la version la plus simple, afin de minimiser
le nombre doprations accomplir.
Un lment de rponse est fourni avec les formules du tableau 3.1 qui expriment (par le
signe ) un certain nombre dquivalences lmentaires.

e e e
e e e
? ?
e+ f f +e e+ e
?
e+e e (e? ) e?
e( f + g) e f + eg (e + f )g eg + f g
(e f )? e e( f e)?
(e + f )? e? (e + f )? (e + f )? (e? + f )
?
?
(e + f )? (e? f ? ) ?
(e + f )? (e? f ) e?

Table 3.1 Identits rationnelles

En utilisant ces identits, il devient possible doprer des transformations purement syn-

26
3.2. EXTENSIONS NOTATIONNELLES

taxiques 2 qui prservent le langage dnot, en particulier pour les simplifier. Un exemple de
rduction obtenue par application de ces expressions est le suivant :

bb? (a? b? + )b b(b? a? b? + b? )b


b(b? a? + )b? b
b(b? a? + )bb?

Observez certaines simplifications.

>>> ctx.expression((c+a+b+a)*+\z)
>>> ctx.expression(\e*)

La conceptualisation algorithmique dune stratgie efficace permettant de rduire les expres-


sions rationnelles sur la base des identits du tableau 3.1 tant un projet difficile, lapproche
la plus utilise pour tester lquivalence de deux expressions rationnelles nutilise pas direc-
tement ces identits, mais fait plutt appel leur transformation en automates finis, qui sera
prsente dans le chapitre suivant ( la section 4.2.2).

3.2 Extensions notationnelles

Les expressions rationnelles constituent un outil puissant pour dcrire des langages simples
(rationnels). La ncessit de dcrire de tels langages tant rcurrente en informatique, ces
formules sont donc utilises, avec de multiples extensions, dans de nombreux outils dusage
courant.
Par exemple, grep est un utilitaire disponible sous UNIX pour rechercher les occurrences
dun mot(if) dans un fichier texte. Son utilisation est simplissime :

> grep chaine mon-texte

imprime sur la sortie standard toutes les lignes du fichier mon-texte contenant au moins
une occurrence du mot chaine.
En fait grep permet un peu plus : la place dun mot unique, il est possible dimprimer les
occurrences de tous les mots dun langage rationnel quelconque, ce langage tant dfini sous
la forme dune expression rationnelle. Ainsi, par exemple :

> grep cha*ine mon-texte

2. Par transformation syntaxique on entend une simple rcriture des mots (ici les expressions rationnelles elles-
mmes) sans devoir faire appel ce quils reprsentent. Par exemple les rgles de rcriture x + 0 ; x et 0 + x ; x
expriment syntaxiquement la neutralit de la valeur du mot 0 pour lopration reprsente par + sans connatre
ni cette valeur, ni cette opration.

27
CHAPITRE 3. LANGAGES ET EXPRESSIONS RATIONNELS

recherche (et imprime) toute occurrence dun mot du langage cha? ine dans le fichier mon-texte.
tant donn un motif exprim sous la forme dune expression rationnelle e, grep analyse le
texte ligne par ligne, testant pour chaque ligne si elle appartient (ou non) au langage ? (e)? ;
lalphabet (implicitement) sous-jacent tant lalphabet ASCII (ou encore un jeu de caractres
tendu tel que ISO Latin 1).
La syntaxe des expressions rationnelles permises par grep fait appel aux caractres * et |
pour noter respectivement les oprateurs ? et +. Ceci implique que, pour dcrire un motif
contenant le symbole *, il faudra prendre la prcaution dviter quil soit interprt comme
un oprateur, en le faisant prcder du caractre dchappement \. Il en va de mme pour
les autres oprateurs (|, (, )). . . et donc aussi pour \. La syntaxe complte de grep inclut
de nombreuses extensions notationnelles, permettant de simplifier grandement lcriture des
expressions rationnelles, au prix de la dfinition de nouveaux caractres spciaux. Les plus
importantes de ces extensions sont prsentes dans le tableau 3.2.

Lexpression dnote remarque


Classes de caractres
[abc] a+b+c a, b, c sont des caractres
[a-z] a + b + c + + z utilise lordre des caractres ASCII
[abc] \{a, b, c} ninclut pas le symbole de fin de ligne \n
. nimporte quel symbole (autre que \n)
Quantificateurs
e? +e
e* e?
e+ ee?
e{n} en
e{n,} en e?
e{,m} + e + e2 + + em
e{n,m} en + en+1 + + em condition que n m
Ancres/Prdicats
\<e e e doit apparatre en dbut de mot, i.e. prcd dun
sparateur (espace, virgule, dbut de ligne, . . . )
e\> e e doit apparatre en fin de mot, i.e. suivi dun spara-
teur (espace, virgule, fin de ligne, . . . )
e e e doit apparatre en dbut de ligne
e$ e e doit apparatre en fin de ligne
Caractres spciaux
\. .
\*
\+ +
\n dnote une fin de ligne
...

Table 3.2 Dfinition des motifs pour grep

28
3.2. EXTENSIONS NOTATIONNELLES

Supposons, titre illustratif, que nous cherchions mesurer lutilisation de limparfait du


subjonctif dans les romans de Balzac, supposment disponibles dans le (volumineux) fichier
Balzac.txt. Pour commencer, un peu de conjugaison : quelles sont les terminaisons pos-
sibles ? Au premier groupe : asse, asses, t, assions, assiez, assent. On trouvera donc
toutes les formes du premier groupe avec un simple 3 :

> grep -E (t|ass(e|es|ions|iez|ent)) Balzac.txt

Gure plus difficile, le deuxime groupe : isse, isses, t, issions, issiez, issent. Do le
nouveau motif :

> grep -E ([]t|[ia]ss(e|es|ions|iez|ent)) Balzac.txt

Le troisime groupe est autrement complexe : disons simplement quil implique de considrer
galement les formes en usse (pour boire ou encore valoir ) ; les formes en insse (pour
venir , tenir et leurs drivs. . . ). On parvient alors quelque chose comme :

> grep -E ([]n?t|[iau]n?ss(e|es|ions|iez|ent)) Balzac.txt

Cette expression est un peu trop gnrale, puisquelle inclut des squences comme unssiez ;
pour linstant on sen contentera. Pour continuer, revenons notre ambition initiale : chercher
des verbes. Il importe donc que les terminaisons que nous avons dfinies apparaissent bien
comme des suffixes. Comment faire pour cela ? Imposer, par exemple, que ces squences
soient suivies par un caractre de ponctuation parmi : [,;.!:?]. On pourrait alors crire :

> grep -E ([]n?t|[iau]n?ss(e|es|ions|iez|ent))[,;.!:? ] Balzac.txt

indiquant que la terminaison verbale doit tre suivie dun des sparateurs. grep connat
mme une notation un peu plus gnrale, utilisant : [:punct:], qui comprend toutes
les ponctuations et [:space:], qui inclut tous les caractres despacement (blanc, tabu-
lation. . . ). Ce nest pas satisfaisant, car nous exigeons alors la prsence dun sparateur, ce
qui nest pas le cas lorsque le verbe est simplement en fin de ligne dans le fichier.
Nous utiliserons donc \>, qui est une notation pour lorsque celui-ci est trouv la fin dun
mot. La condition que la terminaison est bien en fin de mot scrit alors :

> grep -E ([]n?t|[iau]n?ss(e|es|ions|iez|ent))\> Balzac.txt

Dernier problme : rduire le bruit. Notre formulation est en effet toujours excessivement
laxiste, puisquelle reconnat des mots comme masse ou passions, qui ne sont pas des
formes de limparfait du subjonctif. Une solution exacte est ici hors de question : il faudrait
rechercher dans un dictionnaire tous les mots susceptibles dtre improprement dcrits par
cette expression : cest possible (un dictionnaire est aprs tout fini), mais trop fastidieux.
Une approximation raisonnable est dimposer que la terminaison apparaisse sur un radical
comprenant au moins trois lettres, soit finalement (en ajoutant galement \< qui spcifie un
dbut de mot) :
3. Loption -E donne accs toutes les extensions notationnelles.

29
CHAPITRE 3. LANGAGES ET EXPRESSIONS RATIONNELS

> grep -E \
\<[a-z]{3,}([]n?t|[iau]n?ss(e|es|ions|iez|ent))\> \
Balzac.txt

Dautres programmes disponibles sur les machines UNIX utilisent ce mme type dextensions
notationnelles, avec toutefois des variantes mineures suivant les programmes : cest le cas
en particulier de (f)lex, un gnrateur danalyseurs lexicaux ; de sed, un diteur de flux
de texte en batch ; de perl, un langage de script pour la manipulation de fichiers textes ;
de (x)emacs. . . On se reportera aux pages de documentation de ces programmes pour une
description prcise des notations autorises. Il existe galement des bibliothques permettant
de manipuler des expressions rationnelles. Ainsi, pour ce qui concerne C, la bibliothque
regexp permet de compiler des expressions rationnelles et de les excuter pour tester
la reconnaissance dun mot. Des bibliothques quivalentes existent en C++, en Java. . .

Attention Une confusion frquente viter : pour exprimer des ensembles de noms de
fichiers les shells UNIX utilisent des notations comparables, mais avec une smantique
diffrente. Par exemple, foo* dsigne les fichiers dont le nom a foo pour prfixe (comme
par exemple foo.java) et non pas ceux dont le nom appartient au langage f o(o? ).

30
Chapitre 4

Automates finis

Nous introduisons ici trs succinctement les automates finis. Pour les lecteurs intresss par
les aspects formels de la thorie des automates finis, nous recommandons particulirement
la lecture de quelques chapitres de Hopcroft et Ullman (1979), ou en franais, des chapitres
initiaux de Sakarovitch (2003). Lexpos ncessairement limit prsent dans les sections qui
suivent reprend pour lessentiel le contenu de Sudkamp (1997).

4.1 Automates finis

4.1.1 Bases

Dans cette section, nous introduisons le modle le plus simple dautomate fini : lautomate
dterministe complet. Ce modle nous permet de dfinir les notions de calcul et de langage
associ un automate. Nous terminons cette section en dfinissant la notion dquivalence
entre automates, ainsi que la notion dutilit dun tat.
Dfinition 4.1 (Automate fini dterministe (complet)). Un automate fini dterministe (com-
plet) (DFA, deterministic finite automaton) est dfini par un quintuplet A = (, Q, q0 , F, ), o :
est un ensemble fini de symboles (lalphabet)
Q est un ensemble fini dtats
q0 Q est ltat initial
F Q est lensemble des tats finaux
est une fonction totale de Q dans Q, appele fonction de transition.

Le qualificatif de dterministe sera justifi lors de lintroduction des automates non-dterministes


(dfinition 4.8).
Un automate fini correspond un graphe orient, dans lequel certains des nuds (tats)
sont distingus et marqus comme initial ou finaux et dans lequel les arcs (transitions) sont
tiquets par des symboles de . Une transition est donc un triplet de Q Q ; si (q, a) = r,
on dit que a est ltiquette de la transition (q, a, r) ; q en est lorigine, et r la destination. Les
automates admettent une reprsentation graphique, comme celle de lautomate 4.1.
CHAPITRE 4. AUTOMATES FINIS

b b b

a a
0 1 2

Automate 4.1 Un automate fini (dterministe)

Dans cette reprsentation, ltat initial 0 est marqu par un arc entrant sans origine et les
tats finaux (ici lunique tat final est 2) par un arc sortant sans destination. La fonction de
transition correspondant ce graphe sexprime matriciellement par :

a b
0 1 0
1 2 1
2 0 2

Pour dfinir un automate dans Vcsn, lister ligne par ligne les transitions, avec la syn-
taxe source -> destination tiquette, tiquette.... Les tats initiaux sont
dnots par $ -> 0, et les finaux par 2 -> $.
Lautomate 4.1 scrit donc :

>>> a = vcsn.automaton(
context = "lal_char(ab), b"
$ -> 0
0 -> 0 b
0 -> 1 a
1 -> 1 b
1 -> 2 a
2 -> 2 b
2 -> 0 a
2 -> $
)

Un calcul dans A est une squence de transitions e1 . . . en de A, telle que pour tout couple
de transitions successives ei , ei+1 , ltat destination de ei est ltat origine de ei+1 . Ltiquette
dun calcul est le mot construit par concatnation des tiquettes de chacune des transitions.
Un calcul dans A est russi si la premire transition a pour tat dorigine ltat initial, et
si la dernire transition a pour destination un des tats finaux. Le langage reconnu par
lautomate A, not L(A), est lensemble des tiquettes des calculs russis. Dans lexemple
prcdent, le mot baab appartient au langage reconnu, puisquil tiquette le calcul (russi) :
(0, b, 0)(0, a, 1), (1, a, 2)(2, b, 2).

32
4.1. AUTOMATES FINIS

La relation `A permet de formaliser la notion dtape lmentaire de calcul. Ainsi on crira,


pour a dans et v dans ? : (q, av) `A ((q, a), v) pour noter une tape de calcul utilisant la
transition (q, a, (q, a)). La clture rflexive et transitive de `A se note `?A ; (q, uv) `?A (p, v) sil
existe une suite dtats q = q1 . . . qn = p tels que (q1 , u1 . . . un v) `A (q2 , u2 . . . un v) . . . `A (qn , v).
La rflexivit de cette relation signifie que pour tout (q, u), (q, u) `? (q, u). Avec ces notations,
on a :
L(A) = {u ? | (q0 , u) `?A (q, ), avec q F}

Cette notation met en vidence lautomate comme une machine permettant de reconnatre
des mots : tout parcours partant de q0 permet de consommer un un les symboles du mot
reconnatre ; ce processus stoppe lorsque le mot est entirement consomm : si ltat ainsi
atteint est final, alors le mot appartient au langage reconnu par lautomate.
On drive un algorithme permettant de tester si un mot appartient au langage reconnu par
un automate fini dterministe.

// u = u1 . . . un est le mot reconnatre.


// A = (, Q, q0 , , F) est le DFA.
q := q0 ;
for i := 1 to n do
q := (q, ui )
if q F then return true else return false ;
Algorithme 4.2 Reconnaissance par un DFA

La complexit de cet algorithme dcoule de lobservation que chaque tape de calcul cor-
respond une application de la fonction (), qui elle-mme se rduit la lecture dune
case dun tableau et une affectation, deux oprations qui seffectuent en temps constant. La
reconnaissance dun mot u se calcule en exactement |u| tapes.

Dfinition 4.2 (Langage reconnaissable). Un langage est reconnaissable sil existe un automate
fini qui le reconnat.

Dans Vcsn, un automate peut-tre vu comme une fonction qui calcule un boolen
reprsentant lappartenance du mot au langage de lautomate :

>>> a(baab)
>>> a(a)

La routine automaton.shortest permet dobtenir la liste des premiers mots accepts.

>>> a.shortest(10)

Lautomate 4.3 est un exemple trs similaire au premier. Ltat 0 est la fois initial et final.
Il reconnat le langage correspondant aux mots u tels que |u|a est divisible par 3 : chaque

33
CHAPITRE 4. AUTOMATES FINIS

b b b

a a
0 1 2

Automate 4.3 Un automate fini dterministe comptant les a (modulo 3)

tat correspond une valeur du reste dans la division par 3 : un calcul russi correspond
ncessairement un reste gal 0 et rciproquement.
Par un raisonnement similaire celui utilis pour dfinir un calcul de longueur quelconque,
il est possible dtendre rcursivement la fonction de transition en une fonction ? de
Q ? Q par :
? (q, ) = q
? (q, au) = ? ((q, a), u)
On notera que, puisque est une fonction totale, ? est galement une fonction totale : limage
dun mot quelconque de ? par ? est toujours bien dfinie, i.e. existe et est unique. Cette
nouvelle notation permet de donner une notation alternative pour le langage reconnu par
un automate A :
L(A) = {u ? | ? (q0 , u) F}

Nous avons pour linstant plutt vu lautomate comme une machine permettant de recon-
natre des mots. Il est galement possible de le voir comme un systme de production : partant
de ltat initial, tout parcours conduisant un tat final construit itrativement une squence
dtiquettes par concatnation des tiquettes rencontres le long des arcs.
Si chaque automate fini reconnat un seul langage, la rciproque nest pas vraie : plusieurs
automates peuvent reconnatre le mme langage. Comme pour les expressions rationnelles,
on dira dans ce cas que les automates sont quivalents.
Dfinition 4.3 (Automates quivalents). Deux automates finis A1 et A2 sont quivalents si et
seulement sils reconnaissent le mme langage.

Ainsi, par exemple, lautomate 4.4 est-il quivalent lautomate 4.1 : tous deux reconnaissent
le langage de tous les mots qui contiennent un nombre de a congru 2 modulo 3.

b b b
a a b
0 1 2 3
a
a

Automate 4.4 Un automate fini dterministe quivalent lautomate 4.1

Nous lavons not plus haut, ? est dfinie pour tout mot de ? . Ceci implique que lalgo-
rithme de reconnaissance (algorithme 4.2) demande exactement |u| tapes de calcul, corres-
pondant une excution complte de la boucle. Ceci peut savrer particulirement inefficace,

34
4.1. AUTOMATES FINIS

comme dans lexemple de lautomate 4.5, qui reconnat le langage {ab}{a, b}? . Dans ce cas en
effet, il est en fait possible daccepter ou de rejeter des mots en ne considrant que les deux
premiers symboles.

a, b

2
b a, b
a
a b
0 1 3

Automate 4.5 Un automate fini dterministe pour ab(a + b)?

4.1.2 Spcification partielle

Pour contourner ce problme et pouvoir arrter le calcul aussi tt que possible, nous introdui-
sons dans cette section des dfinitions alternatives, mais qui savrent en fait quivalentes,
des notions dautomate et de calcul.
Dfinition 4.4 (Automate fini dterministe). Un automate fini dterministe est un quintuplet
A = (, Q, q0 , F, ), o :
est un ensemble fini de symboles (lalphabet)
Q est un ensemble fini dtats
q0 Q est ltat initial
F Q sont les tats finaux
est une fonction partielle de Q dans Q

La diffrence avec la dfinition 4.1 est que est ici dfinie comme une fonction partielle. Son
domaine de dfinition est un sous-ensemble de Q . Selon cette nouvelle dfinition, il est
possible de se trouver dans une situation o un calcul sarrte avant davoir atteint la fin de
lentre. Ceci se produit ds que lautomate atteint une configuration (q, au) pour laquelle il
nexiste pas de transition dorigine q tiquete par a.
La dfinition 4.4 est en fait strictement quivalente la prcdente, dans la mesure o les
automates partiellement spcifis peuvent tre complts par ajout dun tat puits absorbant
les transitions absentes de lautomate original, sans pour autant changer le langage reconnu.
Formellement, soit A = (, Q, q0 , F, ) un automate partiellement spcifi, on dfinit A0 =
(, Q0 , q00 , F0 , 0 ) avec :
Q0 = Q {qp }
q00 = q0
F0 = F
q Q, a , 0 (q, a) = (q, a) si (q, a) existe, 0 (q, a) = qp sinon.
a , 0 (qp , a) = qp

35
CHAPITRE 4. AUTOMATES FINIS

Ltat puits, qp , est donc celui dans lequel on aboutit dans A0 en cas dchec dans A ; une fois
dans qp , il est impossible datteindre les autres tats de A et donc de rejoindre un tat final.
Cette transformation est illustre pour lautomate 4.6, dont le transform est prcisment
lautomate 4.5, ltat 2 jouant le rle de puits.

a, b

a b
0 1 3

Automate 4.6 Un automate partiellement spcifi

A0 reconnat le mme langage que A puisque :


si u L(A), ? (q0 , u) existe et appartient F. Dans ce cas, le mme calcul existe dans A0
et aboutit galement dans un tat final
si u < L(A), deux cas sont possibles : soit ? (q0 , u) existe mais nest pas final, et la mme
chose se produit dans A0 ; soit le calcul sarrte dans A aprs le prfixe v : on a alors
u = va et (? (q0 , v), a) nexiste pas. Or, le calcul correspondant dans A0 conduit au
mme tat, partir duquel une transition existe vers qp . Ds lors, lautomate est vou
rester dans cet tat jusqu la fin du calcul ; cet tat ntant pas final, le calcul choue et
la chane est rejete.
Pour tout automate (au sens de la dfinition 4.4), il existe donc un automate compltement
spcifi (ou automate complet) quivalent.

Exercice 4.5 (BCI-0506-1). On dit quun langage L sur ? est local sil existe I et F deux sous-
ensembles de et T un sous-ensemble de 2 (lensemble des mots sur de longueur 2) tels que
L = (I? ? F) \ (? T? ). En dautres termes, un langage local est dfini par un ensemble fini de
prfixes et de suffixes de longueur 1 (I et F) et par un ensemble T de facteurs interdits de longueur
2. Les langages locaux jouent en particulier un rle important pour infrer un langage L partir dun
ensemble dexemples de mots de L.

1. Montrer que le langage L1 dnot par aa? est un langage local ; que le langage L2 dnot par
ab(ab)? est un langage local. Dans les deux cas, on prendra = {a, b}.
2. Montrer que le langage L3 dnot par aa? + ab(ab)? nest pas local.
3. Montrer que lintersection de deux langages locaux est un langage local ; que lunion de deux
langages locaux nest pas ncessairement un langage local.
4. Montrer que tout langage local est rationnel.
5. On considre maintenant que = {a, b, c}. Soit C lensemble fini suivant C = {aab, bca, abc}.
Proposer et justifier une construction pour lautomate reconnaissant le plus petit (au sens de
linclusion) langage local contenant tous les mots de C. Vous pourrez, par exemple, construire
les ensembles I, F et T et en dduire la forme de lautomate.
6. On rappelle quun morphisme est une application de ? 1
vers ?
2
telle que (i) () = et
?
(ii) si u et v sont deux mots de 1 , alors (uv) = (u)(v). Un morphisme lettre--lettre est
induit par une injection de 1 dans 2 , et est tendu rcursivement par (au) = (a)(u).
Par exemple, pour (a) = (b) = x, (c) = y on a (abccb) = xxyyx.

36
4.1. AUTOMATES FINIS

Montrer que tout langage rationnel L est limage par un morphisme lettre--lettre dun langage
local L0 .
Indication : Si A = (, Q, q0 , F, ) est un automate fini dterministe reconnaissant L, on dfinira
le langage local L0 sur lalphabet dont les symboles sont les triplets [p, a, q], avec p, q Q et
a et on considrera le morphisme induit par ([p, a, q]) = a.

4.1.3 tats utiles

Un second rsultat concernant lquivalence entre automates demande lintroduction des


quelques dfinitions complmentaires suivantes.

Dfinition 4.6 (Accessible, co-accessible, utile, mond). Un tat q de A est dit accessible sil
existe u dans ? tel que ? (q0 , u) = q. q0 est trivialement accessible (par u = ). Un automate dont
tous les tats sont accessibles est lui-mme dit accessible.
Un tat q de A est dit co-accessible sil existe u dans ? tel que ? (q, u) F. Tout tat final est
trivialement co-accessible (par u = ). Un automate dont tous les tats sont co-accessibles est lui-mme
dit co-accessible.
Un tat q de A est dit utile sil est la fois accessible et co-accessible. Dun automate dont tous les
tats sont utiles on dit quil est mond (en anglais trim).

Les tats utiles sont donc les tats qui servent dans au moins un calcul russi : on peut les
atteindre depuis ltat initial, et les quitter pour un tat final. Les autres tats, les tats inutiles,
ne servent pas grand-chose, en tout cas pas au peuplement de L(A). Cest prcisment ce
que montre le thorme suivant.

Thorme 4.7 (mondage). Si L(A) , est un langage reconnaissable, alors il est galement
reconnu par un automate mond.

Dmonstration. Soit A un automate reconnaissant L, et Qu Q lensemble de ses tats utiles ;


Qu nest pas vide ds lors que L(A) , . La restriction 0 de Qu permet de dfinir un
automate A0 = (, Qu , q0 , F, 0 ). A0 est quivalent A. Qu tant un sous-ensemble de Q, on a en
effet immdiatement L(A0 ) L(A). Soit u dans L(A), tous les tats du calcul qui le reconnat
tant par dfinition utiles, ce calcul existe aussi dans A0 et aboutit dans un tat final : u est
donc aussi reconnu par A0 . 

4.1.4 Automates non-dterministes

Dans cette section, nous augmentons le modle dautomate de la dfinition 4.4 en autorisant
plusieurs transitions sortantes dun tat q porter le mme symbole : les automates ainsi spci-
fis sont dits non-dterministes. Nous montrons que cette gnralisation naugmente toutefois
pas lexpressivit du modle : les langages reconnus par les automates non-dterministes
sont les mmes que ceux reconnus par les automates dterministes.

37
CHAPITRE 4. AUTOMATES FINIS

Non-dterminisme

Dfinition 4.8 (Automate fini non-dterministe). Un automate fini non-dterministe (NFA,


nondeterministic finite automaton) est dfini par un quintuplet A = (, Q, I, F, ), o :
est un ensemble fini de symboles (lalphabet)
Q est un ensemble fini dtats
I Q sont les tats initiaux
F Q sont les tats finaux
Q Q est une relation ; chaque triplet (q, a, q0 ) est une transition.

On peut galement considrer comme une fonction de Q dans 2Q : limage par dun
couple (q, a) est un sous-ensemble de Q (ventuellement lorsquil ny a pas de transition
tiquet a sortant de q). On aurait aussi pu, sans perte de gnralit, nautoriser quun seul
tat initial.
La nouveaut introduite par cette dfinition est lindtermination qui porte sur les transitions :
pour une paire (q, a), il peut exister dans A plusieurs transitions possibles. On parle, dans ce
cas, de non-dterminisme, signifiant quil existe des tats dans lesquels la lecture dun symbole
a dans lentre provoque un choix (ou une indtermination) et que plusieurs transitions
alternatives sont possibles.
Notez que cette dfinition gnralise proprement la notion dautomate fini : la dfinition 4.4
est un cas particulier de la dfinition 4.8, avec pour tout (q, a), lensemble (q, a) ne contient
quun seul lment. En dautres termes, tout automate dterministe est non-dterministe.
Remarquez que le vocabulaire est trs trompeur : tre non-dterministe ne signifie pas ne pas
tre dterministe ! Cest pour cela que nous notons non-dterministe avec un tiret, et non
pas non dterministe .
Les notions de calcul et de calcul russi se dfinissent exactement comme dans le cas d-
terministe. On dfinit galement la fonction de transition tendue ? de Q ? dans 2Q
par :
? (q, ) = {q}
? (q, au) = r(q,a) ? (r, u)
S

Lautomate 4.7 illustre ces notions.


Le langage reconnu par un automate non-dterministe est dfini par :

L(A) = {u ? | q0 I : ? (q0 , u) F , }

Pour quun mot appartienne au langage reconnu par lautomate, il suffit quil existe, parmi
tous les calculs possibles, un calcul russi, cest--dire un calcul qui consomme tous les
symboles de u entre un tat initial et un tat final ; la reconnaissance nchoue donc que
si tous les calculs aboutissent une des situations dchec. Ceci implique que pour calculer
lappartenance dun mot un langage, il faut, en principe, examiner successivement tous les
chemins possibles, et donc ventuellement revenir en arrire dans lexploration des parcours
de lautomate lorsque lon rencontre une impasse. Cette exploration peut toutefois se ramener
un problme daccessibilit dans le graphe sous-jacent lautomate, puisquun mot est

38
4.1. AUTOMATES FINIS

3
a b b

a a
1 2 4

Deux transitions sortantes de 1 sont tiquetes par a : (1, a) = {1, 2}. aa donne lieu un
calcul russi passant successivement par 1, 2 et 4, qui est final ; aa donne aussi lieu un
calcul (1, a, 1)(1, a, 1), qui nest pas un calcul russi.

Automate 4.7 Un automate non-dterministe

reconnu par lautomate si lon arrive prouver quau moins un tat final (ils sont en nombre
fini) est accessible depuis au moins un tat initial (ils sont en nombre fini) sur un chemin
tiquet par u. Dans ce nouveau modle, le problme de la reconnaissance dun mot reste
donc polynomial en la longueur du mot en entre.

Le non-dterminisme ne paye pas

La gnralisation du modle dautomate fini lie lintroduction de transitions non-dterministes


est, du point de vue des langages reconnus, sans effet : tout langage reconnu par un automate
fini non-dterministe est aussi reconnu par un automate dterministe.

Thorme 4.9 (Dterminisation). Pour tout NFA A, on peut construire un DFA A0 quivalent
A. De plus, si A a n tats, alors A0 a au plus 2n tats.

On pose A = (, Q, I, F, ) et on considre A0 dfini par A0 = (, 2Q , I, F0 , 0 ) avec :


F0 = {G Q | F G , }.
G Q, a , 0 (G, a) = qG (q, a).
S

Les tats de A0 sont donc associs de manire biunivoque des sous-ensembles de Q (il y en
a un nombre fini) : ltat initial est lensemble I ; chaque partie contenant un tat final de A
donne lieu un tat final de A0 ; la transition sortante dun sous-ensemble E, tiquete par a,
atteint lensemble de tous les tats de Q atteignables depuis un tat de E par une transition
tiquete par a. A0 est le dterminis de A. Illustrons cette construction sur lautomate 4.8.
Lautomate 4.8 ayant 4 tats, son dterminis en aura donc 16, correspondant au nombre de
sous-ensembles de {1, 2, 3, 4}. Son tat initial est le singleton {1}, et ses tats finaux tous les
sous-ensembles contenant 4 : il y en a exactement 8, qui sont : {4}, {1, 4}, {2, 4}, {3, 4}, {1, 2, 4},
{1, 3, 4}, {2, 3, 4} ,{1, 2, 3, 4}. Considrons par exemple les transitions sortantes de ltat initial :
1 ayant deux transitions sortantes sur le symbole a, {1} aura une transition depuis a vers
ltat correspondant au doubleton {2, 3}. Le dterminis est lautomate 4.9. On notera que
cette figure ne reprsente que les tats utiles du dterminis : ainsi {1, 2} nest pas reprsent,
puisquil nexiste aucun moyen datteindre cet tat.

39
CHAPITRE 4. AUTOMATES FINIS

3
a b

1 4
a
a
b
2

Automate 4.8 Un automate dterminiser

b
{4} a {2}

b a b
b
a a
{1} {2, 3} {3} {2, 4}

a b
a

{3, 4}

Automate 4.9 Le rsultat de la dterminisation de lautomate 4.8

Que se passerait-il si lon ajoutait lautomate 4.8 une transition supplmentaire bouclant
dans ltat 1 sur le symbole a ? Construisez le dterminis de ce nouvel automate.
Dmontrons maintenant le thorme 4.9 ; et pour saisir le sens de la dmonstration, reportons
nous lautomate 4.8, et considrons les calculs des mots prfixs par aaa : le premier a conduit
une indtermination entre 2 et 3 ; suivant les cas, le second a conduit donc en 4 (si on a
choisi daller initialement en 2) ou en 3 (si on a choisi daller initialement en 3). La lecture
du troisime a lve lambigut, puisquil ny a pas de transition sortante pour 4 : le seul
tat possible aprs aaa est 3. Cest ce qui se lit sur lautomate 4.9 : les ambiguts initiales
correspondent aux tats {2, 3} (atteint aprs le premier a) et {3, 4} (atteint aprs le second a) ;
aprs le troisime le doute nest plus permis et ltat atteint correspond au singleton {3}.
Formalisons maintenant ces ides pour dmontrer le rsultat qui nous intresse.

Dmonstration du thorme 4.9. Premire remarque : A0 est un automate fini dterministe,


puisque limage par 0 dun couple (H, a) est uniquement dfinie.
Nous allons ensuite montrer que tout calcul dans A correspond exactement un calcul dans

40
4.1. AUTOMATES FINIS

A0 , soit formellement que :

si q0 I : (q0 , u) `?A (p, ) alors G Q : p G, ({I}, u) `?A0 (G, )


si ({I}, u) `?A0 (G, ) alors q0 I : p G : (q0 , u) `?A (p, )

Oprons une rcurrence sur la longueur de u : si u est gal le rsultat est vrai par
dfinition de ltat initial dans A0 . Supposons que le rsultat est galement vrai pour tout
mot de longueur strictement infrieure |u|, et considrons u = va. Soit (q0 , va) `?A (p, a) `A
(q, ) un calcul dans A : par lhypothse de rcurrence, il existe un calcul dans A0 tel que :
({I}, v) `?A0 (G, ), avec p G. Ceci implique, en vertu de la dfinition mme de 0 , que q
appartient H = 0 (G, a), et donc que ({I}, u = va) `?A0 (H, ), avec q H. Inversement, soit
({I}, u = va) `?A0 (G, a) `A0 (H, ) : pour tout p dans G il existe un calcul dans A tel que
(q0 , v) `?A (p, ). G ayant une transition tiquete par a, il existe galement dans G un tat p
tel que (p, a) = q, avec q H, puis que (q0 , u = va) `?A (q, ), avec q H. On dduit alors que
lon a (q0 , u = va) `?A (q, ), avec q F si et seulement si ({I}, u) `?A0 (G, ) avec q G, donc avec
F G , , soit encore G F0 . Il sensuit directement que L(A) = L(A0 ). 

La construction utilise pour construire un DFA quivalent un NFA sappelle la construction


des sous-ensembles : elle se traduit directement dans un algorithme permettant de construire
le dterminis dun automate quelconque. On notera que cette construction peut sorganiser
de telle faon ne considrer que les tats accessibles du dterminis. Il suffit, pour cela, de
construire de proche en proche depuis {I}, les tats accessibles, rsultant en gnral des
automates (complets) ayant moins de 2n tats.
Il existe toutefois des automates pour lesquels lexplosion combinatoire annonce a lieu,
comme lautomate 4.10. Sauriez-vous expliquer do vient cette difficult ? Quel est le langage
reconnu par cet automate ?

a, b

a a, b a, b a, b
0 1 2 3 n

Automate 4.10 Un automate difficile dterminiser

Dans la mesure o ils napportent aucun gain en expressivit, il est permis de se demander
quoi servent les automates non-dterministes. Au moins deux choses : ils sont plus faciles
construire partir dautres reprsentations des langages et sont donc utiles pour certaines
preuves (voir plus loin) ou algorithmes. Ils fournissent galement des machines bien plus
(dans certains cas exponentiellement plus) compactes que les DFA, ce qui nest pas une
proprit ngligeable.

Pour dterminiser un automate, utilisez automaton.determinize. Observez que les


tats sont tiquets par les tats de lautomate dorigine. Utilisez automaton.strip
pour liminer ces dcorations.
La routine context.de_bruijn gnre les automates de la famille de lautomate 4.10.

41
CHAPITRE 4. AUTOMATES FINIS

Lancez vcsn.context(lal_char(abc), b).de_bruijn(3).determinize().strip(),


puis augmentez largument de de_bruijn.

Exercice 4.10 (BCI-0203). On considre A = (, Q, 0, {2}, ), lautomate 4.11.

a, b, c, d a, c

b d
0 1 2

Automate 4.11 Un automate potentiellement dterminiser

1. A est-il dterministe ? Justifiez votre rponse.


2. Quel est le langage reconnu par A ?
3. Donnez, sous forme graphique, lautomate dterministe A0 quivalent A, en justifiant votre
construction.

4.1.5 Transitions spontanes

Il est commode, dans la pratique, de disposer dune dfinition encore plus plastique de la
notion dautomate fini, en autorisant des transitions tiquetes par le mot vide, qui sont
appeles les transitions spontanes.
Dfinition 4.11 (Automate fini transitions spontanes). Un automate fini (non-dterministe)
transitions spontanes (-NFA, nondeterministic finite automaton with moves) est dfini
par un quintuplet A = (, Q, I, F, ), o :
est un ensemble fini de symboles (lalphabet)
Q est un ensemble fini dtats
I Q est lensemble des tats initiaux
F Q est lensemble des tats finaux
Q ( {}) Q est la relation de transition.

Encore une fois, on aurait pu ne conserver quun seul tat initial, et dfinir comme une
fonction (partielle) de Q ( {}) dans 2Q .
Formellement, un automate non-dterministe avec transitions spontanes se dfinit comme
un NFA la diffrence prs que permet dtiqueter les transitions par . Les transitions
spontanes permettent dtendre la notion de calcul : (q, u) `A (p, v) si (i) u = av et (q, a, p)
ou bien (ii) u = v et (q, , p) . En dautres termes, dans un -NFA, il est possible de changer
dtat sans consommer de symbole, en empruntant une transition tiquete par le mot vide.
Le langage reconnu par un -NFA A est, comme prcdemment, dfini par

L(A) = {u ? | (q0 , u) `?A (q, ) avec q0 I, q F}

Lautomate 4.12 est un exemple d-NFA.

42
4.1. AUTOMATES FINIS

a b c


0 1 2

Automate 4.12 Un automate avec transitions spontanes correspondant a? b? c?

Cette nouvelle extension najoute rien lexpressivit du modle, puisquil est possible
de transformer chaque -NFA A en un NFA quivalent. Pour cela, nous introduisons tout
dabord la notion d-fermeture dun tat q, correspondant tous les tats accessibles depuis
q par une ou plusieurs transitions spontanes. Formellement :
Dfinition 4.12 (-fermeture dun tat). Soit q un tat de Q. On appelle -fermeture (en anglais
closure) de q lensemble -closure(q) = {p Q | (q, ) `?A (p, )}. Par construction, q -closure(q).

Intuitivement, la fermeture dun tat q contient tous les tats quil est possible datteindre
depuis q sans consommer de symboles. Ainsi, la fermeture de ltat 0 de lautomate 4.12
est-elle gale {0, 1, 2}.
Thorme 4.13. Pour tout -NFA A, il existe un NFA A0 tel que L(A) = L(A0 ).

Dmonstration. En posant A = (, Q, q0 , F, ), on dfinit A0 comme A0 = (, Q, q0 , F0 , 0 ) avec :


[
F0 = {q Q | -closure(q) F , } 0 (q, a) = (p, a)
p-closure(q)

Par une rcurrence similaire la prcdente, on montre alors que tout calcul (q0 , u) `?A p est
quivalent un calcul (q0 , u) `?A0 p0 , avec p -closure(p0 ), puis que L(A) = L(A0 ). 

On dduit directement un algorithme constructif pour supprimer, nombre dtats constant, les
transitions spontanes. Appliqu lautomate 4.12, cet algorithme construit lautomate 4.13.

a b c

b c
0 1 2

Automate 4.13 Lautomate 4.12 dbarrass de ses transitions spontanes

Dans le cas de la preuve prcdente on parle d-fermeture arrire dun automate (on pourrait
dire amont ) : la fonction commence (en amont) par effectuer les ventuelles transitions
spontanes, puis enchane par une transition sur lettre. De mme tout tat (amont) depuis
lequel on arrive un tat final en descendant les transitions spontanes devient lui-mme
final.
On peut galement introduire l-fermeture avant dun -NFA (on pourrait dire aval ) : on
poursuit toute transition non-spontane par toutes les transitions spontanes (en aval), et
deviennent initiaux tous les tats en aval (par transitions spontanes) dun tat initial.

43
CHAPITRE 4. AUTOMATES FINIS

On prfre en gnral la fermeture arrire, qui nintroduit pas de nouveaux tats initiaux.
Les transitions spontanes introduisent une plasticit supplmentaire lobjet automate.
Par exemple, il est facile de voir que lon peut, en les utilisant, transformer un automate fini
quelconque en un automate quivalent dot dun unique tat final nayant que des transitions
entrantes.

Le mot vide se note \e dans Vcsn. Pour utiliser des -NFA, il faut spcifier que le mot
vide est une tiquette valide. Le contexte est lan_char, b au lieu de lal_char,
b. Ainsi lautomate 4.12 scrit (notez le r au dbut de la chane) :

>>> a = vcsn.automaton(r
context = "lan_char, b"
$ -> 0
0 -> 0 a
0 -> 1 \e
1 -> 1 b
1 -> 2 \e
2 -> 2 c
2 -> $
)

Pour liminer les transitions spontanes, utiliser automaton.proper.

Exercice 4.14 (BCI-0304). Considrant que lon ne peut avoir simultanment des adjectifs avant
et aprs le nom, un linguiste propose de reprsenter lensemble des groupes forms dun nom et
dadjectif(s) par lexpression rationnelle : a? n + na? .

1. Construisez, en appliquant systmatiquement la mthode de Thompson (dcrite en section 4.2.2),


un automate fini correspondant cette expression rationnelle.
2. Construisez l-fermeture de chacun des tats de lautomate construit la question 1.
3. Dduisez-en un automate sans -transition pour lexpression rationnelle de la question 1. Vous
prendrez soin galement didentifier et dliminer les tats inutiles.
4. Drivez finalement, par une construction tudie en cours, lquivalent dterministe de lau-
tomate de la question prcdente.
Exercice 4.15 (BCI-0405-1). On considre A lautomate 4.14 non-dterministe.

a b
b

0 1 2
a

Automate 4.14 Automate non-dterministe A

1. Construisez, en utilisant des mthodes du cours, lautomate dterministe A0 quivalent A.

44
4.2. RECONNAISSABLES

4.2 Reconnaissables

Nous avons dfini la section 4.1 les langages reconnaissables comme tant les langages
reconnus par un automate fini dterministe. Les sections prcdentes nous ont montr que
nous aurions tout aussi bien pu les dfinir comme les langages reconnus par un automate
fini non-dterministe ou encore par un automate fini non-dterministe avec transitions spon-
tanes.
Dans cette section, nous montrons dans un premier temps que lensemble des langages recon-
naissables est clos pour toutes les oprations classiques , en produisant des constructions
portant directement sur les automates. Nous montrons ensuite que les reconnaissables sont
exactement les langages rationnels (prsents la section 3.1.1), puis nous prsentons un
ensemble de rsultats classiques permettant de caractriser les langages reconnaissables.

4.2.1 Oprations sur les reconnaissables

Thorme 4.16 (Clture par complmentation). Les langages reconnaissables sont clos par com-
plmentation.

Dmonstration. Soit L un reconnaissable et A un DFA complet reconnaissant L. On construit


alors un automate A0 pour L en prenant A0 = (, Q, q0 , F0 , ), avec F0 = Q \ F. Tout calcul
russi de A se termine dans un tat de F, entranant son chec dans A0 . Inversement, tout
calcul chouant dans A aboutit dans un tat non-final de A, ce qui implique quil russit dans
A0 . 

Le thorme suivant est une tautologie, puisque par dfinition les langages rationnels sont
clos par lunion. Nanmoins sa preuve fournit la construction dun automate dterministe
acceptant lunion des langages de deux automates dterministes.
Thorme 4.17 (Clture par union). Les langages reconnaissables sont clos par union.

Dmonstration. Soit L1 et L2 deux langages reconnaissables, reconnus respectivement par A1


et A2 , deux DFA complets. On construit un automate A = (, Q = Q1 Q2 , q0 , F, ) pour L1 L2
de la manire suivante :
q0 = (q10 , q20 )
F = (F1 Q2 ) (Q1 F2 )
((q1 , q2 ), a) = (1 (q1 , a), 2 (q2 , a))
La construction de A est destine faire fonctionner A1 et A2 en parallle : pour tout
symbole dentre a, on transite par dans la paire dtats rsultant dune transition dans A1
et dune transition dans A2 . Un calcul russi dans A est un calcul russi dans A1 (arrt dans
un tat de F1 Q2 ) ou dans A2 (arrt dans un tat de Q1 F2 ). 

Nous verrons un peu plus loin (automate 4.18) une autre construction, plus simple, pour
cette opration, mais qui linverse de la prcdente, ne prserve pas le dterminisme de la
machine ralisant lunion.

45
CHAPITRE 4. AUTOMATES FINIS

Thorme 4.18 (Clture par intersection). Les langages reconnaissables sont clos par intersection.

Nous prsentons une preuve constructive, mais notez que le rsultat dcoule directement
des deux rsultats prcdents et de la loi de de Morgan L1 L2 = L1 L2 .

Dmonstration. Soient L1 et L2 deux reconnaissables, reconnus respectivement par A1 et A2 ,


deux DFA complets. On construit un automate A = (, Q = Q1 Q2 , q0 , F, ) pour L1 L2 de la
manire suivante :
q0 = (q10 , q20 )
F = F1 F2
((q1 , q2 ), a) = (1 (q1 , a), 2 (q2 , a))
La construction de lautomate intersection est identique celle de lautomate ralisant lunion,
la diffrence prs quun calcul russi dans A doit ici russir simultanment dans les deux
automates A1 et A2 . Ceci sexprime dans la nouvelle dfinition de lensemble F des tats
finaux : F1 F2 . 

Exercice 4.19 (AST-0506). Lintersection ne fait pas partie des oprations rationnelles. Pourtant,
lintersection de deux langages rationnels est galement un langage rationnel. Si le langage L1 est
reconnu par lautomate dterministe complet A1 = (, Q1 , q10 , F1 , 1 ) et L2 par lautomate dterministe
complet A2 = (, Q2 , q20 , F2 , 2 ), alors L = L1 L2 est reconnu par lautomate A = (, Q1 Q2 , q0 , F, ).
Les tats de A sont des couples dtats de Q1 et de Q2 , et :
q0 = (q10 , q20 )
F = F1 F2
((q1 , q2 ), a) = (1 (q1 , a), 2 (q2 , a))
A simule en fait des calculs en parallle dans A1 et dans A2 , et termine un calcul russi lorsquil
atteint simultanment un tat final de A1 et de A2 .
Dans la suite de cet exercice, on considre = {a, b}.

1. Soient L1 le langage des mots qui commencent par un a et L2 le langage des mots dont la longueur
est un multiple de 3. Proposez, pour chacun de ces langages, un automate fini dterministe et
complet.
2. Construisez, en utilisant les directives donnes ci-dessus, un automate pour L1 L2 .
3. Nous allons maintenant retrouver cette construction dans le cas gnral en utilisant la loi de
de Morgan : L1 L2 = L1 L2 . On rappelle que si L est rationnel et reconnu par A dterministe
complet, L est rationnel et est reconnu par A, qui se dduit de A en rendant finals les tats
non-finaux de A, et en rendant non-final les tats finals de A. A est galement dterministe et
complet.

a. Nous nous intressons tout dabord au calcul dun automate dterministe A pour L1 L2 .
Lautomate pour lunion de deux langages rationnels reconnus respectivement par A1 et
A2 se construit en ajoutant un nouvel tat initial q0 et deux transitions vers les tats

46
4.2. RECONNAISSABLES

initiaux q10 et q20 . Son ensemble dtats est donc Q = Q1 Q2 {q0 }. On note A0 lautomate
obtenu en liminant la transition .
Prouvez que, si A1 et A2 sont dterministes, alors A0 ne possde quun seul tat non-
dterministe 1 .
b. La dterminisation de A0 conduit un automate A dont lensemble des tats est en corres-
pondance avec les parties de Q. Prouvez, par induction, que si A1 et A2 sont dterministes
et complets, seules les parties correspondant des doubletons dtats {q1 , q2 }, q1 Q1 , q2
Q2 donnent lieux des tats utiles du dterminis. Montrez qualors on retrouve bien
pour A une fonction de transition conforme la construction directe prsente ci-dessus.
c. Quels sont les tats finaux de A0 ? Quen dduisez-vous pour ceux de lautomate reprsen-
tant le complmentaire du langage de A ? Concluez en achevant de justifier la construction
directe donne ci-dessus.

Exercice 4.20 (BCI-0203-2-1). Construire un automate non-dterministe A reconnaissant le langage


L sur lalphabet = {a, b} tel que tous les mots de L satisfont simultanment les deux conditions
suivantes :
tout mot de L a une longueur divisible par 3
tout mot de L dbute par le symbole a et finit par le symbole b
Vous justifierez votre construction.
Construire lautomate dterministe quivalent par la mthode des sous-ensembles.

Thorme 4.21 (Clture par miroir). Les langages reconnaissables sont clos par miroir.

Dmonstration. Soit L un langage reconnaissable, reconnu par A = (, Q, q0 , F, ), et nayant


quun unique tat final, not qF . A0 , dfini par A0 = (, Q, qF , {q0 }, 0 ), o 0 (q, a) = p si et
seulement si (p, a) = q reconnat exactement le langage miroir de L. A0 est en fait obtenu en
inversant lorientation des arcs de A : tout calcul de A numrant les symboles de u entre
q0 et qF correspond un calcul de A0 numrant uR entre qF et q0 . On notera que mme si
A est dterministe, la construction ici propose naboutit pas ncessairement un automate
dterministe pour le miroir. 

Thorme 4.22 (Clture par concatnation). Les langages reconnaissables sont clos par concat-
nation.

Dmonstration. Soient L1 et L2 deux langages reconnus respectivement par A1 et A2 , o lon


suppose que les ensembles dtats Q1 et Q2 sont disjoints et que A1 a un unique tat final
de degr extrieur nul (aucune transition sortante). On construit lautomate A pour L1 L2 en
identifiant ltat final de A1 avec ltat initial de A2 . Formellement on a A = (, Q1 Q2 \
{q20 }, q10 , F2 , ), o est dfini par :
q Q1 , q , q f , a , (q, a) = 1 (q, a)
(q, a) = 2 (q, a) si q Q2 .
1. Un tat est non-dterministe sil admet plusieurs transitions sortantes tiquetes par la mme lettre.

47
CHAPITRE 4. AUTOMATES FINIS

(q1F , a) = 1 (qF , a) 2 (q20 , a)


Tout calcul russi dans A doit ncessairement atteindre un tat final de A2 et pour cela
pralablement atteindre ltat final de A1 , seul point de passage vers les tats de A2 . De
surcrot, le calcul nemprunte, aprs le premier passage dans q1F , que des tats de A2 : il se
dcompose donc en un calcul russi dans chacun des automates. Rciproquement, un mot
de L1 L2 se factorise sous la forme u = vw, v L1 et w L2 . Chaque facteur correspond
un calcul russi respectivement dans A1 et dans A2 , desquels se dduit immdiatement un
calcul russi dans A. 

Thorme 4.23 (Clture par toile). Les langages reconnaissables sont clos par toile.

Dmonstration. La construction de A0 reconnaissant L? partir de A reconnaissant L est la


suivante. Tout dabord, on ajoute A un nouvel tat initial q00 avec une transition spontane
vers ltat initial q0 de A. On ajoute ensuite une transition spontane depuis tout tat final
de A vers ce nouvel tat initial q00 . Cette nouvelle transition permet litration dans A0 de
mots de L. Pour complter la construction, on marque q00 comme tat final de A0 . 

En application de cette section, vous pourrez montrer (en construisant les automates corres-
pondants) que les langages reconnaissables sont aussi clos pour les oprations de prfixation,
suffixation, pour les facteurs, les sous-mots. . .

4.2.2 Reconnaissables et rationnels

Les proprits de clture dmontres pour les reconnaissables (pour lunion, la concatnation
et ltoile) la section prcdente, compltes par la remarque que tous les langages finis sont
reconnaissables, nous permettent daffirmer que tout langage rationnel est reconnaissable.
Lensemble des langages rationnels tant en effet le plus petit ensemble contenant tous les
ensembles finis et clos pour les oprations rationnelles, il est ncessairement inclus dans
lensemble des reconnaissables. Nous montrons dans un premier temps comment exploiter
les constructions prcdentes pour construire simplement un automate correspondant
une expression rationnelle donne. Nous montrons ensuite la rciproque, savoir que tout
reconnaissable est galement rationnel : les langages reconnus par les automates finis sont
prcisment ceux qui sont dcrits par des expressions rationnelles.

Des expressions rationnelles vers les automates

Les constructions de la section prcdente ont montr comment construire les automates
ralisant des oprations lmentaires sur les langages. Nous allons nous inspirer de ces
constructions pour driver un algorithme permettant de convertir une expression rationnelle
en un automate fini reconnaissant le mme langage.
Il existe de nombreuses faons de construire un tel automate, celle que nous donnons ci-
dessous est la construction de Thompson pure qui prsente quelques proprits simples :
un unique tat initial q0 sans transition entrante

48
4.2. RECONNAISSABLES

un unique tat final qF sans transition sortante


exactement deux fois plus dtats que de symboles dans lexpression rationnelle (sans
compter les parenthses ni la concatnation, implicite).
Cette dernire proprit donne un moyen simple de contrler le rsultat en contrepartie
dautomates parfois plus lourds que ncessaire.
Puisque les expressions rationnelles sont formellement dfinies de manire inductive (rcur-
sive) nous commenons par prsenter les automates finis pour les briques de base que
sont (automate 4.15), (automate 4.16) et les symboles de (automate 4.17).

Automate 4.15 Automate de Thompson pour

Automate 4.16 Automate de Thompson pour

Automate 4.17 Automate de Thompson pour a

partir de ces automates lmentaires, nous allons construire de manire itrative des
automates pour des expressions rationnelles plus complexes. Si A1 et A2 sont les automates
de Thompson de e1 et e2 , alors lautomate 4.18 reconnat le langage dnot par lexpression
e1 + e2 .

q10 A1 q1F

q0 qF

q20 A2 q2F

Automate 4.18 Automate de Thompson pour e1 + e2

Lunion correspond donc une mise en parallle de A1 et de A2 : un calcul dans cette machine
est russi si et seulement sil est russi dans lune des deux machines A1 ou A2 .
La machine reconnaissant le langage dnot par concatnation de deux expressions e1 et e2
correspond une mise en srie des deux machines A1 et A2 , o ltat final de A1 est connect
ltat initial de A2 par une transition spontane comme sur lautomate 4.19.

49
CHAPITRE 4. AUTOMATES FINIS


q10 A1 q1F q20 A2 q2F

Automate 4.19 Automate de Thompson pour e1 e2

La machine ralisant ltoile est, comme prcdemment, construite en rajoutant une possibi-
lit de boucler depuis ltat final vers ltat initial de la machine, ainsi quun arc permettant
de reconnatre , comme sur lautomate 4.20.


q0 q10 A1 q1F qF

Automate 4.20 Automate de Thompson pour e1 ?

partir de ces constructions simples, il est possible de driver un algorithme permettant de


construire un automate reconnaissant le langage dnot par une expression rgulire quel-
conque : il suffit de dcomposer lexpression en ses composants lmentaires, puis dappli-
quer les constructions prcdentes pour construire lautomate correspondant. Cet algorithme
est connu sous le nom dalgorithme de Thompson.
Lautomate 4.21 illustre cette construction.


a

b

b

Automate 4.21 Automate de Thompson pour (a + b)? b

Cette construction simple produit un automate qui a 2n tats pour une expression forme
par n oprations rationnelles autres que la concatnation (car toutes les autres oprations
rajoutent exactement deux tats) ; chaque tat de lautomate possde au plus deux transitions
sortantes. Cependant, cette construction a le dsavantage de produire un automate non-
dterministe, contenant de multiples transitions spontanes. Il existe dautres procdures
permettant de traiter de manire plus efficace les expressions ne contenant pas le symbole
(par exemple la construction de Glushkov) ou pour construire directement un automate
dterministe.

50
4.2. RECONNAISSABLES

La mthode expression.thompson engendre lautomate de Thompson dune ex-


pression.

>>> vcsn.B.expression((a+b)*b).thompson()

Des automates vers les expressions rationnelles

La construction dune expression rationnelle dnotant le langage reconnu par un automate A


demande lintroduction dune nouvelle varit dautomates, que nous appellerons gnraliss.
Les automates gnraliss diffrent des automates finis en ceci que leurs transitions sont
tiquetes par des sous-ensembles rationnels de ? . Dans un automate gnralis, ltiquette
dun calcul se construit par concatnation des tiquettes rencontres le long des transitions ;
le langage reconnu par un automate gnralis est lunion des langages correspondants aux
calculs russis. Les automates gnraliss reconnaissent exactement les mmes langages que
les automates finis standard .
Lide gnrale de la transformation que nous allons tudier consiste partir dun automate
fini standard et de supprimer un par un les tats, tout en sassurant que cette suppression
ne modifie pas le langage reconnu par lautomate. Ceci revient construire de proche en
proche une srie dautomates gnraliss qui sont tous quivalents lautomate de dpart.
La procdure se termine lorsquil ne reste plus que lunique tat initial et lunique tat final :
en lisant ltiquette des transitions correspondantes, on dduit une expression rationnelle
dnotant le langage reconnu par lautomate originel.
Pour se simplifier la tche commenons par introduire deux nouveaux tats, qI et qF , qui joue-
ront le rle duniques tats respectivement initial et final. Ces nouveaux tats sont connects
aux tats initiaux et finaux par des transitions spontanes. On sassure ainsi qu la fin de
lalgorithme, il ne reste plus quune seule et unique transition, celle qui relie qI qF .
Lopration cruciale de cette mthode est celle qui consiste supprimer ltat q j , o q j nest
ni initial, ni final. On suppose quil y a au plus une transition entre deux tats : si a nest pas
le cas, il est possible de se ramener cette configuration en prenant lunion des transitions
existantes. On note e j j ltiquette de la transition de q j vers q j si celle-ci existe ; si elle nexiste
pas on a simplement e j j = .
La procdure de suppression de q j comprend alors les tapes suivantes :
pour chaque paire dtats (qi , qk ) avec i , j, k , j, telle quil existe une transition qi q j
tiquete ei j et une transition q j qk tiquete e jk , ajouter la transition qi qk , portant
ltiquette ei j e j j ? e jk . Si la transition qi qk existe dj avec ltiquette eik , alors ltiquette
sera eik + ei j e j j ? e jk .
Cette transformation doit tre opre pour chaque paire dtats (y compris quand
qi = qk ) avant que q j puisse tre supprim.
supprimer q j , ainsi que tous les arcs incidents.
Ce mcanisme est illustr sur lautomate 4.22.

51
CHAPITRE 4. AUTOMATES FINIS

ejj

ei j e jk eik + ei j e j j ? e jk
qi qj qk ; qi qk

eik

Automate 4.22 Illustration de BMC : limination de ltat q j

La preuve de la correction de cet algorithme rside en la vrification qu chaque itration le


langage reconnu ne change pas. Cet invariant se vrifie trs simplement : tout calcul russi
passant par q j avant que q j soit supprim contient une squence qi q j qk . Ltiquette de ce
sous-calcul tant copie lors de la suppression de q j sur larc qi qk , un calcul quivalent
existe dans lautomate rduit. Rciproquement, tout calcul russi dans lautomate aprs
suppression passant par une nouvelle transition, ou une transition dont ltiquette a chang,
correspond un calcul de lautomate original qui passe par q j .
Cette mthode de construction de lexpression quivalente un automate est appele mthode
dlimination des tats, connue galement sous le nom dalgorithme de Brzozowski et McCluskey.
Vous noterez que le rsultat obtenu dpend de lordre selon lequel les tats sont examins.
En guise dapplication, il est recommand de dterminer une expression rationnelle corres-
pondant aux automates 4.8 et 4.9.
Un corollaire fondamental de ce rsultat est que pour chaque langage reconnaissable, il
existe (au moins) une expression rationnelle qui le dnote : tout langage reconnaissable est
rationnel.

Thorme de Kleene

Nous avons montr comment construire un automate correspondant une expression ra-
tionnelle et comment driver une expression rationnelle dnotant un langage quivalent
celui reconnu par un automate fini quelconque. Ces deux rsultats permettent dnoncer un
des rsultats majeurs de ce chapitre.
Thorme 4.24 (Thorme de Kleene). Un langage est reconnaissable (reconnu par un automate
fini) si et seulement si il est rationnel (dnot par une expression rationnelle).

Ce rsultat permet de tirer quelques consquences non encore envisages : par exemple que
les langages rationnels sont clos par complmentation et par intersection finie : ce rsultat,
loin dtre vident si on sen tient aux notions doprations rationnelles, tombe simplement
lorsque lon utilise lquivalence entre rationnels et reconnaissables.
De manire similaire, les mthodes de transformation dune reprsentation lautre sont
bien pratiques : sil est immdiat de driver de lautomate 4.3 une expression rationnelle
pour le langage contenant un nombre de a multiple de 3, il est beaucoup moins facile
dcrire directement lexpression rationnelle correspondante. En particulier, le passage par
la reprsentation sous forme dautomates permet de dduire une mthode pour vrifier
si deux expressions sont quivalentes : construire les deux automates correspondants, et

52
4.3. QUELQUES PROPRITS DES LANGAGES RECONNAISSABLES

vrifier quils sont quivalents. Nous savons dj comment raliser la premire partie de ce
programme ; une procdure pour tester lquivalence de deux automates est prsente la
section 4.3.2.

4.3 Quelques proprits des langages reconnaissables

Lquivalence entre langages rationnels et langages reconnaissables a enrichi singulirement


notre palette doutils concernant les langages rationnels : pour montrer quun langage est
rationnel, on peut au choix exhiber un automate fini pour ce langage ou bien encore une
expression rationnelle. Pour montrer quun langage nest pas rationnel, il est utile de disposer
de la proprit prsente dans la section 4.3.1, qui est connue sous le nom de lemme de pompage.

4.3.1 Lemme de pompage

Intuitivement, le lemme de pompage (ou lemme de ltoile, et en anglais pumping lemma ou star
lemma) pose des limitations intrinsques concernant la diversit des mots appartenant un
langage rationnel infini : au del dune certaine longueur, les mots dun langage rationnel
sont en fait construits par itration de motifs apparaissant dans des mots plus courts.

Thorme 4.25 (Lemme de pompage). Soit L un langage rationnel. Il existe un entier k tel que
pour tout mot x de L plus long que k, x se factorise en x = uvw, avec (i) |v| > 0 (ii) |uv| k et (iii)
pour tout i 0, uvi w est galement un mot de L.

Ce que signifie fondamentalement ce lemme, cest que la seule faon daller linfini pour
un langage rationnel, cest par itration de motifs : L(uv? w) L do le nom de lemme
de ltoile .

Dmonstration. Lorsque le langage est fini, le lemme est trivial : on peut choisir un k qui
majore la longueur de tous les mots du langage.
Sinon, soit A un DFA de k tats reconnaissant L, et x un mot de L, de longueur suprieure
ou gale k (le langage tant infini, un tel x existe toujours). La reconnaissance de x dans
A correspond un calcul q0 . . . qn impliquant |x| + 1 tats. A nayant que k tats, le prfixe
de longueur k + 1 de cette squence contient ncessairement deux fois le mme tat q, aux
indices i et j, avec 0 i < j k. Si lon note u le prfixe de x tel que ? (q0 , u) = q et v le facteur
tel que ? (q, v) = q, alors on a bien (i) car au moins un symbole est consomm le long du
cycle q . . . q ; (ii) car j k ; (iii) en court-circuitant ou en itrant les parcours le long du circuit
q . . . q. 

Attention : certains langages non rationnels vrifient la proprit du lemme : elle nest
quune condition ncessaire, mais pas suffisante, de rationalit. Considrez par exemple
{an bn | n N} ? {ba}? .
Ce lemme permet, par exemple, de prouver que le langage des carrs parfaits, L = {u
? , v tel que u = v2 }, nest pas rationnel. En effet, soit k lentier spcifi par le lemme de

53
CHAPITRE 4. AUTOMATES FINIS

pompage et x un mot plus grand que 2k : x = yy avec |y| k. Il est alors possible dcrire
x = uvw, avec |uv| k. Ceci implique que uv est un prfixe de y, et y un suffixe de w. Pourtant,
uvi w doit galement tre dans L, alors quun seul des y est affect par litration : ceci est
manifestement impossible.
Vous montrerez de mme que le langage ne contenant que les mots dont la longueur est un
carr parfait et que le langage des mots dont la longueur est un nombre premier ne sont pas
non plus des langages reconnaissables.
Une manire simple dexprimer cette limitation intrinsque des langages rationnels se fonde
sur lobservation suivante : dans un automate, le choix de ltat successeur pour un tat q ne
dpend que de q, et pas de la manire dont le calcul sest droul avant q. En consquence,
un automate fini ne peut grer quun nombre fini de configurations diffrentes, ou, dit autrement,
possde une mmoire borne. Cest insuffisant pour un langage tel que le langage des carrs
parfaits pour lequel laction conduire (le langage reconnatre) aprs un prfixe u dpend
de u tout entier : reconnatre un tel langage demanderait en fait un nombre infini dtats.

4.3.2 Quelques consquences

Dans cette section, nous tablissons quelques rsultats complmentaires portant sur la d-
cidabilit, cest--dire sur lexistence dalgorithmes permettant de rsoudre quelques pro-
blmes classiques portant sur les langages rationnels. Nous connaissons dj un algorithme
pour dcider si un mot appartient un langage rationnel (lalgorithme 4.2) ; cette section
montre en fait que la plupart des problmes classiques pour les langages rationnels ont des
solutions algorithmiques.

Thorme 4.26. Si A est un automate fini contenant k tats :


(i) L(A) est non vide si et seulement si A reconnat un mot de longueur strictement infrieure k.
(ii) L(A) est infini si et seulement si A reconnat un mot u tel que k |u| < 2k.

Dmonstration. point i : un sens de limplication est trivial : si A reconnat un mot de longueur


infrieure k, L(A) est non-vide. Supposons L(A) non vide et soit u le plus petit mot de L(A) ;
supposons que la longueur de u soit strictement suprieure k. Le calcul (q0 , u) `?A (q, )
contient au moins k tapes, impliquant quun tat au moins est visit deux fois et est donc
impliqu dans un circuit C. En court-circuitant C, on dduit un mot de L(A) de longueur
strictement infrieure la longueur de u, ce qui contredit lhypothse de dpart. On a donc
bien |u| < k.
point ii : un raisonnement analogue celui utilis pour montrer le lemme de pompage nous
assure quun sens de limplication est vrai. Si maintenant L(A) est infini, il doit au moins
contenir un mot plus long que k. Soit u le plus petit mot de longueur au moins k : soit il est
de longueur strictement infrieure 2k, et le rsultat est prouv. Soit il est au moins gal
2k, mais par le lemme de pompage on peut court-circuiter un facteur de taille au plus k et
donc exhiber un mot strictement plus court et de longueur au moins k, ce qui est impossible.
Cest donc que le plus petit mot de longueur au moins k a une longueur infrieure 2k. 

Thorme 4.27. Soit A un automate fini, il existe un algorithme permettant de dcider si :

54
4.4. LAUTOMATE CANONIQUE

L(A) est vide


L(A) est fini / infini

Ce rsultat dcoule directement des prcdents : il existe, en effet, un algorithme pour


dterminer si un mot u est reconnu par A. Le rsultat prcdent nous assure quil suffit de
tester ||k mots pour dcider si le langage dun automate A est vide. De mme, ||2k ||k
vrifications suffisent pour prouver quun automate reconnat un langage infini. Pour ces
deux problmes, des algorithmes plus efficaces que celui qui nous a servi tablir ces preuves
existent, qui reposent sur des parcours du graphe sous-jacent de lautomate.
On en dduit un rsultat concernant lquivalence :

Thorme 4.28. Soient A1 et A2 deux automates finis. Il existe une procdure permettant de dcider
si A1 et A2 sont quivalents.

Dmonstration. Il suffit en effet pour cela de former lautomate reconnaissant (L(A1 )L(A2 ))
(L(A1 ) L(A2 )) (par exemple en utilisant les procdures dcrites la section 4.2.1) et de tester
si le langage reconnu par cet automate est vide. Si cest le cas, alors les deux automates sont
effectivement quivalents. 

4.4 Lautomate canonique

Dans cette section, nous donnons une nouvelle caractrisation des langages reconnaissables,
partir de laquelle nous introduisons la notion dautomate canonique dun langage. Nous
prsentons ensuite un algorithme pour construire lautomate canonique dun langage recon-
naissable reprsent par un DFA quelconque.

4.4.1 Une nouvelle caractrisation des reconnaissables

Commenons par une nouvelle dfinition : celle dindistinguabilit.

Dfinition 4.29 (Mots indistinguables dun langage). Soit L un langage de ? . Deux mots u et
v sont dits indistinguables dans L si pour tout w ? , soit uw et vw sont tous deux dans L, soit
uw et vw sont tous deux dans L. On notera L la relation dindistinguabilit dans L.

En dautres termes, deux mots u et v sont distinguables dans L sil existe un mot w ? tel que
uw L et vw < L, ou bien le contraire. La relation dindistinguabilit dans L est une relation
rflexive, symtrique et transitive : cest une relation dquivalence.
Considrons, titre dillustration, le langage L = a(a + b)(bb)? . Pour ce langage, u = aab et
v = abb sont indistinguables : pour tout mot x = uw de L, y = vw est en effet un autre mot de
L. En revanche u = a et v = aa sont distinguables : en concatnant w = abb u, on obtient aabb
qui est dans L ; en revanche, aaabb nest pas un mot de L.
De manire similaire, on dfinit la notion dindistinguabilit dans un automate dterministe.

55
CHAPITRE 4. AUTOMATES FINIS

Dfinition 4.30 (Mots indistingables dun automate). Soit A = (, Q, q0 , F, ) un automate fini


dterministe. Deux mots de u et v sont dits indistinguables dans A si et seulement si ? (q0 , u) =
? (q0 , v). On notera A la relation dindistinguabilit dans A.

Autrement dit, deux mots u et v sont indistinguables pour A si le calcul par A de u depuis q0
aboutit dans le mme tat q que le calcul de v. Cette notion est lie la prcdente : pour deux
mots u et v indistinguables dans L(A), tout mot w tel que ? (q, w) aboutisse dans un tat final
est une continuation valide la fois de u et de v dans L ; inversement tout mot conduisant un
chec depuis q est une continuation invalide la fois de u et de v. En revanche, la rciproque
est fausse, et deux mots indistinguables dans L(A) peuvent tre distinguables dans A.
Pour continuer, rappelons la notion de congruence droite, dj introduite la section 2.4.3 :
Dfinition 4.31 (Invariance droite). Une relation dquivalence R sur ? est dite invariante
droite si et seulement si : u R v w, uw R vw. Une relation invariante droite est appele une
congruence droite.

Par dfinition, les deux relations dindistinguabilit dfinies ci-dessus sont invariantes
droite.
Nous sommes maintenant en mesure dexposer le rsultat principal de cette section.
Thorme 4.32 (Myhill-Nerode). Soit L un langage sur , les trois assertions suivantes sont
quivalentes :
(i) L est un langage rationnel
(ii) il existe une relation dquivalence sur ? , invariante droite, ayant un nombre fini de classes
dquivalence et telle que L est gal lunion de classes dquivalence de
(iii) L possde un nombre fini de classes dquivalence

Dmonstration. point i point ii : A tant rationnel, il existe un DFA A qui le reconnat.


La relation dquivalence A ayant autant de classes dquivalence quil y a dtats, ce
nombre est ncessairement fini. Cette relation est bien invariante droite, et L, dfini comme
{u ? | ? (q0 , u) F}, est simplement lunion des classes dquivalence associes aux tats
finaux de A.
point ii point iii. Soit la relation satisfaisant la proprit du point ii, et u et v tels que
u v. Par la proprit dinvariance droite, on a pour tout mot w dans ? uw vw. Ceci
entrane que soit uw et vw sont simultanment dans L (si leur classe dquivalence commune
est un sous-ensemble de L), soit tout deux hors de L (dans le cas contraire). Il sensuit que
u L v : toute classe dquivalence pour est incluse dans une classe dquivalence de L ; il
y a donc moins de classes dquivalence pour L que pour , ce qui entrane que le nombre
de classes dquivalence de L est fini.
point iii point i : Construisons lautomate A = (, Q, q0 , F, ) suivant :
chaque tat de Q correspond une classe dquivalence [u]L de L ; do il sensuit que
Q est fini.
q0 = []L , classe dquivalence de
F = {[u]L , u L}

56
4.4. LAUTOMATE CANONIQUE

([u]L , a) = [ua]L . Cette dfinition de est indpendante du choix dun reprsentant de


[u]L : si u et v sont dans la mme classe pour L , par invariance droite de L , il en ira
de mme pour ua et va.
A ainsi dfini est un automate fini dterministe et complet. Montrons maintenant que A
reconnat L et pour cela, montrons par induction que (q0 , u) `?A [u]L . Cette proprit est vraie
pour u = , supposons la vraie pour tout mot de taille infrieure k et soit u = va de taille
k + 1. On a (q0 , ua) `?A (p, a) `A (q, ). Or, par lhypothse de rcurrence on sait que p = [u]L ; et
comme q = ([u]L , a), alors q = [ua]L , ce qui est bien le rsultat recherch. On dduit que si u
est dans L(A), un calcul sur lentre u aboutit dans un tat final de A, et donc que u est dans
L. Rciproquement, si u est dans L, un calcul sur lentre u aboutit dans un tat [u]L , qui est,
par dfinition de A, final. 

Ce rsultat fournit une nouvelle caractrisation des langages reconnaissables et peut donc
tre utilis pour montrer quun langage est, ou nest pas, reconnaissable. Ainsi, par exemple,
L = {u ? | a , i N tq. u = a2 } nest pas reconnaissable. En effet, pour tout i, j, a2 et
i i

j i
a2 sont distingus par a2 . Il ny a donc pas un nombre fini de classes dquivalence pour L ,
et L ne peut en consquence tre reconnu par un automate fini. L nest donc pas un langage
rationnel.

4.4.2 Automate canonique

La principale consquence du rsultat prcdent concerne lexistence dun reprsentant


unique ( une renumrotation des tats prs) et minimal (en nombre dtats) pour les classes
de la relation dquivalence sur les automates finis.
Thorme 4.33 (Automate canonique). Lautomate AL , fond sur la relation dquivalence L ,
est le plus petit automate dterministe complet reconnaissant L. Cet automate est unique ( une
renumrotation des tats prs) et est appel automate canonique de L.

Dmonstration. Soit A un automate fini dterministe reconnaissant L. A dfinit une relation


dquivalence satisfaisant les conditions du point ii de la preuve du thorme 4.32 prsent
ci-dessus. Nous avons montr que chaque tat de A correspond une classe dquivalence
(pour A ) incluse dans une classe dquivalence pour L . Le nombre dtats de A est donc
ncessairement plus grand que celui de AL . Le cas o A et AL ont le mme nombre dtats
correspond au cas o les classes dquivalence sont toutes semblables, permettant de dfinir
une correspondance biunivoque entre les tats des deux machines. 

Lexistence de AL tant garantie, reste savoir comment le construire : la construction directe


des classes dquivalence de L nest en effet pas ncessairement immdiate. Nous allons
prsenter un algorithme permettant de construire AL partir dun automate dterministe
quelconque reconnaissant L. Comme au pralable, nous dfinissons une troisime relation
dindistinguabilit, portant cette fois sur les tats :
Dfinition 4.34 (tats indistinguables). Deux tats q et p dun automate fini dterministe A sont
distinguables sil existe un mot w tel que le calcul (q, w) termine dans un tat final alors que le calcul
(p, w) choue. Si deux tats ne sont pas distinguables, ils sont indistinguables.

57
CHAPITRE 4. AUTOMATES FINIS

Comme les relations dindistinguabilit prcdentes, cette relation est une relation dqui-
valence, note sur les tats de Q. Lensemble des classes dquivalence [q] est note Q .
Pour un automate fini dterministe A = (, Q, q0 , F, ), on dfinit lautomate fini A par :
A = (, Q , [q0 ] , F , ), avec : ([q] , a) = [(q, a)] ; et F = [q] , avec q dans F. La fonction
est correctement dfinie en ce sens que si p et q sont indistinguables, alors ncessairement
(q, a) (p, a).
Montrons, dans un premier temps, que ce nouvel automate est bien identique lautomate
canonique AL . On dfinit pour cela une application , qui associe un tat de A un tat de
AL de la manire suivante :

([q] ) = [u]L sil existe u tel que ? (q0 , u) = q

Notons dabord que est une application : si u et v de ? aboutissent tous deux dans des
tats indistinguables de A, alors il est clair que u et v sont galement indistinguables, et sont
donc dans la mme classe dquivalence pour L : le rsultat de ne dpend pas dun choix
particulier de u.
Montrons maintenant que est une bijection. Ceci se dduit de la suite dquivalences
suivante :

([q] ) = ([p] ) u, v ? , ? (q0 , u) = q, ? (q0 , u) = p, et u L v (4.1)


? ?
(q0 , u) (q0 , u) (4.2)
[q] = [p] (4.3)

Montrons enfin que les calculs dans A sont en bijection par avec les calculs de AL . On a en
effet :
([q0 ] ) = []L , car ? (q0 , ) = q0 [q0 ]
( ([q] , a) = L (([q] ), a) car soit u tel que ? (q0 , u) [q] , alors : (i) (? (q0 , u), a)
([q] , a) (cf. la dfinition de ) et [ua]L = ( ([q] , a)) = L ([u], a) (cf. la dfinition de
L ), ce quil fallait prouver.
si [q] est final dans A , alors il existe u tel que ? (q0 , u) soit un tat final de A, impliquant
que u est un mot de L, et donc que [u]L est un tat final de lautomate canonique.
Il sensuit que chaque calcul dans A est isomorphe (par ) un calcul dans AL , et ainsi
que, ces deux automates ayant les mmes tats initiaux et finaux, ils reconnaissent le mme
langage.

4.4.3 Minimisation

Lide de lalgorithme de minimisation de lautomate dterministe A = (, Q, q0 , F, ) consiste


alors chercher identifier les classes dquivalence pour , de manire driver lautomate
A (alias AL ). La finitude de Q nous garantit lexistence dun algorithme pour calculer ces
classes dquivalence. La procdure itrative dcrite ci-dessous esquisse une implantation
nave de cet algorithme, qui construit la partition correspondant aux classes dquivalence par
raffinement dune partition initiale 0 qui distingue simplement tats finaux et non-finaux.
Cet algorithme se glose comme suit :

58
4.4. LAUTOMATE CANONIQUE

Initialiser avec deux classes dquivalence : F et Q \ F


Itrer jusqu stabilisation :
pour toute paire dtats q et p dans la mme classe de la partition k , sil existe
a tel que (q, a) et (p, a) ne sont pas dans la mme classe pour k , alors ils sont
dans deux classes diffrentes de k+1 .
On vrifie que lorsque cette procdure sarrte (aprs un nombre fini dtapes), deux tats
sont dans la mme classe si et seulement si ils sont indistinguables. Cette procdure est
connue sous le nom dalgorithme de Moore. Implante de manire brutale, elle aboutit une
complexit quadratique ( cause de ltape de comparaison de toutes les paires dtats). En
utilisant des structures auxiliaires, il est toutefois possible de se ramener une complexit
en n log(n), avec n le nombre dtats.
Considrons pour illustrer cette procdure lautomate 4.23 :

a a

a b
0 1 2

b b
b b
3 4 5

a a a, b

Automate 4.23 Un DFA minimiser

Les itrations successives de lalgorithme de construction des classes dquivalence pour


se droulent alors comme suit :
0 = {{0, 1, 2, 3, 4}, {5}} (car 5 est le seul tat final)
1 = {{0, 1, 3}, {2, 4}, {5}} (car 2 et 4, sur le symbole b, atteignent 5).
2 = {{0}, {1, 3}, {2, 4}, {5}} (car 1 et 3, sur le symbole b, atteignent respectivement 2 et 4).
3 = 2 fin de la procdure.
Lautomate minimal rsultant de ce calcul est lautomate 4.24.
a a a, b

a, b b b
0 1, 3 2, 4 5

Automate 4.24 Lautomate minimal de (a + b)a? ba? b(a + b)?

Pour minimiser un automate, utiliser automaton.minimize. Les tats sont tiquets


par les tats de lautomate dorigine.

59
CHAPITRE 4. AUTOMATES FINIS

Exercice 4.35 (BCI-0607-2-1). On sintresse, dans cet exercice, la reprsentation de grands dic-
tionnaires par des automates finis. Nous considrons ici quun dictionnaire est une liste finie de mots :
il existe donc un automate fini qui le reprsente. Une telle reprsentation garantit en particulier que
la recherche dun mot aura une complexit linaire en la longueur du mot recherch.
Considrons la liste de mots L = {lier, lierai, lions, oser, osier, oserai}, qui correspond au langage de
lautomate 4.25 (sur laquelle les noms des tats sont omis).

l i e r


l i e r a i


l i o n s


o s e r


o s i e r


o s e r a i

Automate 4.25 Un petit dictionnaire

1. Construisez, par une mthode vue en cours, un automate dterministe pour le langage L. Vous
procderez en deux temps, en prenant soin de dtailler chacune des tapes : suppression des
transitions , puis dterminisation de lautomate sans transition .
2. On dit que deux tats p et q dun automate dterministe sont indistinguables si pour tout mot
u de , (p, u) F (q, u) F.
Autrement dit, deux tats p et q sont indistinguables si et seulement si tout mot conduisant
un calcul russi dbutant en p conduit un calcul russi dbutant en q et rciproquement.

(a) Identifiez dans lautomate dterministe construit la question 1 un couple dtats indis-
tinguables ; et un couple dtats distinguables (non-indistinguables).
(b) La relation dindistinguabilit est une relation binaire sur lensemble des tats dun auto-
mate. Prouvez que cest une relation dquivalence (i.e. quelle est rflexive, symtrique,
et transitive).

3. Soit A = (, Q, q0 , F, ) un automate fini dterministe sans tat inutile, la combinaison


de deux tats indistinguables p et q produit un automate A0 identique A, ceci prs que
p et q sont remplacs par un tat unique r, qui hrite de toutes les proprits (dtre
initial ou final) et transitions de lun des deux tats. Formellement, A0 est dfini par A0 =
(, Q \ {p, q} {r}, q00 , F0 , 0 ) avec :
q00 = r si q = q0 ou p = q0 , q00 = q0 sinon ;

60
4.4. LAUTOMATE CANONIQUE

F0 = F \ {p, q} {r} si p F, F0 = F sinon ;


a , e Q \ {p, q}, 0 (e, a) = r si (e, a) = p ou (e, a) = q ; 0 (e, a) = (e, a) si (e, a)
existe ; 0 (e, a) est indfini sinon.
a , 0 (r, a) = (p, a) si (p, a) existe, 0 (r, a) est indfini sinon.
partir de lautomate construit la question 1, construisez un nouvel automate en combinant
les deux tats que vous avez identifis comme indistinguables.
4. Prouvez que si A est un automate fini dterministe, et A0 est driv de A en combinant deux
tats indistinguables, alors L(A) = L(A0 ) (les automates sont quivalents).
5. Le calcul de la relation dindistinguabilit seffectue en dterminant les couples dtats qui sont
distinguables ; ceux qui ne sont pas distinguables sont indistinguables. Lalgorithme repose sur
les deux proprits suivantes :
[initialisation] si p est final et q non final, alors p et q sont distinguables ;
[itration] si a et (p0 , q0 ) distinguables tq. (q, a) = q0 et (p, a) = p0 , alors (p, q) sont
distinguables.
Formellement, on initialise lensemble des couples distinguables en utilisation la proprit [ini-
tialisation] ; puis on considre de manire rpte tous les couples dtats non encore distingus
en appliquant la clause [itration], jusqu ce que lensemble des couples distinguables se stabi-
lise.
Appliquez cet algorithme lautomate dterministe construit la question 1.
6. Rptez lopration de combinaison en lappliquant tous les tats qui sont indistinguables dans
lautomate 4.25.

Le calcul de la relation dindistinguabilit est la base de lopration de minimisation des automates


dterministes, cette opration permet de reprsenter les dictionnaires mme trs gros de manire
compacte ; il permet galement de driver un algorithme trs simple pour tester si deux automates sont
quivalents.

61
CHAPITRE 4. AUTOMATES FINIS

62
Chapitre 5

Grammaires syntagmatiques

Dans cette partie, nous prsentons de manire gnrale les grammaires syntagmatiques, ainsi
que les principaux concepts affrents. Nous montrons en particulier quau-del de la classe
des langages rationnels, il existe bien dautres familles de langages, qui valent galement la
peine dtre explores.

5.1 Grammaires

Dfinition 5.1 (Grammaire). Une grammaire syntagmatique G est dfinie par un quadruplet
(N, , P, S), o N, et P dsignent respectivement des ensembles de non-terminaux (ou variables),
de terminaux, et de productions (ou rgles de production). N et sont des alphabets disjoints. Les
productions sont des lments de (N )? (N )? , que lon note sous la forme . S est un
lment distingu de N, appel le symbole initial ou encore laxiome de la grammaire.

La terminologie de langue anglaise quivalente grammaire syntagmatique est Phrase Struc-


ture Grammar, plutt utilise par les linguistes, qui connaissent bien dautres sortes de gram-
maires. Les informaticiens disent plus simplement rules (pour eux, il ny a pas dambigut
sur le terme !).
Il est frquent dutiliser T pour dsigner , lensemble des terminaux. Il est galement utile
dintroduire V = T N, le vocabulaire de la grammaire. Dans la suite, nous utiliserons les
conventions suivantes pour noter les lments de la grammaire : les non-terminaux seront
notes par des symboles en majuscule latine ; les terminaux par des symboles en minuscules ;
les mots de V ? = (T N)? par des lettres minuscules grecques.
Illustrons ces premires dfinitions en examinant la grammaire G1 (grammaire 5.1). Cette
grammaire contient une seule variable, S, qui est galement laxiome ; deux lments termi-
naux a et b, et deux rgles de production, p1 et p2 .
Si est une production dune grammaire G, on dit que est la partie gauche et la partie
droite de la production.
Lunique opration autorise, dans les grammaires syntagmatiques, est la rcriture dune
squence de symboles par application dune production. Formellement,
CHAPITRE 5. GRAMMAIRES SYNTAGMATIQUES

p1 = S aSb
p2 = S ab

Grammaire 5.1 G1 , une grammaire pour an bn

Dfinition 5.2 (Drivation immdiate). On dfinit la relation (lire : drive immdiatement)


G
sur lensemble V ? V ? par si et seulement si est une production de G.
G

La notion de drivation immdiate se gnralise la drivation en un nombre quelconque


dtapes. Il suffit pour cela de considrer la fermeture transitive et rflexive de la relation ,
G
?
que lon note :
G
? ?
Dfinition 5.3 (Drivation). On dfinit la relation sur lensemble V ? V ? par 1 m si et
G G
seulement si il existe 2 , ..., m1 dans V ? tels que 1 2 ... m1 m .
G G G G

Ainsi, par exemple, la drivation suivante est une drivation pour la grammaire 5.1 :

S aSb aaSbb aaaSbbb aaaaSbbbb


G1 G1 G1 G1

?
permettant de dduire que S aaaaSbbbb.
G1

Ces dfinitions prliminaires tant poses, il est maintenant possible dexprimer formelle-
ment le lien entre grammaires et langages.
Dfinition 5.4 (Langage engendr par une grammaire). On appelle langage engendr par G,
?
not L(G), le sous-ensemble de ? dfini par L(G) = {w ? | S w}.
G

L(G) est donc un sous-ensemble de ? , contenant prcisment les mots qui se drivent par
?
depuis S. Lorsque , contenant des non-terminaux, se drive de S, on dit qu est un
G
proto-mot (en anglais sentential form). Pour produire un mot 1 du langage, il faudra alors
habilement utiliser les productions, de manire se dbarrasser, par rcritures successives
depuis laxiome, de tous les non-terminaux du proto-mot courant. Vous vrifierez ainsi que
le langage engendr par la grammaire 5.1 est lensemble des mots forms en concatnant n
fois le symbole a, suivi de n fois le symbole b (soit le langage {an bn , n 1}).
Si toute grammaire engendre un langage unique, la rciproque nest pas vraie. Un langage L
peut tre engendr par de multiples grammaires, comme on peut sen persuader en rajoutant
1. La terminologie est ainsi faite que lorsque lon parle de grammaires, il est dusage dappeler phrases les
squences dlments terminaux, que nous appelions prcdemment mots. Il sensuit parfois (et cest fort fcheux),
que le terme de mot est parfois employ pour dnoter les lments de lalphabet (et non plus les lments de
? ). Nous essaierons dviter cette confusion, et nous continuerons de parler de mots pour dsigner les lments
dun langage, mme lorsque ces mots correspondront ce quil est commun dappeler phrase dans le langage
courant.

64
5.2. LA HIRARCHIE DE CHOMSKY

volont des non-terminaux ou des terminaux inutiles. Il existe plusieurs manires pour un
non-terminal dtre inutile : par exemple en napparaissant dans aucune partie droite (ce qui
fait quil napparatra dans aucun proto-mot) ; ou bien en napparaissant dans aucune partie
gauche (il ne pourra jamais tre limin dun proto-mot, ni donc tre utilis dans la drivation
dune phrase du langage...). Nous reviendrons sur cette notion dutilit des lments de la
grammaire la section 9.1.2.
Comme nous lavons fait pour les expressions rationnelles ( la section 3.1.3) et pour les auto-
mates finis (voir la section 4.1), il est en revanche possible de dfinir des classes dquivalence
de grammaires qui engendrent le mme langage.
Dfinition 5.5 (quivalence entre grammaires). Deux grammaires G1 et G2 sont quivalentes
si et seulement si elles engendrent le mme langage.

Les grammaires syntagmatiques dcrivent donc des systmes permettant dengendrer, par
rcritures successives, les mots dun langage : pour cette raison, elles sont parfois galement
appeles grammaires gnratives. De ces grammaires se dduisent (de manire plus ou moins
directe) des algorithmes permettant de reconnatre les mots dun langage, voire, pour les
sous-classes les plus simples, de dcider si un mot appartient ou non un langage.
Le processus de construction itrative dun mot par rcriture dune suite de proto-mots
permet de tracer les tapes de la construction et apporte une information indispensable pour
interprter le mot. Les grammaires syntagmatiques permettent donc galement dassocier
des structures aux mots dun langage, partir desquelles il est possible de calculer leur
signification. Ces notions sont formalises la section 6.2.

5.2 La hirarchie de Chomsky

Chomsky identifie une hirarchie de familles de grammaires de complexit croissante, chaque


famille correspondant une contrainte particulire sur la forme des rgles de rcriture. Cette
hirarchie, laquelle correspond une hirarchie 2 de langages, est prsente dans les sections
suivantes.

5.2.1 Grammaires de type 0

Dfinition 5.6 (Type 0). On appelle grammaire de type 0 une grammaire syntagmatique dans
laquelle la forme des productions est non-contrainte.

Le type 0 est le type le plus gnral. Toute grammaire syntagmatique est donc de type 0 ;
toutefois, au fur et mesure que les autres types seront introduits, on prendra pour convention
dappeler type dune grammaire le type le plus spcifique auquel elle appartient.
Le principal rsultat retenir pour les grammaires de type 0 est le suivant, que nous ne
dmontrerons pas.
2. Les dveloppements des travaux sur les grammaires formelles ont conduit largement raffiner cette
hirarchie. Il existe ainsi, par exemple, de multiples sous-classes des langages algbriques, dont certaines seront
prsentes dans la suite.

65
CHAPITRE 5. GRAMMAIRES SYNTAGMATIQUES

Thorme 5.7. Les langages rcursivement numrables sont les langages engendrs par une gram-
maire de type 0.

Lensemble des langages rcursivement numrables est not RE. Rappelons quil a t
introduit la section 2.2.2.
Ce qui signifie quen dpit de leur apparente simplicit, les grammaires syntagmatiques
permettent de dcrire (pas toujours avec lgance, mais cest une autre question) exacte-
ment les langages que lon sait reconnatre (ou numrer) avec une machine de Turing. Les
grammaires syntagmatiques de type 0 ont donc une expressivit maximale.
Ce rsultat est thoriquement satisfaisant, mais ne nous en dit gure sur la vritable nature
de ces langages. Dans la pratique, il est extrmement rare de rencontrer un langage de type
0 qui ne se ramne pas un type plus simple.

5.2.2 Grammaires contextuelles (type 1)

Les grammaires monotones introduisent une premire restriction sur la forme des rgles, en
imposant que la partie droite de chaque production soit ncessairement plus longue que la
partie gauche. Formellement :

Dfinition 5.8 (Grammaire monotone). On appelle grammaire monotone une grammaire syn-
tagmatique dans laquelle toute production est telle que || ||.

Cette dfinition impose quau cours dune drivation, les proto-mots dune grammaire mo-
notone stendent de manire monotone. Cette contrainte interdit en particulier dengendrer
le mot vide . Nous reviendrons en dtail sur cette question la section 5.2.6.
Les langages engendrs par les grammaires monotones sont galement obtenus en posant
une contrainte alternative sur la forme des rgles, conduisant la notion de grammaire
contextuelle :

Dfinition 5.9 (Grammaire contextuelle). On appelle grammaire contextuelle, ou grammaire


sensible au contexte, en abrg grammaire CS (en anglais Context-Sensitive) une grammaire telle
que toute production de G est de la forme 1 A2 1 2 , avec 1 , 2 , dans V ? , , et A est
dans N.

Les grammaires contextuelles sont donc telles que chaque production ne rcrit quun symbole
non-terminal la fois, le contexte (cest--dire les symboles encadrant ce non-terminal) restant
inchang : do la qualification de contextuelles pour ces grammaires. Par construction, toute
grammaire contextuelle est monotone (car , ). Le thorme suivant nous dit plus :
grammaires contextuelles et monotones engendrent exactement les mmes langages.

Thorme 5.10. Pour tout langage L engendr par une grammaire monotone G, il existe une
grammaire contextuelle qui engendre L.

Dmonstration. Soit L engendr par la grammaire monotone G = (N, , S, P). Sans perte de
gnralit, nous supposons que les terminaux napparaissent que dans des productions de

66
5.2. LA HIRARCHIE DE CHOMSKY

la forme A a. Si cela nest pas le cas, il suffit dintroduire un nouveau non-terminal Xa


pour chaque terminal, de remplacer a par Xa dans toutes les productions, et dajouter P la
production Xa a. Nous allons construire une grammaire contextuelle quivalente G et
pour cela nous allons dmontrer deux rsultats intermdiaires. 

Lemme 5.11. Si G est une grammaire monotone, il existe une grammaire monotone quivalente dans
laquelle toutes les parties droites ont une longueur infrieure ou gale 2.

Dmonstration. En procdant par rcurrence sur le nombre de productions de G qui ne


satisfont pas la condition, il suffit dillustrer comment rcrire une seule telle production.
Ainsi, soit = 1 . . . m = 1 . . . n une production de G. G tant monotone, m 6 n :
compltons alors avec des de manire crire = 1 . . . n , o les i sont dans N {}.
Construisons ensuite G0 , dduite de G en introduisant les n 1 nouveaux non-terminaux
X1 . . . Xn1 , et en remplaant par les n les productions suivantes :
1 2 1 X1
Xi1 i+1 i Xi i, 1 < i < n
Xn1 n

Il est clair que G0 est monotone et que lapplication successive de ces nouvelles rgles a bien
pour effet global de rcrire de proche en proche en par :
1 2 . . . m 0 1 X1 3 . . . m
G
0 1 2 X2 4 . . . n
G
0 ...
G
0 1 2 . . . n1 Xn1
G
0 1 2 . . . n1 n
G

Soit alors u dans L(G) : si u se drive de S sans utiliser , alors u se drive pareillement
? ?
de S dans G0 . Si u se drive dans G par S vw vw u, alors u se drive dans
G G G
G0 en remplaant ltape de drivation vw vw par les tapes de drivation dtailles
G
ci-dessus. Inversement, si u se drive dans G0 sans utiliser aucune variable Xi , elle se drive
lidentique dans G. Si X1 apparat dans une tape de la drivation, son limination par
application successive des n rgles prcdentes implique la prsence du facteur dans le
proto-mot drivant u : u se drive alors dans G en utilisant . 

Par itration de cette transformation, il est possible de transformer toute grammaire mono-
tone en une grammaire monotone quivalente dont toutes les productions sont telles que
leur partie droite (et, par consquent, leur partie gauche, par monotonicit de G) ont une
longueur infrieure ou gale 2. Le lemme suivant nous permet darriver la forme dsire
pour les parties gauches (les productions de la forme A a pouvant tre gardes telles
quelles).
Lemme 5.12. Si G est une grammaire monotone ne contenant que des productions de type AB CD,
avec A, B, C et D dans N {}, alors il existe une grammaire quivalente satisfaisant la proprit du
thorme 5.10.

67
CHAPITRE 5. GRAMMAIRES SYNTAGMATIQUES

Dmonstration. Cette dmonstration utilise le mme principe que la dmonstration prc-


dente, en introduisant pour chaque production R = AB CD le nouveau non-terminal XAB
et en remplaant R par les trois productions suivantes :
AB XAB B
XAB B XAB D
XAB D CD


On dduit directement le rsultat qui nous intresse : toute grammaire monotone est qui-
valente une grammaire dans laquelle chaque production ne rcrit quun seul et unique
symbole.
Ces rsultats permettent finalement dintroduire la notion de langage contextuel.

Dfinition 5.13 (Langage contextuel). On appelle langage contextuel (ou langage sensible au
contexte, en abrg langage CS) un langage engendr par une grammaire contextuelle (ou par une
grammaire monotone).

Les langages contextuels constituent une classe importante de langages, que lon rencontre
effectivement (en particulier en traitement automatique des langues). Un reprsentant no-
table de ces langages est le langage {an bn cn , n 1}, qui est engendr par la grammaire 5.2
daxiome S.

p1 = S aSQ
p2 = S abc
p3 = cQ Qc
p4 = bQc bbcc

Grammaire 5.2 Une grammaire pour an bn cn

La grammaire 5.2 est monotone. Dans cette grammaire, on observe par exemple les driva-
tions listes dans le tableau 5.3.
Il est possible de montrer quen fait les seules drivations qui russissent dans cette gram-
maire produisent les mots (et tous les mots) du langage {an bn cn , n 1}, ce qui est dailleurs
loin dtre vident lorsque lon examine les productions de la grammaire.
Un dernier rsultat important concernant les langages contextuels est le suivant :

Thorme 5.14. Tout langage contextuel est rcursif, soit en notant RC lensemble des langages
rcursifs, et CS lensemble des langages contextuels : CS RC.

Ce que dit ce rsultat, cest quil existe un algorithme capable de dcider si un mot appartient
ou pas au langage engendr par une grammaire contextuelle. Pour sen convaincre, esquis-
sons le raisonnement suivant : soit u le mot dcider, de taille |u|. Tout proto-mot impliqu
dans la drivation de u est au plus aussi long que u, cause de la proprit de monotonie.

68
5.2. LA HIRARCHIE DE CHOMSKY

p2
S abc
G
p1
S aSQ
G
p2
aabcQ
G
p3
aabQc
G
p4
aabbcc
G
p1
S aSQ
G
p1
aaSQQ
G
p2
aaabcQQ
G
p3
aaabQcQ
G
p4
aaabbccQ
G
p3
aaabbcQc
G
p3
aaabbQcc
G
p4
aaabbbccc
G

Table 5.3 Des drivations pour an bn cn

Il suffit donc, pour dcider u, de construire de proche en proche lensemble D de tous les
proto-mots quil est possible dobtenir en inversant les productions de la grammaire. D
contient un nombre fini de proto-mots ; il est possible de construire de proche en proche les
lments de cet ensemble. Au terme de processus, si S est trouv dans D, alors u appartient
L(G), sinon, u nappartient pas L(G).
Ce bref raisonnement ne dit rien de la complexit de cet algorithme, cest--dire du temps quil
mettra se terminer. Dans la pratique, tous les algorithmes gnraux pour les grammaires CS
sont exponentiels. Quelques sous-classes particulires admettent toutefois des algorithmes
de dcision polynomiaux.
Pour finir, notons quil est possible de montrer que la rciproque nest pas vraie, donc quil
existe des langages rcursifs qui ne peuvent tre dcrits par aucune grammaire contextuelle.

5.2.3 Grammaires hors-contexte (type 2)

Une contrainte supplmentaire par rapport celle impose pour les grammaires contextuelles
consiste exiger que toutes les productions contextuelles aient un contexte vide. Ceci conduit
la dfinition suivante.

Dfinition 5.15 (Grammaire hors-contexte). On appelle grammaire de type 2 (on dit galement
grammaire hors-contexte, en anglais Context-free, ou grammaire algbrique, en abrg CFG)
une grammaire syntagmatique dans laquelle toute production est de la forme : A , avec A

69
CHAPITRE 5. GRAMMAIRES SYNTAGMATIQUES

dans N et dans V + .

Le sens de cette nouvelle contrainte est le suivant : chaque fois quune variable A figure dans
un proto-mot, elle peut tre rcrite indpendamment du contexte dans lequel elle apparat. Par
dfinition, toute grammaire hors-contexte est un cas particulier de grammaire contextuelle.
Cette nouvelle restriction permet dintroduire la notion de A-production :
Dfinition 5.16 (A-production). On appelle A-production une production dont la partie gauche est
rduite au symbole A.

Les langages hors-contexte se dfinissent alors par :


Dfinition 5.17 (Langage hors-contexte). On appelle langage hors-contexte (ou langage alg-
brique, en abrg langage CF) un langage engendr par une grammaire hors-contexte.

Attention : il est ais de faire des dfinitions complexes dentits simples. Une grammaire
complique, par exemple sensible au contexte, peut dfinir un langage simple, par exemple
hors-contexte, rationnel, voire fini.

p1 = S aSb
p2 = aSb aaSbb
p3 = S ab

Grammaire 5.4 Une grammaire contextuelle pour an bn

Par exemple, la grammaire 5.4, contextuelle, engendre le langage hors-contexte an bn . Ce


langage tant un langage CF, on peut trouver une grammaire CF pour ce langage (par
exemple la grammaire 5.1).
On notera CF lensemble des langages hors-contexte. Ces langages constituent probablement
la classe de langages la plus tudie et la plus utilise dans les applications pratiques. Nous
aurons loccasion de revenir en dtail sur ces langages dans les chapitres qui suivent et den
tudier de nombreux exemples, en particulier dans le chapitre 6.
Notons simplement, pour linstant, que cette classe contient des langages non-triviaux, par
exemple an bn , ou encore le langage des palindromes (dont lcriture dune grammaire est
laisse en exercice).

5.2.4 Grammaires rgulires (type 3)

Rgularit

Les grammaires de type 3 rduisent un peu plus la forme des rgles autorises, dfinissant
une classe de langages encore plus simple que la classe des langages hors-contexte.
Dfinition 5.18 (Grammaire de type 3). On appelle grammaire de type 3 (on dit galement
grammaire rgulire, en abrg grammaire RG) (en anglais regular) une grammaire syntagmatique

70
5.2. LA HIRARCHIE DE CHOMSKY

dans laquelle toute production est soit de la forme A aB, avec a dans et A, B dans N, soit
de la forme A a.

Par dfinition, toute grammaire rgulire est hors-contexte. Le trait spcifique des gram-
maires rgulires est que chaque rgle produit un symbole terminal et au plus un non-
terminal sa droite. Les drivations dune grammaire rgulire ont donc une forme trs
simple, puisque tout proto-mot produit par n tapes successives de drivation contient en
tte n symboles terminaux, suivis dau plus un non-terminal. La drivation se termine par
la production dun mot du langage de la grammaire, lorsque le dernier terminal est limin
par une rcriture de type A a.
La notion de langage rgulier se dfinit comme prcdemment par :
Dfinition 5.19 (Langage rgulier). Un langage est rgulier si et seulement si il existe une
grammaire rgulire qui lengendre.

On notera RG lensemble des langages rguliers.

Les rguliers sont rationnels

Le rsultat principal concernant les langages rguliers est nonc dans le thorme suivant :
Thorme 5.20. Si L est un langage rgulier, il existe un automate fini A qui reconnat L. Rcipro-
quement, si L est un langage reconnaissable, avec < L, alors il existe une grammaire rgulire qui
engendre L.

Ainsi les langages rguliers, un dtail prs (que nous discutons la section 5.2.6), ne sont
rien dautre que les langages rationnels, aussi connus sous le nom de reconnaissables. Leurs
proprits principales ont t dtailles par ailleurs (notamment la section 4.2) ; nous y
renvoyons le lecteur.
Pour avoir lintuition de ce thorme, considrons la grammaire engendrant le langage
aa(a + b)? a et lautomate reconnaissant ce langage, tous deux reproduits dans le tableau 5.5.

G A

a
S aA
A aB a a a
S A B Z
B aB | bB
B a
b

Table 5.5 Grammaire et automate pour aa(a + b)? a

Dans G, la drivation de lentre aaba est S aA aaB aabB aaba, correspondant au


G G G G
calcul : (S, aabb) `A (A, abb) `A (B, bb) `A (B, a) `A (F, ). Cet exemple illustre la symtrie du rle
jou par les variables de la grammaire et les tats de lautomate. Cette symtrie est formalise

71
CHAPITRE 5. GRAMMAIRES SYNTAGMATIQUES

dans la construction suivante, qui vise fournir une dmonstration de lquivalence entre
rationnels et rguliers.

Dmonstration du thorme 5.20. Soient G = (N, , P, S) une grammaire rgulire et A lauto-


mate driv de G suivant A = (, N {Z}, S, {Z}, ), avec la fonction dfinie selon :
(A, a) = B (A aB) P
(A, a) = Z (A a) P
Montrons maintenant que L(G) = L(A) et pour cela, montrons par induction lquivalence
?
suivante : S uB si et seulement si (S, u) `?A (B, ). Cette quivalence est vraie par dfinition
G
si u est de longueur 1. Supposons-la vraie jusqu une longueur n, et considrons : u = avb
?
tel que S avA avbB. Par lhypothse de rcurrence il sensuit que (S, av) `?A (A, ), et
G G
donc que (S, avb) `?A (B, ) par construction de . Pour conclure, reste examiner comment
une drivation se termine : il faut ncessairement liminer la dernire variable par une
production de type A a ; ceci correspond une transition dans ltat Z, unique tat final
de A. Inversement, un calcul russi dans A correspond une drivation liminant toutes
les variables et donc un mot du langage L(G).
La construction rciproque, permettant de construire une grammaire quivalente un au-
tomate fini quelconque, est exactement inverse : il suffit dassocier une variable chaque
tat de lautomate (en prenant ltat initial pour axiome) et de rajouter une production par
transition. Cette construction est acheve en rajoutant une nouvelle production A a pour
toute transition (A, a) aboutissant dans un tat final. 

Une consquence de cette quivalence est que si tout langage rgulier est par dfinition hors
contexte, le contraire nest pas vrai. Nous avons rencontr plus haut ( la section 5.2.3) une
grammaire engendrant {an bn , n 1}, langage dont on montre aisment quen vertu du lemme
de pompage pour les langages rationnels (cf. la section 4.3.1), il ne peut tre reconnu par un
automate fini. La distinction introduite entre langages rguliers et langages hors-contexte
nest donc pas de pure forme : il existe des langages CF qui ne sont pas rationnels.

Exercice 5.21 (BCI-0405-1, suite (exercice 4.15)). 2 Construisez, par une mthode du cours,
une grammaire rgulire G telle que L(G) = L(A), o A est lautomate 4.14.

Variantes

Il est possible de dfinir de manire un peu plus librale les grammaires de type 3 : la
limitation essentielle concerne en fait le nombre de non-terminaux en partie droite et leur
positionnement systmatique droite de tous les terminaux.

Dfinition 5.22 (Grammaire de type 3). On appelle grammaire de type 3 (ici grammaire linaire
droite) (en anglais right linear) une grammaire syntagmatique dans laquelle toute production
est soit de la forme : A uB, avec u dans ? et A, B dans N, soit de la forme A u, avec u
dans + .

72
5.2. LA HIRARCHIE DE CHOMSKY

Cette dfinition est donc plus gnrale que la dfinition des grammaires rgulires. Il est
pourtant simple de montrer que les langages engendrs sont les mmes : chaque grammaire
linaire droite admet une grammaire rgulire quivalente. La dmonstration est laisse
en exercice. Les grammaires linaires droite engendrent donc exactement la classe des
langages rationnels.
On montre, de mme, que les grammaires linaires gauche (au plus un non-terminal dans
chaque partie droite, toujours positionn en premire position) engendrent les langages
rationnels. Ces grammaires sont donc aussi des grammaires de type 3.
Attention : ces rsultats ne sappliquent plus si lon considre les grammaires linaires quel-
conques (dfinies comme tant les grammaires telles que toute partie droite contient au
plus un non-terminal) : les grammaires linaires peuvent engendrer des langages hors-contexte non
rationnels. Pour preuve, il suffit de considrer de nouveau la grammaire 5.1.
On ne peut pas non plus gnraliser en acceptant les grammaires dont les rgles panachent
linarit gauche et droite. Il est facile de reconnatre la grammaire 5.1 dans le dguisement
linaire suivant.
S aX | ab
X Sb

5.2.5 Grammaires choix finis (type 4)

Il existe des grammaires encore plus simples que les grammaires rgulires. En particulier
les grammaires choix finis sont telles que tout non-terminal ne rcrit que des terminaux.
On appelle de telles grammaires les grammaires de type 4 :
Dfinition 5.23 (Grammaire de type 4). On appelle grammaire de type 4 (on dit galement
grammaire choix finis, en abrg grammaire FC) une grammaire syntagmatique dans laquelle
toute production est de la forme : A u, avec A dans N et u dans + .

Les grammaires de type 4, on sen convaincra aisment, nengendrent que des langages finis,
mais engendrent tous les langages finis qui ne contiennent pas le mot vide.

5.2.6 Les productions

La dfinition que nous avons donne des grammaires de type 1 implique un accroisse-
ment monotone de la longueur des proto-mots au cours dune drivation, ce qui interdit
la production du mot vide. Cette limitation thorique de lexpressivit des grammaires
contextuelles a conduit noncer une version faible (cest--dire ne portant que sur les
reconnaissables ne contenant pas le mot vide) de lquivalence entre langages rguliers et
langages rationnels.
Pour rsoudre cette limitation, on admettra quune grammaire contextuelle (ou hors-contexte,
ou rgulire) puisse contenir des rgles de type A et on acceptera la possibilit quun
langage contextuel contienne le mot vide. Pour ce qui concerne les grammaires CF, nous
reviendrons sur ce point en tudiant les algorithmes de normalisation de grammaires ( la
section 9.1.4).

73
CHAPITRE 5. GRAMMAIRES SYNTAGMATIQUES

Pour ce qui concerne les grammaires rgulires, notons simplement que si lon accepte
des productions de type A , alors on peut montrer que les langages rguliers sont
exactement les langages reconnaissables. Il suffit pour cela de complter la construction
dcrite la section 5.2.4 en marquant comme tats finaux de A tous les tats correspondant
une variable pour laquelle il existe une rgle A . La construction inverse en est galement
simplifie : pour chaque tat final A de lautomate, on rajoute la production A .
Pour diffrentier les rsultats obtenus avec et sans , on utilisera le qualificatif de strict
pour faire rfrence aux classes de grammaires et de langages prsentes dans les sections
prcdentes : ainsi on dira quune grammaire est strictement hors-contexte si elle ne contient
pas de production de type A ; quelle est simplement hors-contexte sinon. De mme on
parlera de langage strictement hors-contexte pour un langage CF ne contenant pas et de
langage hors-contexte sinon.

5.2.7 Conclusion

Le titre de la section introduisait le terme de hirarchie : quelle est-elle finalement ? Nous


avons en fait montr dans cette section la srie dinclusions suivante :

F C RG CF CS RC RE

Il est important de bien comprendre le sens de cette hirarchie : les grammaires les plus
complexes ne dcrivent pas des langages plus grands, mais permettent dexprimer des
distinctions plus subtiles entre les mots du langage de la grammaire et ceux qui sont ne sont
pas grammaticaux.
Un autre point de vue, sans doute plus intressant, consiste dire que les grammaires plus
complexes permettent de dcrire des lois plus gnrales que celles exprimables par des
grammaires plus simples. Prenons un exemple en traitement des langues naturelles : en
franais, le bon usage impose que le sujet dune phrase affirmative saccorde avec son verbe
en nombre et personne. Cela signifie, par exemple, que si le sujet est un pronom singulier
la premire personne, le verbe sera galement la premire personne du singulier. Si lon
appelle L lensemble des phrases respectant cette rgle, on a :
la phrase lenfant mange est dans L
la phrase lenfant manges nest pas dans L
Une description de la syntaxe du franais par une grammaire syntagmatique qui voudrait
exprimer cette rgle avec une grammaire rgulire est peut-tre possible, mais serait certai-
nement trs fastidieuse, et sans aucune vertu pour les linguistes, ou pour les enfants qui
apprennent cette rgle. Pourquoi ? Parce quen franais, le sujet peut tre spar du verbe
par un nombre arbitraire de mots, comme dans lenfant de Jean mange, lenfant du fils de
Jean mange... Il faut donc implanter dans les rgles de la grammaire un dispositif de m-
morisation du nombre et de la personne du sujet qui retienne ces valeurs jusqu ce que
le verbe soit rencontr, cest--dire pendant un nombre arbitraire dtapes de drivation.
La seule solution, avec une grammaire rgulire, consiste envisager lavance toutes les
configurations possibles, et de les encoder dans la topologie de lautomate correspondant,
puisque la mmorisation fournie par la grammaire est de taille 1 (le pass de la drivation

74
5.2. LA HIRARCHIE DE CHOMSKY

est immdiatement oubli). On peut montrer quune telle contrainte sexprime simplement
et sous une forme bien plus naturelle pour les linguistes, lorsque lon utilise une grammaire
CF.
La prix payer pour utiliser une grammaire plus fine est que le problme algorithmique
de la reconnaissance dune phrase par une grammaire devient de plus en plus complexe.
Vous savez dj que ce problme est solvable en temps linaire pour les langages rationnels
(rguliers), et non-solvable (indcidable) pour les langages de type 0. On peut montrer quil
existe des automates gnralisant le modle dautomate fini pour les langages CF et CS,
do se dduisent des algorithmes (polynomiaux pour les langages CF, exponentiels en
gnral pour les langages CS) permettant galement de dcider ces langages. En particulier,
le problme de la reconnaissance pour les grammaires CF sera tudi en dtail dans les
chapitres 7 et 8.

75
CHAPITRE 5. GRAMMAIRES SYNTAGMATIQUES

76
Chapitre 6

Langages et grammaires hors-contexte

Dans ce chapitre, nous nous intressons plus particulirement aux grammaires et aux lan-
gages hors-contexte. Rappelons que nous avons caractris ces grammaires la section 5.2.3
comme tant des grammaires syntagmatiques dont toutes les productions sont de la forme
A u, avec A un non-terminal et u une squence quelconque de terminaux et non-terminaux.
Autrement dit, une grammaire algbrique est une grammaire pour laquelle il est toujours
possible de rcrire un non-terminal en cours de drivation, quel que soit le contexte (les
symboles adjacents dans le proto-mot) dans lequel il apparat.
Ce chapitre dbute par la prsentation, la section 6.1, de quelques grammaires CF exem-
plaires. Cette section nous permettra galement dintroduire les systmes de notation clas-
siques pour ces grammaires. Nous dfinissons ensuite la notion de drivation gauche et
darbre de drivation, puis discutons le problme de lquivalence entre grammaires et de
lambigut (section 6.2). La section 6.3 introduit enfin un certain nombre de proprits
lmentaires des langages CF, qui nous permettent de mieux cerner la richesse (et la com-
plexit) de cette classe de langages. Ltude des grammaires CF, en particulier des algorithmes
permettant de traiter le problme de la reconnaissance dun mot par une grammaire, sera
poursuivie dans les chapitres suivants, en particulier au chapitre 7.

6.1 Quelques exemples

6.1.1 La grammaire des djeuners du dimanche

La grammaire 6.1 est un exemple de grammaire hors-contexte correspondant une illustra-


tion trs simplifie de lutilisation de ces grammaires pour des applications de traitement du
langage naturel. Cette grammaire engendre un certain nombre dnoncs du franais. Dans
cette grammaire, les non-terminaux sont en majuscules, les terminaux sont des mots du
vocabulaire usuel. On utilise galement dans cette grammaire le symbole | pour exprimer
une alternative : A u | v vaut pour les deux rgles A u et A v.
Premire remarque sur la grammaire 6.1 : elle contient de nombreuses rgles de type A a,
qui servent simplement introduire les symboles terminaux de la grammaire : les symboles
CHAPITRE 6. LANGAGES ET GRAMMAIRES HORS-CONTEXTE

p1 S GN GV p15 V mange | sert


p2 GN DET N p16 V donne
p3 GN GN GNP p17 V boude | s0 ennuie
p4 GN NP p18 V parle
p5 GV V p19 V coupe | avale
p6 GV V GN p20 V discute | gronde
p7 GV V GNP p21 NP Louis | Paul
p8 GV V GN GNP p22 NP Marie | Sophie
p9 GV V GNP GNP p23 N fille | maman
p10 GNP PP GN p24 N paternel | fils
p11 PP de | a` p25 N viande | soupe | salade
p12 DET la | le p26 N dessert | fromage | pain
p13 DET sa | son p27 ADJ petit | gentil
p14 DET un | une p28 ADJ petite | gentille

Grammaire 6.1 La grammaire GD des repas dominicaux

apparaissant en partie gauche de ces productions sont appels pr-terminaux. En changeant


le vocabulaire utilis dans ces productions, on pourrait facilement obtenir une grammaire
permettant dengendrer des noncs dcrivant dautres aspects de la vie quotidienne. Il est
important de raliser que, du point de vue de leur construction (de leur structure interne),
les noncs ainsi obtenus resteraient identiques ceux de L(GD ).
En utilisant la grammaire 6.1, on construit une premire drivation pour lnonc Louis boude,
reprsente dans le tableau 6.2 :

S GN GV (par p1 )
GD
S NP GV (par p4 )
GD
Louis GV (par p21 )
GD
Louis V (par p5 )
GD
Louis boude (par p17 )
GD

Table 6.2 Louis boude

Il existe dautres drivations de Louis boude, consistant utiliser les productions dans un
ordre diffrent : par exemple p5 avant p4 , selon : S GN GV GN V GN boude
GD GD GD GD
NP boude Louis boude. Ceci illustre une premire proprit importante des grammaires
GD
hors contexte : lors dune drivation, il est possible dappliquer les productions dans un
ordre arbitraire. Notons galement qu la place de Louis, on aurait pu utiliser Marie ou Paul,
ou mme le fils boude et obtenir un nouveau mot du langage : nouveau, cest la proprit
dindpendance au contexte qui sexprime. Ces exemples clairent un peu la signification des
noms de variables : GN dsigne les groupes nominaux, GV les groupes verbaux... La premire

78
6.1. QUELQUES EXEMPLES

production de GD dit simplement quun nonc bien form est compos dun groupe nominal
(qui, le plus souvent, est le sujet) et dun groupe verbal (le verbe principal) de la phrase.
Cette grammaire permet galement dengendrer des noncs plus complexes, comme par
exemple :
le paternel sert le fromage
qui utilise une autre production (p6 ) pour driver un groupe verbal (GV) contenant un verbe
et son complment dobjet direct.
La production p3 est particulire, puisquelle contient le mme symbole dans sa partie gauche
et dans sa partie droite. On dit dune production possdant cette proprit quelle est rcursive.
Pour tre plus prcis p3 est rcursive gauche : le non-terminal en partie gauche de la
production figure galement en tte de la partie droite. Comme cest llment le plus
gauche de la partie droite, on parle parfois de coin gauche de la production.
Cette proprit de p3 implique immdiatement que le langage engendr par GD est infini,
puisquon peut crer des noncs de longueur arbitraire par application itre de cette rgle,
engendrant par exemple :
le fils de Paul mange
le fils de la fille de Paul mange
le fils de la fille de la fille de Paul mange
le fils de la fille de la fille . . . de Paul mange
Il nest pas immdiatement vident que cette proprit, savoir quune grammaire contenant
une rgle rcursive engendre un langage infini, soit toujours vraie... Pensez, par exemple,
ce qui se passerait si lon avait une production rcursive de type A A. En revanche, il
est clair quune telle production risque de poser problme pour engendrer de manire syst-
matique les mots de la grammaire. Le problme est dviter de tomber dans des drivations
interminables telles que : GN GN GNP GN GNP GNP GN GNP GNP GNP . . ..
GD GD GD

Une autre remarque sur GD : cette grammaire engendre des noncs qui ne sont pas corrects
en franais. Par exemple, la fils avale a` le petite dessert.
Dernire remarque concernant GD : cette grammaire engendre des noncs qui sont (du
point de vue du sens) ambigus. Ainsi Louis parle a` la fille de Paul, qui peut exprimer soit
une conversation entre Louis et la fille de Paul, soit un change concernant Paul entre Louis et
la fille. En crivant les diverses drivations de ces deux noncs, vous pourrez constater que
les deux sens correspondent deux drivations employant des productions diffrentes pour
construire un groupe verbal : la premire utilise p7 , la seconde p9 .

6.1.2 Une grammaire pour le shell

Dans cette section, nous prsentons des fragments 1 dune autre grammaire, celle qui dcrit
la syntaxe des programmes pour linterprteur bash. Nous ferons, dans la suite, rfrence
cette grammaire sous le nom de GB .
1. Ces fragments sont extraits de Learning the Bash Shell, de C. Newham et B. Rosenblatt, OReilly & associates,
1998, consultable en ligne ladresse http://safari.oreilly.com.

79
CHAPITRE 6. LANGAGES ET GRAMMAIRES HORS-CONTEXTE

hnumberi hnumberi 0
GB
hnumberi 10
GB
hnumberi 510
GB
3510
GB

Table 6.4 Drivation du nombre 3510

Un mot tout dabord sur les notations : comme il est dusage pour les langages informa-
tiques, cette grammaire est exprime en respectant les conventions initialement proposes
par Backus et Naur pour dcrire le langage ALGOL 60. Ce systme de notation des gram-
maires est connu sous le nom de Backus-Naur Form ou en abrg BNF. Dans les rgles de la
grammaire 6.3, les non-terminaux figurent entre chevrons (hi) ; les terminaux sont les autres
chanes de caractres, certains caractres spciaux apparaissant entre apostrophes ; les pro-
ductions sont marques par loprateur F ; enfin les productions alternatives ayant mme
partie gauche sont spares par le symbole |, les alternatives pouvant figurer sur des lignes
distinctes.
Les lments de base de la syntaxe sont les mots et les chiffres, dfinis dans la grammaire 6.3.

hletteri F a|b|c|d|e|f|g|h|i|j|k|l|m|n|o|p|q|r|s|t|u|v|w|x|y|z
| A|B|C|D|E|F|G|H|I|J|K|L|M|N|O|P|Q|R|S|T|U|V|W|X|Y|Z

hdigiti F 0|1|2|3|4|5|6|7|8|9

hnumberi F hnumberi hdigiti


| hdigiti

hwordi F hwordi hletteri


| hwordi _
| hletteri

hword_listi F hword_listi hwordi


| hwordi

Grammaire 6.3 Constructions lmentaires de Bash

Les deux premires dfinitions sont des simples numrations de terminaux dfinissant les
lettres (hletteri), puis les chiffres (hdigiti). Le troisime non-terminal, hnumberi, introduit
une figure rcurrente dans les grammaires informatiques : celle de la liste, ici une liste de
chiffres. Une telle construction ncessite deux productions :
une production rcursive (ici rcursive gauche) spcifie une liste comme une liste
suivie dun nouvel lment ;
la seconde alternative achve la rcursion, en dfinissant la liste compose dun unique
chiffre.

80
6.2. DRIVATIONS

Ce couple de rgles permet de driver des squences de longueur arbitraire, selon des dri-
vations similaires celle du tableau 6.4. On reconnat dans celle-ci une drivation rgulire :
le fragment de GB rduit aux trois productions relatives aux nombres et daxiome hnumberi
dfinit une grammaire rgulire et pourrait tre reprsent sous la forme dun automate fini.
Le mme principe est luvre pour dcrire les mots, hwordi, par des listes de lettres ; ou
encore les listes de mots (hword_listi).
Une seconde figure remarquable et typique des langages de programmation apparat dans
les productions du tableau 6.5.

hgroup_commandi F { hlisti }

hif_commandi F if hcompound_listi then hcompound_listi fi


| if hcompound_listi then hcompound_listi else hcompound_listi fi
| if hcompound_listi then hcompound_listi helif_clausei fi

helif_clausei F elif hcompound_listi then hcompound_listi


| elif hcompound_listi then hcompound_listi else hcompound_listi
| elif hcompound_listi then hcompound_listi helif_clausei

Table 6.5 Constructions parenthses

La dfinition du non-terminal hgroup_commandi fait apparatre deux caractres spciaux


apparis { (ouvrant) et } (fermant) : dans la mesure o cette production est la seule qui introduit
ces symboles, il est garanti qu chaque ouverture de { correspondra une fermeture de }, et
ceci indpendamment du nombre et du degr dimbrication de ces symboles. Inversement, si
cette condition nest pas satisfaite dans un programme, une erreur de syntaxe sera dtecte.
Le cas des constructions conditionnelles est similaire : trois constructions sont autorises,
correspondant respectivement la construction sans alternative (simple if-then), construc-
tion alternative unique (if-then-else), ou construction avec alternatives multiples, (if-
then-elif...). Dans tous les cas toutefois, chaque mot-cl if (ouvrant) doit sapparier avec
une occurrence mot-cl fi (fermant), quel que soit le contenu dlimit par le non-terminal
hcompound_listi. Les constructions parenthses apparaissent, sous de multiples formes,
dans tous les langages de programmation. Sous leur forme la plus pure, elles corres-
pondent des langages de la forme an bn , qui sont des langages hors-contexte, mais pas
rguliers (cf. la discussion de la section 5.2.4).

6.2 Drivations

Nous lavons vu, une premire caractristique des grammaires CF est la multiplicit des
drivations possibles pour un mme mot. Pour neutraliser cette source de variabilit,
nous allons poser une convention permettant dordonner lapplication des productions.
Cette convention pose, nous introduisons une reprsentation graphique des drivations et
dfinissons les notions dambigut et dquivalence entre grammaires.

81
CHAPITRE 6. LANGAGES ET GRAMMAIRES HORS-CONTEXTE

6.2.1 Drivation gauche

Dfinition 6.1 (Drivation gauche). On appelle drivation gauche dune grammaire hors-
contexte G une drivation dans laquelle chaque tape de drivation rcrit le non-terminal le plus
gauche du proto-mot courant.

En guise dillustration, considrons de nouveau la drivation de Louis boude prsente dans


le tableau 6.2 : chaque tape rcrivant le non-terminal le plus gauche, cette drivation est
bien une drivation gauche.
Un effort supplmentaire est toutefois requis pour rendre la notion de drivation gauche
compltement opratoire. Imaginez, par exemple, que la grammaire contienne une rgle de
type A A. Cette rgle engendre une infinit de drivations gauches quivalentes pour toute
drivation gauche contenant A : chaque occurrence de cette production peut tre rpte
volont sans modifier le mot engendr. Pour achever de spcifier la notion de drivation
gauche, on ne considrera dans la suite que des drivations gauches minimales, cest--dire
qui sont telles que chaque tape de la drivation produit un proto-mot diffrent de ceux
produits aux tapes prcdentes.
L
On notera A u lorsque u drive de A par une drivation gauche.
G

De manire duale, on dfinit la notion de drivation droite :


Dfinition 6.2 (Drivation droite). On appelle drivation droite dune grammaire hors-contexte
G une drivation dans laquelle chaque tape de la drivation rcrit le terminal le plus droite du
proto-mot courant.

Un premier rsultat est alors nonc dans le thorme suivant, qui nous assure quil est
justifi de ne sintresser quaux seules drivations gauches dune grammaire.
? L
Thorme 6.3. Soit G une grammaire CF daxiome S, et u dans ? : S u si et seulement si S u
G G
R
(idem pour S u).
G

Dmonstration. Un sens de limplication est immdiat : si un mot u se drive par une d-


rivation gauche depuis S, alors u L(G). Rciproquement, soit u = u1 . . . un se drivant de
S par une drivation non-gauche, soit B le premier non-terminal non-gauche rcrit dans la
drivation de u (par B ) et soit A le non-terminal le plus gauche de ce proto-mot. La
drivation de u scrit :
? ?
S u1 . . . ui Au j . . . uk B u1 . . . ui Au j . . . uk u
G G G

La gnration de u implique qu une tape ultrieure de la drivation, le non-terminal A se


rcrive (ventuellement en plusieurs tapes) en : ui+1 . . . u j1 . Soit alors A la premire
production implique dans cette drivation : il apparat quen appliquant cette production
juste avant B , on obtient une nouvelle drivation de u depuis S, dans laquelle A, qui
est plus gauche que B, est rcrit avant lui. En itrant ce procd, on montre que toute
drivation non-gauche de u peut se transformer de proche en proche en drivation gauche
de u, prcisment ce quil fallait dmontrer. 

82
6.2. DRIVATIONS

Attention : si lon peut driver par drivation gauche tous les mots dun langage, on ne peut
pas en dire autant des proto-mots. Il peut exister des proto-mots qui ne sont pas accessibles par
une drivation gauche : ce nest pas gnant, dans la mesure o ces proto-mots ne permettent
pas de driver davantage de mots de la grammaire.
En utilisant ce rsultat, il est possible de dfinir une relation dquivalence sur lensemble des
drivations de G : deux drivations sont quivalentes si elles se transforment en une mme
drivation gauche. Il apparat alors que ce qui caractrise une drivation, ou plutt une classe
de drivations, est partiellement 2 indpendant de lordre dapplication des productions, et
peut donc simplement tre rsum par lensemble 3 des productions utilises. Cet ensemble
partiellement ordonn admet une expression mathmatique (et visuelle) : larbre de drivation.

6.2.2 Arbre de drivation

Dfinition 6.4 (Arbre de drivation). Un arbre de drivation dans G est un arbre A tel que :
tous les nuds de A sont tiquets par un symbole de V = T N,
la racine est tiquete par S,
si un nud n nest pas une feuille et porte ltiquette X, alors X N,
si n1 , n2 , . . . , nk sont les fils de n dans A, dtiquettes respectives X1 , X2 , . . . , Xk , alors X
X1 X2 Xk est une production de G.

Notons que cette dfinition nimpose pas que toutes les feuilles de larbre soient tiquetes
par des terminaux : un arbre peut trs bien dcrire un proto-mot en cours de drivation.
Pour passer de larbre de drivation la drivation proprement dite, il suffit de parcourir
larbre de drivation en lisant les productions appliques. La drivation gauche sobtient en
effectuant un parcours prfixe de larbre, cest--dire en visitant dabord un nud pre, puis
tous ses fils de gauche droite. Dautres parcours fourniront dautres drivations quiva-
lentes.
Un arbre de drivation (on parle aussi darbre danalyse dun mot) correspondant la produc-
tion de lnonc Paul mange son fromage dans la grammaire des dimanches est reprsent
la figure 6.6. Les numros des nuds sont ports en indice des tiquettes correspondantes ;
la numrotation adopte correspond un parcours prfixe de larbre. Sur cette figure, on voit
en particulier quil existe deux nuds tiquets GN, portant les indices 2 et 8.
Larbre de drivation reprsente graphiquement la structure associe un mot du langage,
de laquelle se dduira linterprtation lui donner.
On appelle parsage (en anglais parsing) dun mot dans la grammaire le processus de construc-
tion du ou des arbres de drivation pour ce mot, lorsquils existent.
Linterprtation correspond la signification dun nonc pour la grammaire des dimanches,
la valeur du calcul dnot par une expression arithmtique pour une grammaire de calculs,
2. Partiellement seulement : pour quun non-terminal A soit driv, il faut quil est t pralablement produit
par une production qui le contient dans sa partie droite.
3. En ralit un multi-ensemble, pas un ensemble au sens traditionnel : le nombre dapplications de chaque
production importe.

83
CHAPITRE 6. LANGAGES ET GRAMMAIRES HORS-CONTEXTE

S1

GN2 GV 5

NP3 V6 GN8

Paul4 mange7 DET9 N11

son10 fromage12

Figure 6.6 Larbre de drivation de Paul mange son fromage

ou encore la squence dinstructions lmentaires effectuer dans le cadre dune gram-


maire reprsentant un langage informatique. On appelle smantique dun mot le rsultat de
son interprtation, et par extension la smantique le domaine (formel) traitant les problmes
dinterprtation. Smantique soppose ainsi syntaxique aussi bien lorsque lon parle de lan-
gage informatique ou de langage humain. On notera que dans les deux cas, il existe des
phrases syntaxiques qui nont pas de sens, comme 0 = 1, ou encore le dessert sennuie Marie.
Notons que la structure associe un mot nest pas ncessairement unique, comme le montre
lexemple suivant. Soit GE une grammaire daxiome Sum dfinissant des expressions arith-
mtiques simples en utilisant les productions de la grammaire 6.7.

Sum Sum + Sum | Number


Number Number Digit | Digit
Digit 0 | 1 | 2 . . . | 9
Grammaire 6.7 Une grammaire pour les sommes

Pour cette grammaire, lexpression 3 + 5 + 1 correspond deux arbres danalyse, reprsents


la figure 6.8.
En remplaant loprateur +, qui est associatif, par , qui ne lest pas, on obtiendrait non
seulement deux analyses syntaxiques diffrentes du mot, mais galement deux interprta-
tions (rsultats) diffrents : 3 dans un cas, 1 dans lautre. Ceci est fcheux.

6.2.3 Ambigut

Dfinition 6.5 (Ambigut dune grammaire). Une grammaire est ambigu sil existe un mot
admettant plusieurs drivations gauches dans la grammaire.
De manire quivalente, une grammaire est ambigu sil existe un mot qui admet plusieurs arbres de
drivation.

84
6.2. DRIVATIONS

Sum Sum

Sum + Sum Sum + Sum

Number Number
Sum + Sum Sum + Sum
Digit Digit
Number Number Number Number
1 3
Digit Digit Digit Digit

3 5 5 1

Figure 6.8 Deux arbres de drivation dun mme calcul

La grammaire 6.9 est un exemple de grammaire ambigu.

S ASB | AB
A aA | a
B bB | b
Grammaire 6.9 Une grammaire ambigu

Le mot aabb admet ainsi plusieurs analyses, selon que lon utilise ou pas la premire pro-
duction de S. Cette grammaire engendrant un langage rgulier (lequel ?), il est toutefois
lmentaire, en utilisant le procd de transformation dun automate en grammaire rgu-
lire, de construire une grammaire non-ambigu qui reconnat ce langage. Lambigut est
une proprit des grammaires.
Cette proprit contamine pourtant parfois mme les langages :
Dfinition 6.6 (Ambigut dun langage). Un langage hors-contexte est (intrinsquement) am-
bigu si toutes les grammaires hors-contexte qui lengendrent sont ambigus.

Un langage intrinsquement ambigu ne peut donc tre dcrit par une grammaire non-
ambigu. Un exemple fameux est L = L1 L2 = {an bn cm } {am bn cn }, soit {an bm cp , avec m =
n ou m = p}. Dcrire L1 demande dintroduire une rcursion centrale, pour apparier les a et
les b ; L2 demande galement une rgle exhibant une telle rcursion, pour apparier les b et
les c. On peut montrer que pour toute grammaire hors-contexte engendrant ce langage, tout
mot de la forme an bn cn aura une double interprtation, selon que lon utilise le mcanisme
dappariement (de comptage) des a et des b ou celui qui contrle lappariement des b et des
c.
Fort heureusement, les langages (informatiques) intrinsquement ambigus ne courent pas les
rues : lorsque lon conoit un nouveau langage informatique, il suffit de se prmunir contre
les ambiguts qui peuvent conduire des conflits dinterprtation. Ainsi, les grammaires
formelles utilises pour les langages de programmation sont-elles explicitement conues
pour limiter lambigut danalyse.
En revanche, lorsquon sintresse au langage naturel, lambigut lexicale (un mot ayant

85
CHAPITRE 6. LANGAGES ET GRAMMAIRES HORS-CONTEXTE

plusieurs catgories ou plusieurs sens) et syntaxique (un nonc avec plusieurs interprta-
tions) sont des phnomnes massifs et incontournables, quil faut donc savoir affronter avec
les outils adquats.

6.2.4 quivalence

travers la notion de drivation gauche et darbre de drivation, nous sommes en mesure


de prciser les diffrentes notions dquivalence pouvant exister entre grammaires.

Dfinition 6.7 (quivalence). Deux grammaires G1 et G2 sont quivalentes si et seulement si elles


engendrent le mme langage (dfinition 5.5).
Si, de plus, pour tout mot du langage, les arbres de drivation dans G1 et dans G2 sont identiques,
on dit que G1 et G2 sont fortement quivalentes. Dans le cas contraire, on dit que G1 et G2 sont
faiblement quivalentes.

Ces notions sont importantes puisque, on la vu, cest larbre de drivation qui permet
dinterprter le sens dun nonc : transformer une grammaire G1 en une autre grammaire
G2 qui reconnat le mme langage est utile, mais il est encore plus utile de pouvoir le faire
sans avoir changer les interprtations. dfaut, il faudra se rsoudre utiliser des mcanismes
permettant de reconstruire les arbres de drivation de la grammaire initiale partir de ceux
de la grammaire transforme.

6.3 Les langages hors-contexte

6.3.1 Le lemme de pompage

Bien que se prtant de multiples applications pratiques, les grammaires algbriques sont
intrinsquement limites dans la structure des mots quelles engendrent. Pour mieux appr-
hender la nature de cette limitation, nous allons introduire quelques notions nouvelles. Si a
est un symbole terminal dun arbre de drivation dune grammaire G, on appelle ligne de a
la squence de rgles utilise pour produire a partir de S. Chaque lment de la ligne est
une paire (P, i), o P est une production, et i lindice dans la partie droite de P de lanctre de
a. Considrant de nouveau la grammaire 5.1 pour le langage an bn et une drivation de aaabbb
dans cette grammaire, la ligne du second a de aaabbb correspond la squence (S aSb, 2),
(S aSb, 1).
On dit alors quun symbole est original si tous les couples (P, i) qui constituent sa ligne sont
diffrents. Contrairement au premier et au second a de aaabbb, le troisime a nest pas original,
puisque sa ligne est (S aSb, 2), (S aSb, 2), (S ab, 1). Par extension, un mot est dit
original si tous les symboles qui le composent sont originaux.
Le rsultat intressant est alors quune grammaire algbrique, mme lorsquelle engendre un
nombre infini de mots, ne peut produire quun nombre fini de mots originaux. En effet, puisquil
ny a quun nombre fini de productions, chacune contenant un nombre fini de symboles
dans sa partie droite, chaque symbole terminal ne peut avoir quun nombre fini de lignes

86
6.3. LES LANGAGES HORS-CONTEXTE

diffrentes. Les symboles tant en nombre fini, il existe donc une longueur maximale pour
un mot original et donc un nombre fini de mots originaux.
quoi ressemblent alors les mots non-originaux ? Soit s un tel mot, il contient ncessairement
un symbole non-original a, dont la ligne contient donc deux fois le mme anctre A. La
drivation complte de s pourra donc scrire :
? ? ?
S uAy uvAxy uvwxy
G G G
o u, v, w, x, y sont des squences de terminaux, la squence w contenant le symbole a. Il
est alors facile de dduire de nouveaux mots engendrs par la grammaire, en remplaant w
(qui est une drivation possible de A) par vwx qui est une autre drivation possible de A.
Ce processus peut mme tre itr, permettant de construire un nombre infini de nouveaux
mots, tous non-originaux, et qui sont de la forme : uvn wxn z. Ces considrations nous amnent
un thorme caractrisant de manire prcise cette limitation des langages algbriques.
Thorme 6.8 (Lemme de pompage pour les CFL). Si L est un langage CF, alors il existe un
entier k tel que tout mot de L de longueur suprieure k se dcompose en cinq facteurs u, v, w, x, y,
avec vx , , |vwx| < k et tels que pour tout n, uvn wxn y est galement dans L.

Dmonstration. Une partie de la dmonstration de ce rsultat dcoule des observations pr-


cdentes. En effet, si L est vide ou fini, on peut prendre pour k un majorant de la longueur
dun mot de L. Comme aucun mot de L nest plus long que k, il est vrai que tout mot de L
plus long que k satisfait le thorme 6.8.
Supposons que L est effectivement infini, alors il existe ncessairement un mot z dans L(G)
plus long que le plus long mot original. Ce mot tant non-original, la dcomposition prc-
dente en cinq facteurs, dont deux sont simultanment itrables, sapplique immdiatement.
La premire condition supplmentaire, vx , , drive de la possibilit de choisir G telle
quaucun terminal autre que S ne drive (voir chapitre 9) : en considrant une driva-
tion minimale, on sassure ainsi quau moins un terminal est produit durant la drivation
?
A vAx. La seconde condition, |vwx| < k, drive de la possibilit de choisir pour vwx un
facteur original et donc de taille strictement infrieure k. 

Ce rsultat est utile pour prouver quun langage nest pas hors-contexte. Montrons, titre
dillustration, que {an bn cn , n 1} nest pas hors-contexte. Supposons quil le soit et consi-
drons un mot z suffisamment long de ce langage. Dcomposons z en uvwxy, et notons
zn = uvn wxn y. Les mots v et x ne peuvent chacun contenir quun seul des trois symboles de
lalphabet, sans quoi leur rptition aboutirait des mots ne respectant pas le squencement
impos : tous les a avant tous les b avant tous les c. Pourtant, en faisant crotre n, on augmente
simultanment, dans zn , le nombre de a, de b et de c dans des proportions identiques : ceci
nest pas possible puisque seuls deux des trois symboles sont concerns par lexponentiation
de v et x. Cette contradiction prouve que ce langage nest pas hors-contexte.

6.3.2 Oprations sur les langages hors-contexte

Dans cette section, nous tudions les proprits de clture pour les langages hors-contexte,
dune manire similaire celle conduite pour les reconnaissables la section 4.2.1.

87
CHAPITRE 6. LANGAGES ET GRAMMAIRES HORS-CONTEXTE

Une premire srie de rsultats est tablie par le thorme suivant :


Thorme 6.9 (Clture). Les langages hors-contexte sont clos pour les oprations rationnelles.

Dmonstration. Pour les trois oprations, une construction simple permet dtablir ce rsultat.
Si, en effet, G1 et G2 sont dfinies par : G1 = (N1 , 1 , P1 , S1 ) et G2 = (N2 , 2 , P2 , S2 ), on vrifie
simplement que :
G = (N1 N2 {S}, 1 2 , P1 P2 {S S1 , S S2 }, S) engendre exactement L1 L2 .
G = (N1 N2 {S}, 1 2 , P1 P2 {S S1 S2 }, S) engendre exactement L1 L2 .
G = (N1 {S}, 1 , P1 {S SS1 , S }, S) engendre exactement L1 ? .


En revanche, contrairement aux langages rationnels/reconnaissables, les langages algbriques


ne sont pas clos pour lintersection. Soient en effet L1 = {an bn cm } et L2 = {am bn cn } : ce sont
clairement deux langages hors-contexte dont nous avons montr plus haut que lintersec-
tion, L = L1 L2 = {an bn cn }, nest pas un langage hors contexte. Un corollaire (dduit par
application directe de la loi de De Morgan 4 ) est que les langages hors-contexte ne sont pas
clos par complmentation.
Pour conclure cette section, ajoutons un rsultat que nous ne dmontrons pas ici :
Thorme 6.10. Lintersection dun langage rgulier et dun langage hors-contexte est un langage
hors-contexte.

6.3.3 Problmes dcidables et indcidables

Dans cette section, nous prsentons sommairement les principaux rsultats de dcidabilit
concernant les grammaires et langages hors-contexte. Cette panoplie de nouveaux rsultats
vient enrichir le seul dont nous disposons pour linstant, savoir que les langages hors-
contexte sont rcursifs et quen consquence, il existe des algorithmes permettant de dcider
si un mot u de ? est, ou non, engendr par une grammaire G. Nous aurons loccasion de
revenir longuement sur ces algorithmes, notamment au chapitre 7.
Nous commenons par deux rsultats positifs, qui snonce comme :
Thorme 6.11. Il existe un algorithme permettant de dterminer si le langage engendr par une
grammaire hors-contexte est vide.

Dmonstration. La preuve exploite en fait un argument analogue celui utilis dans notre
dmonstration du lemme de pompage (thorme 6.8) : on considre un arbre de driva-
tion hypothtique quelconque de la grammaire, engendrant w. Supposons quun chemin
contienne plusieurs fois le mme non-terminal A (aux nuds n1 et n2 , le premier dominant
le second). n1 domine le facteur w1 , n2 domine w2 ; on peut remplacer dans w la partie corres-
pondant w1 par celle correspondant w2 . Donc, sil existe un mot dans le langage engendr,
il en existera galement un qui soit tel que le mme non-terminal napparat jamais deux fois

4. Rappelons : L1 L2 = L1 L2 .

88
6.3. LES LANGAGES HORS-CONTEXTE

dans un chemin. Dans la mesure o les non-terminaux sont en nombre fini, il existe un
nombre fini de tels arbres. Il suffit alors de les numrer et de vrifier sil en existe un dont la
frontire ne contient que des terminaux : si la rponse est oui, alors L(G) est non-vide, sinon,
L(G) est vide. 

Thorme 6.12. Il existe un algorithme permettant de dterminer si le langage engendr par une
grammaire hors-contexte est infini.

Dmonstration. Lide de la dmonstration repose sur lobservation suivante : aprs limina-


tion des productions inutiles, des productions epsilon et des cycles (voir la section 9.1), il est
possible dnumrer tous les arbres de profondeur borne : si on ne trouve jamais deux fois
le mme non terminal sur une branche, le langage est fini ; sinon il est infini. 

Ces rsultats sont les seuls rsultats positifs pour les grammaires CF, puisquil est possible
de prouver les rsultats ngatifs suivants :
il nexiste pas dalgorithme pour dcider si deux grammaires sont quivalentes (rap-
pelons : la preuve du rsultat (positif) obtenu pour les langages rationnels utilisait la
clture par intersection de ces langages) ;
il nexiste pas dalgorithme pour dcider si le langage engendr par une grammaire CF
est inclus dans le langage engendr par une autre grammaire CF ;
il nexiste pas dalgorithme pour dcider si une grammaire CF engendre en fait un
langage rgulier ;
il nexiste pas dalgorithme pour dcider si une grammaire est ambigu.
Munis de ces rsultats, nous pouvons maintenant aborder le problme de la reconnaissance
des mots engendrs par une grammaire CF, qui fait lobjet des chapitres suivants.

89
CHAPITRE 6. LANGAGES ET GRAMMAIRES HORS-CONTEXTE

90
Chapitre 7

Introduction au parsage de
grammaires hors-contexte

Dans ce chapitre, nous prsentons les principales difficults algorithmiques que pose lana-
lyse de grammaires hors-contexte. Il existe, en fait, trois tches distinctes que lon souhaiterait
effectuer laide dune grammaire : la reconnaissance, qui correspond au calcul de lappar-
tenance dun mot un langage ; lanalyse (ou le parsage), qui correspond au calcul de tous
les arbres danalyse possibles pour un nonc ; la gnration, qui correspond la production
de tous les mots du langage dcrit par une grammaire. Dans la suite de ce chapitre, nous ne
nous intresserons quaux deux premires de ces tches.
Les langages hors-contexte tant une sous classe des langages rcursifs, nous savons quil
existe des algorithmes permettant daccomplir la tche de reconnaissance. En fait, il en existe
de multiples, qui, essentiellement se ramnent tous deux grands types : les analyseurs
ascendants et les analyseurs descendants. Comme expliqu dans la suite, toute la difficult
pour les analyseurs consiste affronter le non-dterminisme inhrent aux langages hors-
contexte de manire :

viter de perdre son temps dans des impasses ;

viter de refaire deux fois les mmes calculs.

Ce chapitre est organis comme suit : dans la section 7.1, nous prsentons lespace de re-
cherche du parsage ; nous prsentons ensuite les stratgies ascendantes dans la section 7.2
et descendantes en section 7.3, ainsi que les problmes que pose la mise en uvre de telles
stratgies. Cette tude des analyseurs se poursuit au chapitre 8, o nous prsentons des analy-
seurs dterministes, utilisables pour certains types de grammaires ; ainsi quau chapitre 9, o
nous tudions des techniques de normalisation des grammaires, visant simplifier lanalyse,
ou se prmunir contre des configurations indsirables.
Une rfrence extrmement riche et complte pour aborder les questions de parsage est
Grune et Jacob (1990).
CHAPITRE 7. INTRODUCTION AU PARSAGE DE GRAMMAIRES HORS-CONTEXTE

7.1 Graphe de recherche

Un point de vue gnral sur la question de la reconnaissance est donn par la considration
suivante. Comme toute relation binaire, la relation binaire sur les squences de (N )?
G
se reprsente par un graphe dont les sommets sont les squences de (N )? et dans lequel
un arc de vers indique que . On lappelle le graphe de la grammaire G. Ce graphe est
G
bien sr infini ds lors que L(G) est infini ; il est en revanche localement fini, signifiant que tout
sommet a un nombre fini de voisins.
La question laquelle un algorithme de reconnaissance doit rpondre est alors la suivante :
existe-t-il dans ce graphe un chemin du nud S vers le nud u ? Un premier indice : sil
en existe un, il en existe ncessairement plusieurs, correspondant plusieurs drivations
diffrentes rductibles une mme drivation gauche. Il nest donc pas ncessaire dexplorer
tout le graphe.
Pour rpondre plus compltement cette question, il existe deux grandes manires de
procder : construire et explorer de proche en proche les voisins de S en esprant rencontrer
u : ce sont les approches dites descendantes ; ou bien inversement construire et explorer les
voisins 1 de u, en essayant de remonter vers S : on appelle ces approches ascendantes. Dans
les deux cas, si lon prend soin, au cours de lexploration, de se rappeler des diffrentes tapes
du chemin, on sera alors mme de reconstruire un arbre de drivation de u.
Ces deux groupes dapproches, ascendantes et descendantes, sont considrs dans les sec-
tions qui suivent, dans lesquelles on essayera galement de suggrer que ce problme admet
une implantation algorithmique polynomiale : dans tous les cas, la reconnaissance de u de-
mande un nombre dtapes born par k|u|p pour un certain p fix qui est indpendant de
lentre.
Le second problme intressant est celui de lanalyse, cest--dire de la construction de tous
les arbres de drivation de u dans G. Pour le rsoudre, il importe non seulement de dterminer
non pas un chemin, mais tous les chemins 2 et les arbres de drivation correspondants. Nous
le verrons, cette recherche exhaustive peut demander, dans les cas o la grammaire est
ambigu, un temps de traitement exponentiel par rapport la longueur de u. En effet, dans
une grammaire ambigu, il peut exister un nombre exponentiel darbres de drivation, dont
lnumration (explicite) demandera ncessairement un temps de traitement exponentiel.

7.2 Reconnaissance ascendante

Supposons qutant donne la grammaire 6.1 des repas dominicaux, nous soyons confronts
lnonc : le fils mange sa soupe. Comment faire alors pour :
vrifier que ce mot appartient au langage engendr par la grammaire ?
lui assigner, dans le cas o la rponse est positive, une (ou plusieurs) structure(s)
arbore(s) ?
1. En renversant lorientation des arcs.
2. En fait, seulement ceux qui correspondent une drivation gauche.

92
7.2. RECONNAISSANCE ASCENDANTE

Une premire ide dexploration nous est donne par lalgorithme suivant, qui, partant des
terminaux du mot dentre, va chercher inverser les rgles de production pour parvenir
rcrire le symbole initial de la grammaire : chaque tape de lalgorithme vise rduire la
taille du proto-mot courant, en substituant la partie droite dune production par sa partie
gauche. Dans lalgorithme prsent ci-dessous, cette rduction se fait par la gauche : on
cherche rcrire le proto-mot courant en commenant par les symboles qui se trouvent le
plus gauche : chaque tape, il sagit donc didentifier, en commenant par la gauche, une
partie droite de rgle. Lorsquune telle partie droite est trouve, on la remplace par la partie
gauche correspondante et on continue. Si on ne peut trouver une telle partie droite, il faut
remettre en cause une rgle prcdemment applique (par retour en arrire) et reprendre
la recherche en explorant un autre chemin. Cette recherche sarrte lorsque le proto-mot
courante ne contient plus, comme unique symbole, que laxiome S.
Une trace de lexcution de cet algorithme est donne ci-dessous, aprs que le proto-mot
courant a t initialis avec le fils mange sa soupe :
1. on remplace le par la partie gauche de la rgle le DET. = DET fils mange sa soupe.
2. on essaie de remplacer DET en le trouvant comme partie droite. chec. Idem pour DET
fils, DET fils mange...
3. on rcrit fils : N. = DET N mange sa soupe.
4. on essaie de remplacer DET en le trouvant comme partie droite. chec.
5. on rcrit DET N : GN. = GN mange sa soupe.
6. on essaie de remplacer GN en le trouvant comme partie droite. chec. Idem pour GN
mange, GN mange sa...
7. on rcrit mange : V. = GN V sa soupe.
8. on essaie de remplacer GN en le trouvant comme partie droite. chec. Idem pour GN
V, GN V sa...
9. on rcrit V : GV. = GN GV sa soupe.
10. on essaie de remplacer GN en le trouvant comme partie droite. chec.
11. on rcrit GN GV : S. = S sa soupe.
12. on essaie de remplacer S en le trouvant comme partie droite. chec. Idem pour S sa, S
sa soupe.
13. on rcrit sa : DET. Rsultat : S DET soupe.
14. on essaie de remplacer S en le trouvant comme partie droite. chec. Idem pour S DET,
S DET soupe.
15. on essaie de remplacer DET en le trouvant comme partie droite. chec. Idem pour DET
soupe.
16. on remplace soupe par N. = S DET N.
17. on essaie de remplacer S en le trouvant comme partie droite. chec. Idem pour S DET,
S DET GN.
18. on essaie de remplacer DET en le trouvant comme partie droite. chec.
19. on remplace DET N par GN. = S GN.
20. on essaie de remplacer S en le trouvant comme partie droite. chec.

93
CHAPITRE 7. INTRODUCTION AU PARSAGE DE GRAMMAIRES HORS-CONTEXTE

21. on essaie de remplacer S GN en le trouvant comme partie droite. chec. On est bloqu :
on fait un retour arrire jusquen 11. = GN GV sa soupe.
... on va dabord parcourir entirement le choix aprs GN jusqu GN GV GN. Nouvelle
impasse. Donc on revient en arrire en 8. Et on recommence...
... tt ou tard, on devrait finalement parvenir une bonne solution.
Cette stratgie est mise en uvre par lalgorithme 7.1.

// La fonction principale est bulrp: bottom-up left-right parsing.


// contient le proto-mot courant.
Function bulrp() : bool is
if = S then return true ;
for i := 1 to || do
for j := i to || do
if A i . . . j then
if bulrp(1 . . . i1 A j+1 . . . n ) = true then
return true
return false ;
Algorithme 7.1 Parsage ascendant en profondeur dabord

La procdure dtaille dans lalgorithme 7.1 correspond la mise en uvre dune stratgie
ascendante (en anglais bottom-up), signifiant que lon cherche construire larbre de driva-
tion depuis le bas (les feuilles) vers le haut (la racine de larbre), donc depuis les symboles
de vers S. La stratgie mise en uvre par lalgorithme 7.1 consiste explorer le graphe
de la grammaire en profondeur dabord. Chaque branche est explore de manire successive ;
chaque chec (lorsque toutes les parties droites possibles ont t successivement envisa-
ges), les choix prcdents sont remis en cause et des chemins alternatifs sont visits. Seules
quelques branches de cet arbre mneront finalement une solution. Notez quil est pos-
sible damliorer un peu bulrp pour ne considrer que des drivations droites. Comment
faudrait-il modifier cette fonction pour oprer une telle optimisation ?
Comme en tmoigne laspect un peu rptitif de la simulation prcdente, cette stratgie
conduit rpter de nombreuses fois les mmes tests, et reconstruire en de multiples
occasions les mmes constituants (voir la figure 7.2).
Lactivit principale de ce type dalgorithme consiste chercher, dans le proto-mot courant,
une squence pouvant correspondre la partie droite dune rgle. Lalternative que cette
stratgie danalyse conduit valuer consiste choisir entre remplacer une partie droite
identifie par le non-terminal correspondant (tape de rduction, en anglais reduce), ou
bien diffrer la rduction et essayer dtendre la partie droite en considrant des symboles
supplmentaires (tape dextension, on dit aussi dcalage, en anglais shift ). Ainsi les tapes de
rduction 9 et 11 dans lexemple prcdent conduisent-elles une impasse, amenant les
remplacer par des tapes dextension, qui vont permettre dans notre cas de construire lobjet
direct du verbe avant dentreprendre les bonnes rductions. Comme on peut le voir dans cet
exemple, lefficacit de lapproche repose sur la capacit de lanalyseur prendre les bonnes
dcisions (shift ou reduce) au bon moment. cet effet, il est possible de pr-calculer un
certain nombre de tables auxiliaires, qui permettront de mmoriser le fait que par exemple,
mange attend un complment, et que donc il ne faut pas rduire V avant davoir trouv ce
complment. Cette intuition sera formalise dans le chapitre suivant, la section 8.2.

94
7.3. RECONNAISSANCE DESCENDANTE

ma sur
mange
sa soupe

DET sur ma sur


ma N mange ma sur ma sur
mange mange
sa soupe V sa soupe mange sa N
sa soupe DET soupe

DET N mange ma N V ma N mange ma N


sa soupe sa soupe DET soupe mange sa N

DET N mange
DET soupe

Figure 7.2 Recherche ascendante

La stratgie nave conduit une analyse exponentielle en fonction de la longueur de lentre.


Fort heureusement, il existe des techniques prouves, consistant stocker les rsultats
intermdiaires dans des tableaux, qui permettent daboutir une complexit polynomiale.
Notez, pour conclure, que dans notre exemple, la stratgie mise en uvre termine, ce qui ne
serait pas le cas si notre grammaire tait moins propre . Lanalyse ascendante est prise en
dfaut par des rgles du type X X, ou par des cycles de production de type X Y, Y X,
qui conduisent effectuer (indfiniment !) des sries de rductions striles , cest--dire des
rductions qui laissent inchange la longueur du proto-mot courant. Des problmes srieux
se posent galement avec les productions , qui sont susceptibles de sappliquer toutes les
tapes de lalgorithme. La grammaire des dimanches nen comporte pas, mais de telles
rgles ne sont pas rares dans les grammaires relles.
Avant de montrer quil est, en thorie, possible de se prmunir contre de telles horreurs
(voir la section 9.1), il est important de noter que cette stratgie saccompagne de multiples
variantes, consistant par exemple effectuer lexploration en largeur dabord, ou de droite
gauche, ou simultanment dans les deux sens...
Donnons lintuition de ce que donnerait une exploration en largeur dabord : dune manire
gnrale, ce type de recherche correspond la poursuite en parallle dun ensemble de
chemins possibles. Lalgorithme est initialis avec un seul proto-mot, qui est lnonc
analyser. chaque tape, un nouvel ensemble de proto-mots est considr, auxquels sont
appliques toutes les rductions possibles, donnant lieu un nouvel ensemble de proto-mots.
Si cet ensemble contient S, on arrte ; sinon la procdure est rpte. En guise dapplication,
crivez sur le modle de lalgorithme prcdent une procdure mettant en application cette
ide.

7.3 Reconnaissance descendante

Une seconde stratgie de recherche consiste procder de manire descendante, cest--dire


partir de laxiome de la grammaire pour tenter dengendrer lnonc analyser. Les impasses

95
CHAPITRE 7. INTRODUCTION AU PARSAGE DE GRAMMAIRES HORS-CONTEXTE

de cette recherche sont dtectes en confrontant des prfixes terminaux du proto-mot courant
avec les terminaux de lnonc analyser. Comme prcdemment, dans une recherche en
profondeur dabord, les situations dchecs conduisent remettre en cause les choix prc-
demment effectus ; une recherche en largeur dabord conduit dvelopper simultanment
plusieurs proto-mots. La recherche sarrte lorsque le proto-mot driv depuis S est identique
la squence quil fallait analyser.
Simulons, par exemple, le fonctionnement dun analyseur en profondeur dabord :
1. S
2. GN GV
3. DET N GV
4. la N GV. chec : lentre commence par le, pas par la. On revient DET N GV
5. le N GV.
6. le fille GV. Nouvel chec = le N GV
...
7. le fils GV.
... le fils V.
... le fils boude. chec = le fils V
... le fils sennuie. chec = le fils V
... le fils mange. Il reste des terminaux non-analyss dans lentre, mais le proto-mot ne
contient plus de non-terminaux. chec et retour en 7.
...
Algorithmiquement, cette stratgie danalyse correspond une boucle dans laquelle lanaly-
seur examine le non-terminal le plus gauche du proto-mot courant et essaie de le driver
tout en restant compatible avec lnonc dentre. Cet analyseur construit donc des driva-
tions gauches. Son activit alterne des tapes de prdiction (en anglais prediction) dun symbole
terminal ou non-terminal et des tapes dappariement (en anglais matching) des terminaux pr-
dits avec les mots de lentre. Pour cette raison, le parsage descendant est souvent qualifi
de prdictif. Le pseudo-code dun tel analyseur est donn dans lalgorithme 7.3.

// La fonction principale est tdlrp: top-down left-right parsing.


// est le proto-mot courant, u lentre reconnatre.
Function tdlrp(, u) : bool is
if = u then return true ;
= u1 . . . uk A ;
while A uk+1 ...uk+l avec = ou = A . . . do
if tdlrp(u1 . . . uk+l ) = true then return true ;
return false
Algorithme 7.3 Parsage descendant en profondeur dabord

Une implantation classique de cette stratgie reprsente sous la forme dune pile de laquelle
est exclu le prfixe terminal u1 . . . uk : chaque tape il sagit de dpiler le non-terminal A
en tte de la pile, et dempiler la place un suffixe de la partie droite correspondante (),

96
7.4. CONCLUSION PROVISOIRE

aprs avoir vrifi que l(ventuel) prfixe terminal de (uuk+1 . . . uk + l) tait effectivement
compatible avec la partie non-encore analyse de u.
Pour que cette stratgie soit efficace, il est possible de pr-calculer dans des tables lensemble
des terminaux qui peuvent dbuter lexpansion dun non-terminal. En effet, considrons de
nouveau la grammaire 6.1 : cette grammaire possde galement les productions suivantes,
GN NP, NP Louis, NP Paul, correspondant des noms propres. ltape 2 du
parcours prcdent, lalgorithme pourrait tre (inutilement) conduit prdire un constituant
de catgorie NP, alors mme quaucun nom propre ne peut dbuter par le, qui est le premier
terminal de lnonc analyser. Cette intuition est formalise dans les analyseurs LL, qui
sont prsents dans la section 8.1.
Dans loptique dune stratgie de reconnaissance descendante, notre grammaire possde
un vice de forme manifeste, savoir la production GN GN GNP, qui est rcursive
gauche : lorsque cette production est considre, elle insre en tte du proto-mot courant un
nouveau symbole GN, qui son tour peut tre remplac par un nouveau GN, conduisant
un accroissement indfini de . Dans le cas prsent, la rcursivit gauche est relativement
simple liminer. Il existe des configurations plus complexes, dans lesquelles cette rcursivit
gauche rsulte non pas dune rgle unique mais dune squence de rgles, comme dans :
S A, A S. On trouvera au chapitre 9 une prsentation des algorithmes permettant
dliminer ce type de rcursion.
Notons, pour finir, que nous avons esquiss ci-dessus les principales tapes dune stratgie
descendante en profondeur dabord. Il est tout aussi possible denvisager une stratgie en
largeur dabord, consistant conduire de front lexamen de plusieurs proto-mots. Lcriture
dun algorithme mettant en uvre cette stratgie est laisse en exercice.

7.4 Conclusion provisoire

Nous avons, dans ce chapitre, dfini les premires notions ncessaires ltude des algo-
rithmes danalyse pour les grammaires algbriques. Les points de vue sur ces algorithmes
diffrent trs sensiblement suivant les domaines dapplication :
dans le cas des langages informatiques, les mots (des programmes, des documents
structurs) sont longs, voire trs longs ; lambigut est proscrire, pouvant conduire
des conflits dinterprtation. Les algorithmes de vrification syntaxique doivent donc
avoir une faible complexit (idalement une complexit linaire en fonction de la taille
de lentre) ; il suffit par ailleurs en gnral de produire une analyse et une seule. Les
algorithmes qui rpondent ce cahier des charges sont prsents au chapitre 8.
dans le cas des langues naturelles, lambigut est une des donnes du problme, quil
faut savoir contrler. Les mots tant courts, une complexit suprieure (polynomiale, de
faible degr) pour lanalyse est supportable. On peut montrer qu laide de techniques
de programmation dynamique, consistant sauvegarder dans des tables les fragments
danalyse raliss, il est possible de parvenir une complexit en O(n3 ) pour construire
dun seul coup tous les arbres danalyse. Leur numration exhaustive conserve une
complexit exponentielle.
Quel que soit le contexte, les algorithmes de parsage bnficient toujours dune tape de

97
CHAPITRE 7. INTRODUCTION AU PARSAGE DE GRAMMAIRES HORS-CONTEXTE

prtraitement et de normalisation de la grammaire, visant en particulier viter les configu-


rations problmatiques (cycles et productions pour les analyseurs ascendants ; rcursions
gauches pour les analyseurs descendants). Ces prtraitements sont prsents dans le cha-
pitre 9.

98
Chapitre 8

Introduction aux analyseurs


dterministes

Dans ce chapitre, nous prsentons deux stratgies danalyse pour les grammaires hors-
contexte, qui toutes les deux visent produire des analyseurs dterministes. Comme pr-
sent au chapitre 7, le parsage peut tre vu comme lexploration dun graphe de recherche.
Lexploration est rendue coteuse par lexistence de ramifications dans le graphe, correspon-
dant des chemins alternatifs : ceci se produit, pour les analyseurs descendants, lorsque le
terminal le plus gauche du proto-mot courant se rcrit de plusieurs manires diffrentes
(voir la section 7.1). De telles alternatives ncessitent de mettre en uvre des stratgies de
retour arrire (recherche en profondeur dabord) ou de pouvoir explorer plusieurs chemins
en parallle (recherche en largeur dabord).
Les stratgies danalyse prsentes dans ce chapitre visent viter au maximum les circons-
tances dans lesquelles lanalyseur explore inutilement une branche de larbre de recherche
(en profondeur dabord) ou dans lesquelles il conserve inutilement une analyse dans la liste
des analyses alternatives (en largeur dabord). cet effet, ces stratgies mettent en uvre des
techniques de pr-traitement de la grammaire, cherchant identifier par avance les produc-
tions qui conduiront des chemins alternatifs ; ainsi que des contrles permettant de choisir
sans hsiter la bonne ramification. Lorsque de tels contrles existent, il devient possible de
construire des analyseurs dterministes, cest--dire des analyseurs capables de toujours faire
le bon choix. Ces analyseurs sont algorithmiquement efficaces, en ce sens quils conduisent
une complexit danalyse linaire par rapport la longueur de lentre.
La section 8.1 prsente la mise en application de ce programme pour les stratgies danalyse
descendantes, conduisant la famille danalyseurs prdictifs LL. La section 8.2 sintresse
la construction danalyseurs ascendants, connus sous le nom danalyseurs LR, et prsente
les analyseurs les plus simples de cette famille.
CHAPITRE 8. INTRODUCTION AUX ANALYSEURS DTERMINISTES

8.1 Analyseurs LL

Nous commenons par tudier les grammaires qui se prtent le mieux des analyses des-
cendantes et drivons un premier algorithme danalyse pour les grammaires SLL(1). Nous
gnralisons ensuite cette approche en introduisant les grammaires LL(1), ainsi que les algo-
rithmes danalyse correspondants.

8.1.1 Une intuition simple

Comme expliqu la section 7.3, les analyseurs descendants essayent de construire de proche
en proche une drivation gauche du mot u analyser : partant de S, il sagit daboutir,
par des rcritures successives du (ou des) proto-mots(s) courant(s), u. chaque tape
de lalgorithme, le non-terminal A le plus gauche est rcrit par A , conduisant
lexploration dune nouvelle branche dans larbre de recherche. Deux cas de figure sont alors
possibles :
(i) soit dbute par au moins un terminal : dans ce cas on peut immdiatement vrifier si le
proto-mot courant est compatible avec le mot analyser et, le cas chant, revenir sur
le choix de la production A . Cest ce que nous avons appel la phase dappariement.
(ii) soit dbute par un non-terminal (ou est vide) : dans ce cas, il faudra continuer de
dvelopper le proto-mot courant pour valider la production choisie et donc diffrer la
validation de ce choix.
Une premire manire de simplifier la tche des analyseurs consiste viter dutiliser dans la
grammaire les productions de type point ii : ainsi lanalyseur pourra toujours immdiatement
vrifier le bien-fond des choix effectus, lui vitant de partir dans lexploration dun cul-de-
sac.
Ceci nlimine toutefois pas toute source de non-dterminisme : sil existe un non-terminal A
apparaissant dans deux productions de type point i A a et A a, alors il faudra quand
mme considrer (en srie ou en parallle) plusieurs chemins alternatifs.
Considrons, titre dexemple, le fragment prsent par la grammaire 8.1. Elle prsente la
particularit de ne contenir que des productions de type point i ; de plus, les coins gauches
des productions associes ce terminal sont toutes diffrentes.

S if ( B ) then { I }
S while ( B ) { I }
S do { I } until ( B )
B false | true
I ...
Grammaire 8.1 Fragments dun langage de commande

Il est clair quun analyseur trs simple peut tre envisag, au moins pour explorer sans
hsitation (on dit aussi : dterministiquement) les drivations de S : soit le premier symbole
apparier est le mot-cl if , et il faut appliquer la premire production ; soit cest while et il
faut appliquer la seconde ; soit cest do et il faut appliquer la troisime. Tous les autres cas de
figure correspondent des situations derreur.

100
8.1. ANALYSEURS LL

Si lon suppose que tous les non-terminaux de la grammaire possdent la mme proprit
que S dans la grammaire 8.1, alors cest lintgralit de lanalyse qui pourra tre conduite
de manire dterministe par lalgorithme suivant : on initialise le proto-mot courant avec
S et chaque tape, on consulte les productions du non-terminal A le plus gauche, en
examinant sil en existe une dont le coin gauche est le premier symbole ui non encore
appari. Les conditions prcdentes nous assurant quil existe au plus une telle production,
deux configurations sont possibles :
il existe une production A ui , et on lutilise ; le prochain symbole apparier devient
ui+1 ;
il nen existe pas : le mot analyser nest pas engendr par la grammaire.
Cet algorithme se termine lorsque lon a limin tous les non-terminaux du proto-mot :
on vrifie alors que les terminaux non-encore apparis dans lentre correspondent bien au
suffixe du mot engendr : si cest le cas, lanalyse a russi. Illustrons cet algorithme en utilisant
la grammaire 8.2 ; le tableau 8.3 dcrit pas--pas les tapes de lanalyse de aacddcbb par cette
grammaire.

S aSb
S cC
C dC
C c
Grammaire 8.2 Une grammaire LL(1) simple

itration appari apparier prdit rgle


0 aacddcbb S S aSb
1 a acddcbb Sb S aSb
2 aa cddcbb Sbb S cC
3 aac ddcbb Cbb C dC
4 aacd dcbb Cbb C dC
5 aacdd cbb Cbb C c
6 aacddc bb bb

litration 3 de lalgorithme, le proto-mot courant commande la rcriture de C : le


symbole apparier tant un d, le seul choix possible est dappliquer la production C dC ;
ceci a pour effet de produire un nouveau proto-mot et de dcaler vers la droite le symbole
apparier.

Table 8.3 tapes de lanalyse de aacddcbb

Lapplication de lalgorithme danalyse prcdent demande des consultations rptitives de


la grammaire pour trouver quelle rgle appliquer. Il est possible de construire lavance une
table enregistrant les productions possibles. Cette table, dite table danalyse prdictive, contient
pour chaque non-terminal A et pour chaque symbole dentre a lindice de la production
utiliser lorsque A est le plus gauche dans le proto-mot courant, alors que lon veut
apparier a. Cette table est en fait exactement analogue la table de transition dun automate
dterministe : pour chaque non-terminal (tat) et chaque symbole dentre, elle indique la

101
CHAPITRE 8. INTRODUCTION AUX ANALYSEURS DTERMINISTES

production (la transition) utiliser. Pour la grammaire 8.2, cette matrice est reproduite dans
le tableau 8.4.

a b c d
S aSb cC
C c dC
Si S est prdit et a le premier terminal non appari, alors rcrire S par aSb. Les cases vides
sont des situations dchec.

Table 8.4 Table danalyse prdictive

Cette analogie 1 suggre que la stratgie danalyse applique ci-dessus a une complexit
linaire : un mot de longueur k ne demandera jamais un nombre dtapes suprieur k :
le dterminisme rend lanalyse algorithmiquement efficace, ce qui justifie les efforts pour
rechercher des algorithmes dterministes.
Les grammaires prsentant les deux proprits prcdentes sont appeles des grammaires
LL(1) simples et sont dfinies formellement par :

Dfinition 8.1 (Grammaire SLL(1)). Une grammaire G = (N, , S, P) est une grammaire SLL(1)
si et seulement si :
(i) (A ) P, a , = a
(ii) A N, (A a1 1 ) P et (A a2 2 ) P et a1 1 , a2 2 a1 , a2

Pourquoi cette terminologie ? Parce quelles permettent directement de mettre en uvre


des analyseurs construisant de manire dterministe de gauche droite (Left-to-right) des
drivations gauches (Leftmost derivation) avec un regard avant (en anglais Lookahead) de 1 seul
symbole. Dans la mesure o la forme de la grammaire rend immdiate cette construction,
ces grammaires sont additionnellement qualifies de simples, do la terminologie Simple LL.
La question qui se pose alors est la suivante : tout langage hors-contexte est-il susceptible
dtre analys par une telle technique ? En dautres termes, est-il possible de construire une
grammaire SLL(1) pour tout langage algbrique ? La rponse est malheureusement non : il
existe des langages intrinsquement ambigus (voir la section 6.2.3) pour lesquels il est im-
possible de construire un analyseur dterministe. Il est, en revanche, possible de transformer
toute grammaire en une grammaire satisfaisant la proprit (i) par une suite de transforma-
tions aboutissant la forme normale de Greibach (voir la section 9.2.2). Cette transformation
conduisant toutefois des grammaires (et donc des drivations) trs loignes de la gram-
maire initiale, il est tentant de chercher gnraliser les stratgies dveloppes dans cette
section, de manire pouvoir les appliquer des grammaires moins contraintes. Cette d-
marche est poursuivie dans la suite de ce chapitre avec lintroduction des grammaires LL.

1. Cest un peu plus quune analogie : une grammaire rgulire, par dfinition, vrifie la proprit (i) ci-
dessus ; si elle vrifie de plus la proprit (ii), alors vous vrifierez que lalgorithme de transformation de la
grammaire en automate dcrit la section 5.2.4 aboutit en fait un automate dterministe.

102
8.1. ANALYSEURS LL

8.1.2 Grammaires LL(1)

La cl du succs des analyseurs pour les grammaires SLL(1) est la possibilit de contrler sans
attendre la validit dune prdiction, rendue possible par la proprit que tout non-terminal
rcrit comme premier symbole un symbole terminal.
Considrons alors une grammaire qui na pas cette proprit, telle que celle de la gram-
maire 8.5, qui engendre des formules arithmtiques.

S S+F|F
F FT |T
T (S) | D
D 0 | | 9 | 0D | | 9D
Grammaire 8.5 Une grammaire pour les expressions arithmtiques

Le non-terminal F de la grammaire 8.5, par exemple, se rcrit toujours en un non-terminal.


En examinant les drivations de ce terminal, on constate toutefois que son limination dune
drivation gauche conduit toujours avoir comme nouveau non-terminal le plus gauche
un T, par des drivations de la forme :
?
F F T F T T T T T ... T
A A A

Examinons alors les productions de T : lune commence par rcrire le terminal ( : cela
signifie donc que T, et donc F aussi, drive des proto-mots de type (. T peut galement se
rcrire D ; ce non-terminal respecte la contrainte prcdente, nous garantissant quil rcrit
toujours en premier un chiffre entre 0 et 9. On en dduit que les drivations de T dbutent
soit par (, soit par un chiffre ; il en va alors de mme pour les drivations de F. quoi nous
sert cette information ? Dune part, dtecter une erreur ds que F apparat en tte dun
proto-mot alors quun autre terminal (par exemple + ou ) doit tre appari. Mais on peut
faire bien mieux encore : supposons en effet que lon cherche driver T. Deux productions
sont disponibles : le calcul prcdent nous fournit un moyen infaillible de choisir entre elles :
si le symbole apparier est (, il faut choisir T (S) ; sinon si cest un chiffre, il faut choisir
T D.
En dautres termes, le calcul des terminaux qui sont susceptibles dinitier une drivation
gauche permet de slectionner au plus tt entre productions ayant une mme partie gauche,
ainsi que danticiper sur lapplication errone de productions. En fait, ces symboles jouent
le mme rle que les terminaux apparaissant en coin gauche des productions de grammaire
SLL(1) et leur calcul est donc essentiel pour anticiper sur les bonnes prdictions.
Lexemple prcdent suggre une approche rcursive pour effectuer ce calcul, consistant
examiner rcursivement les coins gauches des productions de la grammaire jusqu tomber
sur un coin gauche terminal. Formalisons maintenant cette intuition.

8.1.3 NULL, FIRST et FOLLOW

FIRST Pour commencer, dfinissons lensemble FIRST(A) des symboles terminaux pouvant
apparatre en tte dune drivation gauche de A, soit :

103
CHAPITRE 8. INTRODUCTION AUX ANALYSEURS DTERMINISTES

Dfinition 8.2 (FIRST). Soit G = (N, , S, P) une grammaire CF et A un lment de N. On appelle


FIRST(A) le sous-ensemble de dfini par :
?
FIRST(A) = {a , (N ), A a}
G

Ainsi, dans la grammaire 8.5, on a :

FIRST(F) = FIRST(T) = {(, 0, 1, . . . , 9}

Comment construire automatiquement cet ensemble ? Une approche nave consisterait


implanter une formule rcursive du type :
[
FIRST(A) = FIRST(X)
X,AXP

Cette approche se heurte toutefois deux difficults :


les productions rcursives gauche, qui sont du type du type A A ; ces productions
sont hautement nocives pour les analyseurs descendants (voir la section 7.3) et il faudra
dans tous les cas sen dbarrasser. Des techniques idoines pour ce faire sont prsentes
la section 9.2.2 ; dans la suite de lexpos on considrera quil ny a plus de production
(ni de chane de productions) rcursive gauche ;
?
les productions A X pour lesquelles le non-terminal X est tel que X : dans
G
ce cas, il faudra, pour calculer correctement FIRST(A), tenir compte du fait que le coin
gauche X des A-productions peut driver le mot vide.
Ces non-terminaux soulvent toutefois un problme nouveau : supposons en effet que
P contienne une rgle de type A , et considrons ltat dun analyseur descendant
tentant de faire des prdictions partir dun proto-mot de la forme uA. Le non-terminal
A pouvant ne driver aucun symbole, il parat difficile de contrler les applications
errones de la production A en regardant simplement FIRST(A) et le symbole
?
apparier. Notons quil en irait de mme si lon avait A . Comment alors anticiper
G
sur les drivations errones de tels non-terminaux et prserver le dterminisme de la
recherche ?
Pour rsoudre les problmes causs par lexistence de non-terminaux engendrant le mot
vide, introduisons deux nouveaux ensembles : NULL et FOLLOW.

NULL NULL est lensemble des non-terminaux drivant le mot . Il est dfini par :

Dfinition 8.3 (NULL). Soit G = (N, , S, P) une grammaire CF. On appelle NULL le sous-ensemble
de N dfini par :
?
NULL = {A N, A }
G

Cet ensemble se dduit trs simplement de la grammaire G par la procdure consistant


initialiser NULL avec et ajouter itrativement dans NULL tous les non-terminaux A tels
quil existe une production A et que tous les symboles de sont soit dj dans NULL,

104
8.1. ANALYSEURS LL

S c | ABS
A B|a
B b|
Grammaire 8.6 Une grammaire (ambigu) pour (a | b)? c

// Initialisation.
foreach A N do FIRST0 (A) := ;
k := 0;
cont := true;
while cont = true do
k := k + 1;
foreach A N do
FIRSTk (A) := FIRSTk1 (A)
foreach (A X1 . . . Xk ) P do
j := 0;
repeat
j := j+1;
// Par convention, si X j est terminal, FIRST(X j ) = {X j }
FIRSTk (A) := FIRSTk (A) FIRSTk (X j )
until X j < NULL;
// Vrifie si un des FIRST a chang; sinon stop
cont := false;
foreach A N do
if FIRSTk (A) , FIRSTk1 (A) then
cont := true
Algorithme 8.7 Calcul de FIRST

soit gaux . Cette procdure sachve lorsquun examen de toutes les productions de P
nentrane aucun nouvel ajout dans NULL. Il est facile de voir que cet algorithme termine en
un nombre fini dtapes (au plus |N|). Illustrons son fonctionnement sur la grammaire 8.6.
Un premier examen de lensemble des productions conduit insrer B dans NULL ( cause
de B ) ; la seconde itration conduit ajouter A, puisque A B. Une troisime et dernire
itration najoute aucun autre lment dans NULL : en particulier S ne drive pas puisque
tout mot du langage engendr par cette grammaire contient au moins un c en dernire
position.

Calculer FIRST Nous savons maintenant calculer NULL : il est alors possible dcrire une
procdure pour calculer FIRST(A) pour tout A. Le pseudo-code de cette procdure est donn
par lalgorithme 8.7.
Illustrons le fonctionnement de cet algorithme sur la grammaire 8.6 : linitialisation conduit
faire FIRST(S) = FIRST(A) = FIRST(B) = . La premire itration ajoute c dans FIRST(S), puis
a dans FIRST(A) et b dans FIRST(B) ; la seconde itration conduit augmenter FIRST(S) avec
a (qui est dans FIRST(A)), puis avec b (qui nest pas dans FIRST(A), mais comme A est dans
NULL, il faut aussi considrer les lments de FIRST(B)) ; on ajoute galement durant cette

105
CHAPITRE 8. INTRODUCTION AUX ANALYSEURS DTERMINISTES

itration b dans FIRST(A). Une troisime itration ne change pas ces ensembles, conduisant
finalement aux valeurs suivantes :

FIRST(S) = {a, b, c}
FIRST(A) = {a, b}
FIRST(B) = {b}

FOLLOW FOLLOW est ncessaire pour contrler par anticipation la validit de prdictions
?
de la forme A , ou, plus gnralement A : pour valider un tel choix, il faut en effet
G
connatre les terminaux qui peuvent apparatre aprs A dans un proto-mot. Une fois ces
terminaux connus, il devient possible de valider lapplication de A en vrifiant que le
symbole apparier fait bien partie de cet ensemble ; si ce nest pas le cas, alors lutilisation
de cette production aboutira ncessairement un chec.
Formellement, on dfinit :

Dfinition 8.4 (FOLLOW). Soit G = (N, , S, P) une grammaire CF et A un lment de N. On


appelle FOLLOW(A) le sous-ensemble de dfini par :

?
FOLLOW(A) = {a , u ? , , (N )? , S uA uAa}

Comment calculer ces ensembles ? En fait, la situation nest gure plus complique que pour
le calcul de FIRST : la base de la rcursion est que si A X1 . . . Xn est une production de G,
alors tout symbole apparaissant aprs A peut apparatre aprs Xn . La prise en compte des
non-terminaux pouvant driver complique un peu le calcul, et requiert davoir au pralable
calcul NULL et FIRST. Ce calcul se formalise par lalgorithme 8.8.
Illustrons, de nouveau, le fonctionnement de cette procdure sur la grammaire 8.6. La pre-
mire itration de cet algorithme conduit examiner la production S ABS : cette rgle
prsente une configuration traite dans la premire boucle for avec X j = A, l = 0 : les
lments de FIRST(B), soit b, sont ajouts FOLLOW1 (A). Comme B est dans NULL, on
obtient aussi que les lments de FIRST(S) sont dans FOLLOW1 (A), qui vaut alors {a, b, c}
(j = 1, l = 1). En considrant, toujours pour cette production, le cas j = 2, l = 0, il savre
que les lments de FIRST(S) doivent tre insrs galement dans FOLLOW1 (B). La suite du
droulement de lalgorithme napportant aucun nouveau changement, on en reste donc :

FOLLOW(S) =
FOLLOW(A) = {a, b, c}
FOLLOW(B) = {a, b, c}

On notera que FOLLOW(S) est vide : aucun terminal ne peut apparatre la droite de S dans
un proto-mot. Ceci est conforme ce que lon constate en observant quelques drivations : S
figure, en effet, toujours en dernire position des proto-mots qui le contiennent.

106
8.1. ANALYSEURS LL

// Initialisation
foreach A N do FOLLOW0 (A) := ;
foreach (A X1 . . . Xn ) P do
for j = 1 to n 1 do
if X j N then
for l = 0 to n j do
// Inclut le cas o X j+1 . . . X j+l+1 =
if X j+1 . . . X j+l NULL? then
FOLLOW0 (X j ) = FOLLOW0 (X j ) FIRST(X j+l+1 )
k := 0;
cont := true;
while cont = true do
k := k + 1;
foreach A N do
FOLLOWk (A) := FOLLOWk1 (A)
foreach (A X1 . . . Xn ) P do
j := n+1;
repeat
j := j-1;
FOLLOWk (X j ) := FOLLOWk (X j ) FOLLOWk (A)
until X j < NULL;
// Vrifie si un des FOLLOW a chang; sinon stop
cont := false;
foreach A N do
if FOLLOWk (A) , FOLLOWk1 (A) then cont := true ;
Algorithme 8.8 Calcul de FOLLOW

8.1.4 La table de prdiction

Nous avons montr la section prcdente comment calculer les ensembles FIRST() et
FOLLOW(). Nous tudions, dans cette section, comment les utiliser pour construire des
analyseurs efficaces. Lide que nous allons dvelopper consiste dduire de ces ensembles
une table M (dans N ) permettant de dterminer coup sr les bons choix effectuer pour
construire dterministiquement une drivation gauche.
Comme pralable, gnralisons la notion de FIRST des squences quelconques de (N )?
de la manire suivante 2 .
(
FIRST(X1 ) si X1 < NULL
FIRST( = X1 Xk ) =
FIRST(X1 ) FIRST(X2 Xk ) sinon

Revenons maintenant sur lintuition de lanalyseur esquiss pour les grammaires SLL(1) :
pour ces grammaires, une production de type A a est slectionne coup sr ds que A

2. Rappelons que nous avons dj tendu la notion de FIRST (et de FOLLOW) pour des terminaux quelconques
par FIRST(a) = FOLLOW(a) = a.

107
CHAPITRE 8. INTRODUCTION AUX ANALYSEURS DTERMINISTES

est le plus gauche du proto-mot courant et que a est le symbole apparier dans le mot en
entre.
Dans notre cas, cest lexamen de lensemble des lments pouvant apparatre en tte de la
drivation de la partie droite dune production qui va jouer le rle de slecteur de la bonne
production. Formellement, on commence remplir M en appliquant le principe suivant :
Si A , avec , , est une production de G et a est un lment de FIRST(),
alors on insre dans M(A, a)
Ceci signifie simplement que lorsque lanalyseur descendant voit un A en tte du proto-mot
courant et quil cherche apparier un a, alors il est licite de prdire , dont la drivation peut
effectivement dbuter par un a.
Reste prendre en compte le cas des productions de type A : lide est que ces productions
peuvent tre appliques lorsque A est le plus gauche du proto-mot courant, et que le symbole
apparier peut suivre A. Ce principe doit en fait tre gnralis toutes les productions A
o ne contient que des symboles dans NULL ( NULL? ). Ceci conduit la seconde rgle
de remplissage de M :
Si A , avec NULL? , est une production de G et a est un lment de
FOLLOW(A), alors insrer dans M(A, a).
Considrons alors une dernire fois la grammaire 8.6. Lapplication du premier principe
conduit aux oprations de remplissage suivantes :
par le premier principe on insrera c dans M(S, c), puis ABS dans les trois cases M(S, a),
M(S, b), M(S, c). Ce principe conduit galement placer a dans M(A, a), B dans M(A, b)
puis b dans M(B, b).
reste tudier les deux productions concernes par le second principe de remplissage.
Commenons par la production B : elle est insre dans M(B, x) pour tout symbole
dans FOLLOW(B), soit dans les trois cases M(B, a), M(B, b), M(B, c). De mme, la partie
droite de A B doit tre insre dans toutes les cases M(A, x), avec x dans FOLLOW(A),
soit dans les trois cases : M(A, a), M(A, b), M(A, c).
On parvient donc la configuration du tableau 8.9.

a b c
S ABS ABS ABS
c
A a B B
B
B
b

Table 8.9 Table danalyse prdictive pour la grammaire 8.6

Lexamen du tableau 8.9 se rvle instructif pour comprendre comment analyser les mots
avec cette grammaire. Supposons, en effet, que lon souhaite analyser le mot bc. Le proto-mot
courant tant initialis avec un S, nous consultons la case M(S, b) du tableau 8.9, qui nous

108
8.1. ANALYSEURS LL

prescrit de rcrire S en ABS. Comme nous navons vrifi aucun symbole dans lopration,
nous consultons maintenant la case M(A, b). De nouveau la rponse est sans ambigut :
appliquer A B. ce stade, les choses se compliquent : lopration suivante demande
de consulter la case M(B, b), qui contient deux productions possibles : B b et B .
Si, toutefois, on choisit la premire, on aboutit rapidement un succs de lanalyse : b
tant appari, il sagit maintenant dapparier le c, partir du proto-mot courant : BS. Aprs
consultation de la case M(B, c), on limine le B ; choisir S c dans la case M(S, c) achve
lanalyse.
Pour aboutir ce rsultat, il a toutefois fallu faire des choix, car le tableau 8.9 ne permet pas
de mettre en uvre une analyse dterministe. Ceci est d lambigut de la grammaire 8.6,
dans laquelle plusieurs (en fait une infinit de) drivations gauches diffrentes sont possibles
pour le mot c (comme pourra sen persuader le lecteur en en listant quelques-unes).

8.1.5 Analyseurs LL(1)

Nous sommes finalement en mesure de dfinir les grammaires LL(1) et de donner un algo-
rithme pour les analyser.
Dfinition 8.5 (Grammaire LL(1)). Une grammaire hors-contexte est LL(1) si et seulement si sa
table danalyse prdictive M() contient au plus une squence de (N )? pour chaque valeur (A, a)
de N .

Toutes les grammaires ne sont pas LL(1), comme nous lavons vu la section prcdente en
tudiant une grammaire ambigu. Il est, en revanche, vrai que toute grammaire LL(1) est
non ambigu. La dmonstration est laisse en exercice.
Une grammaire LL(1) est susceptible dtre analyse par algorithme 8.10 (on suppose que la
construction de M est une donne de lalgorithme).

8.1.6 LL(1)-isation

Les grammaires LL(1) sont particulirement sympathiques, puisquelles se prtent une


analyse dterministe fonde sur lexploitation dune table de prdiction. Bien que toutes les
grammaires ne soient pas aussi accommodantes, il est instructif dtudier des transformations
simples qui permettent de se rapprocher du cas LL(1). Un premier procd de transformation
consiste supprimer les rcursions gauches (directes et indirectes) de la grammaire : cette
transformation est implicite dans le processus de mise sous forme normale de Greibach et est
dcrit la section 9.2.2. Une seconde transformation bien utile consiste factoriser gauche la
grammaire.
Pour mesurer lutilit de cette dmarche, considrons la grammaire 8.11.
Ce fragment de grammaire nest pas conforme la dfinition donne pour les grammaires
LL(1), puisquil apparat clairement que le mot-cl if slectionne deux productions possibles
pour S. Il est toutefois possible de transformer la grammaire pour se dbarrasser de cette
configuration : il suffit ici de factoriser le plus long prfixe commun aux deux parties droites,
et dintroduire un nouveau terminal S0 . Ceci conduit la grammaire 8.12.

109
CHAPITRE 8. INTRODUCTION AUX ANALYSEURS DTERMINISTES

// le mot en entre est: u = u1 . . . un


// initialisation
matched := ;
tomatch := u1 ;
left := S;
i := 1;
while left , i |u| do
left = X;
if X N then
if unde f ined(M(X, tomatch)) then return false ;
:= M(X, tomatch);
// Remplace A par
left :=
else
// le symbole de tte est terminal: on apparie simplement
if X , ui then return false ;
matched := matched ui ;
tomatch := ui+1 ;
i := i + 1
if left = tomatch = then
return true
else
return false
Algorithme 8.10 Analyseur pour grammaire LL(1)

S if B then S
S if B then S else S
...
Grammaire 8.11 Une grammaire non-LL(1) pour if -then-else

Le mot cl if slectionne maintenant une production unique ; cest aussi vrai pour else. Le
fragment dcrit dans la grammaire 8.12 devient alors susceptible dtre analys dterminis-
tiquement (vrifiez-le en examinant comment appliquer coup sr S0 ).
Ce procd se gnralise au travers de la construction utilise pour dmontrer le thorme
suivant :

Thorme 8.6 (Factorisation gauche). Soit G = (N, , S, P) une grammaire hors-contexte, alors
il existe une grammaire quivalente G0 telle que si A X1 Xk et A Y1 Yl sont deux
A-productions de G0 , alors X1 , Y1 .

S if B then S S0
S0 else S |
...
Grammaire 8.12 Une grammaire factorise gauche pour if -then-else

110
8.1. ANALYSEURS LL

Dmonstration. La preuve repose sur le procd de transformation suivant. Supposons quil


existe une srie de A-productions dont les parties droites dbutent toutes par le mme sym-
bole X. En remplaant toutes les productions A Xi par lensemble {A XA0 , A0 i },
o A0 est un nouveau symbole non-terminal introduit pour la circonstance, on obtient une
grammaire quivalente G. Si, lissue de cette transformation, il reste des A0 -productions
partageant un prfixe commun, il est possible de rpter cette procdure, et de litrer jusqu
ce quune telle configuration nexiste plus. Ceci arrivera au bout dun nombre fini ditra-
tions, puisque chaque transformation a le double effet de rduire le nombre de productions
potentiellement problmatiques, ainsi que de rduire la longueur des parties droites. 

8.1.7 Quelques complments

Dtection des erreurs

Le rattrapage sur erreur La dtection derreur, dans un analyseur LL(1), correspond une
configuration (non-terminal A le plus gauche, symbole a apparier) pour laquelle la table
danalyse ne prescrit aucune action. Le message donner lutilisateur est alors clair :
Arriv au symbole numro X, jai rencontr un a alors que jaurais d avoir . . . (suit
lnumration des symboles tels que M(A, .) est non-vide).
Stopper l lanalyse est toutefois un peu brutal pour lutilisateur, qui, en gnral, souhaite
que lon dtecte en une seule passe toutes les erreurs de syntaxe. Deux options sont alors
possibles pour continuer lanalyse :
sil nexiste quun seul b tel que M(A, b) est non-vide, on peut faire comme si on venait
de voir un b, et continuer. Cette stratgie de rcupration derreur par insertion com-
porte toutefois un risque : celui de dclencher une cascade dinsertions, qui pourraient
empcher lanalyseur de terminer correctement ;
lalternative consisterait dtruire le a et tous les symboles qui le suivent jusqu
trouver un symbole pour lequel une action est possible. Cette mthode est de loin
prfrable, puisquelle conduit une procdure qui est assure de se terminer. Pour
obtenir un dispositif de rattrapage plus robuste, il peut tre souhaitable dabandonner
compltement tout espoir dtendre le A et de le faire disparatre : lanalyse reprend
alors lorsque lon trouve, dans le flux dentre, un symbole dans FOLLOW(A).

Les grammaires LL(k) Nous lavons vu, toutes les grammaires ne sont pas LL(1), mme
aprs limination des configurations les plus problmatiques (rcursions gauches...). Ceci
signifie que, pour au moins un couple (A, a), M(A, a) contient plus dune entre, indiquant
que plusieurs prdictions sont en concurrence. Une ide simple pour lever lindtermination
concernant la bonne expansion de A consiste augmenter le regard avant. Cette intuition se
formalise travers la notion de grammaire LL(k) et danalyseur LL(k) : pour ces grammaires,
il suffit dun regard avant de k symboles pour choisir sans hsitation la A-production
appliquer ; les tables danalyse correspondantes croisent alors des non-terminaux (en ligne)
avec des mots de longueur k (en colonne). Il est important de raliser que ce procd ne
permet pas de traiter toutes les grammaires : cest videmment vrai pour les grammaires

111
CHAPITRE 8. INTRODUCTION AUX ANALYSEURS DTERMINISTES

ambigus ; mais il existe galement des grammaires non-ambigus, pour lesquelles aucun
regard avant de taille born ne permettra une analyse descendante dterministe.
Ce procd de gnralisation des analyseurs descendants, bien que fournissant des rsultats
thoriques importants, reste dune donc utilit pratique modeste, surtout si on compare cette
famille danalyseurs lautre grande famille danalyseurs dterministes, les analyseurs de
type LR, qui font lobjet de la section suivante.

8.1.8 Un exemple complet comment

Nous dtaillons dans cette section les constructions dun analyseur LL pour la grammaire 8.5,
qui est rappele dans la grammaire 8.13, sous une forme lgrement modifie. Laxiome est
la variable Z.

Z S#
S S+T |T
T TF|F
F (S) | D
D 1|2
Grammaire 8.13 Une grammaire (simplifie) pour les expressions arithmtiques

La premire tape de la construction consiste se dbarrasser des productions rcursives


gauche, puis factoriser gauche la grammaire rsultante. Au terme de ces deux tapes, on
aboutit la grammaire 8.14, qui comprend deux nouvelles variables rcursives droite, S0 et
T0 , et dont nous allons montrer quelle est effectivement LL(1).

Z S#
S TS0
S0 +TS0 |
T FT0
T0 FT0 |
F (S) | D
D 1|2
Grammaire 8.14 Une grammaire LL pour les expressions arithmtiques

Le calcul de NULL permet didentifier S0 et T0 comme les seules variables drivant le mot vide.
Les tapes du calcul des ensembles FIRST et FOLLOW sont dtailles dans le tableau 8.15.
Il est alors possible de dterminer la table danalyse prdictive, reprsente dans le ta-
bleau 8.16. Cette table est sans conflit, puisque chaque case contient au plus une production.
Cette table permet effectivement danalyser dterministiquement des expressions arithm-
tiques simples, comme le montre la trace dexcution du tableau 8.17.

112
8.2. ANALYSEURS LR

FIRST FOLLOW
It. 1 2 3 4 5 It. 0 1 2
Z ( (12 Z
S ( (12 (12 S #) #) #)
S0 + + + + + S0 #) #)
T ( (12 (12 (12 T + +#) +#)
T0 * * * * * T0 +#) +#)
F ( (12 (12 (12 (12 F * *+#) *+#)
D 12 12 12 12 12 D *+#) *+#)

Table 8.15 Calcul de FIRST et FOLLOW

# + ( ) 1 2
Z Z S# Z S# Z S#
S S TS0 S TS0 S TS0
S0 S0 S0 + TS0 S0
T T FT0 T FT0 T FT0
T T
0 0 T
0 0
T FT 0 T
0

F T (S) TD TD
D D1 D2

Table 8.16 Table danalyse prdictive pour la grammaire de larithmtique

8.2 Analyseurs LR

8.2.1 Concepts

Comme voqu la section 7.2, les analyseurs ascendants cherchent rcrire le mot ana-
lyser afin de se ramener, par des rductions successives, laxiome de la grammaire. Les
bifurcations dans le graphe de recherche correspondent alors aux alternatives suivantes :
(i) la partie droite dune production A est trouve dans le proto-mot courant ; on
choisit de remplacer par A pour construire un nouveau proto-mot et donc dappliquer
une rduction.
(ii) on poursuit lexamen du proto-mot courant en considrant un autre facteur 0 , obtenu,
par exemple, en tendant par la droite. Cette action correspond un dcalage de
lentre.
Afin de rationaliser lexploration du graphe de recherche correspondant la mise en uvre de
cette dmarche, commenons par dcider dune stratgie dexamen du proto-mot courant :
linstar de ce que nous avons mis en uvre dans lalgorithme 7.1, nous lexaminerons
toujours depuis la gauche vers la droite. Si lon note le proto-mot courant, factoris en
= , o est la partie dj examine, lalternative prcdente se rcrit selon :
possde un suffixe correspondant la partie droite dune rgle : rduction et
dveloppement dun nouveau proto-mot.
est tendu par la droite par dcalage dun nouveau terminal.

113
CHAPITRE 8. INTRODUCTION AUX ANALYSEURS DTERMINISTES

Pile Symbole Pile (suite) Symbole


Z 2 2*(1TS)TS# +
S# 2 2*(1S)TS# +
TS# 2 2*(1+TS)TS# +
FTS# 2 2*(1+FTS)TS# +
DTS# 2 2*(1+DTS)TS# +
2TS# * 2*(1+2TS)TS# )
2*FTS# ( 2*(1+2S)TS# )
2*(S)TS# 1 2*(1+2)TS# #
2*(TS)TS# 1 2*(1+2)S# #
2*(FTS)TS# 1 2*(1+2)# #
2*(DTS)TS# 1 succs

Table 8.17 Trace de lanalyse dterministe de 2 (1 + 2)

Cette stratgie conduit la construction de drivations droites de lentre courante. Pour vous
en convaincre, remarquez que le suffixe du proto-mot courant nest jamais modifi : il ny
a toujours que des terminaux droite du symbole rcrit, ce qui est conforme la dfinition
dune drivation droite.
Illustrons ce fait en considrant la grammaire 8.18.

S AB
A aA | b
B bB | a
Grammaire 8.18 Une grammaire pour a? bb? a

Soit alors u = abba ; une analyse ascendante de ce mot est reproduite au tableau 8.19.
En considrant les rductions opres, on obtient la drivation : S AB AbB Aba
G G G G
aAba abba, qui est effectivement une drivation droite. On note galement quon a introduit
G
un troisime type daction de lanalyseur, consistant accepter lentre comme un mot de
la grammaire. Il existe enfin un quatrime type daction, non reprsent ici, consistant
diagnostiquer une situation dchec de lanalyse.
Dernire remarque concernant cette trace : les diffrentes transformations possibles de via
les actions de rduction et de dcalage nagissent que sur les suffixes de . Ceci suggre
dimplanter sous la forme dune pile, sur laquelle saccumulent (puis se rduisent) pro-
gressivement les symboles de u. Si lon adopte ce point de vue, une pile correspondant la
trace du tableau 8.19 passerait par les tats successifs suivants : a, ab, aA, A, Ab, Aba, AbB, AB,
S. Bien naturellement, cette implantation demanderait galement de conserver un pointeur
vers la position courante dans u, afin de savoir quel symbole empiler. Dans la suite, nous
ferons lhypothse que est effectivement implant sous la forme dune pile.
Comment procder pour rendre ce processus dterministe ? Cherchons des lments de
rponse dans la trace danalyse prsente dans le tableau 8.19. Ce processus contient quelques

114
8.2. ANALYSEURS LR

Action
abba abba dcaler
abba a bba dcaler
abba ab ba rduire par A b
aAba aA ba rduire par A aA
Aba A ba dcaler
Aba Ab a dcaler
Aba Aba rduire par B a
AbB AbB rduire par B bB
AB AB rduire par S AB
S fin : accepter lentre

Table 8.19 Analyse ascendante de u = abba

actions dterministes, comme la premire opration de dcalage : lorsquen effet (la pile) ne
contient aucun suffixe correspondant une partie droite de production, dcaler est lunique
action possible.
De manire duale, lorsque est vide, dcaler est impossible : il faut ncessairement rduire,
lorsque cela est encore possible : cest, par exemple, ce qui est fait durant la dernire rduction.
Un premier type de choix correspond au second dcalage : = a est ce moment gal une
partie droite de production (B a), pourtant on choisit ici de dcaler (ce choix est presque
toujours possible) plutt que de rduire. Notons que la dcision prise ici est la (seule) bonne
dcision : rduire prmaturment aurait conduit positionner un B en tte de , conduisant
lanalyse dans une impasse : B napparaissant en tte daucune partie droite, il aurait t
impossible de le rduire ultrieurement. Un second type de configuration (non reprsente
ici) est susceptible de produire du non-dterminisme : il correspond au cas o lon trouve
en queue de deux parties droites de productions : dans ce cas, il faudra choisir entre deux
rductions concurrentes.
Rsumons-nous : nous voudrions, de proche en proche, et par simple consultation du sommet
de la pile, tre en mesure de dcider dterministiquement si laction effectuer est un dcalage
ou bien une rduction (et dans ce cas quelle est la production utiliser), ou bien encore si
lon se trouve dans une situation derreur. Une condition suffisante serait que, pour chaque
production p, on puisse dcrire lensemble Lp des configurations de la pile pour lesquelles
une rduction par p est requise ; et que, pour deux productions p1 et p2 telles que p1 , p2 , Lp1
et Lp2 soient toujours disjoints. Voyons quelle(s) condition(s) cela est possible.

8.2.2 Analyseurs LR(0)

Pour dbuter, formalisons la notion de contexte LR(0) dune production.

Dfinition 8.7 (Contexte LR(0)). Soit G une grammaire hors-contexte, et p = (A ) une

115
CHAPITRE 8. INTRODUCTION AUX ANALYSEURS DTERMINISTES

production de G, on appelle contexte LR(0) de p le langage LA dfini par :

?
LA = { = ( N)? tq. v ? , S Av v}
D D

En dautres termes, tout mot de LA contient un suffixe et est tel quil existe une
rduction dun certain v en S qui dbute par la rduction de en A. Chaque fois quun tel
mot apparat dans la pile dun analyseur ascendant gauche-droit, il est utile doprer la
rduction A ; linverse, si lon trouve dans la pile un mot absent de LA , alors cette
rduction ne doit pas tre considre, mme si ce mot se termine par .
Examinons maintenant de nouveau la grammaire 8.18 et essayons de calculer les langages Lp
pour chacune des productions. Le cas de la premire production est clair : il faut imprative-
ment rduire lorsque la pile contient AB, et cest l le seul cas possible. On dduit directement
que LSAB = {AB}. Considrons maintenant A aA : la rduction peut survenir quel que
soit le nombre de a prsents dans la pile. En revanche, si la pile contient un symbole diffrent
de a, cest quune erreur aura t commise. En effet :
une pile contenant une squence baA ne pourra que se rduire en AA, dont on ne sait
plus que faire ; ceci proscrit galement les piles contenant plus dun A, qui aboutissent
pareillement des configurations dchec ;
une pile contenant une squence B . . . A ne pourra que se rduire en BA, dont on ne sait
non plus comment le transformer.
En consquence, on a : LAaA = aa? A. Des considrations similaires nous amnent conclure
que :
LAb = a? b ;
LBbB = Abb? B ;
LBa = Ab? a ;
Chacun des ensembles Lp se dcrivant par une expression rationnelle, on dduit que len-
semble des Lp se reprsente sur lautomate 8.20, qui ralise lunion des langages Lp . Vous
noterez de plus que (i) lalphabet dentre de cet automate contient la fois des symboles
terminaux et non-terminaux de la grammaire ; (ii) les tats finaux de lautomate 8.20 sont
associs aux productions correspondantes ; (iii) toute situation dchec dans lautomate cor-
respond un chec de lanalyse : en effet, ces configurations sont celles o la pile contient
un mot dont lextension ne peut aboutir aucune rduction : il est alors vain de continuer
lanalyse.
Comment utiliser cet automate ? Une approche nave consiste mettre en uvre la procdure
suivante : partant de ltat initial qi = q0 et dune pile vide on applique des dcalages jusqu
atteindre un tat final q. On rduit ensuite la pile selon la production associe q, donnant lieu
une nouvelle pile qui induit un repositionnement dans ltat qi = ? (q0 , ) de lautomate.
La procdure est itre jusqu puisement simultan de la pile et de u. Cette procdure est
formalise travers lalgorithme 8.21.
Lalgorithme 8.21 est inefficace : en effet, chaque rduction, on se repositionne ltat initial
de lautomate, perdant ainsi le bnfice de lanalyse des symboles en tte de la pile. Une
meilleure implantation consiste mmoriser, pour chaque symbole de la pile, ltat q atteint

116
8.2. ANALYSEURS LR

A aA
2

a A

b Ab
1 3
a b b

B B bB
0 5 6
A b a
S
a Ba
4 7

9 B

S AB
8

Automate 8.20 Lautomate des rductions licites

// Initialisation.
:= // Initialisation de la pile.
q := q0 // Se positionner dans ltat initial.
i := j := 0;
while i |u| do
while j || do
j := j + 1;
q := (q, j )
while q < F do
:= ui // Empilage de ui
if (q, ui ) existe then q := (q, ui ) else return false ;
i := i + 1
// Rduction de p = A .
:= 1 A ;
j := 0;
q := q0
if = S q F then return true else return false;
Algorithme 8.21 Reconnaissance ascendante guide par un automate A = (
N, Q, q0 , F, ). Version 1

117
CHAPITRE 8. INTRODUCTION AUX ANALYSEURS DTERMINISTES

// Initialisations.
:= (, q0 ) // Initialisation de la pile.
q := q0 // Se positionner dans ltat initial.
i := 0;
while i |u| do
while q < F do
if (q, ui ) existe then
q := (q, ui ) // Progression dans A.
push(, (ui , q)) // Empilage de (ui , q).
i := i + 1
else
return false
// On atteint un tat final: rduction de p = A .
j := 0;
// Dpilage de .
while j < || do
pop();
j := j + 1
// (x, q) est sur le sommet de la pile: repositionnement.
push(, (A, (q, A)));
q := (q, A);
if = (S, q) q F then return true else return false ;
Algorithme 8.22 Reconnaissance ascendante guide par un automate A = (
N, Q, q0 , F, ). Version 2

dans A. la suite dune rduction, on peut alors directement se positionner sur q pour
poursuivre lanalyse. Cette amlioration est mise en uvre dans lalgorithme 8.22.
Notez, pour finir, que lon effectue en fait deux sortes de transitions dans A : celles qui
sont effectues directement lissue dun dcalage et qui impliquent une extension de la
pile ; et celles qui sont effectues lissue dune rduction et qui consistent simplement
un repositionnement ne ncessitant pas de nouveau dcalage. Ces deux actions sont parfois
distingues, lune sous le nom de dcalage (shift), lautre sous le nom de goto.
De lautomate prcdent, se dduit mcaniquement une table danalyse (dite LR(0)), donne
pour lautomate 8.20 au tableau 8.23. Cette table rsume les diffrentes actions effectuer en
fonction de ltat courant de lautomate.
Le tableau 8.23 se consulte de la faon suivante. Pour chaque tat, la colonne Action
dsigne lunique type daction effectuer :
s
effectuer un dcalage. Lire le symbole en tte de pile, si cest un x, consulter la colonne
correspondante dans le groupe Shift , et transiter dans ltat correspondant. Attention :
le dcalage a bien lieu de manire inconditionnelle, cest--dire indpendamment de
la valeur du symbole empil ; en revanche, cette valeur dtermine la transition de
lautomate exercer.
rA

118
8.2. ANALYSEURS LR

Shift Goto
tat Action a b A B
0 s 1 3 4
1 s 1 3 2
2 r A aA
3 rAb
4 s 7 5 8
5 s 7 5 6
6 r B bB
7 rBa
8 r S AB

Table 8.23 Une table danalyse LR(0)

rduire la pile selon A . lissue de la rduction, le A sera pos sur la pile. Transiter
vers ltat correspondant A dans le groupe Goto et ltat au sommet de la pile
aprs en avoir retir .
Toutes les autres configurations (qui correspondent aux cases vides de la table) sont des
situations derreur. Pour distinguer, dans la table, les situations o lanalyse se termine avec
succs, il est courant dutiliser la transformation suivante :
on ajoute un nouveau symbole terminal reprsentant la fin du texte, par exemple # ;
on transforme G en G0 en ajoutant un nouvel axiome Z et une nouvelle production
Z S#, o S est laxiome de G.
on transforme lentre analyser en u# ;
ltat (final) correspondant la rduction Z S# est (le seul) tat dacceptation, puis-
quil correspond la fois la fin de lexamen de u (# est empil) et la prsence du
symbole S en tte de la pile.
Il apparat finalement, qu laide du tableau 8.23, on saura analyser la grammaire 8.18
de manire dterministe et donc avec une complexit linaire. Vous pouvez vrifier cette
affirmation en tudiant le fonctionnement de lanalyseur pour les entres u = ba (succs),
u = ab (chec), u = abba (succs).
Deux questions se posent alors : (i) peut-on, pour toute grammaire, construire un tel auto-
mate ? (ii) comment construire lautomate partir de la grammaire G ? La rponse (i) est
non : il existe des grammaires (en particulier les grammaires ambigus) qui rsistent toute
analyse dterministe. Il est toutefois possible de chercher se rapprocher de cette situation,
comme nous le verrons la section 8.2.3. Dans lintervalle, il est instructif de rflchir la
manire de construire automatiquement lautomate danalyse A.
Lintuition de la construction se fonde sur les remarques suivantes. Initialement, on dispose
de u, non encore analys, quon aimerait pouvoir rduire en S, par le biais dune srie non-
encore dtermine de rductions, mais qui sachvera ncessairement par une rduction de
type S .
Supposons, pour linstant, quil nexiste quune seule S-production : S X1 . . . Xk : le but
original de lanalyse aboutir une pile dont S est lunique symbole en ayant dcal tous les

119
CHAPITRE 8. INTRODUCTION AUX ANALYSEURS DTERMINISTES

symboles de u se reformule alors en : aboutir une pile gale X1 . . . Xk en ayant dcal


tous les symboles de u . Ce nouveau but se dcompose naturellement en une srie dtapes
qui vont devoir tre accomplies squentiellement : dabord parvenir une configuration o
X1 est au fond de la pile, puis faire que X2 soit empil juste au-dessus de X1 ...
Conserver la trace de cette srie de buts suggre dinsrer dans lautomate danalyse une
branche correspondant la production S X1 . . . Xk , qui sachvera donc sur un tat fi-
nal correspondant la rduction de X1 . . . Xk en S. Une telle branche est reprsente la
figure 8.24.

X1 X2 Xk S X1 . . . Xk
0 1 2 k

Figure 8.24 Une branche de lautomate

Chaque tat le long de cette branche correspond la rsolution dun sous-but supplmentaire,
la transition Xi annonant lempilage de Xi , et dclenchant la recherche dun moyen dempiler
Xi+1 . Pour formaliser cette ide, nous introduisons le concept de production (ou rgle) pointe 3 .
Dfinition 8.8 (Production pointe). Une production pointe dune grammaire hors-contexte G
est un triplet (A, , ) de N (N )? (N )? , avec A = une production de G. Une
production pointe est note avec un point : A .

Une production pointe exprime la rsolution partielle dun but : A exprime que la
rsolution du but empiler A en terminant par la rduction A a t partiellement
accomplie, en particulier que a dj t empil et quil reste encore empiler les symboles de
. Chaque tat de la branche de lautomate correspondant la production A sidentifie
ainsi une production pointe particulire, les tats initiaux et finaux de cette branche
correspondant respectivement : A et A .
Retournons notre problme original, et considrons maintenant le premier des sous-buts :
empiler X1 au fond de la pile . Deux cas de figure sont possibles :
soit X1 est symbole terminal : le seul moyen de lempiler consiste effectuer une
opration de dcalage, en cherchant un tel symbole en tte de la partie non encore
analyse de lentre courante.
soit X1 est un non-terminal : son insertion dans la pile rsulte ncessairement dune
srie de rductions, dont la dernire tape concerne une X1 -production : X1 Y1 . . . Yn .
De nouveau, le but observer X1 au fond de la pile se dcompose en une srie de sous-
buts, donnant naissance une nouvelle branche de lautomate pour le mot Y1 . . . Yn .
Comment relier ces deux branches ? Tout simplement par une transition entre les deux
tats initiaux, indiquant que lempilage de X1 se rsoudra en commenant lempilage
de Y1 (voir la figure 8.25). Sil existe plusieurs X1 -productions, on aura une branche (et
une transition ) par production.
Ce procd se gnralise : chaque fois quune branche porte une transition (q, X) = r,
avec X un non-terminal, il faudra ajouter une transition entre q et tous les tats initiaux
des branches correspondants aux X-productions.
3. On trouve galement le terme ditem et en anglais de dotted rule.

120
8.2. ANALYSEURS LR

X1 X2 Xk S X1 X2 . . . Xk
S X1 X2 . . . Xk S X1 X2 . . . Xk


Y1 Y2 Yn X1 Y1 Y2 . . . Yn
X1 Y1 Y2 . . . Yn X1 Y1 Y2 . . . Yn

Figure 8.25 Deux branches de lautomate

De ces remarques dcoule un procd systmatique pour construire un -NFA (N, Q, q0 , F, )


permettant de guider une analyse ascendante partir dune grammaire G = (, N, Z, P), telle
que Z est non-rcursif et ne figure en partie gauche que dans lunique rgle Z :
Q = {[A ] avec A P}
q0 = [Z ]
F = {[A ] avec A P} ; chaque tat final est associe une production A
q = [A X] Q, (q, X) = [A X ]
q = [A B] Q tq. B N, q0 = [B ], (q, ) = q0 .
Le thorme suivant, non dmontr ici, garantit que ce procd de construction permet
effectivement didentifier les contextes LR(0) des productions.
Thorme 8.9. Soit A lautomate fini driv de G par la construction prcdente, alors : ? (q0 , ) =
[A ] si et seulement si :
(i) , =
(ii) LA

Ce rsultat assure, en particulier, que lorsque lon atteint un tat final de lautomate (pour
= ), la pile contient effectivement un mot appartenant au contexte LR(0) de la production
associe ltat final atteint.
Il est naturellement possible de dterminiser cet automate, en appliquant les algorithmes
de suppression des transitions spontanes (voir le thorme 4.13), puis la construction des
sous-ensembles dcrite dans le thorme 4.9 ; on prendra soin de propager lors de ces trans-
formations linformation de rduction associe aux tats finaux des branches. En clair, si un
tat q du dterminis contient une production pointe originale de type A , alors q sera
un tat (final) dans lequel cette rduction est possible. Le lecteur est vivement encourag
entreprendre cette dmarche et vrifier quil retrouve bien, en partant de la grammaire 8.18,
un automate ressemblant fortement lautomate 8.20.
Une construction directe de lautomate LR(0) consiste construire la vole les ensembles
ditems qui dfinissent les tats de lautomate dterminis, ainsi que les transitions associes.
Soit I un ensemble ditems, on dfinit tout dabord la clture de I comme :
Dfinition 8.10 (Clture dun ensemble ditems LR(0)). La clture cl(I) dun ensemble I ditems
LR(0) est le plus petit ensemble vrifiant :
I cl(I)

121
CHAPITRE 8. INTRODUCTION AUX ANALYSEURS DTERMINISTES

si [X Y] cl(I), alors Y , [Y ] cl(I)

Lautomate LR(0) est alors dfini par :


q0 = cl([z S#] est ltat initial
I, a , (I, a) = cl{[X a ], avec [X a] I}
I, X N, (I, X) = cl{[X X ], avec [X X] I}
F = {I, [X ] I}
On dduit finalement de cet automate dterministe, par le procd utilis pour construire le
tableau 8.23, la table danalyse LR(0).
Dfinition 8.11 (Grammaire LR(0)). Une grammaire hors-contexte est LR(0) 4 si sa table T()
danalyse LR(0) est telle que : pour toute ligne i (correspondant un tat de lautomate), soit il existe
x N tel que T(i, x) est non-vide et T(i, ) est vide ; soit T(i, ) est non-vide et contient une
rduction unique.

Une grammaire LR(0) peut tre analyse de manire dterministe. La dfinition dune gram-
maire LR(0) correspond des contraintes qui sont souvent, dans la pratique, trop fortes pour
des grammaires relles , pour lesquelles la construction de la table LR(0) aboutit des
conflits. Le premier type de configuration problmatique correspond une indtermination
entre dcaler et rduire (conflit shift/reduce) ; le second type correspond une indtermina-
tion sur la rduction appliquer ; on parle alors de conflit reduce/reduce. Vous noterez, en
revanche, quil ny a jamais de conflit shift/shift. Pourquoi ?
Comme pour les analyseurs descendants, il est possible de lever certaines indterminations
en sautorisant un regard en avant sur lentre courante ; les actions de lanalyseur seront alors
conditionnes non seulement par ltat courant de lautomate danalyse, mais galement par
les symboles non-analyss. Ces analyseurs font lobjet de la section qui suit.

8.2.3 Analyseurs SLR(1), LR(1), LR(k)...

Regarder vers lavant

Commenons par tudier le cas le plus simple, celui o les conflits peuvent tre rsolus avec
un regard avant de 1. Cest, par exemple, le cas de la grammaire 8.26 :

S E# (1)
E T+E|T (2), (3)
Tx (4)

Grammaire 8.26 Une grammaire non-LR(0)

Considrons une entre telle que x + x + x : sans avoir besoin de construire la table LR(0),
il apparat quaprs avoir empil le premier x, puis lavoir rduit en T, par T x, deux
alternatives vont soffrir lanalyseur :
4. Un L pour left-to-right, un R pour rightmost derivation, un 0 pour 0 lookahead ; en effet, les dcisions
(dcalage vs. rduction) sont toujours prises tant uniquement donn ltat courant (le sommet de la pile).

122
8.2. ANALYSEURS LR

soit immdiatement rduire T en E


soit oprer un dcalage et continuer de prparer une rduction par E T + E.
Il apparat pourtant que + ne peut jamais suivre E dans une drivation russie : vous pourrez
le vrifier en construisant des drivations droites de cette grammaire. Cette observation anti-
cipe du prochain symbole empiler suffit, dans le cas prsent, restaurer le dterminisme.
Comment traduire cette intuition dans la procdure de construction de lanalyseur ?
La manire la plus simple de procder consiste introduire des conditions supplmentaires
aux oprations de rduction : dans les analyseurs LR(0), celles-ci sappliquent de manire
inconditionnelle, cest--dire quel que soit le prochain symbole apparaissant dans lentre
courante (le regard avant) : preuve, les actions de rduction apparaissent dans la table
danalyse dans une colonne spare. Pourtant, partant dune configuration dans laquelle
la pile est et le regard avant est a, rduire par X aboutit une configuration dans
laquelle la pile vaut X. Si lanalyse devait se poursuivre avec succs, on aurait alors construit
?
une drivation droite S Xa... a, dans laquelle la lettre a suit directement X. En
consquence, la rduction ne peut dboucher sur un succs que si a est un successeur de X,
information qui est donne dans lensemble FOLLOW(X) (cf. la section 8.1.3).
Ajouter cette contrainte supplmentaire la procdure de construction de la table danalyse
consiste conditionner les actions de rduction X par lexistence dun regard avant
appartenant lensemble FOLLOW(X) : elles figureront dans la table danalyse dans les
colonnes dont len-tte est un terminal vrifiant cette condition.
Si cette restriction permet daboutir une table ne contant quune action par cellule, alors on
dit que la grammaire est SLR(1) (pour simple LR, quand on sautorise un regard avant de 1).
Illustrons cette nouvelle procdure de la construction de la table danalyse. Les actions de
lautomate LR(0) sont donnes dans le tableau 8.27a, dans laquelle on observe un conflit
dcaler/rduire dans ltat 2. Le calcul des ensembles FOLLOW aboutit FOLLOW(S) = ,
FOLLOW(E) = {#}, FOLLOW(T) = {#, +}, ce qui permet de prciser les conditions dappli-
cation des rductions, donnant lieu la table danalyse reproduite dans le tableau 8.27b. La
grammaire est donc SLR(1).
En guise dapplication, montrez que la grammaire 8.5 est SLR(1). On introduira pour loc-
casion une nouvelle production Z S# ; vous pourrez galement considrer D comme un
terminal valant pour nimporte quel nombre entier.

LR(1)

Si cette procdure choue, ltape suivante consiste modifier la mthode de construction


de lautomate LR(0) en choisissant comme ensemble dtats toutes les paires 5 constitues
dune production pointe et dun terminal. On note ces tats [A , a]. La construction
de lautomate danalyse LR (ici LR(1)) (N , Q, q0 , F, ) se droule alors comme suit (on
suppose toujours que laxiome Z nest pas rcursif et napparat que dans une seule rgle) :
Q = {[A , a] avec A P et a }

5. En fait, les prendre toutes est un peu excessif, comme il apparatra bientt.

123
CHAPITRE 8. INTRODUCTION AUX ANALYSEURS DTERMINISTES

Shift Goto Action Goto


tat Action x + # E T tat x + # E T
0 s 3 1 2 0 s3 g1 g2
1 s 6 1 s6
2 s/r3 4 2 s4 r3
3 r4 3 r4 r4
4 s 3 5 2 4 s3 g5 g2
5 r2 5 r2
6 acc 6 acc
(a) Table danalyse LR(0) avec conflit (tat 2) (b) Table danalyse SLR(1) sans conflit

Table 8.27 Tables danalyse LR(0) et SLR(1) de la grammaire 8.26

Les numros de rgles associs aux rductions correspondent lordre dans lesquelles elles
apparaissent dans la table ci-dessus (1 pour S E#...). On notera que la signification des
en-ttes de colonne change lgrement entre les deux reprsentations : dans la table LR(0),
les actions sont effectues sans regard avant ; les labels de colonnes indiquent des transitions ;
dans la table SLR, les actions rduire et dcaler sont effectues aprs consultation du
regard avant. Ltat 6 est un tat dacceptation ; par la convention selon laquelle un fichier se
termine par une suite infinie de #, cette action est reporte en colonne # : en quelque sorte
FOLLOW(S) = {#}. Par consquent, lire un # dans ltat 1 de la table SLR conduira bien
accepter lentre (a).

q0 = [Z , ?], o ? est un symbole joker qui vaut pour nimporte quel symbole
terminal ;
F = {[A , a], avec A P} ; chaque tat final est associe la production A ,
correspondant la rduction oprer ;
q = [A X, a] Q, (q, X) = [A X , a] ; comme prcdemment, ces
transitions signifient la progression de la rsolution du but courant par empilement de
X;
q = [A B, a] Q tq. B N, q0 = [B , b] tq. b FIRST(a), (q, ) = q0 .
La condition supplmentaire b FIRST(a) (voir la section 8.1.3) introduit une informa-
tion de dsambigusation qui permet de mieux caractriser les rductions oprer. En
particulier, dans le cas LR(1), on espre quen prenant en compte la valeur du premier
symbole drivable depuis a , il sera possible de slectionner la bonne action effectuer
en cas de conflit sur B.
Pour illustrer ce point, considrons de nouveau la grammaire 8.26. Ltat initial de lau-
tomate LR(1) correspondant est [S E#] ; lequel a deux transitions , correspondant
aux deux faons dempiler un E, atteignant respectivement les tats q1 = [E T + E, #]
et q2 = [E T, #]. Ces deux tats se distinguent par leurs transitions sortantes : dans
le cas de q1 , vers [T x, +] ; dans le cas de q2 , vers [T x, #]. lissue de la
rduction dun x en T, le regard avant permet de dcider sans ambigut de laction :
si cest un +, il faut continuer de chercher une rduction E T + E ; si cest un #, il
faut rduire selon E T.

124
8.2. ANALYSEURS LR

Construction pas--pas de lautomate danalyse

La construction de la table danalyse partir de lautomate se droule comme pour la table


LR(0). Dtaillons-en les principales tapes : aprs construction et dterminisation de lauto-
mate LR(1), on obtient un automate fini dont les tats finaux sont associs des productions
de G. On procde alors comme suit :
pour chaque transition de q vers r tiquete par un terminal a, la case T(q, a) contient la
squence dactions (dcaler, consommer a en tte de la pile, aller en r) ;
pour chaque transition de q vers r tiquete par un non-terminal A, la case T(q, A)
contient la squence dactions (consommer A en tte de la pile, aller en r) ;
pour chaque tat final q = [A , a], la case T(q, a) contient lunique action (rduire
la pile selon A ) : la dcision de rduction (ainsi que la production appliquer) est
maintenant conditionne par la valeur du regard avant associ q.
Lorsque T() ne contient pas de conflit, la grammaire est dite LR(1). Il existe des grammaires
LR(1) ou presque 6 LR(1) pour la majorit des langages informatiques utiliss dans la
pratique.
En revanche, lorsque la table de lanalyseur LR(1) contient des conflits, il est de nouveau
possible de chercher augmenter le regard avant pour rsoudre les conflits restants. Dans
la pratique 7 , toutefois, pour viter la manipulation de tables trop volumineuses, on prf-
rera chercher des moyens ad-hoc de rsoudre les conflits dans les tables LR(1) plutt que
denvisager de construire des tables LR(2) ou plus. Une manire courante de rsoudre les
conflits consiste imposer des priorits via des rgles du type : en prsence dun conflit
shift/reduce, toujours choisir de dcaler 8 ...
En guise dapplication, le lecteur est invit sattaquer la construction de la table LR(1)
pour la grammaire 8.26 et den dduire un analyseur dterministe pour cette grammaire.
Idem pour la grammaire 8.28, qui engendre des mots tels que x = x.

S0 S#
S V=E|E
E V
V E | x
Grammaire 8.28 Une grammaire pour les manipulations de pointeurs

6. Cest--dire que les tables correspondantes sont presque sans conflit.


7. Il existe une autre raison, thorique celle-l, qui justifie quon se limite aux grammaires LR(1) : les gram-
maires LR(1) engendrent tous les langages hors-contexte susceptibles dtre analyss par une procdure dter-
ministe ! En dautres termes, laugmentation du regard avant peut conduire des grammaires plus simples
analyser ; mais ne change rien lexpressivit des grammaires. La situation diffre donc ici de ce quon observe
pour la famille des grammaires LL(k), qui induit une hirarchie stricte de langages.
8. Ce choix de privilgier le dcalage sur la rduction nest pas innocent : en cas dimbrication de structures
concurrentes, il permet de privilgier la structure la plus intrieure, ce qui correspond bien aux attentes des
humains. Cest ainsi que le mot if cond1 then if cond2 then inst1 else inst2 sera plus naturellement
interprt if cond1 then (if cond2 then inst1 else inst2) que if cond1 then (if cond2 then inst1)
else inst2 en laissant simplement la priorit au dcalage du else plutt qu la rduction de if cond2 then
inst1.

125
CHAPITRE 8. INTRODUCTION AUX ANALYSEURS DTERMINISTES

S #
[S S#, ?] [S S #, ?] [S S# , ?]

V = E
[S V = E, #] [S V = E, #] [S V = E, #] [S V = E , #]

E
[S E, #] [S E , #]

V
[E V, #] [E V , #]

V
[E V, =] [E V , =]

x
[V x, #] [V x , #]

x [V
[V x, =] x , =]

* E
[V * E, #] [V * E, #] [V * E , #]

* E
[V * E, =] [V * E, =] [V * E , =]

Pour amliorer la lisibilit, les ne sont pas reprsents. Ltat dacceptation est reprsent
en gras.

Automate 8.29 Les rductions licites pour la grammaire 8.28

Pour vous aider dans votre construction, lautomate 8.29 permet de visualiser leffet de lajout
du regard avant sur la construction de lautomate danalyse.

Une construction directe

Construire manuellement la table danalyse LR est fastidieux, en particulier cause du


passage par un automate non-dterministe, qui implique dutiliser successivement des pro-
cdures de suppression des transitions spontanes, puis de dterminisation. Dans la mesure
o la forme de lautomate est trs strotype, il est possible denvisager la construction di-
recte de lautomate dterminis partir de la grammaire, en saidant des remarques suivantes
(cf. la construction directe de lanalyseur LR(0) supra) :
chaque tat du dterminis est un ensemble dlments de la forme [production pointe,

126
8.2. ANALYSEURS LR

terminal] : ceci du fait de lapplication de la construction des sous-ensembles (cf. la


section 4.1.4)

la suppression des transitions spontanes induit la notion de fermeture : la -fermeture


dun tat tant lensemble des tats atteints par une ou plusieurs transitions .

Cette procdure de construction du DFA A est dtaille dans lalgorithme 8.30, qui utilise
deux fonctions auxiliaires pour effectuer directement la dterminisation.

Function LR0 is // Programme principal.


q0 = Closure([S S#, ?]) // Ltat initial de A.
0

Q := {q0 } // Les tats de A.


T := // Les transitions de A.
while true do
Qi := Q;
Ti := T;
foreach q Q do // q est lui-mme un ensemble !
foreach [A X, a] q do
r := Successor(q, X);
Q := Q {r};
T := T {(q, X, r)};
// Test de stabilisation.
if Q = Qi T = Ti then break ;
// Procdures auxiliaires.
Function Closure(q) is // Construction directe de la -fermeture.
while true do
qi := q;
foreach [A X, a] q do
foreach (X ) P do
foreach b FIRST(a) do
q := q [X , b]
// Test de stabilisation.
if q = qi then break ;
return q
Function Successor(q, X) is // Dveloppement des branches.
r := ;
foreach [A X, a] q do
r := r [A X , a]
return Closure(r)
Algorithme 8.30 Construction de lautomate danalyse LR(1)

En guise dapplication, vous vrifierez que la mise en uvre de lalgorithme 8.30 construit
directement le dterminis de lautomate 8.29.

127
CHAPITRE 8. INTRODUCTION AUX ANALYSEURS DTERMINISTES

8.2.4 Complments

LR et LL La famille des analyseurs LR(k) permet danalyser tous les langages LL(k) et bien
dautres langages non-ambigus. La raison de cette plus grande gnricit des analyseurs
LR est au fond leur plus grande prudence : alors quun analyseur LL(k) doit pouvoir
slectionner sans erreur une production A sur la seule base des k symboles terminaux
non encore apparis (dont tout ou partie peut tre driv de A), un analyseur LR(k) fonde sa
dcision dappliquer une rduction A sur (i) la connaissance de lintgralit de la partie
droite et (ii) la connaissance des k symboles terminaux droite de A. Pour k fix, il est alors
normal quun analyseur LR(k), ayant plus dinformation sa disposition quun analyseur
LL(k), fasse des choix plus clairs, faisant ainsi porter moins de contraintes sur la forme de
la grammaire.

Gnration danalyseurs Lorsque lon sintresse des grammaires relles, la construction


de lautomate et de la table danalyse LR peut rapidement conduire de trs gros automates :
il est en fait ncessaire de dterminiser un automate dont le nombre dtats est proportionnel
la somme des longueurs des parties droites des productions de G ; tape qui peut conduire (cf.
la section 4.1.4) un automate dterministe ayant exponentiellement plus dtats que le non-
dterministe dorigine. Il devient alors intressant de recourir des programmes capables de
construire automatiquement un analyseur pour une grammaire LR : il en existe de nombreux,
dont le plus fameux, yacc est disponible et document (dans sa version libre, connue sous le
nom de bison) ladresse suivante : http://www.gnu.org/software/bison/bison.html.

LR et LALR et ... Utiliser un gnrateur danalyseurs tel que bison ne fait que reporter
sur la machine la charge de construire (et manipuler) un gros automate ; ce qui, en dpit
de lindniable bonne volont gnrale des machines, peut malgr tout poser problme. Le
remde le plus connu est dessayer de compresser avec perte, lorsque cela est possible (et cest
le cas gnral) les tables danalyse LR(1), donnant lieu la classe danalyseurs LALR(1), qui
sont ceux que construit yacc. Il existe de nombreuses autres variantes des analyseurs LR
visant fournir des solutions pour sauver le dterminisme de lanalyse, tout en maintenant
les tables dans des proportions raisonnables.

Notes historiques Linvention de LL est due Conway (1963). Sa formalisation fut faite
par Lewis et Stearns (1968). On doit la dcouverte de la famille LR Donald Knuth en 1965
(Knuth, 1965). Il est galement lorigine de lappellation LL.

128
Chapitre 9

Normalisation des grammaires CF

Dans ce chapitre, nous tudions quelques rsultats complmentaires concernant les gram-
maires hors-contexte, rsultats qui garantissent dune part que les cas de rgles potentielle-
ment problmatiques pour lanalyse (productions , rcursions gauches...) identifies dans
les discussions du chapitre 7 possdent des remdes bien identifis ; dautre part, quil est
possible dimposer a priori des contraintes sur la forme de la grammaire, en utilisant des
transformations permettant de mettre les productions sous une forme standardise. On parle,
dans ce cas, de grammaires sous forme normale. Nous prsentons dans ce chapitre les deux
formes normales les plus utiles, la forme normale de Chomsky et la forme normale de
Greibach.

9.1 Simplification des grammaires CF

Dans cette section, nous nous intressons tout dabord aux procdures qui permettent de
simplifier les grammaires CF, en particulier pour faire disparatre un certain nombre de
configurations potentiellement embarrassantes pour les procdures danalyse.

9.1.1 Quelques prliminaires

Commenons par deux rsultats lmentaires, que nous avons utiliss sans les formaliser
diffrentes reprises.
Une premire notion utile est celle du langage engendr par un non-terminal A. Formelle-
ment,
Dfinition 9.1 (Langage engendr par un non-terminal). Soit G = (N, , S, P) une grammaire
CF. On appelle langage engendr par le non-terminal A, not LA (G), le langage engendr par la
grammaire G0 = (N, , A, P).

Le langage engendr par un non-terminal est donc le langage obtenu en choisissant ce non-
terminal comme axiome. Le langage engendr par la grammaire G est alors simplement le
langage L(G) = LS (G).
CHAPITRE 9. NORMALISATION DES GRAMMAIRES CF

Introduisons maintenant la notion de sous-grammaire :

Dfinition 9.2 (Sous-grammaire). Soit G = (N, , S, P) une grammaire CF. On appelle sous-
grammaire toute grammaire G0 = (N, , S, P0 ), avec P0 P. Si G0 est une sous-grammaire de G,
alors L(G0 ) L(G).

Une sous-grammaire de G nutilise quun sous-ensemble des productions de G ; le langage


engendr est donc un sous-ensemble du langage engendr par G.
Le procd suivant nous fournit un premier moyen pour construire systmatiquement des
grammaires quivalentes une grammaire G. De manire informelle, ce procd consiste
court-circuiter des tapes de drivation en les remplaant par une drivation en une tape.
Cette opration peut tre effectue sans changer le langage engendr, comme lnonce le
rsultat suivant.

Lemme 9.3 ( Court-circuitage des drivations). Soit G = (N, , S, P) une grammaire CF ;


?
soient A un non-terminal et une squence de terminaux et non-terminaux tels que A . Alors
G
G0 = (N, , S, P {A }) est faiblement quivalente G.

Dmonstration. Le lemme prcdent concernant les sous-grammaires nous assure que L(G)
L(G0 ). Inversement, soit u dans L(G0 ) : si sa drivation nutilise pas la production A ,
alors la mme drivation existe dans G ; sinon si sa drivation utilise A , alors il existe
?
une drivation dans G utilisant A . 
G

Nous terminons cette section par un second procd permettant de construire des grammaires
quivalentes, qui utilise en quelque sorte la distributivit des productions.

Lemme 9.4 ( Distributivit des drivations). Soit G une CFG, A 1 B2 une A-production
de G et {B 1 , . . . , B n } lensemble des B-productions. Alors, la grammaire G0 drive de G
en supprimant A 1 B2 et en ajoutant aux productions de G lensemble {A 1 1 2 , . . . , A
1 n 2 } est faiblement quivalente G.

La dmonstration de ce second rsultat est laisse en exercice.

9.1.2 Non-terminaux inutiles

La seule contrainte dfinitoire pose sur les productions des CFG est que leur partie gauche
soit rduite un non-terminal. Toutefois, un certain nombre de configurations posent des
problmes pratiques, notamment lorsquil sagit de mettre en uvre des algorithmes dana-
lyse. Nous nous intressons, dans cette section, aux configurations qui, sans introduire de
difficults majeures, sont source dinefficacit.
Une premire source dinefficacit provient de lexistence de non-terminaux napparaissant
que dans des parties droites de rgles. En fait, ces non-terminaux ne drivent aucun mot
et peuvent tre supprims, ainsi que les rgles qui y font rfrence, sans altrer le langage
engendr par la grammaire.

130
9.1. SIMPLIFICATION DES GRAMMAIRES CF

Une configuration voisine est fournie par des non-terminaux (diffrents de laxiome) qui
napparatraient dans aucune partie droite. Ces non-terminaux ne pouvant tre drivs de
laxiome, ils sont galement inutiles et peuvent tre supprims.
Enfin, les non-terminaux improductifs sont ceux qui, bien que drivables depuis laxiome,
napparaissent dans aucune drivation russie, parce quils sont impossibles liminer.
Pensez, par exemple, un non-terminal X qui napparatrait (en partie gauche) que dans une
seule rgle de la forme X aX.
Formalisons maintenant ces notions pour construire un algorithme permettant de se dbar-
rasser des non-terminaux et des productions inutiles.

Dfinition 9.5 (Utilit dune production et dun non-terminal). Soit G une CFG, on dit quune
? P
production P = A de G est utile si et seulement sil existe un mot w tel que S xAy
G G
?
xy w. Sinon, on dit que P est inutile.
G

De mme, on qualifie dutiles les non-terminaux qui figurent en partie gauche des rgles utiles.

Lidentification des productions et non-terminaux utiles se fait en appliquant les deux pro-
cdures suivantes :
La premire tape consiste tudier successivement toutes les grammaires GA =
(N, , A, P) pour A N. Le langage L(GA ) contient donc lensemble des mots qui se
drivent depuis le non-terminal A. Il existe un algorithme (cf. la section 6.3) permettant
de dterminer si L(GA ) est vide. On construit alors G0 en supprimant de G tous les
non-terminaux A pour lesquels L(GA ) = , ainsi que les productions dans lesquels ils
apparaissent 1 . La grammaire G0 ainsi construite est fortement quivalente G. En effet :
L(G0 ) L(G), par le simple fait que G0 est une sous-grammaire de G ; de plus, les
drivations gauches de G0 sont identiques celles de G.
? ?
L(G) L(G0 ) : sil existe un mot u ? tel que S u mais pas S 0 u, alors
G G
ncessairement la drivation de u contient un des non-terminaux limins de G.
Ce non-terminal drive un des facteurs de u, donc engendre un langage non-vide,
ce qui contredit lhypothse.
Cette procdure nest toutefois pas suffisante pour garantir quun non-terminal est
utile : il faut, de plus, vrifier quil peut tre driv depuis S. Cest lobjet de la seconde
phase de lalgorithme.
Dans une seconde tape, on construit rcursivement les ensembles NU et PU contenant
respectivement des non-terminaux et des productions. Ces ensembles contiennent ini-
tialement respectivement S et toutes les productions de partie gauche S. Si, une tape
donne de la rcursion, NU contient A, alors on ajoute PU toutes les rgles dont A est
partie gauche, et NU tous les non-terminaux figurant dans les parties droites de ces
rgles. Cette procdure sarrte aprs un nombre fini ditrations, quand plus aucun

1. La procdure esquisse ici est mathmatiquement suffisante, mais algorithmiquement nave. Une impl-
mentation plus efficace consisterait dterminer de proche en proche lensemble des non-terminaux engendrant
un langage non-vide, par une procdure similaire celle dcrite plus loin. Lcriture dun tel algorithme est
laisse en exercice.

131
CHAPITRE 9. NORMALISATION DES GRAMMAIRES CF

non-terminal ne peut tre ajout NU . Par construction, pour toute production A


?
de PU , il existe 1 et 2 tels que S 1 A2 1 2 .
G G
En supprimant de G tous les terminaux qui ne sont pas dans NU , ainsi que les produc-
tions PU correspondantes, on construit, partir de G, une nouvelle sous-grammaire G0 ,
qui par construction ne contient que des terminaux et des productions utiles. Par un
argument similaire au prcdent, on vrifie que G0 est fortement quivalente G.
Attention : ces deux procdures doivent tre appliques dans un ordre prcis. En particulier,
il faut commencer par supprimer les variables ne gnrant aucun mot, puis liminer celles
qui napparaissent dans aucune drivation. Vous pourrez vous en convaincre en examinant
la grammaire 9.1.

S a | AB
A b
Grammaire 9.1 limination des productions inutiles : lordre importe

9.1.3 Cycles et productions non-gnratives

Les cycles correspondent des configurations mettant en jeu des productions improduc-
tives de la forme A B. Ces productions, que lon appelle non-gnratives, effectuent
un simple renommage de variable, sans rellement entraner la gnration (immdiate ou
indirecte) de symboles terminaux.
Ces productions sont potentiellement nuisibles pour les algorithmes de gnration ou encore
danalyse ascendante, qui peuvent tre conduits dans des boucles sans fin. Ceci est vident
dans le cas de productions de type A A, mais apparat galement lorsque lon a des cycles
de productions non-gnratives comme dans : A B, B C, C A. Ces cycles doivent
donc faire lobjet dun traitement particulier. Fort heureusement, pour chaque mot dont la
drivation contient un cycle, il existe galement une drivation sans cycle, suggrant quil
est possible de se dbarrasser des cycles sans changer le langage reconnu. Cest prcisment
ce quaffirme le thorme suivant :

Thorme 9.6 (limination des cycles). Soit G une CFG. On peut contruire une CFG G0 , faiblement
quivalente G, qui ne contient aucune production de la forme A B, o A et B sont des non-
terminaux.

Avant de rentrer dans les dtails techniques, donnons lintuition de la construction qui
va tre dveloppe dans la suite : pour se dbarrasser dune rgle A B sans perdre
de drivation, il suffit de rajouter la grammaire une rgle A pour chaque rgle
B : ceci permet effectivement bien de court-circuiter la production non-gnrative.
Reste un problme rsoudre : que faire des productions B C ? En dautres termes,
comment faire pour sassurer quen se dbarrassant dune production non-gnrative, on
nen a pas ajout une autre ? Lide est de construire en quelque sorte la clture transitive de
ces productions non-gnratives, afin de dtecter (et de supprimer) les cycles impliquant de
telles productions.

132
9.1. SIMPLIFICATION DES GRAMMAIRES CF

S A A B B bb C B
S B A B B C C Aa
A aB C aAa
Grammaire 9.2 Une grammaire contenant des productions non-gnratives

Dfinition 9.7 (Drivation non-gnrative). B N drive immdiatement non-gnrativement de


A dans G si et seulement si A B est une production de G. On notera A 7 B.
G
?
B drive non-gnrativement de A dans G, not A 7 B si et seulement si X1 . . . Xn dans N tels que
G
A 7 X1 7 7 Xn 7 B.
G G G G

Dmonstration du thorme 9.6. Un algorithme de parcours du graphe de la relation 7 permet


G
?
de dterminer CA = {A} {X N, A 7 X} de proche en proche pour chaque non-terminal A.
G

Construisons alors G0 selon :


G0 a le mme axiome, les mmes terminaux et non-terminaux que G ;
A est une production de G0 si et seulement sil existe dans G une production
X , avec X CA et < N. Cette condition assure en particulier que G0 est bien sans
production non-gnrative.
En dautres termes, on remplace les productions X de G en court-circuitant (de toutes
les manires possibles) X.
Montrons alors que G0 est bien quivalente G. Soit en effet D une drivation gauche minimale
dans G, contenant une squence (ncessairement sans cycle) maximale de productions non-
gnratives de X1 , . . . , Xk suivie dune production gnrative Xk . Cette squence peut
tre remplace par X1 , qui par construction existe dans G0 . Inversement, toute drivation
dans G0 ou bien ninclut que des productions de G, ou bien inclut au moins une production
A qui nest pas dans G. Mais alors il existe dans G une squence de rgles non-gnratives
A X et la drivation D existe galement dans G. On notera que contrairement
lalgorithme dlimination des variables inutiles, cette transformation a pour effet de modifier
(en fait daplatir) les arbres de drivation : G et G0 ne sont que faiblement quivalentes. 

Pour illustrer le fonctionnement de cet algorithme, considrons la grammaire 9.2. Le calcul


de la clture transitive de 7 conduit aux ensembles suivants :
G

CS = {S, A, B, C}
CA = {A, B, C}
CB = {B, C}
CC = {B, C}

La grammaire 9.3, G0 , contient alors les productions qui correspondent aux quatre seules
productions gnratives : a aB, B bb, C aAa, C Aa.

133
CHAPITRE 9. NORMALISATION DES GRAMMAIRES CF

S aB B bb A aB C aAa
S bb B aAa A bb C Aa
S aAa B Aa A aAa C bb
S Aa A Aa
Grammaire 9.3 Une grammaire dbarrasse de ses productions non-gnratives

9.1.4 Productions

Si lon accepte la version librale de la dfinition des grammaires CF (cf. la discussion de la


section 5.2.6), un cas particulier de rgle licite correspond au cas o la partie droite dune
production est vide : A . Ceci nest pas gnant en gnration et signifie simplement que
le non-terminal introduisant peut tre supprim de la drivation. Pour les algorithmes
danalyse, en revanche, ces productions particulires peuvent singulirement compliquer le
travail, puisque lanalyseur devra tout moment examiner la possibilit dinsrer un non-
terminal. Il peut donc tre prfrable de chercher se dbarrasser de ces productions avant
denvisager doprer une analyse : le rsultat suivant nous dit quil est possible doprer une
telle transformation et nous montre comment la mettre en uvre.
Thorme 9.8 (Suppression des productions ). Si L est un langage engendr par G, une gram-
maire CF telle que toute production de G est de la forme : A , avec ventuellement vide, alors L
peut tre engendr par une grammaire G0 = (N {S0 }, , S0 , P0 ), dont les productions sont soit de la
forme A , avec non-vide, soit S0 et S0 napparat dans la partie droite daucune rgle.

Ce rsultat dit deux choses : dune part que lon peut liminer toutes les productions
sauf peut-tre une (si L(G)), dont la partie gauche est alors laxiome ; dautre part que
laxiome lui-mme peut tre rendu non-rcursif (i.e. ne figurer dans aucune partie droite).
Lintuition du premier de ces deux rsultats sexprime comme suit : si S drive , ce ne peut
tre quau terme dun enchanement de productions nimpliquant que des terminaux qui
engendrent . En propageant de manire ascendante la proprit de driver , on se ramne
une grammaire quivalente dans laquelle seul laxiome drive (directement) .

Dmonstration. Commenons par le second rsultat en considrant le cas dune grammaire


G admettant un axiome rcursif S. Pour obtenir une grammaire G0 (faiblement) quivalente,
il suffit dintroduire un nouveau non-terminal S0 , qui sera le nouvel axiome de G0 et une
nouvelle production : S0 S. Cette transformation naffecte pas le langage engendr par la
grammaire G.
Supposons alors, sans perte de gnralit, que laxiome de G est non-rcursif et intressons-
nous lensemble N des variables A de G telles que le langage engendr par A, LA (G),
contient . Quelles sont-elles ? Un cas vident correspond aux productions A . Mais
?
peut galement se dduire depuis A par plusieurs rgles, A , condition que
G
tous les symboles de soient eux-mmes dans N . On reconnat sous cette formulation le
problme du calcul de lensemble NULL que nous avons dj tudi lors de la prsentation
des analyseurs LL (voir en particulier la section 8.1.3).
Une fois N calcul, la transformation suivante de G conduit une grammaire G0 faiblement
quivalente : G0 contient les mmes non-terminaux, terminaux et axiome que G. De surcrot,

134
9.1. SIMPLIFICATION DES GRAMMAIRES CF

Productions de G Productions de G0
S ASB | c S ASB | AS | SB | S | c
A aA | B A aA | a | B
B b| B b

Grammaire 9.4 Une grammaire avant et aprs limination des productions

G0 contient toutes les productions de G nimpliquant aucune variable de N . Si maintenant


G contient une production A et inclut des lments de N , alors G0 contient toutes
les productions de type A , o sobtient depuis en supprimant une ou plusieurs
variables de N . Finalement, si S est dans N , alors G0 contient S . G0 ainsi construite
est quivalente G : notons que toute drivation de G qui ninclut aucun symbole de N se
droule lidentique dans G0 . Soit maintenant une drivation impliquant un symbole de N :
?
soit il sagit de S et la production S0 permet une drivation quivalente dans G0 ;
G
? ?
soit il sagit dune drivation S u, avec u , et contient au moins un symbole
G G G
X de N , mais pas . Mais pour chaque X de , soit X engendre un facteur vide de u, et il
existe une production de G0 qui se dispense dintroduire ce non-terminal dans ltape ;
G
soit au contraire X nengendre pas un facteur vide et la mme drivation existe dans G0 . On
conclut donc que L(G) = L(G0 ). 

Cette procdure est illustre par la grammaire 9.4 : G contenant deux terminaux qui drivent
le mot vide (N = {A, B}), les productions de G0 se dduisent de celles de G en considrant
toutes les manires possibles dviter davoir utiliser ces terminaux.

9.1.5 limination des rcursions gauches directes

On appelle directement rcursifs les non-terminaux A dune grammaire G qui sont tels que
? ?
A A (rcursion gauche) ou A A (rcursion droite). Les productions impliquant des
rcursions gauches directes posent des problmes aux analyseurs descendants, qui peuvent
tre entrans dans des boucles sans fin (cf. les sections 7.3 et 8.1). Pour utiliser de tels analy-
seurs, il importe donc de savoir se dbarrasser de telles productions. Nous nous attaquons
ici aux rcursions gauches directes ; les rcursions gauches indirectes seront traites plus loin
( la section 9.2.2).
Il existe un procd mcanique permettant dliminer ces productions, tout en prservant le
langage reconnu. Lintuition de ce procd est la suivante : de manire gnrique, un terminal
rcursif gauche est impliqu dans la partie gauche de deux types de production : celles qui
sont effectivement rcursives gauche et qui sont de la forme :

A A1 | A2 . . . | An

et celles qui permettent dliminer ce non-terminal, et qui sont de la forme :

A 1 | 2 . . . | m

o le premier symbole xi de i nest pas un A.

135
CHAPITRE 9. NORMALISATION DES GRAMMAIRES CF

Leffet net de lutilisation de ces productions conduit donc des drivations gauches de A
dans lesquelles on accumule droite de A un nombre arbitraire de i ; llimination de A
introduisant en tte du proto-mot le symbole (terminal ou non-terminal) x j . Formellement :
?
A Ai1 Ai2 i1 . . . Ain . . . i1
G G G

Llimination de A par la production A j conduit un proto-mot


j in . . . i1
dont le symbole initial est donc j . Le principe de la transformation consiste produire j sans
dlai et simultanment transformer la rcursion gauche (qui accumule simplement les
i ) en une rcursion droite. Le premier de ces buts est servi par lintroduction dun nouveau
non-terminal R dans des productions de la forme :
A 1 | 2 . . . | m | 1 R . . . | m R
La rcursivit du terminal A est prserve par la nouvelle srie de productions :
R 1 R | 2 R . . . n R | 1 | 2 . . . | n

On vrifie, par les techniques habituelles de preuve (e.g. par induction sur la longueur des
drivations) que cette transformation produit bien une grammaire (faiblement) quivalente
la grammaire de dpart.
En guise dillustration, reprenons la grammaire 8.5 des expressions arithmtiques, entre-
vue lors de notre prsentation des analyseurs LL(1). La grammaire 9.5, qui rappelle cette
grammaire 2 , contient deux terminaux directement rcursifs gauche.

S SF|F
F F/T | T
T (S) | D
D 0 | . . . | 9 | 0D | . . . | 9D
Grammaire 9.5 Une grammaire pour les expressions arithmtiques

Le premier non-terminal traiter est S, qui contient une rgle directement rcursive et
une rgle qui ne lest pas. On introduit donc le nouveau symbole S0 , ainsi que les deux
productions : S FS0 | F et S0 FS0 | F. Le traitement du symbole F se droule de
manire exactement analogue.

9.2 Formes normales

La notion de forme normale dune grammaire rpond la ncessit, pour un certain nombre
dalgorithmes de parsage, de disposer dune connaissance a priori sur la forme des produc-
tions de la grammaire. Cette connaissance est exploite pour simplifier la programmation
2. une diffrence prs, et de taille : nous utilisons ici les oprateurs et /, qui sont ceux qui sont associatifs
par la gauche et qui justifient lcriture dune grammaire avec une rcursion gauche. Si lon avait que + et , il
suffirait dcrire les rgles avec une rcursion droite et le tour serait jou !

136
9.2. FORMES NORMALES

dun algorithme de parsage, ou encore pour acclrer lanalyse. Les principales formes nor-
males (de Chomsky et de Greibach) sont dcrites dans les sections qui suivent. On verra
que les algorithmes de mise sous forme normale construisent des grammaires faiblement
quivalentes la grammaire dorigine : les arbres de drivation de la grammaire normalise
devront donc tre transforms pour reconstruire les drivations (et les interprtations) de la
grammaire originale.

9.2.1 Forme normale de Chomsky

Thorme 9.9 (Forme normale de Chomsky). Toute grammaire hors-contexte admet une gram-
maire faiblement quivalente dans laquelle toutes les productions sont soit de la forme A BC, soit
?
de la forme A a, avec A, B, C des non-terminaux et a un terminal. Si, de surcrot, S , alors
G
la forme normale contient galement S . Cette forme est appele forme normale de Chomsky,
abrge en CNF conformment la terminologie anglaise (Chomsky Normal Form).

Dmonstration. Les rsultats de simplification obtenus la section 9.1 nous permettent de


faire en toute gnralit lhypothse que G ne contient pas de production autre que ven-
tuellement S et que si A X est une production de G, alors X est ncessairement
terminal (il ny a plus de production non-gnrative).
La rduction des autres productions procde en deux tapes : elle gnralise tout dabord
lintroduction des terminaux par des rgles ne contenant que ce seul lment en partie
droite ; puis elle ramne toutes les autres productions la forme normale correspondant
deux non-terminaux en partie droite.
Premire tape, construisons G0 = (N0 , , S, P0 ) selon :
N0 contient tous les symboles de N ;
pour tout symbole a de , on ajoute une nouvelle variable Aa et une nouvelle production
Aa a.
toute production de P de la forme A a est copie dans P0
toute production A X1 Xk , avec tous les Xi dans N est copie dans P0 ;
soit A X1 Xm contenant au moins un terminal : cette production est transforme
en remplaant chaque occurrence dun terminal a par la variable Aa correspondante.
Par des simples raisonnements inductifs sur la longueur des drivations, on montre que pour
? ?
toute variable de G, A u si et seulement si A 0 u, puis lgalit des langages engendrs
G G
par ces deux grammaires. En effet, si A u = u1 ul est une production de G, on aura dans
G0 :
?
A 0 Au1 Aul 0 u1 Au2 Aul 0 u
G G G

Supposons que cette proprit soit vraie pour toutes les drivations de longueur n et soit A et
?
u tels que A u en n+1 tapes. La premire production est de la forme : A x1 A1 x2 A2 Ak ,
o chaque xi ne contient que des terminaux. Par hypothse de rcurrence, les portions de
u engendres dans G par les variables Ai se drivent galement dans G0 ; par construction

137
CHAPITRE 9. NORMALISATION DES GRAMMAIRES CF

?
chaque xi se drive dans G0 en utilisant les nouvelles variables Aa , donc A 0 u. La rciproque
G
se montre de manire similaire.
Seconde phase de la procdure : les seules productions de G0 dans lesquelles apparaissent
des terminaux sont du type recherch A a ; il sagit maintenant de transformer G0 en G00
de manire que toutes les productions qui contiennent des non-terminaux en partie droite en
contiennent exactement 2. Pour aboutir ce rsultat, il suffit de changer toutes les productions
de type A B1 ...Bm , m 3 dans G0 par lensemble des productions suivantes (les non-
terminaux Di sont crs pour loccasion) : {A B1 D1 , D1 B2 D2 , ... , Dm2 Bm1 Bm }. De
nouveau, il est relativement direct de montrer que le langage engendr par G00 est le mme
que celui engendr par G. 

Les arbres de drivation des grammaires CNF ont une forme extrmement caractristique,
puisque chaque nud interne de larbre a soit un fils unique et ce fils est une feuille portant
un symbole terminal ; soit exactement deux fils et ces deux fils sont des variables.
Comme exemple dapplication, entreprenez la mise sous forme normale de Chomsky de la
grammaire 9.6. Le rsultat auquel vous devez aboutir est la grammaire 9.7.

S bA A a B b
S aB A aS B bS
A bAA B aBB
Grammaire 9.6 Une grammaire Chomsky-normaliser

S Ab A A a B b Aa a
S Aa B A Aa S B Ab S Ab b
A Ab D1 B Aa D2 D1 AA
D2 BB
Grammaire 9.7 Une grammaire Chomsky-normalise

En plus de son importance thorique, cette forme normale prsente de nombreux avantages :
un premier avantage est que les terminaux sont introduits par des productions ddies,
de type A a (au moins une par terminal). Ceci savre particulirement bienvenu
pour les algorithmes de parsage descendant.
La mise sous CNF facilite galement les tapes de rduction des analyseurs ascendants,
puisquil suffit simplement de regarder les couples de non-terminaux successifs pour
juger si une telle opration est possible.
En revanche, cette transformation conduit en gnral une augmentation sensible du nombre
de productions dans la grammaire. Cette augmentation joue dans le sens dune pnalisation
gnrale des performances des analyseurs.

9.2.2 Forme normale de Greibach

La transformation dune grammaire en une grammaire sous forme normale de Greibach


gnralise en un sens le procd dlimination des rcursions gauches directes (cf. la sec-

138
9.2. FORMES NORMALES

tion 9.1.5), dans la mesure o elle impose une contrainte qui garantit que chaque production
augmente de manire strictement monotone le prfixe terminal du proto-mot en cours de
drivation. la diffrence de la forme normale de Chomsky, lexistence de la forme normale
de Greibach est plus utilise pour dmontrer divers rsultats thoriques que pour fonder des
algorithmes danalyse.
La forme normale de Greibach est dfinie dans le thorme suivant :

Thorme 9.10 (Forme normale de Greibach). Tout langage hors-contexte L ne contenant pas
peut tre engendr par une grammaire dont toutes les productions sont de la forme A a, avec a un
terminal et est une squence de non-terminaux (ventuellement vide). Cette grammaire est appele
forme normale de Greibach, en abrg GNF, conformment la terminologie anglaise.

Si L contient , alors ce rsultat reste valide, en ajoutant toutefois une rgle S , qui drive
depuis laxiome, comme dmontr la section 9.1.4.

Dmonstration. La preuve de lexistence dune GNF repose, comme prcdemment, sur un


algorithme permettant de construire explicitement la forme normale de Greibach partir
dune grammaire CF quelconque. Cet algorithme utilise deux procds dj prsents, qui
transforment une grammaire CF en une grammaire CF faiblement quivalente.
Le premier procd est celui dcrit au lemme 9.3 et consiste ajouter une production A
?
G si lon observe dans G la drivation A . Le second procd est dcrit dans la section 9.1.5
G
et consiste transformer une rcursion gauche en rcursion droite par ajout dun nouveau
non-terminal.
Lalgorithme de construction repose sur une numrotation arbitraire des variables de la
grammaire N = {A0 , . . . , An }, laxiome recevant conventionnellement le numro 0. On montre
alors que :

Lemme 9.11. Soit G une grammaire CF. Il existe une grammaire quivalente G0 dont toutes les
productions sont de la forme :
Ai a, avec a
Ai A j , et A j est class strictement aprs Ai dans lordonnancement des non-terminaux
(j > i).

La procdure de construction de G0 est itrative et traite les terminaux dans lordre dans
lequel ils sont ordonns. On note, pour dbuter, que si lon a pris soin de se ramener une
grammaire dont laxiome est non rcursif, ce que lon sait toujours faire (cf. le rsultat de la
section 9.1.4), alors toutes les productions dont S = A0 est partie gauche satisfont par avance
la proprit du lemme 9.11. Supposons que lon a dj trait les non-terminaux numrots
de 0 i 1, et considrons le non-terminal Ai . Soit Ai une production dont Ai est partie
gauche, telle que dbute par une variable A j . Trois cas de figure sont possibles :
(a) j < i : A j est class avant Ai ;
(b) j = i : A j est gale Ai ;
(c) j > i : A j est class aprs Ai ;

139
CHAPITRE 9. NORMALISATION DES GRAMMAIRES CF

Pour les productions de type (a), on applique itrativement le rsultat du lemme 9.4 en
traitant les symboles selon leur classement : chaque occurrence dun terminal A j , j < i est
remplace par lexpansion de toutes les parties droites correspondantes. Par lhypothse de
rcurrence, tous les non-terminaux ainsi introduits ont ncessairement un indice strictement
suprieur i. Ceci implique qu lissue de cette phase, toutes les productions dduites de
Ai sont telles que leur partie droite ne contient que des variables dont lindice est
au moins i. Toute production dont le coin gauche nest pas Ai satisfait par construction la
proprit du lemme 9.11 : laissons-les en ltat. Les productions dont le coin gauche est Ai
sont de la forme Ai Ai , sont donc directement rcursives gauche. Il est possible de
transformer les Ai - productions selon le procd de la section 9.1.5, sans introduire en coin
gauche de variable prcdant Ai dans le classement. En revanche, cette procdure conduit
introduire de nouveaux non-terminaux, qui sont conventionnellement numrots depuis
n + 1 dans lordre dans lequel ils sont introduits. Ces nouveaux terminaux devront subir le
mme traitement que les autres, traitement qui est toutefois simplifi par la forme des rgles
(rcursions droites) dans lesquels ils apparaissent. Au terme de cette transformation, tous les
non-terminaux dindice suprieur i + 1 satisfont la proprit du lemme 9.11, permettant
la rcurrence de se poursuivre.
Notons qu lissue de cette phase de lalgorithme, cest--dire lorsque le terminal dindice
maximal n + p a t trait, G0 est dbarrasse de toutes les chanes de rcursions gauches : on
peut en particulier envisager de mettre en uvre des analyses descendantes de type LL et
satteler la construction de la table danalyse prdictive correspondante (voir la section 8.1).
Cette premire partie de la construction est illustre par le tableau 9.8.
Considrons maintenant ce quil advient aprs que lon achve de traiter le dernier non-
terminal An+p . Comme les autres, il satisfait la proprit que le coin gauche de toutes les
An+p -productions est soit un terminal, soit un non-terminal dindice strictement plus grand.
Comme ce second cas de figure nest pas possible, cest donc que toutes les An+p -productions
sont de la forme : An+p a, avec a , qui est la forme recherche pour la GNF. Considrons
alors les An+p1 productions : soit elles ont un coin gauche terminal, et sont dj conformes
la GNF ; soit elles ont An+p comme coin gauche. Dans ce second cas, en utilisant de nouveau
le procd du lemme 9.4, il est possible de remplacer An+p par les parties droites des An+p -
productions et faire ainsi merger un symbole terminal en coin gauche. En itrant ce processus
pour i = n + p i = 0, on aboutit, de proche en proche, une grammaire quivalente celle de
dpart et qui, de plus, est telle que chaque partie droite de production dbute par un terminal.
Il reste encore liminer les terminaux qui apparatraient dans les queues de partie droite
(cf. la mise sous CNF) pour obtenir une grammaire qui respecte les contraintes nonces
ci-dessus. 

Pour complter cette section, notons quil existe des variantes plus contraintes de la GNF, qui
constituent pourtant galement des formes normales. Il est en particulier possible dimposer,
dans la dfinition du thorme 9.10, que toutes les parties droites de production contiennent
au plus deux variables : on parle alors de forme normale de Greibach quadratique (Salomaa,
1973, p.202).

140
9.2. FORMES NORMALES

tat initial S A2 A2
A1 A1 A1 | a
A2 A1 A1 | A2 A1 | b
Traitement de A1 S A2 A2
A1 a | aR1 A3 est nouveau
A2 A1 A1 | A2 A1 | b
R1 A1 | A1 R1 rcursion droite
Traitement de A2 S A2 A2
(premire tape) A1 aA1 | aA1 R1
A2 aA1 A1 | aA1 R1 A1 | A2 A1 | b
R1 A1 | A1 R1
Traitement de A2 S A2 A2
(seconde tape) A1 aA1 | aA1 A3
A2 aA1 A1 | aA1 A3 A1 | b | aA1 A1 A4 | aA1 A3 A1 A4 | bA4
A3 A1 | A1 A3
A4 A1 | A1 A4
Traitement de A3 S A2 A2
A1 aA1 | aA1 A3
A2 aA1 A1 | aA1 A3 A1 | b | aA1 A1 A4 | aA1 A3 A1 A4 | bA4 A4 est nouveau
A3 aA1 | aA1 A3 | aA1 A3 A3
A4 A1 | A1 A4
Traitement de A4 S A2 A2
A1 aA1 | aA1 A3
A2 aA1 A1 | aA1 A3 A1 | b | aA1 A1 A4 | aA1 A3 A1 A4 | bA4
A3 aA1 | aA1 A3 | aA1 A3 A3
A4 aA1 | aA1 A4 | aA1 A3 | aA1 A3 A4

Table 9.8 Une grammaire en cours de Greibach-normalisation

141
CHAPITRE 9. NORMALISATION DES GRAMMAIRES CF

142
Chapitre 10

Notions de calculabilit

Ce chapitre porte sur la notion de langage dcidable et semi-dcidable. Nous resterons un


niveau assez informel, mais il est possible, en particulier en se fixant un modle de calcul
comme les machines de Turing, de montrer rigoureusement tous les rsultats vus ici.

10.1 Dcidabilit et semi-dcidabilit

Nous dfinissions la notion de langage dcidable et semi-dcidable en reprenant et dvelop-


pant les dfinitions du chapitre 2, plus particulirement de la section 2.2.2. Les dfinitions
de cette partie sont exprimes en utilisant le terme vague dalgorithme : ce terme peut tre
interprt comme nimporte quel programme dun langage de programmation classique
(p. ex., C ou Java) qui sexcuterait dans un environnement sans limitation matrielle (taille
mmoire, espace de stockage) . la fin de ce chapitre (section 10.4), nous expliquerons
comment nous pouvons rendre la notion dalgorithme plus formelle et plus prcise, en se
donnant un modle de calcul, mcanisme formel pour dcrire un processus automatique pre-
nant ventuellement des donnes en entre et produisant des donnes en sortie. On dit quun
algorithme termine (sur lentre x) si lexcution de cet algorithme sarrte aprs un nombre
fini dtapes (sur lentre x).
On se donne un alphabet .
On commence par introduire les langages semi-dcidables comme ceux dont les mots sont
numrs un par un par un algorithme ne prenant aucune entre :
Dfinition 10.1. Un langage L est rcursivement numrable (r.e., ou semi-dcidable, ou
encore semi-calculable) sil existe un algorithme A qui numre les mots de L.

Si le langage est infini, un tel algorithme dnumration ne termine donc pas. On peut donner
une dfinition quivalente des langages semi-dcidables, en termes dalgorithmes prenant
un mot en entre et rpondant Vrai si le mot appartient au langage.
Proposition 10.2. Un langage L est semi-dcidable si et seulement sil existe un algorithme A
tel que pour tout mot u :
Chapitre rdig par Pierre Senellart.
CHAPITRE 10. NOTIONS DE CALCULABILIT

si u L, alors A termine sur u en produisant la sortie Vrai ;


si u < L, alors soit A termine sur u en produisant la sortie Faux, soit A ne termine pas sur u.

Dmonstration. Pour montrer cette quivalence, fixons-nous un langage L semi-dcidable et


soit A un algorithme qui numre L. On construit un algorithme A0 ayant les proprits
recherches de la manire suivante. On modifie A de manire ce que, chaque fois que
celui-ci produit un mot en sortie, il compare ce mot avec le mot donn en entre. Si les deux
sont diffrents, on continue ; sinon, on termine en produisant Vrai en sortie.
Rciproquement, soit A un algorithme qui a les proprits de la proposition. On considre
galement un algorithme B qui considre lensemble des mots de et numre ceux qui
appartiennent L. La principale difficult est que le nombre de mots de est infini, et
le nombre dtapes de calcul excuter sur chaque mot nest pas born (il peut tre infini
pour les mots qui ne sont pas dans L, sur lesquels A peut ne pas terminer). On procde en
effectuant tous les calculs en parallle suivant la technique du dployeur universel (en
anglais, dovetailing). La technique est comme suit :
1. On numre un mot u de en utilisant B.
2. On lance la premire tape du calcul de A sur u. Pour tous les mots v numrs jusqu
prsent et dont le calcul de A na pas termin, on lance une tape supplmentaire du
calcul de A sur v.
3. Si lun des calculs de A sur un v sest termin en produisant Vrai en sortie, on produit
v en sortie.
4. On revient ltape 1. 

Les langages semi-dcidables sont ainsi ceux qui sont reconnus par un algorithme, sans
prsager du comportement de cet algorithme sur les mots qui ne sont pas dans le langage.
Les langages dcidables, par contre, ont un algorithme qui dcide si oui ou non un mot
appartient au langage :
Dfinition 10.3. Un langage L est rcursif (ou dcidable, ou calculable) sil existe un
algorithme A qui, prenant un mot u de en entre, termine et produit Vrai si u est dans L et Faux
sinon. On dit alors que lalgorithme A dcide le langage L.

videmment, tout langage dcidable est galement semi-dcidable ; dans ce qui suit, nous
allons voir que tout langage nest pas ncessairement semi-dcidable, et que tout langage
semi-dcidable nest pas ncessairement dcidable.

10.2 Langages non semi-dcidables

Dans cette partie, nous allons montrer quil existe des langages non semi-dcidables. Ce
rsultat est assez simple dmontrer et il repose sur des arguments de cardinalit, cest--
dire, du nombre de langages semi-dcidables par rapport au nombre de langages.
Nous commenons par quelques rappels de mathmatiques lmentaires. tant donn un
ensemble E, lensemble des parties de E, not 2E , est lensemble de tous les sous-ensembles
de E (X E et X 2E sont ainsi synonymes). tant donns deux ensembles A et B, on

144
10.2. LANGAGES NON SEMI-DCIDABLES

dit quune fonction f : A B est injective si (x, y) A2 , f (x) = f (y) x = y, surjective


si x0 B, x A, f (x) = x0 et bijective si elle est la fois injective et surjective. une
injection f : A B on peut naturellement associer une bijection f 1 : f (A) A dfinie par
f 1 (x0 ) = x f (x) = x0 . Sil existe une injection de A vers B, il existe une surjection de
B vers A et vice-versa. La composition de deux injections (respectivement, surjections) est
une injection (respectivement, surjection). Un ensemble infini A est dit infini dnombrable sil
existe une surjection de N (lensemble des entiers naturels) vers A.
Nous aurons galement besoin dun rsultat remarquable sur la relation entre un ensemble
et lensemble de ses parties, connu sous le nom de thorme de Cantor. Sa preuve utilise un
principe diagonal (dans lesprit du paradoxe du barbier : le barbier dune ville rase tous les gens
qui ne se rasent pas eux-mmes ; se rase-t-il lui-mme ?).
Thorme 10.4 (Cantor). Soit E un ensemble quelconque. Il nexiste pas de surjection de E vers 2E .

Dmonstration. Supposons par labsurde lexistence dun ensemble E et dune surjection f de


E vers 2E . On pose X = { e E | e < f (e) }. X est une partie de E ; f tant surjective, il existe
x E telle que f (x) = X. De deux choses lune :
soit x X : par dfinition de X, x < f (x) = X, ce qui est une contradiction ;
soit x < X, cest--dire, x < f (x) : par dfinition de X, x X, ce qui est une contradiction
galement. 

Nous sommes maintenant arms pour prouver lexistence de langages non semi-dcidables :
Thorme 10.5. Soit un alphabet. Il existe un langage L tel que L nest pas semi-dcidable.

Lide de la dmonstration est de montrer que lensemble des langages semi-dcidables est in-
fini dnombrable (car ils sont indexs par les algorithmes) tandis que lensemble des langages
est infini non dnombrable (comme ensemble des parties dun ensemble dnombrable).

Dmonstration. Soit A lensemble de tous les algorithmes numrant des langages sur .
Pour A A, on note f (A) le langage numr par A. Par dfinition de la semi-dcidabilit,
f est une surjection de A vers lensemble des langages semi-dcidables. Chaque algorithme
de A a une description finie, par exemple comme une suite dinstructions dun langage de
programmation, ou comme une suite de bits. Autrement dit, chaque algorithme de A est
dcrit par un mot dun certain langage, sur un certain alphabet 0 (disons, 0 = { 0, 1 } pour
une description par suite de bits). Donc A peut tre vu comme un sous-ensemble de 0 :
il y a une injection de A vers 0 et donc une surjection g de 0 vers A. Par ailleurs, il est
facile de construire une bijection h de N vers 0 : on numre les mots un un par taille
croissante (, 0, 1, 00, 01, 10, 11, 001. . .) et on affecte chaque entier n N le n + 1-me mot
de cette numration. Au final, f g h est une surjection de N vers lensemble des langages
semi-dcidables et ce dernier est infini dnombrable.
Considrons maintenant lensemble de tous les langages, 2 . Supposons par labsurde que

tous les langages soient semi-dcidables. Alors daprs la remarque prcdente, il existe une
surjection f g h de N vers 2 . Mais on vient de voir quil tait possible de construire une

bijection de N vers . Alors f g h 1 est une surjection de vers 2 , ce qui est


absurde daprs le thorme de Cantor. 

145
CHAPITRE 10. NOTIONS DE CALCULABILIT

Cette preuve montre en fait quil existe beaucoup plus de langages non semi-dcidables (une
infinit non dnombrable) que de langages semi-dcidables (une infinit dnombrable). Nous
donnerons la fin de la partie suivante quelques exemples de langages non semi-dcidables,
mais la plupart des langages non semi-dcidables nont en fait pas de description en franais
puisquil ny a quun nombre infini dnombrable de telles descriptions !

10.3 Langages non dcidables

Les langages non semi-dcidables ont peu dintrt en pratique : il nexiste pas dalgorithme
dnumration pour ces langages donc il est rare de sy intresser. Un langage qui serait semi-
dcidable mais non dcidable est par contre beaucoup plus intressant : on peut numrer
lensemble de ses mots, mais on ne peut pas en fournir dalgorithme de reconnaissance. Le
mathmaticien David Hilbert avait fix comme lun des grands dfis des mathmatiques du
20e sicle le problme de dcision (Entscheidungsproblem) : parvenir une mthode automatique
de calcul permettant de prouver si un rsultat mathmatique est vrai ou faux. Lexistence de
langages semi-dcidables (donc formellement descriptibles) mais non dcidables (donc pour
lequel il est impossible de dcider de lappartenance dun mot) a pour consquence limpos-
sibilit de rsoudre le problme de dcision de Hilbert. Certains langages correspondant
des concepts trs utiles en pratique se trouvent tre semi-dcidables mais non dcidables.
Nous allons montrer que cest le cas du langage de larrt.
Le langage de larrt est lensemble H des mots sur un alphabet donn dcrivant les couples
dalgorithmes et entres tels que lalgorithme termine sur cette entre. Formellement, soit
= { 0, 1 }. Soit A lensemble des algorithmes prenant en entre un mot u de . Quitte
rencoder en binaire les descriptions des algorithmes, on peut voir tout algorithme A de A
comme un mot de . Quitte galement ajouter un codage spcial pour les paires, on peut
voir toute paire forme dun algorithme A A et dun mot u comme un mot f (A, u)
de , f tant une injection de A vers (on peut faire en sorte que f et f 1 soient
exprimables par un algorithme de A). Le langage de larrt est lensemble H tel que
x H si et seulement si il existe A A et u avec x = f (A, u) et A sarrtant sur u.
La preuve de non-dcidabilit du langage de larrt utilise encore une fois un argument
diagonal.

Thorme 10.6 (Turing). Le langage de larrt est semi-dcidable mais non dcidable.

Dmonstration. Montrons tout dabord que H, le langage de larrt, est semi-dcidable. On


construit un algorithme B qui prend en entre un mot x de et procde comme suit :
1. si x < f (A, ), lalgorithme retourne Faux ;
2. sinon, lalgorithme calcule f 1 (x) = (A, u) et applique lalgorithme A lentre u ; si ce
calcul termine, lalgorithme retourne Vrai.
On a choisi B tel que si x H, B retourne Vrai sur x (et sinon, B peut soit retourner Faux, soit
ne pas terminer) donc H est semi-dcidable.
Montrons maintenant que H nest pas dcidable. On procde par labsurde : soit B un al-
gorithme qui dcide H. A et sont deux langages dnombrables (cf. section prcdente)

146
10.3. LANGAGES NON DCIDABLES

donc on peut numroter les algorithmes de A et les mots de par A0 , A1 . . . et u0 , u1 . . .,


respectivement. On construit un algorithme B0 prenant en entre un mot ui de de la ma-
nire suivante : on commence par appliquer B f (Ai , ui ). Si B renvoie Faux, on renvoie Faux ;
sinon, on part dans une boucle infinie. B0 tant un algorithme de A, il existe un entier k tel
que B0 = Ak . Appliquons maintenant lalgorithme de dcision B f (B0 , uk ). De deux choses
lune :
B retourne Vrai sur f (B0 , uk ). Ceci signifie que B0 sarrte sur lentre uk , et donc,
par dfinition de B0 , que B retourne Faux sur f (Ak , uk ) = f (B0 , uk ), ce qui est une
contradiction.
B retourne Faux sur f (B0 , uk ). Donc B0 ne sarrte pas sur lentre uk et donc, comme
B sarrte sur toute entre, B renvoie Vrai avec lentre f (Ak , uk ) = f (B0 , uk ). Nous
aboutissons de nouveau une contradiction. 

Largument diagonal, lide de coder les algorithmes par des mots du langage et le rsultat
lui-mme rappellent la preuve du thorme dincompltude de Gdel, qui est un analogue
pour la logique mathmatique du thorme de larrt de Turing en logique informatique.
Le thorme de Gdel nonce que dans tout systme formel permettant dexprimer larith-
mtique, il existe des noncs mathmatiques que lon ne peut ni prouver ni infirmer. Le
thorme de larrt montre que quand on se fixe un modle de calcul suffisamment puissant,
il existe des proprits mathmatiques de ce modle de calcul qui ne peuvent tre calcules.
Beaucoup de problmes concrets dans de nombreux domaines de linformatique sont ainsi
dcrits par des langages semi-dcidables mais non dcidables. Ici, le problme dterminer si
x X a la proprit P est dcrit par le langage lensemble des x X qui ont la proprit P .
Dans tous les exemples ci-dessous, lensemble des x X lui-mme est toujours dcidable.

Dterminer si une grammaire hors-contexte est ambigu.

Dterminer si la fonction calcule par un programme dun langage de programmation


classique a nimporte quelle proprit non triviale (par exemple, elle ne lve jamais
dexceptions). Ce rsultat est le thorme de Rice.

Dterminer si une requte crite dans le langage dinterrogation de bases de donnes


SQL renvoie un rsultat sur au moins une base de donnes (thorme de Trakhtenbrot).

tant donns deux ensembles de mots, dterminer si une squence de mots du premier
ensemble peut tre identique une squence de mots du second ensemble (problme
de correspondance de Post).

tant donnes des rgles de calcul dans un groupe, dterminer si deux expressions sont
gales.

Un exemple de langage non semi-dcidable est le complment du langage de larrt. Un tel


langage, dont le complment est rcursivement numrable, est dit co-rcursivement num-
rable (not co-r.e.). On peut construire un langage qui nest ni r.e. ni co-r.e. en combinant deux
langages possdant ces proprits : par exemple, lensemble des couples dalgorithmes dont
le premier termine et le second ne termine pas sur une entre donne.

147
CHAPITRE 10. NOTIONS DE CALCULABILIT

10.4 Modles de calculs

Nous prcisons maintenant ce que nous entendons par un algorithme dans les parties qui
prcdent. Rappelons quun algorithme est un procd de calcul automatique prenant en
entre des donnes ventuelles (un mot sur un certain alphabet) et produisant en sortie des
donnes (un mot sur un certain alphabet). Une des mthodes les plus pratiques de formaliser
cette notion dalgorithme est par le biais des machines de Turing, qui peuvent tre vues comme
des automates finis bande. Nous dfinissons les machines de Turing dans le cas simple o la
sortie est soit Vrai soit Faux ; on peut facilement tendre la dfinition au cas o la machine
produit une sortie non boolenne, par exemple en rajoutant une seconde bande.
Dfinition 10.7. Une machine de Turing (dterministe) est la donne de :
(i) un ensemble fini Q dtats ;
(ii) un alphabet de travail ;
(iii) b est un symbole spcial blanc ;
(iv) \{b} est lalphabet dentre/sortie ;
(v) q0 est un tat initial ;
(vi) F Q est un ensemble dtats finaux ;
(vii) : Q\F Q {L, R} est une fonction de transition.
tant donne une machine de Turing (Q, , b, , q0 , F, ), un calcul sur lentre u est une
squence de configurations { (qk , k , ik ) }16k6n o qk Q est ltat courant, k : Z est une
fonction associant un symbole chaque position dune bande virtuelle infinie, et ik Z est la position
actuelle sur la bande. On impose que la squence de configurations respecte les proprits suivantes :
q1 = q0 , i1 = 0, 1 (x) = ux pour 1 6 x 6 |u| et 1 (x) = b pour x < [1, |u|].
Pour 1 6 k 6 n 1, (qk , k ) = (qk+1 , k+1 , ) avec :
ik+1 = ik + 1 si = R, ik+1 = ik 1 sinon ;
Pour x , ik , k (x) = k+1 (x) ;
Pour x = ik , k (x) = k et k+1 (x) = k+1 .
Un calcul dune machine de Turing est dit acceptant (ou produisant Vrai) sil conduit un tat
final, chouant (ou produisant Faux) sil conduit un tat non final depuis lequel il nexiste pas de
transition possible.

De mme quun automate fini dterministe, une machine de Turing effectue un calcul sur un
mot dentre pour dterminer si le mot est accept ou non. Ici, le calcul est plus complexe que
pour un automate car les transitions peuvent galement dpendre des symboles crits sur
une bande de papier de taille non borne (dcrite par les k ) ; noter cependant quun calcul
acceptant ou chouant donn nutilisera quune partie finie de cette bande.
Pour un exemple de machine de Turing et de son excution, voir http://ironphoenix.org/
tril/tm/ (Palindrome Detector).
Les machines de Turing peuvent tre utilises comme modle de calcul pour les notions
de semi-calculabilit et calculabilit, ce qui donne un cadre formel aux rsultats prsents
dans les parties prcdentes. Elles sont galement utilises pour formaliser les notions de
complexit dun problme : la complexit est la longueur du calcul que doit faire une machine
de Turing pour rsoudre ce problme en fonction de la taille de lentre.

148
10.4. MODLES DE CALCULS

De manire trs intressante, un grand nombre dautres formalismes ont le mme pouvoir
dexpression que les machines de Turing, cest--dire quils permettent de dcider exactement
les mmes langages.
-calcul. Introduit par Church paralllement Turing, ce formalisme, la base des langages
de programmation fonctionnels, est bas sur la dfinition et lapplication de fonctions
rcursives, dcrites dans un langage logique muni de rgles de rduction permettant de
rcrire ces formules logiques.
Fonctions rcursives. La thorie des fonctions rcursives a t labore par Gdel et Kleene
comme modle de fonction calculable bas sur un ensemble de fonctions et primitives
de base : fonctions constantes, composition, rcursion, etc.
Machines registres. Une alternative aux machines de Turing plus proche des ordinateurs
moderne est celle des machines registres : ici, la mmoire nest plus reprsente comme
une bande infinie, mais comme un ensemble de registres mmoire (ou variables) qui
peuvent tre lus et crits dans un ordre quelconque. Larchitecture de von Neumann,
utilise pour concevoir les premiers ordinateurs, est un exemple de ces machines
registres.
Langages de programmation Turing-complets. La plupart des langages utiliss pour d-
velopper des logiciels 1 sont Turing-complets : si on suppose quils sont excuts dans
un environnement sans limite de mmoire, ils permettent de dcider nimporte quel
langage dcidable par une machine de Turing.
Les grammaires gnratives de type 0, introduites par Chomsky, ne sont pas un modle de
calcul proprement parler, mais engendrent exactement les langages semi-dcidables.
Cette remarquable quivalence de modles formels aussi divers de ce que peut tre un
processus automatique de calcul a conduit Church et Turing formuler ce quon appelle
la thse de ChurchTuring : ce qui est intuitivement calculable (ou ce qui est humainement
calculable), cest ce qui est calculable par une machine de Turing (ou par le -calcul, etc.).

1. Les exceptions sont quelques rares langages qui sont utiliss pour des buts spcifiques, comme SQL sans
les fonctions utilisateurs pour linterrogation de bases de donnes relationnelles, ou XPath pour la navigation
dans les arbres XML.

149
CHAPITRE 10. NOTIONS DE CALCULABILIT

150
Deuxime partie

Annexes
Chapitre 11

Complments historiques

Ce chapitre porte sur lhistoire de linformatique. Le but est de donner un contexte historique
aux grandes notions et rsultats abords dans le cours, en expliquant brivement qui ont
t les logiciens et informaticiens qui ont laiss leurs noms aux notions de calculabilit et de
langages formels.

11.1 Brves biographies

John Backus (Amricain, 1924 2007)

est le concepteur du premier langage de programmation de haut niveau


compil, Fortran. Co-auteur avec Peter Naur dune notation standard pour
les grammaires hors-contexte (BNF ou BackusNaur Form), il a obtenu le prix
Turing en 1977 pour ses travaux sur les langages de programmation.

Janusz Brzozowski (Polono-Canadien, n en 1935)

est un chercheur en thorie des automates, qui fut ltudiant de Edward


J. McCluskey. Il a apport de nombreuses contributions dans ce domaine,
et est en particulier connu pour lalgorithme de minimisation de Brzozowski et
pour lalgorithme de Brzozowski et McCluskey (section 4.2.2).

Chapitre rdig par Pierre Senellart.


CHAPITRE 11. COMPLMENTS HISTORIQUES

Georg Cantor (Allemand, 1845 1918)

est linventeur de la thorie des ensembles et des notions dordinal et de


cardinal dun ensemble infini. Le nom de Cantor est donn un ensemble
dont il a imagin la construction ; cet ensemble, parmi les premiers exemples
de fractales, a des caractristiques topologiques et analytiques trs inhabi-
tuelles. Le thorme de Cantor nonce quun ensemble nest jamais en bijection
avec lensemble de ses parties, ce qui a pour consquence que lensemble
R des nombres rls nest pas en bijection avec lensemble N des entiers
naturels. Ce rsultat, et largument de diagonalisation utilis dans sa preuve,
fut trs mal accueilli par certains mathmaticiens de lpoque, y compris de
trs grands comme Henri Poincar. La fin de la vie de Georg Cantor fut marque par une
longue priode de dpression et de rcurrents sjours en hpital psychiatrique.

Noam Chomsky (Amricain, n 1928)

est le fondateur de la linguistique moderne. Pour dcrire le langage naturel, il


a dvelopp la notion de grammaire gnrative (en particulier, de grammaire
hors-contexte) et a tudi les pouvoirs dexpression de diffrentes classes de
grammaire au sein de la hirarchie de Chomsky. Ces travaux sappuient sur lhy-
pothse dune grammaire universelle, qui suppose que certains mcanismes du
langage, universels et indpendants de la langue, sont pr-cbls dans le cer-
veau. Ses travaux ont eu un impact majeur en linguistique, en traitement du
langage naturel, et en informatique thorique. Noam Chomsky est galement connu pour
son activisme politique trs critique de la politique trangre des tats-Unis.

Alonzo Church (Amricain, 1903 1995)

tait un pionnier de la logique informatique. Stephen C. Kleene et Alan Tu-


ring furent ses tudiants. Il proposa le -calcul (anctre des langages de
programmation fonctionnels comme Lisp) comme modle de calculabilit et
dmontra, indpendamment de Turing, limpossibilit de rsoudre le pro-
blme de dcision de Hilbert (thorme de ChurchTuring). Il est galement
connu pour la thse de ChurchTuring, une hypothse qui postule que les
diffrents modles de calculabilit proposs (-calcul, machines de Turing,
fonctions rcursives gnrales, machines de von Neumann), tous dmontrs
quivalents, correspondent la notion intuitive de calculabilit ; dans sa version la plus gn-
rale, cette thse affirme que tout ce qui peut tre calcul par la nature, et donc par le cerveau
humain, peut ltre par une machine de Turing.

154
11.1. BRVES BIOGRAPHIES

Augustus De Morgan (Britannique, 1806 1871)

fut lun des premiers tenter de baser les mathmatiques sur un raisonne-
ment logique formel. Les lois de De Morgan expriment que la ngation dune
disjonction est la conjonction des ngations, et vice-versa.

Victor Glushkov (Sovitique, 1923 1982)

fut un pionnier de la thorie de linformation, de la thorie des automates et


de la conception des premiers ordinateurs en Union sovitique. Il a donn son
nom la construction de Glushkov dun automate partir dune expression
rationnelle, alternative la construction de Thompson.

Kurt Gdel (Autrichien, 1906 1978)

est connu pour ses travaux sur la thorie des fonctions rcursives, un modle
de calculabilit, mais surtout pour deux rsultats fondamentaux de logique
mathmatique : le thorme de compltude de Gdel montre que tout rsul-
tat vrai dans tout modle de la logique du premier ordre est dmontrable ;
le thorme dincompltude de Gdel montre que dans tout systme formel
permettant dexprimer larithmtique, il existe des noncs mathmatiques
que lon ne peut ni prouver ni infirmer. Il mourut dans des circonstances
tragiques : victime de paranoa, il tait convaincu quon cherchait lempoi-
sonner, et refusa petit petit de salimenter.

Sheila Greibach (Amricaine, ne 1939)

est une chercheuse en langages formels. Elle est en particulier connue pour la
forme normale de Greibach dune grammaire hors-contexte et ses consquences
sur lquivalence entre grammaires hors-contexte et automates pile.

155
CHAPITRE 11. COMPLMENTS HISTORIQUES

David Hilbert (Allemand, 1862 1943)

est reconnu comme lun des plus grands mathmaticiens ayant exist. Il a
apport des contributions majeures dans de nombreux domaines, comme
la gomtrie, lanalyse (p. ex., espaces de Hilbert), la physique mathmatique
et la logique. En 1900, il nonce 23 problmes ouverts importants des ma-
thmatiques. Cette liste a eu une trs grande influence sur la recherche en
mathmatique au 20e sicle. Lun de ces problmes, le problme de dcision
(ou Entscheidungsproblem), consistait obtenir une procdure automatique
permettant de dcider si un nonc mathmatique est vrai ou faux. En 1920,
Hilbert nonce un programme pour laxiomatisation des mathmatiques, par lequel tout
nonc mathmatique pourrait tre prouv ou infirm partir des axiomes. Kurt Gdel a
montr que cela tait impossible ; Alonzo Church et Alan Turing en ont indpendamment d-
duit limpossibilit de rsoudre le problme de dcision. Lpitaphe de David Hilbert rsume
sa vision de la science :
Wir mssen wissen. (Nous devons savoir.)
Wir werden wissen. (Nous saurons.)

Stephen C. Kleene (Amricain, 1909 1994)

est linventeur des expressions rationnelles et a apport des contributions


majeures la thorie des langages rcursifs, un modle de calculabilit.
Loprateur dtoile, caractristique des expressions rationnelles, porte son
nom, de mme que le thorme dquivalence entre expressions rationnelles
et automates finis (section 4.2.2).

Vladimir Levenshtein (Russe, n en 1935)

est un chercheur dans les domaines de la thorie de linformation et des


codes correcteurs derreur. Il a introduit dans ce cadre la distance ddition
qui porte son nom.

156
11.1. BRVES BIOGRAPHIES

Edward J. McCluskey (Amricain, n en 1929)

est connu pour ses travaux sur la conception logique des circuits lectro-
niques. Il est en particulier lauteur avec W. V. Quine de la mthode de Quine
McCluskey de minimisation de fonctions boolennes en utilisant la notion
dimpliquants premiers.

Edward F. Moore (Amricain, 1925 2003)

est lun des fondateurs de la thorie des automates. Il introduit lalgorithme de minimisation
qui porte son nom, et la notion dautomate avec sortie (introduite galement indpendam-
ment par George H. Mealy).

Peter Naur (Danois, 1928 2016)

est un chercheur en informatique qui a travaill en particulier sur la concep-


tion des langages de programmation. Co-auteur avec John Backus dune
notation standard pour les grammaires hors-contexte (BNF ou BackusNaur
Form), il a obtenu le prix Turing en 2005 pour ses travaux sur le langage
Algol.

John von Neumann (Hongro-Amricain, 1903 1957)

, en plus dtre un des pres fondateurs de linformatique, a fourni des contri-


butions majeures dans de nombreux domaines scientifiques (en particulier,
thorie des ensembles, mcanique quantique, thorie des jeux). En informa-
tique, il est connu pour les automates cellulaires, le tri fusion, et bien sr
larchitecture de von Neumann, le modle formel de calcul qui se rapproche
le plus des ordinateurs actuels. Ce modle a t labor lors de ses travaux
sur la construction des premiers ordinateurs (ENIAC, EDVAC). Durant la
deuxime guerre mondiale, il a travaill dans le projet amricain Manhattan
de conception de la bombe atomique, et a fait partie de la commission amricaine lner-
gie atomique pendant la guerre froide. Lorganisation IEEE dcerne chaque anne une trs
prestigieuse mdaille John von Neumann un chercheur en informatique.

157
CHAPITRE 11. COMPLMENTS HISTORIQUES

Ken Thompson (Amricain, n en 1943)

est un informaticien notable pour ses contributions la fois thoriques et


appliques. Il a popularis les expressions rationnelles en crant notamment
lutilitaire Unix grep, bas sur la construction (de Thompson, section 4.2.2) dun
automate dcrivant lexpression rationnelle. Il a travaill sur la conception du
langage B avec Dennis Ritchie, anctre du langage C. Toujours avec Ritchie,
il est lorigine du systme dexploitation Unix. Il a galement labor avec
Rob Pike lencodage de caractres UTF-8. Il obtient le prix Turing en 1983
avec Dennis Ritchie pour leurs recherches sur les systmes dexploitation et limplmentation
dUnix.

Alan Turing (Britannique, 1912 1954)

est souvent considr comme le premier informaticien. Ses travaux sur le


problme de dcision le conduisent introduire le modle de calculabilit
connu aujourdhui sous le nom de machine de Turing. En se basant sur les
travaux de Kurt Gdel, il prouve lindcidabilit de larrt dune machine
de Turing, ce qui montre limpossibilit dobtenir une solution gnrale au
problme de dcision (thorme de ChurchTuring). Durant la seconde guerre
mondiale, il fut lun des principaux cryptanalystes qui dchiffrrent les codes
de communication de larme allemande. Aprs la guerre, il travailla sur la
conception des premiers ordinateurs. Alan Turing est galement connu pour la notion de test
de Turing, une exprience de pense permettant de dfinir la notion dintelligence artificielle.
En 1952, Alan Turing fut condamn pour homosexualit une castration chimique. Il meurt
mystrieusement en 1954 (empoisonnement par une pomme enrobe de cyanure, limage
du film de Walt Disney Blanche-Neige, quil affectionnait particulirement), probablement un
suicide. La socit savante ACM dcerne chaque anne un prix Turing, considr comme la
plus haute distinction que peut recevoir un chercheur en informatique.

11.2 Pour aller plus loin

Pour approfondir lhistoire de la thorie des langages, voir les auteurs suivants : Hodges
(1992), Doxiadis et Papadimitriou (2010), Dowek (2007), Turing (1936), Barsky (1997), Perrin
(1995).

158
11.2. POUR ALLER PLUS LOIN

Attributions
Certaines photographies sont reproduites en vertu de leur licence dutilisation Creative
Commons, et attribues :
John Backus : Pierre Lescanne
Stephen C. Kleene : Konrad Jacobs (Mathematisches Forschungsinstitut Oberwolfach)
Peter Naur : Eriktj (Wikipedia EN)
Kenneth Thompson : Bojars (Wikimedia)
Les photographies suivantes sont reproduites en vertu du droit de citation :
Janusz Brzozowski
Alonzo Church
Sheila Greibach
Vladimir Levenshtein
Edward F. McCluskey
Les autres photos sont dans le domaine public.

159
CHAPITRE 11. COMPLMENTS HISTORIQUES

160
Chapitre 12

Correction des exercices

12.1 Correction de lexercice 4.5

1. Pour L1 , on vrifie que le choix de I1 = {a}, F1 = {a} et T1 = {ab, ba, bb} garantit L1 =
(I1 ? ? F1 ) \ ? T1 ? .
Pour L2 , il en va de mme pour I2 = {a}, F2 = {b} et T2 = {aa, bb}.

Note : Pour L1 , il suffit de prendre T1 = {ab} pour interdire toute occurrence


de b dans L1 .

2. Si lon veut accepter les mots de L1 et de L2 , il est ncessaire davoir a I, a, b F,


et T contient au plus bb. Deux possibilits : soit T est vide, mais alors le langage
correspondant ne contient que a ; soit T = {bb}, auquel cas un mot comme aab est dans
le langage local dfini par I, F et T, mais pas dans le langage dnot par aa? + ab(ab)? .
3. Pour lintersection, il suffit dutiliser le fait que A \ B = A B. L1 L2 scrit alors comme
une intersection de six termes ; en utilisant que le fait que lintersection est associative
et commutative, et que la concatnation est distributive par rapport lintersection, il
vient :
L1 L2 = ((I1 I2 )? ? (F1 F2 )) \ (? (T1 T2 )? )
Ce qui prouve que lintersection de deux langages locaux est un langage local.
Pour lunion, le contre-exemple de la question 2 permet de conclure directement.
4. I, F et T sont finis donc rationnels, ? galement ; les rationnels sont stables par conca-
tnation, intersection, complment. Ceci suffit pour conclure que tout langage de la
forme (I? ? F) \ ? T? est rationnel.
5. Un langage local reconnaissant les mots de C doit ncessairement avoir a, b I, a, b, c F.
On cherche le plus petit langage possible, ce qui conduit interdire tous les facteurs de
longueur 2 qui ne sont pas dans au moins un mot de c : T = {ac, bb, ba, cb, cc}.
Lautomate correspondant a un tat initial q0 , qui a des transitions sortantes sur les
symboles de I, et un tat par lettre : qa , qb , qc . Ces tats portent la mmoire du dernier
symbole lu (aprs un a, on va dans qa ...). Les transitions sortantes de ces tats sont
dfinies de faon interdire les facteurs de T : aprs un a, on peut avoir a ou b mais pas
CHAPITRE 12. CORRECTION DES EXERCICES

c, do les transitions (qa , a) = qa , (qa , b) = qb . De mme, on a : (qb , c) = qc , (qc , a) = qa .


Finalement, un tat qx est final si et seulement x F. Ici qa , qb et qc sont dans F.

Note : De nombreux lves ont correctement identifi I, F et T mais ont


construit un automate qui ne reconnaissait quun ensemble fini de mots, ce
qui nest pas possible ici.

6. Lintuition de ce beau rsultat est quun automate fini A est dfini par son tat initial,
ses tats finaux, et ses transitions. Transposs dans lensemble des chemins dans A,
ltat initial est caractris par les prfixes de longueur 1 des chemins ; les tats finaux
par les suffixes de longueur 1, et les transitions par des facteurs de longueur 2.
Formellement, soit L rationnel et A = (, Q, qo , F, ) un automate fini dterministe re-
connaissant L. On dfinit L0 sur lalphabet 0 = Q Q par les trois ensembles :
I = {(q0 , a, (qo , a)), a }
F = {(q, a, r), q Q, a, r (a, q) F}
0 0 \ {(q, a, r)(r, b, p), q Q, a, b, r (a, q), b (r, b)}.
Soit maintenant un mot u de L. Son calcul dans A est par construction un mot w de L0
qui vrifie de plus (w) = u, donc L (L0 ). Rciproquement, si u = (w), avec w dans
L0 , alors on dduit immdiatement un calcul pour u dans A, et donc u L.

12.2 Correction de lexercice 4.10

1. A nest pas dterministe. Ltat 0 a deux transitions sortantes tiquetes par le symbole
b, vers 0 et vers 1.
2. Le langage reconnu par A est lensemble des mots se terminant par le suffixe b(c + a)? d,
soit ? b(c + a)? d.
3. faire...

12.3 Correction de lexercice 4.14

1. La construction de Thompson conduit lautomate 12.1.


1 2 a 3 4 5 n 6

0 13


7 8 9 10 11 12
n a

Automate 12.1 Automate dorigine pour (a? n | na? )

162
CORRECTION DE LEXERCICE 4.14

tat Fermeture tat Fermeture


0 0, 1, 2, 4, 5, 7 7 7
1 1, 2, 4, 5 8 8, 9, 10, 12, 13
2 2 9 9, 10, 12, 13
3 2, 3, 4, 5 10 10
4 4, 5 11 10, 11, 12, 13
5 5 12 12, 13
6 6, 13 13 13

Table 12.2 -fermetures (avant) des tats de lautomate 12.1


Pour chaque tat, lensemble des tats accessibles par transitions spontanes.

2. Le calcul de l-fermeture conduit aux rsultats du tableau 12.2.


3. La suppression des transitions seffectue en court-circuitant ces transitions. La sup-
pression arrire des transitions spontanes consiste agrger les transitions spontanes
avec les transitions non spontanes qui sont leur aval. En dautres termes, pour toute
transition non spontane (q, a) = q0 , on ajoute une transition partant de chaque tat en
amont de q, sur ltiquette a, arrivant en q0 . De mme, tout tat en amont dun tat final
devient final.
En utilisant le tableau des cltures avant (tableau 12.2), ajouter une transition (p, a) = q0
pour tout tat p tel que q appartienne l-fermeture avant de p. Marquer ensuite comme
final tous les tats dont la fermeture avant contient un tat final.

tat Fermeture tat Fermeture


0 0 7 0, 7
1 0, 1 8 8
2 0, 1, 2, 3 9 8, 9
3 3 10 8, 9, 10, 11
4 0, 1, 3, 4 11 11
5 0, 1, 3, 4, 5 12 8, 9, 11, 12
6 6 13 6, 8, 9, 11, 12, 13

Table 12.3 -fermetures arrires des tats de lautomate 12.1


Pour chaque tat, lensemble des tats co-accessibles par transitions spontanes.

Alternativement, en utilisant le tableau des cltures arrires (tableau 12.3), il faut donc
ajouter une transition (p, a) = q0 pour tout tat p dans l-fermeture arrire de q. On
marque ensuite comme final tous les tats dans la fermeture arrire des tats final.
Cette procdure aboutit lautomate 12.4.
Les tats 1, 2, 4, 5, 7, 9, 10, 12 et 13 sont devenus inutiles dans lautomate 12.4, si on les
limine, on obtient lautomate 12.5. Cet automate nest pas dterministe, ltat 0 ayant
deux transitions sortantes pour le symbole n.
4. Aprs dterminisation par la mthode des sous-ensembles, on aboutit finalement
lautomate 12.6.

163
CHAPITRE 12. CORRECTION DES EXERCICES

n
a
a n
a n
1 2 3 4 5 6

a
0 n 13
a
a
n
7 8 9 10 11 12
n a
a

Automate 12.4 Automate sans transition spontane pour (a? n | na? )

n
a

3 6

a
0 n
a
a
n
8 11

Automate 12.5 Lautomate 12.4, mond

n
3 6
a

0
n a

a
6, 8 11

Automate 12.6 Automate dterministe pour (a? n | na? )

164
12.4. CORRECTION DE LEXERCICE 4.15

12.4 Correction de lexercice 4.15

1. Aprs limination de la transition spontane, la mthode de construction des sous-


ensembles permet de construire lautomate 12.7.

1 b
a b
0 a 2

b
3

Automate 12.7 Dterminisation de lautomate 4.14

12.5 Correction de lexercice 4.19

1. Les automates A1 et A2 sont reprsents respectivement verticalement et horizontale-


ment dans la reprsentation de lautomate 12.8.
2. Lapplication de lalgorithme construisant lintersection conduit lautomate 12.8.
3. a. Lalgorithme dlimination des transitions demande de calculer dans un premier
temps l-fermeture de chaque tat. Puisque les seules transitions sont celles
ajoutes par la construction de lunion, on a :
closure(q0 ) = {q10 , q20 }
q Q1 Q2 , closure(q) = {q}
Llimination des deux transitions conduit donc ajouter les transitions sui-
vantes : a , (q0 , a) = {(q10 , a), (q20 , a)}. q0 est bien non-dterministe et cest le
seul tat dans ce cas, puisquaucune autre transition nest rajoute.
b. Lalgorithme de construction de la partie utile du dterminis construit de proche
en proche les transitions des tats accessibles depuis q0 . On la vu, le traitement de
q0 ne construit que des tats utiles de la forme {(q10 , a), (q20 , a)}, qui correspondent
des paires de Q1 Q2 , car A1 et A2 sont dterministes. Supposons qu ltape n
de lalgorithme, on traite un tat q = {q1 , q2 }, avec q1 Q1 et q2 Q2 . Par dfinition
du dterminis on a :

a , (q, a) = 1 (q1 , a) 2 (q2 , a)

Les Ai tant dterministes, chacun des i (qi , a) est un singleton de Qi (pour i =


1, 2), les nouveaux tats utiles crs lors de cette tape correspondent bien des
doubletons de Q1 Q2 .
On note galement que, par construction, les transitions de A sont identiques aux
transitions de la construction directe de lintersection.

165
CHAPITRE 12. CORRECTION DES EXERCICES

a, b

a, b a, b

a, b

a, b
a, b a, b
b
b

a
a
a, b a, b
a, b
a, b

Automate 12.8 Les automates pour A1 ( gauche), A2 (en haut) et leur intersection (au
milieu)

c. Les tats finaux du dterminis sont ceux qui contiennent un tat final de A1
ou de A2 . Les seuls non-finaux sont donc de la forme : {q1 , q2 }, avec la fois q1
non-final dans A1 et q2 non-final dans A2 . Puisque les tats non-finaux de A1
sont prcisment les tats finals de A1 (et idem pour A2 ), les tats finals de A
correspondent des doubletons {q1 , q2 }, avec q1 dans F1 et q2 dans F2 .
On retrouve alors le mme ensemble dtats finals que dans la construction directe.
La dernire vrification est un peu plus fastidieuse et concerne ltat initial q0 .
Notons tout dabord que q0 na aucune transition entrante (cf. le point [b]). Notons
galement que, suite llimination des transitions , q0 possde les mmes tran-
sitions sortantes que celles quaurait ltat {q10 , q20 } du dterminis. Deux cas sont
envisager :

soit la partie {q10 , q20 } nest pas construite par lalgorithme de dterminisation
et on peut assimiler q0 cette partie ;

soit elle est construite et on peut alors rendre cette partie comme tat initial
et supprimer q0 : tous les calculs russis depuis q0 seront des calculs rus-
sis depuis {q10 , q02 }, et rciproquement, puisque ces deux tats ont les mmes
transitions sortantes.

166
12.6. CORRECTION DE LEXERCICE 4.20

12.6 Correction de lexercice 4.20

Le langage contenant les mots dont la longueur est divisible par 3 est reconnu par un automate
trois tats, chaque tat correspondant un reste de la division par 3. De 0 on transite vers
1 (indpendamment de lentre) ; de 1 on transite vers 2, et de 2 vers 0, qui est la fois initial
et final.
Le langage a b est reconnu par un automate 3 tats. Ltat initial a une unique transition
sortante sur le symbole dentre a vers ltat 1, dans lequel on peut soit boucler (sur a ou b)
ou bien transiter dans 2 (sur b). 2 est le seul tat final.
Lintersection de ces deux machines conduit A1 , lautomate 12.9 non-dterministe, qui
correspond formellement au produit des automates intersects. Lapplication de la mthode
des sous-ensembles conduit A2 , lautomate 12.10, dterministe.

a, b

0 a 1 2 3
a, b a, b

b
4

Automate 12.9 Lautomate A1 de la question 1

a, b

{0} {1} {2} {3}


a a, b a

a, b b

{3, 4}

Automate 12.10 Lautomate A2 de la question 1

12.7 Correction de lexercice 4.35

1. En utilisant les mthodes du cours, on obtient lautomate 12.11, dterminis. Cet auto-
mate est appel larbre accepteur des prfixes (il comprend exactement un tat par prfixe
dans le langage).
2. (a) Les tats ( f ) et (p) sont deux tats finaux sans transition sortante : ils sont indistin-
guables ; ltat ( f ) est final quand (e) est non-final : le mot permet de les distinguer
(i.e. quil conduit un calcul russi depuis ( f ) mais pas depuis (e)).

167
CHAPITRE 12. CORRECTION DES EXERCICES

i e r a i
a b c d e f

o
l g n s
h i

q e r
r s
o
i
s e r a i p
k l m n o

Automate 12.11 Le dictionnaire dterminis

(b) Notons I la relation dindistinguabilit : cette relation est trivialement rflexive et


symtrique. Soient p et q indistinguables et q et r indistinguables : supposons que
p et r soient distingus par le mot v. On a alors un calcul russi depuis p qui choue
depuis r ; ceci est absurde : sil russit depuis p il russira depuis q, et russira donc
galement depuis r.
3. La combinaison de ( f ) et (p) conduit un automate dans lequel ces deux tats sont
remplacs par un unique tat ( f p), qui est final. ( f p) possde deux transitions entrantes,
toutes deux tiquetes par i ; ( f p) na aucune transition sortante.
4. Supposons que A0 rsulte de la fusion de p et q indistinguables dans A, qui sont
remplacs par r. Il est tout dabord clair que L(A) L(A0 ) : soit en effet u dans L(A), il
existe un calcul russi pour u dans A et :
soit ce calcul vite les tats p et q et le mme calcul existe dans A0 ; avec les notations
de lnonc, il en va de mme si ce calcul vite ltat q.
soit ce calcul utilise au moins une fois q : (q0 , u) `A (q, v) `A (s, ). Par construction
de A0 on a (q0 , u) `A0 (r, v) ; par ailleurs p et q tant indistinguable, il existe un calcul
(p, v) `A (s0 , ) avec s0 F dans A qui continue dexister dans A0 (au renommage
de p en r prs). En combinant ces deux rsultats, on exhibe un calcul russi pour
u dans A0 .
Supposons maintenant que L(A) soit strictement inclus dans L(A0 ) et que le mot v de
L(A0 ) ne soit pas dans L(A). Un calcul russi de v dans A0 utilise ncessairement le
nouvel tat r, sinon ce calcul existerait aussi dans A ; on peut mme supposer quil
utilise une fois exactement r (sil utilise plusieurs fois r, on peut court-circuiter les
boucles).
On a donc : (q00 , v = v1 v2 ) `A0 (r, v2 ) `A0 (s, ), avec s F0 . Dans A, ce calcul devient soit
(q0 , v1 ) `A p suivi de (q, v2 ) `A (s, ) ; soit (q0 , v1 ) `A q suivi de (p, v2 ) `A (s, ) ; dans la

168
12.8. CORRECTION DE LEXERCICE 5.21

premire de ces alternatives, il est de plus assur que, comme v nest pas dans A, il
nexiste pas de calcul (p, v2 ) aboutissant dans un tat final. Ceci contredit toutefois le
fait que p et q sont indistinguables.
5. Le calcul de la relation dindistinguabilit demande de la mthode : dans la mesure o
lautomate est sans cycle, ce calcul peut seffectuer en considrant la longueur du plus
court chemin aboutissant dans un tat final.
Commenons par linitialisation : {d, f, i, n, s, p} sont distingus de tous les autres tats
par leur finalitude . On distingue deux sous-ensembles : { f, i, s, p} sont distingus de
d et de n par le mot ai, mais sont indistinguables entre eux. ce stade, on ne peut
conclure sur d et n.
Les tats desquels dbute un calcul russi de longueur 1 sont : c, e, h, r, m, o : c et m
sont distingus des autres par le mot rai, r et h sont distingus du couple (e, o) par
respectivement s et r, et sont aussi distingus entre eux ; e et o sont indistinguables.
Les tats depuis lesquels dbutent un calcul russi de longueur 2 sont d, g, q, n. g et
q sont distingus des deux autres, et distingus entre eux. En revanche, d et n sont
indistinguables.
En poursuivant ce raisonnement, on aboutit finalement aux classes dquivalence sui-
vantes : { f, i, p, s}, {e, o}, {d, n}, {m, c}, {a}, {b}, {g}, {h}, { j}, {k}, {l}, {q}, {r}.
6. Aprs ralisation des fusions, on obtient lautomate 12.12.

i o n
l s
e
r a i
e
o r
s i e

On conoit aisment que pour un dictionnaire du franais, ce principe de factorisation


des suffixes conduise des rductions trs sensibles du nombre dtat de lautomate :
chaque verbe du franais (environ 10 000) possde une cinquantaine de formes diffrentes ;
parmi les verbes, les verbes du premier groupe sont de loin les plus nombreux et ont des
suffixes trs rguliers qui vont naturellement se factoriser.

Automate 12.12 Le dictionnaire dterminis et minimis

12.8 Correction de lexercice 5.21

2 Lapplication de la mthode de transformation dautomate en grammaire prsente en


section 5.2.4 conduit la grammaire 12.13, ou bien encore la grammaire 12.14 si lon
part de lautomate dterministe.

169
CHAPITRE 12. CORRECTION DES EXERCICES

S A | bA
A aA | aB
B bB |
Grammaire 12.13 Grammaire rgulire pour lautomate (non-dterministe)

S aA | bB
A aA | bC
B aA
C bC |
Grammaire 12.14 Grammaire rgulire pour lautomate (dterministe)

170
Troisime partie

Rfrences
Liste des Algorithmes

4.2 Reconnaissance par un DFA . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33

7.1 Parsage ascendant en profondeur dabord . . . . . . . . . . . . . . . . . . . . . 94


7.3 Parsage descendant en profondeur dabord . . . . . . . . . . . . . . . . . . . . . 96

8.7 Calcul de FIRST . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 105


8.8 Calcul de FOLLOW . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 107
8.10 Analyseur pour grammaire LL(1) . . . . . . . . . . . . . . . . . . . . . . . . . . 110
8.21 Reconnaissance ascendante guide par un automate A = ( N, Q, q0 , F, ).
Version 1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 117
8.22 Reconnaissance ascendante guide par un automate A = ( N, Q, q0 , F, ).
Version 2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 118
8.30 Construction de lautomate danalyse LR(1) . . . . . . . . . . . . . . . . . . . . 127
LISTE DES ALGORITHMES

174
Chapitre 13

Liste des automates

4.1 Un automate fini (dterministe) . . . . . . . . . . . . . . . . . . . . . . . . . . . 32


4.3 Un automate fini dterministe comptant les a (modulo 3) . . . . . . . . . . . . 34
4.4 Un automate fini dterministe quivalent lautomate 4.1 . . . . . . . . . . . 34
4.5 Un automate fini dterministe pour ab(a + b)? . . . . . . . . . . . . . . . . . . . 35
4.6 Un automate partiellement spcifi . . . . . . . . . . . . . . . . . . . . . . . . . 36
4.7 Un automate non-dterministe . . . . . . . . . . . . . . . . . . . . . . . . . . . 39
4.8 Un automate dterminiser . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40
4.9 Le rsultat de la dterminisation de lautomate 4.8 . . . . . . . . . . . . . . . . 40
4.10 Un automate difficile dterminiser . . . . . . . . . . . . . . . . . . . . . . . . 41
4.11 Un automate potentiellement dterminiser . . . . . . . . . . . . . . . . . . . 42
4.12 Un automate avec transitions spontanes correspondant a? b? c? . . . . . . . 43
4.13 Lautomate 4.12 dbarrass de ses transitions spontanes . . . . . . . . . . . . 43
4.14 Automate non-dterministe A . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44
4.15 Automate de Thompson pour . . . . . . . . . . . . . . . . . . . . . . . . . . . 49
4.16 Automate de Thompson pour . . . . . . . . . . . . . . . . . . . . . . . . . . . 49
4.17 Automate de Thompson pour a . . . . . . . . . . . . . . . . . . . . . . . . . . . 49
4.18 Automate de Thompson pour e1 + e2 . . . . . . . . . . . . . . . . . . . . . . . . 49
4.19 Automate de Thompson pour e1 e2 . . . . . . . . . . . . . . . . . . . . . . . . . 50
4.20 Automate de Thompson pour e1 ? . . . . . . . . . . . . . . . . . . . . . . . . . . 50
4.21 Automate de Thompson pour (a + b)? b . . . . . . . . . . . . . . . . . . . . . . . 50
4.22 Illustration de BMC : limination de ltat q j . . . . . . . . . . . . . . . . . . . . 52
Liste des automates

4.23 Un DFA minimiser . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59


4.24 Lautomate minimal de (a + b)a? ba? b(a + b)? . . . . . . . . . . . . . . . . . . . . 59
4.25 Un petit dictionnaire . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60

8.20 Lautomate des rductions licites . . . . . . . . . . . . . . . . . . . . . . . . . . 117


8.29 Les rductions licites pour la grammaire 8.28 . . . . . . . . . . . . . . . . . . . 126

12.1 Automate dorigine pour (a? n | na? ) . . . . . . . . . . . . . . . . . . . . . . . . 162


12.4 Automate sans transition spontane pour (a? n | na? ) . . . . . . . . . . . . . . . 164
12.5 Lautomate 12.4, mond . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 164
12.6 Automate dterministe pour (a? n | na? ) . . . . . . . . . . . . . . . . . . . . . . 164
12.7 Dterminisation de lautomate 4.14 . . . . . . . . . . . . . . . . . . . . . . . . . 165
12.8 Les automates pour A1 ( gauche), A2 (en haut) et leur intersection (au milieu) 166
12.9 Lautomate A1 de la question 1 . . . . . . . . . . . . . . . . . . . . . . . . . . . 167
12.10Lautomate A2 de la question 1 . . . . . . . . . . . . . . . . . . . . . . . . . . . 167
12.11Le dictionnaire dterminis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 168
12.12Le dictionnaire dterminis et minimis . . . . . . . . . . . . . . . . . . . . . . 169

176
Chapitre 14

Liste des grammaires

5.1 G1 , une grammaire pour an bn . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64


5.2 Une grammaire pour an bn cn . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68
5.4 Une grammaire contextuelle pour an bn . . . . . . . . . . . . . . . . . . . . . . . 70

6.1 La grammaire GD des repas dominicaux . . . . . . . . . . . . . . . . . . . . . . 78


6.3 Constructions lmentaires de Bash . . . . . . . . . . . . . . . . . . . . . . . . 80
6.7 Une grammaire pour les sommes . . . . . . . . . . . . . . . . . . . . . . . . . . 84
6.9 Une grammaire ambigu . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 85

8.1 Fragments dun langage de commande . . . . . . . . . . . . . . . . . . . . . . 100


8.2 Une grammaire LL(1) simple . . . . . . . . . . . . . . . . . . . . . . . . . . . . 101
8.5 Une grammaire pour les expressions arithmtiques . . . . . . . . . . . . . . . 103
8.6 Une grammaire (ambigu) pour (a | b)? c . . . . . . . . . . . . . . . . . . . . . . 105
8.11 Une grammaire non-LL(1) pour if -then-else . . . . . . . . . . . . . . . . . . . . 110
8.12 Une grammaire factorise gauche pour if -then-else . . . . . . . . . . . . . . . 110
8.13 Une grammaire (simplifie) pour les expressions arithmtiques . . . . . . . . 112
8.14 Une grammaire LL pour les expressions arithmtiques . . . . . . . . . . . . . 112
8.18 Une grammaire pour a? bb? a . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 114
8.26 Une grammaire non-LR(0) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 122
8.28 Une grammaire pour les manipulations de pointeurs . . . . . . . . . . . . . . 125

9.1 limination des productions inutiles : lordre importe . . . . . . . . . . . . . . 132


Liste des grammaires

9.2 Une grammaire contenant des productions non-gnratives . . . . . . . . . . 133


9.3 Une grammaire dbarrasse de ses productions non-gnratives . . . . . . . . 134
9.4 Une grammaire avant et aprs limination des productions . . . . . . . . . 135
9.5 Une grammaire pour les expressions arithmtiques . . . . . . . . . . . . . . . 136
9.6 Une grammaire Chomsky-normaliser . . . . . . . . . . . . . . . . . . . . . . 138
9.7 Une grammaire Chomsky-normalise . . . . . . . . . . . . . . . . . . . . . . . 138

12.13Grammaire rgulire pour lautomate (non-dterministe) . . . . . . . . . . . . 170


12.14Grammaire rgulire pour lautomate (dterministe) . . . . . . . . . . . . . . . 170

178
Chapitre 15

Liste des tableaux

2.1 Mtamorphose de chien en chameau . . . . . . . . . . . . . . . . . . . . . . . . 19

3.1 Identits rationnelles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26


3.2 Dfinition des motifs pour grep . . . . . . . . . . . . . . . . . . . . . . . . . . . 28

5.3 Des drivations pour an bn cn . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69


5.5 Grammaire et automate pour aa(a + b)? a . . . . . . . . . . . . . . . . . . . . . . 71

6.2 Louis boude . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 78


6.4 Drivation du nombre 3510 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 80
6.5 Constructions parenthses . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81

8.3 tapes de lanalyse de aacddcbb . . . . . . . . . . . . . . . . . . . . . . . . . . 101


8.4 Table danalyse prdictive . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 102
8.9 Table danalyse prdictive pour la grammaire 8.6 . . . . . . . . . . . . . . . . . 108
8.15 Calcul de FIRST et FOLLOW . . . . . . . . . . . . . . . . . . . . . . . . . . . . 113
8.16 Table danalyse prdictive pour la grammaire de larithmtique . . . . . . . . 113
8.17 Trace de lanalyse dterministe de 2 (1 + 2) . . . . . . . . . . . . . . . . . . . . 114
8.19 Analyse ascendante de u = abba . . . . . . . . . . . . . . . . . . . . . . . . . . . 115
8.23 Une table danalyse LR(0) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 119
8.27 Tables danalyse LR(0) et SLR(1) de la grammaire 8.26 . . . . . . . . . . . . . . 124

9.8 Une grammaire en cours de Greibach-normalisation . . . . . . . . . . . . . . . 141


LISTE DES TABLEAUX

12.2 -fermetures (avant) des tats de lautomate 12.1 . . . . . . . . . . . . . . . . . 163


12.3 -fermetures arrires des tats de lautomate 12.1 . . . . . . . . . . . . . . . . . 163

180
Chapitre 16

Table des figures

6.6 Larbre de drivation de Paul mange son fromage . . . . . . . . . . . . . . . . . . 84


6.8 Deux arbres de drivation dun mme calcul . . . . . . . . . . . . . . . . . . . 85

7.2 Recherche ascendante . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 95

8.24 Une branche de lautomate . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 120


8.25 Deux branches de lautomate . . . . . . . . . . . . . . . . . . . . . . . . . . . . 121
TABLE DES FIGURES

182
Chapitre 17

Bibliographie

Barsky, R. F. (1997). Noam Chomsky: A Life of Dissent. MIT Press. Biographie de Noam
Chomsky, galement disponible en ligne sur http://cognet.mit.edu/library/books/
chomsky/chomsky/. 11.2

Conway, M. E. (1963). Design of a separable transition-diagram compiler. Commun. ACM,


6:396408. 8.2.4

Dowek, G. (2007). Les mtamorphoses du calcul. Une tonnante histoire des mathmatiques. Le
Pommier. Lhistoire du calcul et du raisonnement, des mathmaticiens grecs aux progs
rcents en preuve automatique. Grand prix de philosophie 2007 de lAcadmie franaise.
11.2

Doxiadis, A. et Papadimitriou, C. H. (2010). Logicomix. La folle qute de la vrit scientifique


absolue. Vuibert. Bande dessine romanant les dcouvertes en logique mathmatique du
dbut du 20e siecle. 11.2

Grune, D. et Jacob, C. J. (1990). Parsing Techniques : a practical Guide. Ellis Horwood. 7

Hodges, A. (1992). Alan Turing. The Enigma. Random House. Biographie dAlan Turing,
traduit en franais sous le nom de Alan Turing ou lnigme de lintelligence. 11.2

Hopcroft, J. E. et Ullman, J. D. (1979). Introduction to automata theory, languages and compu-


tation. Addison-Wesley. 4

Knuth, D. E. (1965). On the translation of languages from left to right. 8.2.4

Lewis, II, P. M. et Stearns, R. E. (1968). Syntax-directed transduction. J. ACM, 15:465488.


8.2.4

Perrin, D. (1995). Les dbuts de la thorie des automates. Technique et science informatique,
14(4). Un historique de lmergence de la thorie des automates. 11.2

Sakarovitch, J. (2003). Elments de thorie des automates. Vuibert, Paris. 4

Salomaa, A. (1973). Formal Languages. Academic Press. 9.2.2


CHAPITRE 17. BIBLIOGRAPHIE

Sudkamp, T. A. (1997). Languages and Machines. Addison-Wesley. 4

Turing, A. M. (1936). On Computable Numbers, with an Application to the Entschei-


dungsproblem. Proceedings of the London Mathematical Society, 2(42). Larticle introduisant
la notion de machine de Turing, un des articles fondateurs de la science informatique.
Intressant la fois par son contenu et par son aspect historique. 11.2

184
Chapitre 18

Index

Symbols Augustus De Morgan, 155


, 13 automate
+ , 14 - canonique, 57
? , 14 - complet, 36
|u|, 13 - dterminis, 39
|u|a , 14 - fini dterministe, 35
, 13 - transitions spontanes, 42
-NFA, 42 - mond, 37
-fermeture - quivalent, 34
- arrire - fini dterministe (complet), 31
- dun automate, 43 - gnralis, 51
- avant - non-dterministe, 38
- dun automate, 43 axiome, 63
- dun tat, 43
B
A Backus, John, 153
accepter, 114 Backus-Naur Form, 80
Alan Turing, 158 bijective, 145
algorithme Brzozowski, Janusz, 153
- dlimination des tats, 52
- de Brzozowski et McCluskey, 52 C
- de Glushkov, 50 calcul, 148
- de Moore, 59 - acceptant, 148
- de Thompson, 50 - dans un automate, 32
Alonzo Church, 154 - russi, 32
alphabet, 13 - chouant, 148
ambigut, 84 Cantor, Georg, 154
analyse CFG, 69
- lexicale, 11 Chomsky, Noam, 154
- syntaxique, 11 Church, Alonzo, 154
appariement, 100 co-rcursivement numrable, 147
arbre coin gauche, 79
- danalyse, 83 complmentation
- de drivation, 83 - dautomate, 45
CHAPITRE 18. INDEX

complexit dun problme, 148 - dautomate, 48


concatnation expression rationnelle, 24
- dautomates, 47 - quivalente, 26
- de langages, 21
- de mots, 14 F
congruence facteur
- droite, 22, 56 - propre, 16
construction factoriser gauche, 109
- des sous-ensembles, 41 fonction
contexte LR(0), 116 - de transition, 31
forme normale
D - de Chomsky, 137
David Hilbert, 156 - de Greibach, 139
De Morgan, Augustus, 155
destination G
- dune transition, 31 Georg Cantor, 154
DFA, 31 Glushkov, Victor, 155
distance grammaire
- ddition, 18 - CS, 66
- de Levenshtein, 18 - RG, 70
- prfixe, 17 - choix finis, 73
dcalage, 113 - algbrique, 69
drivation, 64 - ambigu, 84
- droite, 82 - contextuelle, 66
- gauche, 82 - quivalente, 65, 86
- immdiate, 64 - faiblement quivalente, 86
- non-gnrative, 133 - FC, 73
dterministe - fortement quivalente, 86
- analyseur, 99 - gnrative, 65
- hors-contexte, 69
E - linaire, 73
Edward F. Moore, 157 - linaire droite, 72
Edward J. McCluskey, 157 - linaire gauche, 73
Entscheidungsproblem, 146 - LL(1), 109
tat, 31 - LL(k), 111
- accessible, 37 - LR(0), 122
- co-accessible, 37 - LR(1), 125
-s distinguables, 57 - LR(k), 128
- final, 31 - monotone, 66
-s indistinguables, 57 - rgulire, 70
- initial, 31 - sensible au contexte, 66
- puits, 35 - SLL(1), 102
- utile, 37 - SLR(1), 123
tiquette sous-grammaire, 130
- dun calcul, 32 - syntagmatique, 63
- dune transition, 31 graphe
toile - dune grammaire, 92

186
Greibach, Sheila, 155 longueur
Gdel, Kurt, 155 - dun mot, 13

H M
Hilbert, David, 156 machine de Turing, 148
McCluskey, Edward J., 157
I monode, 14
infini dnombrable, 145 - libre, 14
injective, 145 Moore, Edward F., 157
intersection morphisme, 22
- dautomates, 46 mot, 13
item, 120 - conjugu, 16
-s distinguables dun langage, 55
J - facteur, 15
Janusz Brzozowski, 153 -s indistinguables dun automate, 56
John Backus, 153 -s indistinguables dun langage, 55
John von Neumann, 157 - miroir, 16
K - prfixe, 15
Ken Thompson, 158 - primitif, 16
Kleene, Stephen C., 156 - suffixe, 15
- transpos, 16
Kurt Gdel, 155
- vide, 13
L
langage, 14
N
Naur, Peter, 157
- ambigu, 85
NFA, 38
- contextuel, 68
Noam Chomsky, 154
- de larrt, 146
non-terminal, 63
- des facteurs, 22
- utile, 131
- des prfixes, 21
-directement rcursif, 135
- des suffixes, 22
- engendr O
- par un non-terminal, 129 ordre
- par une grammaire, 64 - alphabtique, 17
- hors contexte, 70 - bien fond, 17
- prfixe, 22 - lexicographique, 17
- rationnel, 24 - militaire, 17
- reconnaissable, 33 - partiel, 16
- reconnu, 32 - radiciel, 17
- rcursif, 15 - total, 17
- rcursivement numrable, 14 origine
- rgulier, 71 - dune transition, 31
lemme
- de ltoile, 53 P
- de pompage palindrome, 16
hors-contexte, 87 parsage, 83
rationnel, 53 partie
Levenshtein, Vladimir, 156 - droite, 63

187
CHAPITRE 18. INDEX

- gauche, 63 table danalyse


Peter Naur, 157 - LR(0), 122
Post - prdictive, 101
Correspondance de -, 147 terminal, 63
problme de dcision, 146 thorme
production, 63 - de Kleene, 52
- inutile, 131 - de Rice, 147
- non-gnrative, 132 - de Trakhtenbrot, 147
- pointe, 120 Thompson, Ken, 158
- rcursive, 79 thse de ChurchTuring, 149
- utile, 131 transformation syntaxique, 27
produit transition, 31
- dautomates, 46 - spontane, 42
- de langages, 21 transposition
proto-mot, 64 - dautomate, 47
pumping lemma Turing, Alan, 158
context-free, 87 Turing-complet, 149
rational, 53
U
Q union
quotient - dautomates, 45
- droit
- dun langage, 22 V
- dun mot, 16 variable, 63
Victor Glushkov, 155
R Vladimir Levenshtein, 156
relation vocabulaire, 63
- dordre, 16 von Neumann, John, 157
- dquivalence invariante droite, 56
rcursivement numrable, 143
rduction, 113

S
semi-calculable, 143
semi-dcidable, 143
semi-groupe, 14
Sheila Greibach, 155
Simple LL, 102
sous-mot, 15
star lemma, 53
Stephen C. Kleene, 156
surjective, 145
symbole
- initial, 63
- pr-terminal, 78
smantique, 84

T
188

Vous aimerez peut-être aussi