Vous êtes sur la page 1sur 87

Universit Paris-Sud

Licence dInformatique
Informatique Thorique :
Thorie des Langages,
Analyse Lexicale,
Analyse Syntaxique
Jean-Pierre Jouannaud
Professeur
Adresse de lauteur :
LIX
cole Polytechnique
F-91128 Palaiseau CEDEX
URL : http://www.lix.polytechnique.fr/
ii Table des matires
Table des matires
1 Introduction 2
2 Langages formels 3
3 Automates de mots nis 4
3.1 Automates dterministes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
3.2 Automates non dterministes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
Dterminisation dun automate non-dterministe . . . . . . . . . . . 6
3.3 Automates non dterministes avec transitions vides . . . . . . . . . . . . . . . . . . 7
limination des transitions vides dun automate . . . . . . . . . . . . 8
3.4 Minimisation dun automate dterministe . . . . . . . . . . . . . . . . . . . . . . . 9
3.4.1 Automate minimal . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
3.4.2 Calcul de lautomate minimal . . . . . . . . . . . . . . . . . . . . . . . . . 11
3.5 Exercices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
4 Nettoyage des automates 18
4.1 Dcision du vide . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
4.2 Dcision de la nitude . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
4.3 Dcision du plein . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
4.4 Exercices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
5 Proprits de clture des langages reconnaissables 21
5.1 Clture Boolenne . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
5.2 Clture par produits . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
5.3 Clture par morphisme . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
5.4 Pompage des langages reconnaissables . . . . . . . . . . . . . . . . . . . . . . . . . 23
6 Expressions rationnelles 25
6.1 Expressions rationnelles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25
6.2 Thorme de Kleene . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26
6.3 Identits remarquables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
6.4 Analyse lexicale avec loutil LEX . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
6.4.1 Notion de token . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28
6.4.2 Fichier de description LEX . . . . . . . . . . . . . . . . . . . . . . . . . . . 28
6.4.3 Description des tokens . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28
6.4.4 Rgles de priorit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
6.5 Exercices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30
J.-P. Jouannaud Universit Paris Sud
Table des matires iii
7 Grammaires formelles 32
7.1 Grammaires . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32
7.2 Langage engendr par une grammaire . . . . . . . . . . . . . . . . . . . . . . . . . 33
7.3 Classication de Chomsky . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34
7.3.1 Grammaires contextuelles . . . . . . . . . . . . . . . . . . . . . . . . . . . 34
7.3.2 Grammaires hors-contexte . . . . . . . . . . . . . . . . . . . . . . . . . . . 34
7.3.3 Grammaires rgulires . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34
7.4 Forme normale de Chomsky . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35
7.5 Drivations gauches et droites . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36
7.6 Arbres syntaxiques . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38
7.7 Exercices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40
8 Automates pile 41
8.1 Langages reconnaissables par automates pile . . . . . . . . . . . . . . . . . . . . . 41
8.2 Automates pile et grammaires hors-contexte . . . . . . . . . . . . . . . . . . . . . 43
8.3 Exercices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44
9 Proprits de clture des langages algbriques 45
9.1 Vide et nitude des langages algbriques . . . . . . . . . . . . . . . . . . . . . . . . 45
9.2 Pompage des langage algbriques . . . . . . . . . . . . . . . . . . . . . . . . . . . 45
9.2.1 Proprit de pompage des algbriques . . . . . . . . . . . . . . . . . . . . . 45
9.2.2 Un peu de logique . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46
9.3 Proprits de clture . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47
Union, produit et toile de Kleene. . . . . . . . . . . . . . . . . . . . 47
Intersection et complmentation. . . . . . . . . . . . . . . . . . . . . 48
9.3.1 Substitution et homomorphisme . . . . . . . . . . . . . . . . . . . . . . . . 48
9.3.2 Homomorphisme inverse . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49
9.3.3 Applications . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49
9.4 Exercices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49
10 Analyse syntaxique 50
10.1 Analyse syntaxique descendante . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50
10.1.1 Analyse descendante non-dterministe . . . . . . . . . . . . . . . . . . . . . 51
10.1.2 Analyse descendante dterministe . . . . . . . . . . . . . . . . . . . . . . . 51
10.1.3 Automate danalyse prdictive descendante . . . . . . . . . . . . . . . . . . 53
10.1.4 Condition de dterminisme . . . . . . . . . . . . . . . . . . . . . . . . . . . 54
10.1.5 Factorisation des membres droits . . . . . . . . . . . . . . . . . . . . . . . . 54
10.2 Analyse syntaxique ascendante . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55
10.2.1 Automate non-dterministe danalyse ascendante . . . . . . . . . . . . . . . 56
10.2.2 Dterminisation de lanalyse ascendante . . . . . . . . . . . . . . . . . . . . 57
10.2.3 Principes dune analyse ascendante prdictive . . . . . . . . . . . . . . . . . 57
Conditions de dterminisme . . . . . . . . . . . . . . . . . . . . . . 59
10.2.4 Automate SLR danalyse ascendante . . . . . . . . . . . . . . . . . . . . . . 60
Variantes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63
10.2.5 Gnration danalyseurs syntaxiques avec YACC . . . . . . . . . . . . . . . 64
10.3 Exercices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65
11 Syntaxe abstraite des langages 68
11.1 Grammaires abstraites . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68
11.2 Arbres de syntaxe abstraite . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69
11.3 Reprsentation des valeurs des tokens dans larbre . . . . . . . . . . . . . . . . . . . 70
11.4 Calcul des arbres de syntaxe abstraite . . . . . . . . . . . . . . . . . . . . . . . . . 70
J.-P. Jouannaud Universit Paris Sud
iv Table des matires
11.5 Codages des arbres de syntaxe abstraite . . . . . . . . . . . . . . . . . . . . . . . . 72
11.6 Exercices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72
12 Machines de Turing 73
12.1 Exercices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73
13 Complexit en temps et en espace 74
13.1 Classes de complexit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74
13.2 Comparaisons entre mesures de complexit . . . . . . . . . . . . . . . . . . . . . . 75
13.3 Langages complets . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 76
13.3.1 Rductions et compltude . . . . . . . . . . . . . . . . . . . . . . . . . . . 76
13.3.2 NP-compltude . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 77
13.3.3 PSPACE-compltude . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 79
13.4 Exercices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81
J.-P. Jouannaud Universit Paris Sud
TABLE DES MATIRES 1
Table des matires
J.-P. Jouannaud Universit Paris Sud
2 Introduction
Chapitre 1
Introduction
Ce cours se propose dtudier en dtail la notion de langage formel, initialement introduite par
Noam Chomsky et son quipe dans le but de formaliser les langues naturelles. Si lapplication aux
langues naturelles a rvolutionn leur tude, le but ultime consistant automatiser le traitement de
ces langues a largement chou, au jour daujourdhui en tout cas. Par contre, les travaux qui en
ont rsult ont trouv leur application naturelle dans le traitement automatis des langages infor-
matiques : la compilation, gnralement dcoupe en analyse lexicale, analyse syntaxique, analyse
smantique et gnration de code est une suite de traitements langagiers de complexit croissante :
lanalyse lexicale met en oeuvre les traitements les plus simples, qui relvent des langages dits r-
guliers ; lanalyse syntaxique a pour but danalyser la structure syntaxique des phrases, qui relve
des langages dits hors-contxte ; enn, les traitements dits smantiques, comme le typage, mettent
en jeu des structures langagires complexes, dites contextuelles. On retrouve galement la notion de
langage en thorie de la calculabilit, et en thorie de la complexit. On la retrouve enn au coeur
de lun des grands succs de la discipline, la vrication de programmes, qui a russi ces dernires
annes une perce industrielle remarque.
Le but de ce cours est de faire le tour de ces diffrentes notions dans le contexte informatique :
les automates nis et les expressions rationnelles, qui se sont rvls un outil de modlisation excep-
tionnel et ont, ce titre, envahi tout le paysage scientique, informatique, mathmatiques, physique,
biologie, etc ; leur application lanalyse lexicale ; les grammaires hors-contexte et les automates
pile, autres outils de modlisation trs commode dont les utilisations ont moins dbord la sphre
informatique ; leur application lanalyse syntaxique.
Comme tout cours, celui-ci fait de nombreux emprunts, en particulier [2], ouvrage remarquable
dont une lecture approfondie est recommande.
J.-P. Jouannaud Universit Paris Sud
3
Chapitre 2
Langages formels
On appellera vocabulaire un ensemble ni V
t
dont les lments sont appells lettres, et mot
toute suite nie de lettres, note u = u
1
. . . u
n
pour un mot u de longueur n. On notera par V T

lensemble des mots, et par le mot de longueur nulle, appell mot vide.
Lensemble des mots est muni dune opration interne, le produit de concatnation, telle que si
u = u
1
. . . u
n
et v = v
1
. . . v
p
, alors le produit uv est le mot w tel que w
i
= u
i
pour i [1..n] et
w
n+j
= v
j
pour j [1..p]. Il est ais de vrier que la concatnation des mots est associative et
possde pour lment neure. On notera parfois le produit sous la forme u v an dviter certaines
ambiguits.
Tout produit, par rptition, donne naissance une notion de puissance. La puissance nme dun
mot est dnie par rcurrence sur n comme suit : u
0
= et u
n+1
= u u
n
.
Muni du produit de concatnation et de son lment neutre, V

t
est appell le monode libre sur
V
t
. Cette dnomination fait rfrence au fait que tout mot u est soit le mot vide , soit commence par
une certaine lettre a auquel cas il scrit de manire unique sous la forme av pour un certain mot v
de taille diminue de une unit. Il sera donc possible de prouver une proprit P dun ensemble de
mots en montrant P(), puis en montrant P(av) en supposant P(v). Il sagit l dun raisonnement
par rcurrence classique li cette dcomposition des mots. Mais on peut aussi dcomposer un mot
u en exhibant sa dernire lettre : tout mot u est soit le mot vide soit scrit de manire unique sous
la forme va o a V
t
et v V

t
, ce qui fournit un autre principe de rcurrence. Nous utiliserons
lun ou lautre suivant les cas.
Toute partie de V

t
est appelle langage. On disnguera deux langages trs particuliers, le langage
vide not qui ne possde aucun mot, et le langage unit rduit au mot vide.
On dnit nouveau des oprations sur les langages, oprations ensemblistes classiques ou op-
rations qui font rfrence aux oprations correspondantes sur les mots :
L
1
L
2
dsigne lunion des langages L
1
et L
2
L
1
L
2
dsigne lintersection des langages L
1
et L
2
L dsigne le complmentaire dans V

t
du langage L
L
1
L
2
= uv [ u L
1
et v L
2
dsigne le produit des langages L
1
et L
2
L
n
tel que L
0
= et L
n+1
= L L
n
dsigne la puissance nme du langage L
L

iN
L
i
dsigne litr du langage L
L
+
=

i>0
L
i
dsigne litr strict du langage L
Le lecteur est invit montrer les proprits suivantes :
1. Pour tout mot u et tous entiers n, m, u
n+m
= u
m+n
= u
n
u
m
= u
m
u
n
.
2. Pour tout langage L et tous entiers n, m, L
n+m
= L
m+n
= L
n
L
m
= L
m
L
n
.
3. Si L, alors L

= L
+
.
J.-P. Jouannaud Universit Paris Sud
4 Automates de mots nis
Chapitre 3
Automates de mots nis
Les automates sont un outil de modlisation fondamental, qui servent reprsenter des disposi-
tifs automatiques, par exemples des systmes ractifs, tout autant que des objets mathmatiques ou
physiques. Dans ce capitre, nous nous intressons aux automates de mots nis, le cas important des
mots innis tant abord dans un chapitre ultrieur.
3.1 Automates dterministes
Dnition 3.1 Un automate ni dterministe / est un triplet (V
t
, Q, T) o
1. V
t
est le vocabulaire de lautomate ;
2. Q est lensemble ni des tats de lautomate ;
3. T : QV
t
Q, est une application partielle appelle fonction de transition de lautomate.
On notera q
a
q

pour T(q, a) = q

. Lorsque T est totale, autrement dit sil y a dans chaque


tat exactement une transition pour toute lettre de lalphabet, lautomate est dit complet. On omettra
souvent le qualicatif ni.
Dnition 3.2 tant donn un automate dterministe / = (V
t
, Q, T), on appelle calcul toute suite
(ventuellement vide) de transitions q
0

1
q
1
q
n1

n
q
n
, aussi note q
0
w

A
q
n
, ou encore sim-
plement q
0
w
q
n
en labsence dambiguits, issue dun tat q
0
et atteignant un tat q
n
en ayant lu le
mot w =
1

n
.
Notons que le calcul produit par la lecture dun mot w par un automate ni dterministe est au-
tomatique et se trouve donc exempte dambigut : la lecture des lettres composant le mot provoque
des transitions bien dnies jusqu tre bloqu en cas de transitions manquantes, ou bien jusqu
atteindre un certain tat aprs la lecture complte du mot. On en dduit la proprit fondamentale
des automates dterministes complets :
Lemme 3.3 Soit / = (V
t
, Q, T) un automate ni dterministe complet. Alors, pour tout mot u
V

t
et tout tat q Q, il existe un unique tat q

Q tel que q
u

A
q

.
En pratique, il peut tre utile de rendre un automate complet en ajoutant un nouvel tat appel
poubelle, tiquet par , vers lequel vont toutes les transitions manquantes. Les calculs bloquants
aboutissent alors dans la poubelle o ils restent capturs.
Dnition 3.4 Un automate dterministe vient avec la donne
dun tat initial i Q;
dun ensemble dtats acceptants F Q;
J.-P. Jouannaud Universit Paris Sud
3.2 Automates non dterministes 5
q
0
q
1
q
2
10 0, 1
FIG. 3.1 Automate dterministe reconnaissant les entiers naturels en numration binaire.
q
0
q
1
q
2
10 0, 1 0, 1 0, 1
FIG. 3.2 Automate dterministe complet reconnaissant les entiers naturels en numration binaire.
On notera par /
F
i
le quintuplet (V
t
, Q, i, F, T), ou plus simplement / si i et F sont donns sans
ambiguit dans le contexte.
Un mot w est reconnu par lautomate /
F
i
sil existe un calcul dit russi issu de ltat initial i
et terminant en tat acceptant aprs avoir lu le mot w. On note par Lang(/) le langage des mots
reconnus par lautomate /.
Un langage reconnu par un automate est dit reconnaissable. On note par ec lensemble des
langages reconnaissables.
Il est clair que lajout dune poubelle ne change pas les mots reconnus.
On a lhabitude de dessiner les automates, en gurant les tats par des cercles, en indiquant ltat
initial par une che entrante, les tats acceptants par un double cercle ou une che sortante, et la
transition de ltat q ltat q

en lisant la lettre par une che allant de q vers q

et tiquete par
. La gure 3.1 reprsente un automate (incomplet) reconnaissant le langage des entiers naturels en
reprsentation binaire.
Lautomate obtenu reconnat exactement le mme langage si lon convient que le nouvel tat
poubelle nest pas acceptant. Ainsi, la gure 3.2 prsente un automate complet reconnaissant le
langage des entiers naturels en reprsentation binaire.
Si lautomate / est complet, on pourra donc tendre lapplication T aux mots, en posant
T(q, u) = q

Q tel que q
u
q

. On peut donc dans ce cas reformuler la condition dacceptation


des mots comme u Lang(/) ssi T(i, u) F.
3.2 Automates non dterministes
Dnition 3.5 Un automate non-dterministe / est un triplet (V
t
, Q, T) o
1. V
t
est le vocabulaire de lautomate ;
J.-P. Jouannaud Universit Paris Sud
6 Automates de mots nis
FIG. 3.3 Arbre des calculs dun automate non dterministe.
2. Q est lensemble des tats de lautomate ;
3. T : QV
t
T(Q), est la fonction de transition de lautomate.
On notera comme prcdemment q

q

pour q

T(q, ) avec V
t
, et par T(q, u) lensemble
(peut-tre vide) des tats atteignables depuis q en lisant le mot u.
Notons quun automate dterministe est un cas particulier dautomate non-dterministe qui as-
socie tout lment de Q V
t
une partie de Q possdant zro ou un lment (exactement un si
cest un automate complet). On pourra dire dun automate dterministe quil est incomplet sil peut
se bloquer, cest--dire sil existe un tat q et une lettre a tels que T(q, a) = . Si lautomate est
complet, nous aurons une forme affaiblie du Lemme 3.3 :
Lemme 3.6 Soit / = (V
t
, Q, i, F, T) un automate ni non-dterministe complet. Alors, pour tout
mot u V

t
et tout tat q Q, il existe un (non ncessairement unique) tat q

Q tel que q
u

A
q

.
La notion de calcul est la mme pour cette nouvelle varit dautomates que pour les automates
dterministes, ainsi que la notion de reconnaissance, nous ne les rptons pas. Le non-dterministe
a toutefois une consquence essentielle : il peut y avoir plusieurs calculs issus de ltat initial i
qui lisent un mot w donn, dont certains peuvent se bloquer et dautres pas, et dans ce dernier cas
certains peuvent terminer en tat acceptant et dautres pas. Lacceptation a lieu sil existe au moins
un calcul russi. Si tous les calculs chouent, il ny aura pas dautre moyen de le savoir que de les
explorer tous avant de savoir que le mot w nest pas reconnu. La bonne notion nest donc pas celle
de calcul, mais darbre de calcul associ un mot lu par lautomate :
Dnition 3.7 tant donn un automate non dterministe /, larbre de calcul de racine q Q
engendr par la lecture du mot u est un arbre doublement tiquett dni par rcurrence sur u :
Si u = , alors larbre est rduit sa racine q ;
Si u = av, la racine q possde des transitions sortantes tiquettes par a V
t
vers diffrents
arbres de calcul engendrs par la lecture de v et dont les racines sont tiquettes par les tats de
T(q, a).
Un arbre de calcul est reprsent la gure 3.3.
On a la proprit vidente :
Lemme 3.8 Un mot u V

t
est reconnu par un automate non dterministe / ssi lune des feuilles
de son arbre de calcul est tiquette par un tat acceptant.
Dterminisation dun automate non-dterministe Nous allons maintenant dterminiser un au-
tomate non-dterministe (sans transitions vides) en ajoutant de nouveaux tats : si Q est lensemble
des tats dun automate non-dterministe, lensemble des tats de lautomate dterministe associ
sera T(Q), lensemble des parties de Q.
Dnition 3.9 Soit / = (V
t
, Q, T) un automate non-dterministe. On dnit Tet(/) comme lau-
tomate (V
t
, T(Q), T
det
) o T
det
(K, a) =

qK
T(q, a).
Thorme 3.10 Soit / un automate non-dterministe. Alors Tet(/)
{KP(Q) | KF=}
{i}
est dter-
ministe et reconnat le mme langage que /
F
i
.
J.-P. Jouannaud Universit Paris Sud
3.3 Automates non dterministes avec transitions vides 7
q
0
,q
2
,
q
12
q
2
,q
13
,
q
14
q
15
q
16
,
q
17
q
18
q
19
,
q
20
q
3
,q
4
,
q
12
q
5
q
6
,
q
7
q
8
q
9
,
q
10
0101011001100110
FIG. 3.4 Automate dterminis.
Si la construction peut sembler complexe au nophyte, la preuve est par contre trs simple, et
base sur lide que sil est possible dans lautomate non-dterministe datteindre les tats q
1
, . . . , q
n
depuis ltat q en lisant la lettre a, alors il sera possible dans lautomate dterminis datteindre un
tat contenant la partie q
1
, . . . , q
n
depuis tout tat contenant ltat q en lisant cette mme lettre
a. En fait, lide de la preuve est parfaitement dcrite par la gure 3.3.
Lautomate dterminis correspondant lautomate de la gure 3.6 est reprsent sur la -
gure 3.4, o seulement les tats accessibles sont montrs. Les tats sont tiquets par lensemble
des noms des tats de lautomate non-dterministe qui le constituent.
On conclue de ces dveloppements que les automates dterministes, les automates non dtermi-
nistes et les automates non dterministes avec transitions vides reconnaissent exactement les mme
langages. La diffrence est que les automates non dterministes sont exponentiellement plus co-
nomes, la borne tant atteinte comme le montre lun des exercices. Ils constituent pour cette raison
un outil prcieux pour lutilisateur. Ils sont par contre dune manipulation informatique plus com-
plexe cause par leur non-dterminisme.
3.3 Automates non dterministes avec transitions vides
Un automate avec transitions vides est un automate non-dterministe o certaines transitions
peuvent tre tiquetes par , qui dnotera labsence de lettre lue lors de la transition.
Dnition 3.11 Un automate non-dterministe / avec transitions vides est un triplet (V
t
, Q, T) o
1. V
t
est le vocabulaire de lautomate ;
2. Q est lensemble des tats de lautomate ;
3. T : Q(V
t
) T(Q) est la fonction de transition de lautomate.
On notera q

q

pour q

T(q, ), avec V
t
ou = .
Par exemple, la gure 3.5 reprsente un automate non-dterministe avec transitions vides recon-
naissant le langage sur lalphabet 0, 1 contenant exactement une occurrence de chacun des mots
00 et 11.
Notons que la notation q

q

devient ambigue, puisquelle prend maintenant deux signications


diffrentes suivant que est considre comme une lettre (ou comme le symbole ) et il y aura alors
une transition unique, ou comme un mot (de longueur 1 ou 0), et il pourra alors y avoir un nombre
arbitraire de transitions (dont au plus une sera non-vide).
nouveau, les notions de calcul et de reconnaisance sont inchanges, et celle darbre de calcul
ne ncessite quune adaptation triviale, du fait quil existe maintenant des transitions tiquettes par
J.-P. Jouannaud Universit Paris Sud
8 Automates de mots nis
q
0
q
1
q
2
q
3
q
4
q
5
q
6
q
7
q
8
q
9
q
10
q
11
q
12
q
13
q
14
q
15
q
16
q
17
q
18
q
19
q
20

101101001011

01001011010
FIG. 3.5 Un automate non-dterministe avec transitions vides.
. Les calculs dun automate avec transitions vides autorisent le passage par un nombre quelconque
de transitions vides au cours de lexcution. Le nombre dtats parcourus ne sera donc plus gal au
nombre de lettres du mot dentre mais pourra tre beaucoup plus grand. Larbre de calcul dun au-
tomate avec transitions vides savre du coup tre un outil moins intressant que pour les automates
non-dterministes sans transitions vides.
limination des transitions vides dun automate Nous voulons maintenant montrer que le lan-
gage reconnu par un automate avec transitions vides peut galement ltre par un automate non-
dterministe sans transitions vides. Cette opration va ncessiter laddition de nouvelles transitions
dans lautomate :
Dnition 3.12 Soit / = (V
t
, Q, i, F, T) un automate non-dterministe avec transitions vides. On
dnit ^Tet(/) comme lautomate (V
t
, Q, i, F
NDet(A)
, T
NDet(A)
) o
q
a

NDet(A)
q

ssi q

A
q

A
q

F
NDet(A)
= q [ q

A
f F
Dans la dnition ci-dessus, la lettre a est considre comme une lettre, alors que le symbole
est considr comme un mot de longueur nulle (aussi bien dans i

A
q

que dans q

A
f
F). Notons que cette construction naugmente pas la complexit de lautomate dnie comme son
nombre dtats.
Thorme 3.13 Soit / un automate non-dterministe avec transitions vides. Alors ^Tet(/)
F
i
est
un automate non-dterministe qui reconnat le mme langage que /
F
i
.
La preuve est simple, et procde par dcoupage dun calcul allant de i = q
0
q
n
= f F
dans lautomate / en tronons de la forme q
i
V

A
aV
t

A
q
i+1
suivis dun dernier tronon de la
forme q
n1
V

A
f F.
Applique lautomate de la gure 3.5, la construction prcdente nous donne lautomate non-
dterministe de la gure 3.6. Les tats q
1
et q
11
ont t supprims car non accessibles.
J.-P. Jouannaud Universit Paris Sud
3.4 Minimisation dun automate dterministe 9
q
0
q
2
q
3
q
4
q
5
q
6
q
7
q
8
q
9
q
10
q
12
q
13
q
14
q
15
q
16
q
17
q
18
q
19
q
20
0111001011010010101001011010
FIG. 3.6 Automate non-dterministe sans transitions vides.
3.4 Minimisation dun automate dterministe
Dans tout ce paragraphe, il est fondamental de supposer les automates dterministes complets,
mme si leur reprsentation en graphe correspond parfois un automate incomplet par souci de clart
des dessins. On supposera galement que tous les tats des automates manipuls sont accessibles.
La dterminisation dun automate non-dterministe fait exploser le nombre dtats, mais tous
les tats de T(Q) ne sont pas utiles la construction du dterminis dun automate dont Q est
lensemble des tats. De plus, il se trouve que lautomate construit est en fait souvent plus compliqu
que ncessaire. En particulier, il contient gnralement des tats inaccessibles. Llimination des
tats inaccessibles nest cependant pas toujours sufsante pour obtenir lautomate le plus simple
possible : si deux tats dun automate reconnaissent le mme langage, on peut rduire lautomate
en les confondant. Le problme, bien sr, va tre de dterminer si deux tats q et q

reconnaissent
le mme langage, de manire partitionner lensemble des tats an de confondre les tats dune
mme classe.
3.4.1 Automate minimal
La premire question, bien sr est celle de lexistence et de lunicit dun automate minimal pour
tout langage reconnaissable. Cest lobjet du dveloppement qui suit.
Dnition 3.14 On dit quune relation dquivalence sur les mots dun vocabulaire V est
dindex ni si elle partitionne lensemble des mots en un nombre ni de classes,
une congruence droite si u, v V

a V u v = ua va.
Lemme 3.15 Soient une congruence droite dindex ni sur V

t
, Q lensemble de ses classes
dquivalence, et F Q. Alors lautomate quotient / = (V
t
, Q, [], F, T) avec T([u], a) = [ua] est
un automate ni dterministe complet qui reconnait le langage des mots appartenant une classe
de F.
J.-P. Jouannaud Universit Paris Sud
10 Automates de mots nis
Preuve: Comme est dindex ni, Q est ni. Comme est une congruence droite, la dnition de
T ne dpend pas du choix de u dans [u], donc T est bien une fonction totale. Donc /est un automate
ni dterministe complet.
Reste montrer quil reconnait le langages des mots appartenant une classe de F. Pour cela,
nous montrons par rcurrence sur le mot v la proprit :
v V

t
[u] Q [u]
v

A
[uv]
Si v = , la proprit est trivialement vraie.
Si v = aw, alors [u]
a

A
[ua] par dniton de T, et [ua]
w

A
[uaw] par hypothse de rcurrence,
do la proprit.
Appliquant maintenant cette proprit pour u = , on obtient v V

t
[]
v

A
[v], et donc v est
reconnu ssi il appartient une classe de F.
Dnition 3.16 Soit L reconnaissable par un automate dterministe complet / = (V
t
, Q, i, F, T),
et
A
lquivalence de transition engendre sur les mots de V dnie par u
A
v ssi T(i, u) =
T(i, v).
Lemme 3.17 Lquivalence de transition
A
dun automate ni / est une congruence droite din-
dex ni dont les classes sont en correspondance biunivoque avec les tats de /. Lautomate quotient
associ aux classes de F satisfait /

A
= /.
Preuve: Soit u
A
v. Alors T(i, u) = T(i, v) et donc pour tout w V

, T(i, uw) =
T(T(i, u), w)) = T(T(i, v), w)) = T(i, vw), et par dnition, uw
A
vw. Comme les classes
sont en correspondance biunivoque avec les tats, la congruence est dindex ni et /

A
= /.
Dnition 3.18 tant donn un langage L sur V
t
et un mot u V

t
, on appelle :
contexte droite de u dans v lensemble D
L
(u) = v [ uv L ;
congruence syntaxique de L lquivalence u
L
v ssi D
L
(u) = D
L
(v).
Lemme 3.19 La congruence syntaxique dun langage quelconque est une congruence droite.
Preuve: Soit u
L
v, donc D
L
(u) = D
L
(v). Soit a V
t
. D
L
(ua) = w V

t
[ aw D
L
(u) =
w V

t
[ aw D
L
(v) = D
L
(va). Donc ua
L
va, prouvant que
L
est une congruence droite.

Thorme 3.20 (Myhill-Nerode) Tout langage reconnaissable L sur un alphabet V est reconnu
par lautomate /

L
qui est lautomate ni dterministe minimal (en nombre dtat) reconnaissant
L.
Preuve: On se donne un automate /quelconque reconnaissant L. Un tel automate existe, puisque L
est reconnaissable. On montre que
A
est un rafnement de
L
, cest--dire que u
A
v = u
L
v. Cela aura pour corrollaire que lautomate associ la congruence syntaxique par les Lemmes 3.19
et 3.15 reconnait L, que son nombre detats est au plus gal au nombre dtats de / et donc quil
est minimal puisque / est quelconque.
Soit u
A
v, et comme
A
est une congruence droite, pour tout w V

, uw
A
vw, et donc
uw L ssi vw L puisque L est une union de classes dquivalence de
A
. Par dnition, u
L
v.

Il nous reste maintenant calculer cet automate minimal unique ( renommage prs des tats).
J.-P. Jouannaud Universit Paris Sud
3.4 Minimisation dun automate dterministe 11
3.4.2 Calcul de lautomate minimal
Lide est de calculer lautomate minimal dun langage reconnaissable partir dun automate
arbitraire le reconnaissant. Pour cela, plutt que de raisonner en terme de congruence sur les mots
du langage, nous allons considrer la partition induite sur les tats de lautomate, qui satisfait la
proprit cl de compatibilit :
Dnition 3.21 tant donn un automate dterministe complet / = (V
t
, Q, i, F, T), une partition
T de Q est compatible ssi
1. elle est un ranement de la partition F, Q F :
C T C F or C (Q F)
2. toute classe de la partition est compatible :
C T q, q

C a V
t
C

T(q, a) C

ssi T(q

, a) C

Les partitions compatibles ont bien sr un lien troit avec les congruences droites.
Dnition 3.22 tant donne une partition T de Q, lquivalence de partition sur les mots associe
T est dnie par u
P
v ssi u et v appartiennent une mme classe de T.
On vrie aisment que lquivalence dune partition compatible est une congruence droite.
Lemme 3.23 Soit T une partition compatible des tats dun automate / = (V
t
, Q, i, F, T). Alors

P
est une congruence droite dindex ni et lautomate
/
P
= (V
t
, T, C
0
, C T [ C F, T
P
)
C
0
est la classe qui contient ltat i
T
P
(C, a) = C

ssi q C q

tel que T(q, a) = q

est un automate ni dterministe qui reconnait le langage L(/).


Preuve: La proprit de congruence droite dcoule directemnt de la compatibilit de la partition. La
congruence est dindex ni puisque son nombre de classes est major par la taille de Q. Enn, lau-
tomate /
P
est tout simplement lautomate /

P
dont les tats acceptants sont les classes associes
la partition de F : il reconnait donc le langage L(/) daprs le Lemme 3.15.
Lautomate minimal est donc associ la partition compatible la plus grossire, dont le nombre
de classes est minimal, ce qui peut se faire classiquement par une construction itrative jusqu
lobtention en temps ni du point xe. On peut pour cela procder de deux manires diffrentes :
Partant dune partition compatible, celle dont les classes contiennent exactement un tat de lau-
tomate de dpart, on construit jusqu stabilisation une suite de partitions compatibles plus nes que
la partition minimale, ce qui nous fournit cette dernire comme rsultat. Pour cela, on confond
chaque tape plusieurs classes lorsque leur fusion conserve la compatibilit. La difcult est quon
ne peut procder par fusion de deux classes la fois : il faut en fait deviner les fusions ncessaires
chaque tape. Le processus est donc hautement non-dterministe et conduit un algorithme expo-
nentiel.
Partant de la partition potentiellement compatible la plus grossire, soit (F, Q F), on construit
jusqu stabilisation une suite de partitions plus grossires que la partition minimales jusqu obten-
tion de cette dernire, puisque le rsultat est ncessairement une partition compatible. Cet algorithme
nassure donc pas la compatibilit des partitions intermdiaires obtenues, mais il vrie la proprit
de compatibilit de chaque classe, et si elle savre fausse pour une classe, il la force en dcou-
pant cette classe en sous-classes compatibles. Cela peut bien sr affecter la compatibilit des classes
existantes, et il faut donc recommencer le processus sil y a eu un dcoupage. Au pire, on sarrtera
lorsque chaque classe contiendra un unique tat de lautomate de dpart, dans le cas o ce dernier
tait dj minimal. Lalgorithme obtenu est polynomial en le nombre dtats de lautomate.
J.-P. Jouannaud Universit Paris Sud
12 Automates de mots nis
tant donne une partition P des tats dun automate, la fonction suivante recherche une classe
de P qui nest pas compatible. Dans le cas o toutes les classes sont compatibles la fonction retourne
. Puisque tous les classes dans les partitions construites par lalgorithme sont non-vides, le rsultat
signale le cas dchec de la recherche.
type classe sur Q = ensemble sur Q
type partition sur Q = ensemble sur classe sur Q
fonction non_compatible(/ : automate sur (V
t
, Q),
P : partition sur Q) : classe sur Q
% Recherche dune classe non compatible de P
si il existe C P, p C, q C et a V
t
tels que
transition(/, p, a) C

et transition(/, q, a) C

avec C

,= C

retourner C
sinon
retourner
n si
n fonction
La fonction suivante calcule alors, partir dune partition P donne, le rafnement compatible le
plus grossier de P, cest--dire la sous-partition compatible de P ayant le plus petit nombre possible
de classes (on peut montrer quelle est unique) :
fonction partition(/ : automate sur (V
t
,Q),
P : partition sur Q) : partition sur Q
% Calcul dun rafnement compatible de la partition P
soit C = non_compatible(/, P)
si C =
retourner P
sinon
soit P

la partition la plus grossire de C telle que


pour tout C

, pour tout C

P, pour tous p, q C

pour tout a V
t
:
transition(/, p, a) C

ssi transition(/, q, a) C

retourner partition(/, (P C) P

)
n si
n fonction
La fonction suivante calcule lautomate minimis.
fonction minimisation(/ : automate sur (V
t
, Q)) : automate sur (V
t
, classe sur Q)
% Calcul du minimis de A
% Calcul de la plus grossire partition compatible
soit F = q Q [ est_acceptant (/, q)
P = partition(/, QF, F)
% Calcul de ltat initial de lautomate minimal
soit I
min
la classe de P telle que etat_initial (/) I
min
% Calcul des tats acceptants de lautomate minimal
pour chaque C P :
soit F
min
(C) = true ssi C F ,=
n pour
% Calcul de la fonction de transition de lautomate minimal
pour chaque (C, a) P V
t
faire
soit q C (un reprsentant quelconque)
soit C

la classe de P telle que transition(/, q, a) C

T
min
(C, a) = C

J.-P. Jouannaud Universit Paris Sud


3.4 Minimisation dun automate dterministe 13
q
a
q
b
q
c
q
d
q
e
q
g
q
h
q
i
q
f
01010110011001
FIG. 3.7 Automate dterminis et minimis.
n pour
retourner (I
min
, F
min
, T
min
)
n fonction
Le minimis de lautomate de la gure 3.4 est reprsent sur la gure 3.7.
Thorme 3.24 Soit / = (V
T
, Q, i, F, T) un automate dterministe et complet. Lautomate rsultat
de la fonction minimisation est lautomate dterministe complet avec un nombre minimal dtats
acceptant le mme langage que /.
En pratique, le calcul de la partition compatible la plus grossire possible se fait laide dun
tableau ayant autant de lignes et de colonnes que dtats. Il est facile, laide dun tel tableau, de
marquer les tats incompatibles entre eux. linitialisation, les tats non-acceptants seront marqus
comme incompatibles avec les tats acceptants. Puis on marque rcursivement tout couple dtats
(p, q) tels que le couple (transition(p, a), transition(q, a)) soit marqu pour une certaine lettre a
V
t
. Le marquage une fois termin, la ligne p du tableau de marquage indique les tats qui sont dans la
mme classe de la partition que p : ce sont les tats q tels que les couples (p, q) ne sont pas marqus.
Lalgorithme est donc :
J.-P. Jouannaud Universit Paris Sud
14 Automates de mots nis
pour chaque q Q faire
pour chaque q Q faire
si acceptant(p) et non acceptant(q)
marquer(p,q)
n si
n pour
n pour
rpter
stable = true
pour chaque q Q faire
pour chaque p Q faire
pour chaque a V
t
faire
si marqu(p,q) et non marqu(transition(q,a), transition(p,a))
marquer(p,q)
stable = false
n si
n pour
n pour
n pour
jusqu stable
3.5 Exercices
Exercice 3.1 Donner lautomate minimal quivalent lautomate suivant :
q
0
q
1
q
2
q
3
q
4
q
5
q
6
q
7
0101101011010100
Exercice 3.2 Donner un automate qui reconnaisse lensemble des entiers naturels en reprsentation
octale.
Exercice 3.3 Considrons lautomate suivant sur lalphabet a, b, c, dtat initial q
0
et dtats
acceptants q
2
.
J.-P. Jouannaud Universit Paris Sud
3.5 Exercices 15
q
0
q
1
q
2
a
b
acc
b
1. Quel sont les tats atteints lors de lexcution de cet automate respectivement sur les mots a,
b, c, cabc, baca, baac, aa, bb, et ?
2. Parmi ces mots, quels sont ceux qui appartiennent au langage reconnu par lautomate ?
Exercice 3.4 1. Donner un automate dterministe qui reconnat une date de la forme
"jour/mois" o le jour est not par un entier entre 1 et 31 et le mois est not par un entier
entre 1 et 12. Attention aux mois avec moins de 31 jours ! Par exemple, votre automate doit
accepter "7/4" (pour le 7 avril) et "31/12" (pour le 31 dcembre), mais pas "30/2".
2. tendre lexercice aux dates de la forme "jour/mois/anne", o lanne est note par un entier
entre 1000 et 1999. On suppose que les annes bissextiles sont les annes qui sont divisibles
par 4.
Exercice 3.5 Dterminisez lautomate (V
t
, Q, q
0
, F, ), dni comme suit :
V
t
= a, b
Q = 1, 2, 3, 4, 5
q
0
= 1
F = 5
(1, a) = 1
(1, b) = 1, 2
(2, a) = 3
(3, a) = 4
(4, b) = 5
(5, a) = 5
(5, b) = 5
Exercice 3.6 Soit lautomate :
q
1
q
2
q
3
q
4
q
5 a, b b
aa
b a, b
Quel est langage accept par cet automate ? Le dterminiser et minimiser.
Exercice 3.7 Construire lautomate dterministe quivalent lautomate suivant :
q
0
q
1
q
2
, a a a, b a, b
J.-P. Jouannaud Universit Paris Sud
16 Automates de mots nis
Exercice 3.8 Soit lautomate :
q
2
q
3
q
0
q
1
q
6
q
7
q
8
q
9
q
10
q
4
q
5
a
b
a
bb

1. supprimer les transitions vides


2. Le dterminiser
3. Est-il minimal ?
Exercice 3.9 Donnez la version deterministe puis minimale de lautomate suivant.
q
0
q
1
q
2
aa a, b a, b
Exercice 3.10 1. Donner un automate dterministe qui accepte le langage sur lalphabet a, b
dont tous les mots admettent un a comme troisime lettre.
2. Donner un automate non-dterministe qui accepte le langage sur lalphabet a, b dont tous
les mots admettent un a comme troisime lettre partir de la droite.
3. Donner un automate dterministe pour le mme langage.
Exercice 3.11 Considrons lautomate non-dterministe suivant :
q
0
q
1
q
2
q
3
q
4
a
b
a
b a, b a, b a, b
1. Construire un automate dterministe quivalent.
2. Minimiser lautomate obtenu.
Exercice 3.12 Donnez la version deterministe des automates suivants.
q
0
q
1
q
2
aa a, b a, b
J.-P. Jouannaud Universit Paris Sud
3.5 Exercices 17
q
0
q
1
q
3
q
2
a
bbb
a a, b a, b
J.-P. Jouannaud Universit Paris Sud
18 Nettoyage des automates
Chapitre 4
Nettoyage des automates
Notons tout dabord que les automates non dterministes avec transitions vides se rduisent en
des automates non dterministes sans transitions vides en temps linaire en leur taille. Les algo-
rithmes de complexit au moins linaire concernant les automates non dterministes seront donc
encore vrais pour les automates non dterministes avec transitions vides. Nanmoins, la pluspart des
rsultats exposs dans ce chapitre sappliquent directement aux automates avec transitions vides.
Quil soit ou non dterministe, un automate peut possder des tats superus, en ce sens quils
peuvent tre tout simplement retirs sans changer le langage reconnu.
Dnition 4.1 tant donn un automate (dterministe ou pas, avec ou sans transitions vides) A =
(V
t
, Q, i, F, T), on dira que ltat q Q est
accessible, sil existe un mot w tel que i
w

q ;
productif, sil existe un mot w tel que q
w

f F ;
utile, sil est la fois accessible et productif.
Un automate est dit rduit si tous ses tats sont utiles.
An dliminer les tats inutiles dun automate, il faut en liminer successivement les tats in-
accessibles et les tats improductifs, ce que lon appellera le nettoyage. Lautomate obtenu sera un
automate rduit quivalent lautomate de dpart, il aura pour transitions celles qui relient des tats
utiles de lautomate de dpart. Reste calculer les tats productifs, puis les tats accessibles. Pour
cela, on observe quun tat q est productif ssi q F ou bien il existe un tat productif q

et une
lettre a (V
t
) tels que q

T(q, a). On en dduit un algorithme simple qui procde, en temps


linaire, jusqu stabilisation par ajouts successifs dtats productifs un ensemble rduit initiale-
ment F. De mme, un tat q est accessible ssi q = i ou bien il existe un tat accessible q

et une
lettre a (V
t
) tels que q T(q

, a). On en dduit un algorithme similaire qui procde, toujours


en temps linaire, jusqu stabilisation par ajouts successifs dtats accessibles un ensemble rduit
initialement i.
Thorme 4.2 Pour tout automate ni /, dterministe ou pas, il existe un automate ni de mme
nature sans tat inutile qui peut tre obtenu partir du premier en temps linaire.
4.1 Dcision du vide
Dterminer si un automate reconnait le langage vide est un problme aux trs nombreuses ap-
plications pratiques, nous en verrons une la section 5.1. Le nettoyage nous permet de dcider cette
question en temps linaire, puisque dans ce cas lautomate obtenu doit tre vide. En fait, il nest
mme pas ncessaire de nettoyer lautomate pour cela.
J.-P. Jouannaud Universit Paris Sud
4.2 Dcision de la nitude 19
Lemme 4.3 Le langage dun automate ni / est non vide si et seulement si lun au moins des tats
de F est accessible.
Preuve: Il suft dcrire la condition dexistence dun mot reconnu par lautomate.
Ce lemme montre que la dcidabilit du vide se ramne lexistence de chemins joignant ltat
initial un tat acceptant dans le graphe de lautomate. Comme lexistence dun chemin se dtermine
en temps linaire par des calculs darbres couvrants du graphe, on en dduit :
Thorme 4.4 Le vide du langage reconnu par un automate quelconque est dcidables en temps
linaire.
4.2 Dcision de la nitude
On obtient de mme :
Lemme 4.5 Le langage dun automate /est inni si et seulement sil existe un tat q ayant les trois
proprits suivantes :
(i) q est accessible ;
(ii) q est productif ;
(iii) q est situ sur un cycle non trivial (dont au moins une transition est non vide).
Une faon simple de procder consiste donc tester lexistence dun cyle non trivial dans lau-
tomate obtenu par nettoyage. La nitude sobtient bien sr par ngation de la proprit prcdente,
cest--dire dans le cas o il nexiste aucun tat q ayant ces trois proprits la fois.
Ce lemme montre que la dcidabilit de la nitude se ramne elle-aussi lexistence de chemins
dune certaine forme dans le graphe de lautomate. Comme lexistence dun chemin ou dun cycle
se dtermine en temps linaire par des calculs darbres couvrants du graphe, on en dduit :
Thorme 4.6 La nitude et linnitude du langage reconnu par un automate quelconque sont d-
cidables en temps linaire.
4.3 Dcision du plein
Reste le problme du plein du langage reconnu par un automate ni. Si lautomate est dter-
ministe, ce problme a la mme complexit que le problme du vide, puisquils schangent par
change des tats acceptants et non-acceptants. Cela nest pas vrai des automates non-dterministes.
Thorme 4.7 Le plein du langage reconnu par un automate dterministe (respectivement, non
dterministe) est dcidable en temps linaire (respectivement, exponentiel).
Le cas des automates dterministes se traite par un passage au complmentaire en temps linaire
sans changer la taille de lautomate ( un facteur prs). Pour les automates non-dterministes, il est
ncessaire de dterminiser au pralable, do le saut de complexit.
4.4 Exercices
Exercice 4.1 Donner un algorithme pour calculer lensemble des tats accessibles dun automate.
Exercice 4.2 On considre lautomate suivant reconnaissant le langage L
0
:
J.-P. Jouannaud Universit Paris Sud
20 Nettoyage des automates
a
b
c
d
e
0110011010
On demande de nettoyer cet automate, puis de donner le langage quil reconnait.
J.-P. Jouannaud Universit Paris Sud
21
Chapitre 5
Proprits de clture des langages
reconnaissables
Soit f une opration darit n sur les mots. tant donns les alphabets V
1
, . . . , V
n
et les lan-
gages L
1
sur V
1
, . . . , L
n
sur V
n
, on dnit le langage f(L
1
, . . . , L
n
) =

u
i
L
i
f(u
1
, . . . , u
n
) sur
lalphabet V
1
. . . V
n
On dit que les langages reconnaissables sont clos par une opration f si f(L
1
, . . . , L
n
) est re-
connaissable lorsque les langages L
1
, . . . , L
n
le sont.
Les langages reconnaissables possdent de trs nombreuses proprits de clture, en particulier
par les oprations Boolennes, par substitution (des lettres dans les mots dun langage par des mots
pris arbitrairement dans un langage rgulier associ chaque lettre, le cas particulier o chaque lettre
est remplace par un mot tant appell homomorphisme), par homomorphisme inverse, par quotient
droite, par shufe, par pompage, etc.
Ces proprits jouent deux rles essentiels : elles servent montrer que certains langages sont
bien reconnaissables, lorsquils sont obtenus partir de langages reconnaissables par une opration
de cture ; elles servent contrario montrer que certains langages ne sont pas reconnaissables,
lorsquils permettent dobtenir un langage non reconnaissable par une opration de cture. La clture
par pompage joue un rle cl pour cette dernire application.
5.1 Clture Boolenne
Nous nous intressons ici aux oprations Boolennes sur des langages dnis par des automates
les reconnaissant, de sorte que les oprations peuvent tre vues comme agissant directement sur les
automates.
On commence par la clture par complmentaire :
Thorme 5.1 Soit A = (V
t
, Q, q
0
, F, T) un automate dterministe complet. Alors A =
(V
t
, Q, q
0
, Q F, T) reconnait le langage complmentaire de Lang(A).
Ce rsultat est une consquence directe du Lemme 3.3 et de la reformulation de la notion dac-
ceptation qui sen est ensuivie. Il est donc fondamental dans cet nonc que lautomate de dpart
soit complet. Passons maintenant lunion et lintersection :
Dnition 5.2 tant donns deux automates dterministes A
1
= (V
t
, Q
1
, T
1
) et A
2
=
(V
t
, Q
2
, T
2
) sur le mme alphabet V
t
, lautomate A = (V
t
, Q
1
Q
2
, T) o T((q
1
, q
2
), a) =
(T(q
1
, a), T(q
2
, a) est appell produit synchronis de A
1
par A
2
.
Notons que lautomate produit a pour effet de synchroniser les transitions, donc les calculs des
automates de dpart.
J.-P. Jouannaud Universit Paris Sud
22 Proprits de clture des langages reconnaissables
Thorme 5.3 Soient A = (V
t
, Q, T) et A

= (V
t
, Q

, T

) deux automates dterministes sur le


mme alphabet V
t
, et B leur produit synchronis. Alors, lautomate B
FF

(q
0
,q

0
)
reconnait le langage
Lang(A
F
q
0
) Lang(A
F

0
), et si les automates de dpart sont complets, lautomate B
(FQ

)(F

Q)
(q
0
,q

0
)
reconnait le langage Lang(A
F
q
0
) Lang(A
F

0
).
La construction ci-dessus se gnralise sans difcult pour reconnaitre lintersection des lan-
gages reconnus par deux automates non-dterministes sans transitions vides Aet A

ne possdant pas
le mme alphabet : il suft pour cela de dnir T sous la forme plus gnrale (mais quivalente pour
les automates dterministes complets) T((q
1
, q
2
), a) = (q

1
, q

2
) [ q

1
T(q
1
, a) et q

2
T(q
2
, a)
qui fournit un automate incomplet sur lalphabet union (mais complet sur lalphabet intersection)
qui rpond la question.
Par contre, il faut faire attention en ce qui concerne lunion des langages reconnus, car il faut
disposer dautomates qui soient complets sur lalphabet union. Il suft pour cela de rajouter une
poubelle de manire ce quun automate ne se bloque pas pendant que lautre est en train de recon-
naitre. Cette construction fonctionne galement pour des automates non dterministes.
Les proprits de clture Boolenne ont de trs nombreuses applications. Par exemple, pour v-
rier si un automate / modlisant un certain automatisme possde une proprit P, qui peut tre
vue comme une proprit des mots sur lalphabet de lautomate, la technique classique consiste
construire un automate /
P
qui accepte tous les mots (et rien que ceux l) qui satisfont la
proprit P, puis vrier que Lang(/) Lang(/
P
) . Cette inclusion peut se rcrire en
Lang(/) Lang(/
P
) = , ce qui, grce aux proprits de clture, revient tester le vide de
lautomate / /
P
.
5.2 Clture par produits
Thorme 5.4 Les langages reconnaissables sont clos par produit de langages.
Preuve: Soient L et L

deux langages reconnus respectivement par les automates / =


(V
t
, Q, i, F, T) et /

= (V
t
, Q

, i

, F

, T

) supposs sans transitions vides. On construit lautomate


/

= (V
t
, Q Q

, i, F

, T

), tel que
q Q, q

, a V
t
, T

(q, a) = T(q, a), T

(q

, a) = T

(q

, a), T

(f F, ) = i

et lon vrie aisment quil reconnait bien le langage L L

.
Les langages reconnaissables tant clos par produit, ils le sont bien sr par une puissance quel-
conque. Ils le sont mme par produit itr.
Thorme 5.5 Les langages reconnaissables sont clos par produit itr (on dit aussi par toile de
Kleene) et par produit itr strict.
Preuve: Soient L un langage reconnus par lautomate / = (V
t
, Q, i, F, T) suppos sans transition
vide. On construit tout dabord lautomate /
+
= (V
t
, Q, i, F, T
+
), tel que
q Q, a V
t
, T
+
(q, a) = T(q, a), T
+
(f F, ) = i
et lon vrie aisment quil reconnait bien le langage L
+
par rcurrence sur le nombre dutilisations
lors dun calcul acceptant des transitions vides allant dun tat de F ltat i.
La construction pour L

est la mme si L, puisque dans ce cas L

= L
+
, mais elle est nette-
ment plus complexe dans le, cas gnral, pour lequel on dnit /
+
= (V
t
, Qi

, f

, i

, f

, T

),
tel que
q Q, a V
t
, T

(q, a) = T(q, a), T


+
(i

F, ) = i, f

, T
+
(f F, ) = i, f

J.-P. Jouannaud Universit Paris Sud


5.3 Clture par morphisme 23
et lon vrie aisment quil reconnait bien le langage L
+
par rcurrence sur le nombre dutilisations
lors dun calcul acceptant des transition vide allant dun tat de F ltat i.
En fait la construction peut se simplier y compris lorsque le langage L ne reconnait pas le
mot vide : on peut confondre les tats i et i

condition que lautomate / nait pas de boucle sur


ltat i, et on peut galement confondre les tats f avec ltat f

(ce qui aboutira avoir une


transition vide depuis chaque tat acceptant vers ltat i) condition quil nait pas de boucle sur
ltat i

. Dans le cas contraire, cest--dire lorsquil y a des boucles la fois sur i et f, on peut
encore confondre i

et f

. En pratique il est important de construire des automates aussi compacts


que possible, an de contrler au maximum les phnomnes dexplosion combinatoire rencontrs
lors des dterminisations.
5.3 Clture par morphisme
Dnition 5.6 tant donne une application h de V
t
dans V

t
, on dnit lhomomorphisme engen-
dr par h, encore not h, comme lunique application de V

t
dans V

t
qui vrie
h() = et h(av) = h(a) h(v)
Limage par un homomorphisme h dun langage L est le langage
h(L) = u V

t
[ v V

t
tel que u = h(v)
Thorme 5.7 Les langages reconnaissables sont clos par homomorphisme.
Preuve: Le rsultat se prouvera facilement ds que nous aurons dni les expressions rationnelles,
par rcurrence sur leur structure.
5.4 Pompage des langages reconnaissables
Soit m = uvw un mot sur le langage V
t
. On dit que les mots de la forme uv
k
w pour k N sont
obtenus par pompage de v dans m. Les langages reconnaissables possdent une proprit de clture
remarquable vis vis de lopration de pompage qui sert contrario montrer que certains langages
qui ne la possdent pas ne sont pas reconnaissables. Nous allons dabord illustrer la dmarche avec
le langage L = a
n
b
n
[ n N, qui est connu pour tre le langage le plus simple qui ne soit pas
reconnaissable.
Supposons que L soit reconnaissable par un certain automate / = (a, b, Q, i, F, T). Notons
N = [Q[, et considrons le mot a
N
b
N
de L. Il est reconnu par un calcul de la forme :
i = q
0
a
q
1
. . . q
N1
a
q
N
b
q
N+1
. . . q
2N1
b
q
2N
F
Comme lautomate na que N tats, il existe deux entiers i et j tels que 0 i < j N et q
i
= q
j
.
On peut donc reformuler le calcul prcdent comme suit
i = q
0
a
i
q
i
a
j
i
q
j
a
N
j
q
N
b
N
q
2N
F
Comme q
i
= q
j
, le calcul
i = q
0
a
i
q
i
= q
j
a
N
j
q
N
b
N
q
2N
F
reconnait le mot a
N(ji)
b
N
qui nest pas un mot de L puisque j i est strictement positif. Notre
hypothse que le langage L est reconnaissable est donc errone.
Le langage L = a
n
b
n
[ n N nest donc pas reconnaissable. Cela a dimportantes cons-
quences pour les langages de programmation, puisque cette structure langagire abonde : il sagit
ni plus ni moins du langage des parenthses bien formes. Gnraliser cet outil est donc essentiel,
puisque cela va nous permettre de comprendre quels sont les langages que lon ne peut pas traiter
avec des techniques dautomates.
J.-P. Jouannaud Universit Paris Sud
24 Proprits de clture des langages reconnaissables
Thorme 5.8 Tout langage L reconnaissable satisfait la proprit
Pompe
d
= N > 0 tel que m L, si [m[ N alors u, v, w V

t
tels que :
(i) m = uvw,
(ii) v ,= ,
(iii) [uv[ < N,
(iv) k Nat, uv
k
w L
Preuve: Cest le mme argument que celui que lon vient de dvelopper pour montrer que le langage
a
n
b
n
[ n N nest pas reconnaissable. On se donne un automate complet, sans transition vide /
reconnaissant le langage L, et on note N = [Q[ qui est positif strictement puisque / est complet.
Soit maintenant m L de taille au moins N, et
i = q
0
m
q
|m|
F
un calcul reconnaissant m. Comme lautomate na que N < [m[ + 1 tats, il existe deux entiers i et
j tels que 0 i < j N et q
i
= q
j
. Il existe donc trois mots u, v, w tels que :
i = q
0
u
q
i
v
q
j
w
q
|m|
F
et lon vrie immdiatement que les conditions (i), (ii) et (iii) sont satisfaites. De plus, comme
q
i
= q
j
, le calcul
i = q
0
u
q
i
v
k
q
j
w
q
|m|
F
reconnait le mot uv
k
w qui est donc un mot de L.
Il faut insister sur le fait que le Lemme de la pompe nest pas une condition ncessaire et
sufsante : il existe des langages non reconnaissables qui satisfont le Lemme de la pompe. On ne
peut donc pas dduire dun langage quil est reconnaissable en montrant quil satisfait le Lemme
de la pompe. Mais lon peut sen servir bien sr pour montrer quun langage nest pas reconnais-
sable, comme nous lavons fait prcdemment pour le langage des parenthses a
n
b
n
[ n N,
puisque, par contraposition, un langage qui ne satisfait pas le Lemme de la pompe ne peut pas tre
reconnaissable.
Exprimons donc la ngation de la proprit de la pompe, cela se fait par application des rgles
usuelles de logique permettant de pousser les ngations lintrieur des formules en changeant les
quanticateurs, et par application galement du thorme de dduction (permettant de prouver la
proprit A = B en prouvant B avec un ensemble dhypothses augment de A). On obtient :
Pompe
d
= N > 0, m L, [m[ N tel que u, v, w V

t
satisfaisant
(i) m = uvw,
(ii) v ,= ,
(iii) [uv[ < N,
alors k Nat tel que uv
k
w , L.
La preuve faite au dbut de ce paragraphe nous a montr que le langage des parenthses satisfait
la proprit Pompe, et quil nest donc pas un langage reconnaissable. Mais comment faire avec
un langage qui satisfait le thorme de la pompe ? Lide cette fois est de combiner la proprit de
la pompe avec une autre proprit de clture.
Considrons le langage L = c
m
a
n
b
n
[ m > 0, n 0 a

, et montrons que ce langage


satisfait la proprit Pompe. Prenons N = 3, et choisissons u = , v la premire lettre du mot,
et w le reste du mot. Si lon pompe dans un mot de la forme c
m
a
n
b
n
, on obtiendra un mot de la
mme forme, ou bien le mot a
n
b
n
qui fait partie du langage a

. Si lon pompe un mot de a

, on
obtiendra encore un mot de a

car on ne pompe quune seule lettre. Donc L vrie la proprit de


la pompe.
Soit maintenant K = c
+
a

un langage rationnel, et h un homomorphisme tel que h(a) =


a, h(b) = b et h(c) = . On remarque alors que h(L K) = a
n
b
n
[ n 0 qui nest pas
reconnaissable, et donc L non plus, puisque a
n
b
n
[ n 0 est obtenu partir de L en utilisant des
proprits de clture.
J.-P. Jouannaud Universit Paris Sud
25
Chapitre 6
Expressions rationnelles
Les automates sont le vhicule idal pour ffectuer des calculs sur les langages reconnaissables.
Mais ils ne sont pas trs commodes la communication, en particulier avec la machine, moins de
les dessiner.
On va donc introduire une notation plus pratique, et en mme temps trs puissante, les expresions
rationnelles.
6.1 Expressions rationnelles
Dnition 6.1 On dnit le langage at des expressions rationnelles sur lalphabet V
t
par rcur-
rence sur leur taille :
Cas de base Tout mot u sur V
t
est une expression rationnelle ;
Cas gnral Si e et e

dsignent des expressions rationnelles, alors


1. e +e

est une expression rationnelle appelle somme de e et e

;
2. ee

est une expression rationnelle appelle produit de e et e

;
3. e

est une expression rationnelle appelle itre de e ;


4. (e) est une expression rationnelle.
Toute expression rationnelle dnote un langage dit rationnel, que lon dnit par rcurrence sur
la taille des expressions rationnelles :
Dnition 6.2 On dnit le langage Lang() de lexpression rationnelle par rcurrence sur la
taille de :
Cas de base Lang(u) = u ;
Cas gnral Si e et e

dsignent des expressions rationnelles, alors


1. Lang(e +e

) = Lang(e) Lang(e

) ;
2. Lang(ee

) = Lang(e) Lang(e

) ;
3. Lang(e

) = (Lang(e))

;
4. Lang((e)) = Lang(e).
On considre parfois, sans ncessit, des expressions rationnelles dites tendues, en ajoutant la
construction e qui dnote le langage complmentaire de Lang(e). Cette construction est en effet
redondante, comme on pourra le dduire du thorme 6.3.
J.-P. Jouannaud Universit Paris Sud
26 Expressions rationnelles
6.2 Thorme de Kleene
Un fait tout fait remarquable est que les langages rationnels ne sont rien dautres que les lan-
gages reconnaissables : cest le thorme de Kleene.
Thorme 6.3 Rat = Rec
Preuve: Rat Rec. La preuve se fait aisment par rcurrence sur la taille des expressions ration-
nelles, grce aux proprits de clture des langages reconnaissables.
Cas de base u V

t
: il est ais de construire un automate /
u
reconnaissant u;
Cas gnral Si e et e

dsignent des expressions rationnelles, alors, par hypothse de rcurrence,


il existe des automates /
e
et /
e
reconnaissant les langages Lang(e) et Lang(e

).
1. Lexistence dun automate reconnaissant Lang(e+e

) dcoule de la clture des langages


reconnaissables par union ;
2. Lexistence dun automate reconnaissant Lang(ee

) dcoule de la clture des langages


reconnaissables par produit ;
3. Lexistence dun automate reconnaissant Lang(e

) dcoule de la clture des langages


reconnaissables par toile ;
4. Lautomate reconnaissant Lang((e)) est tout simplement lautomate reconnaissant e.
Rec Rat. Cette direction est rendue difcile par labsence de dnition par rcurrence pour
les automates. On va restaurer une rcurrence en exprimant adroitement les chemins de calcul des
mots reconnus par un automate, quil soit ou non dterministe. Soit donc / = (V
t
, Q, i, F, T) un
automate.
On va noter par L
I
q,q
avec q I et q

I, le langage des mots reconnus par lautomate /depuis


ltat q jusqu ltat q

sans jamais passer par un tat de I le long du chemin.


Le principe de la construction va tre de dcouper les chemins de q q

en une succession de
chemins de q q ne repassant pas par q, puis en un chemin de q q

ne repassant pas par q ni par q

,
pour terminer par une succession de chemins de q

ne repassant ni par q ni par q

. Cela revient
faire apparatre le long du chemin qui va de q q

tous les passages par q, puis tous les passages par


q

le long du chemin restant allant de q q

sans jamais passer par q. On en dduit donc les quations


aux langages suivantes :
Lang(/) =

f F
f ,= i
(L
{i}
i,i
)

L
{i,f}
i,f
(L
{i,f}
f,f
)

L
I
q,q
=

a V
t
s.t.
q T(q, a)
a

a V
t
and
q

T(q, a) I
a (L
I{q

}
q

,q
)

L
I{q

}
q

,q
L
I
q,q

=q
=

a V
t
s.t.
q

T(q, a)
a

a V
t
and
q

T(q, a) I
a (L
I{q

}
q

,q
)

L
I{q

}
q

,q

On peut maintenant montrer par rcurrence sur la taille de lensemble dtats autoriss Q I que le
langage L
I
q,q
est rationnel.
Cas de base : si Q = I, alors on a ncessairement L
Q
q,q
=

a V
t
s.t.
q T(q, a)
a et
L
Q
q,q

=q
=

a V
t
s.t.
q T(q, a)
a qui sont lun et lautre rationnels.
Cas gnral : on applique lhypothse de rcurrence aux langages L
I{q

}
q

,q
et L
I{q

}
q

,q
dans le
premier cas, et aux langages L
I{q

}
q

,q
et L
I{q

}
q

,q
dans le second avant de conclure par utili-
sation des oprations daddition, produit et itration des expressions rationnelles dont linter-
prtation est justement lunion, le produit et litr de langages.
J.-P. Jouannaud Universit Paris Sud
6.3 Identits remarquables 27

Donnons un exemple illustrant le calcul dune expresion rationnelle pour le langage reconnu par
lautomate de la gure 6.1.
FIG. 6.1 Langage reconnu par un automate.
Langage Calcul Expression rationnelle
L = (L
{0}
0,0
)

L
{0}
0,0
= a (L
{0,1}
1,1
)

L
{0,1}
1,0
= +a(b +ce

d)
L
{0,1}
1,0
= b c (L
{0,1,2}
2,2
)

L
{0,1,2}
2,0
= b +c( +e)

L
{0,1}
1,1
= c ()

L
{0,1,2}
2,1
=
L
{0,1,2}
2,1
= =
L
{0,1,2}
2,2
= e = +e
L
{0,1,2}
2,0
= d = d
Notons que le langage vide L
{0,1,2}
2,1
est dnot par lexpression rationnelle vide.
6.3 Identits remarquables
Deux expressions rationnelles distinctes peuvent dnoter le mme langage. Par exemple, (a+b)

et (a

dnotent toutes deux le langage des mots quelconques sur lalphabet a, b. Nous donnons
ci-dessous un ensemble didentits remarquables satisfaites par les expressions rationnelles. Elles
pourront tre vries en exercice.
1. r +s = s +r
2. (r +s) +t = r + (s +t)
3. (rs)t = r(st)
4. r(s +t) = rs +rt
5. (r +s)t = rt +st
6.

=
7. (r

= r

8. ( +r)

= r

9. (r

= (r +s)

6.4 Analyse lexicale avec loutil LEX


Lanalyse lexicale aura pour but de prparer ltape suivante, lanalyse syntaxique, en engendrant
une squence de tokens qui sera ultrieurement analyse par lanalyseur syntaxique. Un analyseur
lexical est donc une sorte de gros automate dont les tats acceptants reconnaissent les diffrents
tokens (cest--dire les diffrentes sortes dunits lexicales) du langage.
Les diffrents tokens une fois spcis sous forme dexpressions rationnelles, un automate d-
terministe minimal peut tre construit pour chacun deux. Loutil LEX est un outil disponible dans
diffrents langages de programmation, qui automatise cette transformation.
J.-P. Jouannaud Universit Paris Sud
28 Expressions rationnelles
6.4.1 Notion de token
Lors de lanalyse syntaxique dun langage, nous avons vu quil tait pratique de dnir la gram-
maire du langage non pas directement sur le vocabulaire du langage, mais plutt en supposant dj
dnies des grammaires simples (en loccurrence des grammaires rgulires) pour les composants
simples du langage appels units lexicales : les constantes numriques, les identicateurs, les mots-
cls, etc. Chaque non-terminal source de lune de ces grammaires rgulires est appel un token. Un
token reprsente donc le langage rgulier associ une unit lexicale donne.
6.4.2 Fichier de description LEX
En pratique, il est agrable dutiliser des expressions rationnelles auxiliaires, et la dnition de
langages rationnels se prsente donc sous la forme suivante dans le langage LEX :
1. Une suite de dnitions de la forme D
i
= R
i
, o D
i
est un nom, et R
i
est une expression
rgulire sur lalphabet V D
1
, . . . , D
i1
.
2. Une suite de rgles de la forme Si P
i
Alors A
i
, o P
i
est une expression rationnelle sur
lalphabet V D
i

i
appele ltre, et A
i
est un programme caractristique du type dunit
lexicale reconnu par le ltre P
i
.
Par exemple, pour le langage des expressions arithmtiques, on aura :
lettre = 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
chiffre = 0 [ 1 [ 2 [ 3 [ 4 [ 5 [ 6 [ 7 [ 8 [ 9
Si chiffre(chiffre)

Alors %traitement des constantes


Si lettre(lettre)

Alors %traitement des identicateurs


Si + Alors %traitement de laddition
Si Alors %traitement de la multiplication
Les traitements peuvent tre en gnral nimporte quelle expression ou instruction du langage
de programmation auquel loutil LEX est associ. Nous lutiliserons uniquement pour retourner des
tokens (voir paragraphe suivant).
Les outils LEX autorisent en gnral dautres constructions pour les expressions rationnelles,
comme les intervalles de lettres, qui permettent dabrger lcriture. Loutil LEX le plus utilis est
loriginal et produit du langage C; mais il existe galement pour dautres langages, avec quelques
variantes. Noter quen CAML, loutil CAMLLEX ne permet pas les dnitions.
6.4.3 Description des tokens
LEX va nous servir reconnaitre les diffrentes units lexicales sous forme de dnitions auxi-
liaires et de rgles. Nous pourrons par exemple avoir un chier LEX de la forme :
lettre = 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
chiffre = 0 [ 1 [ 2 [ 3 [ 4 [ 5 [ 6 [ 7 [ 8 [ 9
Si if Alors If
Si then Alors Then
Si else Alors Else
Si chiffre(chiffre)

Alors Id
Si lettre(lettre)

Alors Cte
Notons que puisque toutes les constantes sont remplaces par le token Cte, on a perdu de linfor-
mation. Pour la suite de linterprtation du langage considr, il faut garder un lien entre le token et
la valeur de la constante correspondante. Le mme problme se pose pour les identicateurs.
J.-P. Jouannaud Universit Paris Sud
6.4 Analyse lexicale avec loutil LEX 29
q
0
q
1
q
2
q
3
q
4
q
5
q
6
e n
d
a . . . z a . . . z
FIG. 6.2 Automate danalyse lexicale
Il y a plusieurs faons de conserver ce lien, suivant le type de langage utilis. En programmation
fonctionnelle, on peut considrer le token comme tant une fonction dont largument est lunit
lexicale qui la produit : cest ce qui est fait dans CAMLLEX. En programmation imprative, il est
dusage de conserver ce lien dans une table, la table des symboles. Le token est alors une paire,
forme du token lui-mme dune part, et dun pointeur sur la table des symboles dautre part. La
table des symboles pourra bien sr contenir un grand nombre dinformations pour chaque occurrence
diffrente dun mme token.
Dcider dune solution ou dune autre est une question dimplmentation. En ce qui nous
concerne, nous supposerons que lunit lexicale reprsente par le token t est obtenue par un ap-
pel une fonction val, donc est donne par lexpression val(t).
6.4.4 Rgles de priorit
tant donn un programme analyser, cest--dire un mot w sur lalphabet V du langage de
programmation considr, il y aura en gnral de multiples faons de dcouper w en units lexicales.
Un principe de slection est donc ajout qui garantit lunicit du dcoupage :
(i) Le ltre choisi est celui qui reconnat le plus grand prxe du mot w.
(ii) Au cas o plusieurs ltres P
i
1
, . . . , P
i
q
, avec i
1
< . . . < i
q
, reconnaissent le mme (plus
grand) prxe u, le ltre de plus petit indice P
i
1
est choisi.
Soit par exemple un fragment de langage contenant deux types de tokens, le mot cl end , et
les identicateurs. On aura :
lettre = 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
Si end Alors End
Si lettre(lettre)

Alors Id
Les automates correspondants ces ltres sont reprsents sur la gure 6.2 sous la forme dun
automate avec transitions vides dont la partie suprieure traite le mot cl end et la partie infrieure
traite les identicateurs. chaque tat acceptant peut tre associ le token correspondant : End pour
q
4
et Id pour q
6
.
Soit endormi le mot reconnatre. Les deux ltres reconnaissent le mme prxe, mais
le deuxime reconnat aussi un prxe plus long, le second ltre est donc choisi et ltat nal de
lexcution de lautomate doit donc tre ltat q
6
. Soit maintenant end le mot reconnatre. Les
deux ltres reconnaissent le mme prxe de longueur maximale, end . Le premier ltre est donc
choisi, et ltat nal doit donc tre ltat q
4
.
Cet automate est dterminis (et se trouve tre minimal) sur la gure 6.3. Ltat acceptant q
3
devrait normalement correspondre aux deux tats acceptants de la gure 6.2. Le choix du premier
J.-P. Jouannaud Universit Paris Sud
30 Expressions rationnelles
q
0
q
1
q
2
q
3
q
4
e
a . . . z
sauf e
n
d
a . . . z
sauf n
a . . . z
sauf d
a . . . z a . . . z
FIG. 6.3 Automate dterminis danalyse lexicale
ltre, cest--dire du mot cl, fait que cet tat acceptant est en fait associ au mot cl uniquement.
Les tokens correspondants aux tats acceptants sont donc End pour q
3
et Id pour q
1
, q
2
et q
4
.
En pratique, ces rgles de priorit imposent que dans LEX, les ltres correspondants aux diff-
rents mots cls devront apparatre avant le ltre pour les identicateurs. De plus, on remarque qu
chaque tat acceptant est associ un unique token, dcrit par un ltre P
i
, et le code excuter lorsque
cet tat acceptant est atteint est donc le code A
i
.
6.5 Exercices
Exercice 6.1 Donner des expressions rationnelles dnotant les langages suivants :
1. les entiers en dcimal ;
2. les entiers relatifs en dcimal, cest--dire pouvant optionnellement commencer par un signe
+ ou un signe ;
3. les identicateurs de PASCAL ;
4. les nombres rels en virgule ottante ;
5. les nombres rels en virgule ottante avec exposants.
Exercice 6.2 Donner un automate reconnaissant le langage des mots forms dun nombre pair de
a et dun nombre impair de b. En dduire une expression rationelle pour ce langage.
Exercice 6.3 Est-ce que les expressions suivantes sont quivalentes pour nimporte quelles expres-
sions rationnelles r et s :
1. (rs +r)

r et r(sr +r)

2. s(rs +s)

r et rr

s(rr

s)

3. (r +s)

et r

+s

Exercice 6.4 1. Donner une expression rationnelle dnotant le langage


L
0
= a
n
b
p
[ o n et p sont des entiers naturels pairs(y compris 0)
2. Donner un automate dterministe minimal reconnaissant le langage L
0
.
3. Donner une expression rationnelle (nave) dnotant le langage L =

k0
L
2k+1
0
J.-P. Jouannaud Universit Paris Sud
6.5 Exercices 31
4. Donner une expression rationnelle dau plus 13 symboles qui dnote le langage L (il en existe
en fait de moins de 10 symboles). Justiez votre rponse.
5. En dduire un automate dterministe minimal reconnaissant L.
6. Donner une expression rationnelle dnotant le langage L

0
des mots obtenus partir des mots
de L
0
en supprimant, pour chacun deux, les lettres de rang impair (la premire, la troisime,
etc.), de telle sorte que le mot aaaaaabbbbbbbb devient aaabbbb).
7. Donner un automate dterministe minimal pour L

0
.
8. Donner une expression rationnelle dnotant le langage L

0
des mots obtenus partir des
mots de L
0
en supprimant, pour chacun deux, leur seconde moiti, de telle sorte que le mot
aaaaaabbbbbbbb devient le mot aaaaaab.
9. Donner un automate dterministe minimal pour L

0
.
10. Exprimer laide de L et L

0
le langage L

des mots obtenus partir des mots de


L en supprimant, pour chacun deux, leur seconde moiti, de telle sorte que le mot
aabbaaaabbaaaabbbbbbbb devient aabbaaaabba.
11. En dduire un automate dterministe minimal pour L

.
J.-P. Jouannaud Universit Paris Sud
32 Grammaires formelles
Chapitre 7
Grammaires formelles
Les grammaires sont des outils pour dcrire des langages, inspirs des grammaires utilises pour
les phrases du langage naturel, comme par exemple :
Une phrase simple est constitue dun sujet suivi dun verbe suivi dune prposition
suivie dun complment. Le sujet est un prnom ou bien un pronom. Les prnoms sont
choisir parmi Alain , Batrice et Charles . Les pronoms sont choisir parmi
Il et Elle . Les prpositions sont choisir parmi , de , au et en . Les
verbes sont choisir parmi va et vient . Les complments sont choisir parmi
lcole et march .
Les rgles informelles ci-dessus peuvent tre dcrites par des rgles de grammaire.
7.1 Grammaires
Dnition 7.1 Une grammaire G est un quadruplet (V
t
, V
n
, S, R) o
1. V
t
est un ensemble ni de symboles dits terminaux, appel vocabulaire terminal ;
2. V
n
est un ensemble ni (disjoint de V
t
) de symboles dits non-terminaux, appel vocabulaire
non terminal ;
3. V = V
n
V
t
est appel le vocabulaire de la grammaire G;
4. S est un non-terminal particulier appel source, ou axiome ;
5. R (V

t
) V

est un ensemble ni de rgles de grammaire notes g d si (g, d) R.


On utilisera des mots en italique commenant par une majuscule pour les non-terminaux, et des
lettres minuscules ou des symboles spciaux (+, , etc.) pour les terminaux.
Exercice 7.1 Reformuler la description introductive sous forme de rgles de grammaire.
Un autre exemple est la description de lensemble des entiers naturels en reprsentation binaire,
vus comme des suites non vides de 0 et de 1 ayant la proprit que seule la suite 0 peut commencer
par un 0. Pour cela, nous allons utiliser une grammaire pour laquelle lensemble des symboles non-
terminaux est N , M , la source est le non-terminal N, lensemble des symboles terminaux est
0, 1 et les rgles sont dcrites gure 7.1. Ce tableau prsente en fait quatre ensembles de rgles,
dont le premier et le troisime sont conformes la dnition, alors que les rgles de mme membre
gauche ont t regroupes dans le second et le quatrime en sparant les diffrents membres droits
par le symbole [ signiant ou , conformment une convention usuelle : N u
1
[ [ u
n
abrge lensemble des rgles N u
1
, . . ., N u
n
. Les quatre ensembles de rgles de la gure 7.1
dcrivent le mme langage, celui des nombres entiers naturels crits en binaire, mais le troisime est
J.-P. Jouannaud Universit Paris Sud
7.2 Langage engendr par une grammaire 33
plus compact que le premier grce lutilisation du symbole . Le premier et le second ensemble de
rgles doivent tre considrs comme identiques, de mme que le troisime et le quatrime, car ils
ne diffrent que par lconomie dcriture juste mentionne.
N 0
N 1
N 1M
M 0
M 1
M 0M
M 1M
N 0 [ 1 [ 1M
M 0 [ 1 [ 0M [ 1M
N 0
N 1M
M
M 0M
M 1M
N 0 [ 1M
M [ 0M [ 1M
FIG. 7.1 Deux grammaires dcrivant les entiers crits en binaire
7.2 Langage engendr par une grammaire
Une grammaire est un mcanisme permettant dengendrer les phrases du langage, en rcrivant
un mot u V

en un nouveau mot v V

par lopration consistant remplacer une occurrence


(quelconque) dun non-terminal N (quelconque) de V
n
prsent dans u par un membre droit de rgle
dont N est membre gauche. Ce processus est itr partir de la source jusqu llimination complte
des non-terminaux. Par exemple, en utilisant la premire grammaire dnie dans la gure 7.1 :
N 1M 11M 110M 1101M 11010
et en utilisant la deuxime grammaire dnie dans la gure 7.1 :
N 1M 11M 110M 1101M 11010M 11010
Dnition 7.2 tant donne une grammaire G = V
t
, V
n
, S, R, on dit que le mot u V

se rcrit
en le mot v V

dans G avec la rgle g d, et lon note u


gd
v, si
1. u = w
1
gw
2
, o w
1
V

et w
2
V

;
2. v = w
1
dw
2
;
On dit que le mot u V

se rcrit en le mot v V

dans G sil existe une rgle g d R


telle que u se rcrit en v dans G. Enn, on dit que le mot v V

drive du mot u V

, dans la
grammaire G, ce que lon note par u

v, sil existe une suite nie w


0
, w
1
, . . . , w
n
de mots de V

telle que w
0
= u, w
i
w
i+1
pour tout i [0, n 1], et w
n
= v.
Nous avons vu ci-dessus que le mot 11010M drive du mot 1M dans la troisime grammaire de
la gure 7.1. Par convention, nous indiquerons le non-terminal rcrit dans un mot en le soulignant,
comme dans
1M 11M 110M 1101M 11010M
Dnition 7.3 Le langage engendr par la grammaire Gest lensemble des mots de V

t
qui drivent
de laxiome de G, que lon note par Lang(G).
Il est ais de se convaincre que lensemble des mots qui appartiennent aux langages engendrs
par les grammaires de la gure 7.1 est dans les deux cas lensemble des entiers naturels crits en
binaire, cest--dire les suites de 0 et de 1 ne commenant pas par 0, sauf la suite 0 elle-mme.
J.-P. Jouannaud Universit Paris Sud
34 Grammaires formelles
7.3 Classication de Chomsky
Les grammaires telles que nous venons de les dnir sont dites gnrales. Les langages engen-
drs sont dits de type 0 dans la hirachie de Chomsky. On verra quils sont reconnus par des machines
de Tring.
7.3.1 Grammaires contextuelles
La grammaire de la gure 7.2 dcrit le langage a
n
b
n
c
n
[ n 0. Ses rgles ont la particularit
davoir un membre droit de taille suprieure ou gale celle de leur membre gauche.
S aSBC[
CB BC
aB ab
bB ab
bC bc
cC cc
FIG. 7.2 Grammaire contextuelle
Dnition 7.4 tant donne une grammaire G = V
t
, V
n
, S, R, une rgle de R est dite contex-
tuelle si elle est de la forme g d avec [g[ [d[. Une grammaire est contextuellesi toutes ses rgles
le sont, et le langage engendr est alors dit contextuel ou de type 1.
Les langages de type sont reconnus par des machines de Tring particulires utilisant un espace
mmoire born.
7.3.2 Grammaires hors-contexte
La grammaire
S [aSb
dcrit le langage a
n
b
n
[ n 0. Cette grammaire a une particularit : le membre gauche de chaque
rgle est un non-terminal.
Dnition 7.5 tant donne une grammaire G = V
t
, V
n
, S, R, une rgle de R est dite hors-
contexte si elle est de la forme N u o u V

. Une grammaire est hors-contexte si toutes ses


rgles le sont, et le langage engendr est alors dit hors-contexte ou de type 2. On note par L
HC
la
classe des langage hors-contexte.
Les langages hors-contexte sont reconnus par des machines de Tring particulires, les auto-
mates pile, que nous dcouvrirons dans le prochain chapitre.
7.3.3 Grammaires rgulires
Les grammaires de lexemple de la gure 7.1 sont hors-contexte, mais elles ont une particularit
supplmentaire : le membre droit possde au plus une occurrence de symbol non terminal, situe
lextrmit droite.
Dnition 7.6 tant donne une grammaire G = V
t
, V
n
, S, R, une rgle de R est dite rgulire
si elle est de la forme N u ou N uM, o M, N V
n
et u V

t
. Une grammaire est rgulire
si toutes ses rgles le sont, et un langage est alors dit rgulier ou de type 3.
J.-P. Jouannaud Universit Paris Sud
7.4 Forme normale de Chomsky 35
Les langages rguliers sont bien sr reconnus par des machines de Tring particulires :
Thorme 7.7 Un langage est rgulier si et seulement si il est reconnaissable.
Preuve: tant donn une grammaire rgulire G = V
t
, V
n
, S, R, on commence par calculer une
nouvelle grammaire G

= V
t
, V

n
, S, R

engendrant le mme langage dont les rgles sont de la


forme N a, N , N aM ou N M, avec N, M V
n
et a V
t
. Ceci se fait
en remplaant rcursivement toute rgle de la forme N a
1
u o [u[ > 1 par les deux rgles
N aK, K u o K dsigne un nouveau non terminal ajout la grammaire. On construit
ensuite lautomate / = (V
t
, V

n
f, S, f, T) tel que M T(N, a) ssi N aM R

,
M T(N, ) ssi N M R

, f T(N, a) ssi N a R

, et f T(N, ) ssi N R

.
On vrie alors aisment que Lang(A) = Lang(G

).
Rciproquement, partir dun automate / = (V
t
, Q, i, F, T) sans transition vide, on construit la
grammaire rgulire G = V
t
, Q, i, R telle que q aq

ssi q

T(q, a) et f ssi f F, qui


engendre le langage Lang(A).
Les rgles rgulires dune grammaires dcrivent donc les parties reconnaissables dun langage.
La syntaxe dun langage de programmation comporte gnralement un nombre ni de grammaires
rgulires dont les sources sont appelles des tokens : on pourra ainsi avoir une grammaire pour les
constantes entires, une autre pour les constantes relles en simple prcision, une pour les identi-
cateurs, etc. Ces tokens peuvent tre considrs comme les terminaux de la partie non rgulire de
la grammaire.
7.4 Forme normale de Chomsky
Nous venons de voir le besoin de simplier une grammaire dans certains cas. Nous allons le faire
dans un cadre gnral : celui des grammaires hors-contexte.
Dnition 7.8 Une grammaire hors-contexte G = V
t
, V
n
, S, R est dite propre si elle vrie :
1. N u R, u ,= ou N = S
2. N u R, S , u
3. Les non-terminaux sont tous utiles, cest--dire la fois
(a) N V
n
, N est atteignable depuis S : , V

tels que S

N ;
(b) N V
n
, N est productif : w V

t
tel que N

w.
Thorme 7.9 Pour toute grammaire hors-contexte G = V
t
, V
n
, S, R, il existe une grammaire
hors-contexte G

= V
t
, V

n
V
n
S

, S

, R

propre qui engendre le mme langage.


Preuve: On procde en plusieurs tapes dans cet ordre :
1. On rajoute une rgle S

S, S

devenant la nouvelle source ;


2. limination des M .
Calculer lensemble E = M V

n
[ M

;
Pour tout M E Faire
Pour toute rgle N M de R Faire
Ajouter la rgle N R
Fin Faire ;
Fin Faire
Enlever les rgles M telles que M V
n
J.-P. Jouannaud Universit Paris Sud
36 Grammaires formelles
3. limination des rgles M N. On applique la procdure suivante G prive de la rgle
S

:
Calculer les paires (M, N) telles que M

N ;
Pour chaque paire (M, N) calcule Faire
Pour chaque rgle N u
1
[ . . . [u
n
de R Faire
Ajouter la rgle M u
1
[ . . . [u
n
R
Fin Faire
Fin Faire ;
Enlever toutes les rgles M N
4. Suppression des non terminaux non productifs :
Calculer les non terminaux productifs ;
Enlever tous les autres
5. Suppression des non terminaux non atteignables :
Calculer les non terminaux atteignables ;
Enlever tous les autres
On remarque que chaque tape ne remet pas en cause la prcdente, et donc la grammaire obtenue est
propre. Ce ne serait pas le cas si lon inversait les deux dernires tapes, comme le montre lexemple
G = a, S, M, N, S, R R = S aMN, M a

La mise sous forme propre dune grammaire hors-contexte est la succession de 4 tapes qui
terminent. On en dduit que le vide dune grammaire est dcidable :
Corollaire 7.10 Le langage engendr par une grammaire G est vide si et seulement si sa mise sous
forme propre rsulte en une grammaire vide.
Thorme 7.11 Pour tout langage hors-contexte L, il existe une grammaire propre Gqui lengendre
dont toutes les rgles sont de lune des trois formes S , P a, ou P MN avec M, N
diffrents de S.
Preuve: Partant dune grammaire hors-contexte propre G = V
t
, V
n
, S, R, on commence par ra-
jouter une copie de V
t
V
n
(on notera Ala copie de a), puis lensemble de rgles A a [ a V
t
.
On remplace ensuite les symboles terminaux a gurant dans les membres droits de rgles initiales
par le non-terminal correspondant A, puis on remplace rcursivement la rgle X X
1
. . . X
n
pour
n > 2 par X X
1
Y et Y X
2
. . . X
n
en ajoutant un nouveau non-terminal Y chaque fois.
7.5 Drivations gauches et droites
Nous allons maintenant dcrire un langage prsent dans tous les langages de programmation, le
langage des expressions arithmtiques. Nous noterons par Id et Cte les tokens dcrivant respective-
ment les noms de variables et les constantes entres ou relles (sans les exposants pour simplier).
Ces syntaxes seront supposes tre celles des langages informatiques classiques, lexception prs
que les constantes et les variables pourront tre de taille arbitraire. Pour simplier nous considrons
galement que les seules oprations sont laddition et la multiplication.
Une grammaire des expressions arithmtiques aura alors pour symboles terminaux V
t
=
+, , (, ), Id, Cte et pour non-terminaux lunique symbole E qui sera donc la source :
E Id [ Cte [ E +E [ E E [ (E)
J.-P. Jouannaud Universit Paris Sud
7.5 Drivations gauches et droites 37
Cette grammaire permet dengendrer lexpression arithmtique x +2.5 4 +(y +z), en supposant
que les mots 2.5 et 4 font partie du langage engendr par la grammaire des constantes, et que x, y, z
font partie du langage engendr par la grammaire des variables. En effet :
E E +E Id +E Id +E E Id + Cte E Id + Cte E +E
Id + Cte Cte +E Id + Cte Cte + (E) Id + Cte Cte + (E +E)
Id + Cte Cte + (Id +E) Id + Cte Cte + (Id + Id)
et il suft de remplacer de manire approprie les diffrentes occurrences de Id et Cte pour obtenir
le rsultat dsir. La drivation ci-dessus est appele drivation gauche, car le non-terminal rcrit
chaque tape est celui qui est situ le plus gauche dans le mot obtenu ltape prcdente. La
drivation ci-dessus nest pas unique, en voici une autre trs semblable, qui nest pas une drivation
gauche, mais est obtenue en permutant les deux dernires tapes de la drivation gauche :
E E +E Id +E Id +E E Id + Cte E Id + Cte E +E
Id + Cte Cte +E Id + Cte Cte + (E) Id + Cte Cte + (E +E)
Id + Cte Cte + (E + Id) Id + Cte Cte + (Id + Id)
En voici encore une autre, une drivation droite cette fois :
E E +E E + (E) E + (E +E) E + (E + Id) E + (Id + Id)
E E + (Id + Id) E Cte + (Id + Id) E +E Cte + (Id + Id)
E + Cte Cte + (Id + Id) Id + Cte Cte + (Id + Id)
Comment tre sr que ces drivations sont quivalentes, en le sens que les mots engendrs ont la
mme signication, cest--dire donneront lieu au mme calcul ? Il se trouve que le calcul qui est
associ un mot w dpend non seulement du mot lui-mme, mais aussi de la drivation qui a servi
le fabriquer ! Cette dpendance sexprime par un parenthsage du mot, qui peut tre implicite dans
le mot w, mais devient explicite dans la drivation. Par exemple, le parenthsage explicite du mot
x + 2.5 4 + (y +z) tel quil est dni par la premire drivation est (x + (2.5 (4 + (y +z)))).
La seconde drivation donne le mme parenthsage, mais il nen est pas de mme pour la troisime,
qui correspond au parenthsage (((x + 2.5) 4) + (y + z)). En fait le parenthsage attendu nest
ni lun ni lautre. Il doit traduire les conventions de dsambigusation habituelles, savoir que la
multiplication a priorit sur laddition, et que multiplication et addition associent gauche, cest--
dire que x+y +z doit tre interprt comme tant ((x+y) +z). Cela ne semble pas trs important
puisque laddition et la multiplication sont associatives, mais cela le devient lorsque la soustraction
et la division font partie du langage. Le bon parenthsage est donc ((x + (2.5 4)) + (y + z)), et
une drivation de notre exemple conforme ce parenthsage est la suivante :
E E +E E + (E) E + (E +E) E + (E + Id) E + (Id + Id)
E +E + (Id + Id) E +E E + (Id + Id) E +E Cte + (Id + Id)
E + Cte Cte + (Id + Id) Id + Cte Cte + (Id + Id)
Cette drivation est elle aussi une drivation droite. Nous pouvons maintenant en donner une variante
( des permutations prs) dans laquelle lutilisation de la rgle E EE a lieu lorsquaucune autre
rgle ne peut tre utilise, ce qui est une manire de traduire la convention de dsambigusation :
E E +E E + (E) E + (E +E) E + (E + Id) E + (Id + Id)
E +E + (Id + Id) Id +E + (Id + Id) Id +E E + (Id + Id)
Id +E Cte + (Id + Id) Id + Cte Cte + (Id + Id)
Notre mot possde donc plusieurs drivations droites (et aussi plusieurs drivations gauches) dans
la grammaire, ce qui est la manifestation visible de lambigut. Nous posons donc la dnition
suivante.
J.-P. Jouannaud Universit Paris Sud
38 Grammaires formelles
Dnition 7.12 Une grammaire G est ambigu sil existe un mot w Lang(G) qui possde plu-
sieurs drivations droites dans G.
Notre grammaire des expressions arithmtiques est donc ambigu. Nous allons la transformer
de manire reter les rgles de dsambigusation, ce qui ncessite lutilisation de nouveaux non-
terminaux F et G. Lide de la transformation est la suivante : un nouveau symbole non-terminal est
utilis pour chaque niveau de priorit, et une rgle rcursive gauche est utilise pour traduire lasso-
ciativit gauche. Par exemple, la rgle E E+F va permettre dengendrer une suite dadditions
parenthses gauche. Le non-terminal F servira engendrer les expressions arithmtiques qui ne
sont pas des additions. Il faudra donc rajouter aussi la rgle E F de manire terminer la s-
quence dadditions. Ainsi, si lon dispose galement de la rgle F a, on engendrera lexpression
a +a +a par la drivation suivante :
E E +F E +F +F F +F +F a +F +F a +a +F a +a +a
la rgle de multiplication doit tre change conformment ce principe, et les rgles de notre nou-
velle grammaire des expressions arithmtiques sont alors les suivantes :
E E +F [ F F F G [ G G (E) [ Cte [ Id
Le mme mot est maintenant obtenu par une unique drivation gauche ou droite, nous donnons
ci-dessous la drivation gauche :
E E +F E +F +F F +F +F G+F +F Id +F +F
Id +F G+F Id +GG+F Id + Cte G+F Id + Cte Cte +F
Id + Cte Cte +G Id + Cte Cte + (E) Id + Cte Cte + (E +F)
Id + Cte Cte + (F +F) Id + Cte Cte + (G+F) Id + Cte Cte + (Id +F)
Id + Cte Cte + (Id +G) Id + Cte Cte + (Id + Id)
La transformation opre sur la grammaire a limin lambigut au prot dune part dune perte de
simplicit, car lcriture de la grammaire est plus complexe, et dautre part dune augmentation de
la longueur de la drivation des mots du langage.
7.6 Arbres syntaxiques
Nous avons vu que, dans une mme grammaire G, un mot pouvait avoir plusieurs drivations
quivalentes, cest--dire sobtenant les unes des autres par des permutations adquates. Nous allons
donc maintenant exhiber une structure de donne, les arbres syntaxiques, qui est invariante par ces
permutations, de telle sorte quun mot de Lang(G) possde un arbre syntaxique unique lorsque G
est non-ambigu.
Dnition 7.13 tant donne une grammaire G = (V
t
, V
n
, S, R), les arbres de syntaxe de G sont
des arbres, les nuds internes tiquets par des symboles de V
n
, et les feuilles tiquets par des
symboles de V , tels que, si les ls pris de gauche droite dun nud interne tiquet par le non-
terminal N sont tiquets par les symboles respectifs
1
, . . . ,
n
, alors N
1

n
est une rgle
de la grammaire G.
Un arbre de syntaxe dont la racine est tiquete par laxiome de la grammaire et dont le mot des
feuilles u appartient V

t
est appel arbre de drivation ou encore arbre syntaxique de u.
Tout arbre de drivation est donc un arbre de syntaxe, mais certains arbres de syntaxe ne sont pas
des arbres de drivation, soit parce que leur racine nest pas tiquete par laxiome de la grammaire,
soit parce que certaines de leur feuilles sont tiquetes par des non-terminaux.
J.-P. Jouannaud Universit Paris Sud
7.6 Arbres syntaxiques 39
FIG. 7.3 Deux arbres de drivation du mot Id +Cte Cte +(Id +Id) dans la grammaire ambigu
des expressions arithmtiques
FIG. 7.4 Parcours gauche et droit de larbre de drivation du mot Id + Cte Cte + (Id + Id) dans
la grammaire des expressions arithmtiques dsambiguse
Larbre de drivation dnit tout un ensemble de drivations de son mot des feuilles. Une dri-
vation est en fait obtenue ds que lon a x un mode de parcours de larbre dans lequel un nud ne
peut tre visit que si son pre la dj t. Ainsi, la gure 7.3 montre deux arbres de drivation du
mot Id + Cte Cte + (Id + Id) dans la grammaire ambigu des expressions arithmtiques. Partant
de la racine, le parcours gauche consiste descendre tant que cela est possible en choisissant en
permanence la branche la plus gauche. Lorsque lon arrive une feuille, il faut remonter au plus
proche anctre dont un ls na pas encore t visit, puis recommencer la descente partir du plus
gauche des ls non encore visits. La gure 7.4 indique les parcours gauches et droits de larbre de
drivation du mot Id + Cte Cte + (Id + Id) dans la grammaire dsambiguse, en numrotant les
nuds internes de larbre de drivation dans lordre o ils sont visits.
La discussion prcdente montre que le mot des feuilles dun arbre de drivation de la grammaire
G appartient Lang(G). Nous allons maintenant montrer la rciproque en construisant larbre de
syntaxe associ une drivation. Notons que cette fois la drivation est suppose quelconque : son
origine est un non-terminal arbitraire, et le mot engendr peut comporter des non-terminaux. On va
donc construire des arbres de syntaxe qui ne seront pas ncessairement des arbres de drivation. On
procde par rcurrence sur la longueur des drivations de la faon suivante :
une drivation de longueur nulle, cest--dire un symbole V , on associe un arbre de
syntaxe rduit une feuille tiquete par ;
une drivation de longueur n+1, de la forme N

w
1
Mw
2
w
1

1
. . .
n
w
2
, on associe
larbre de syntaxe obtenu partir de larbre de syntaxe de la drivation N

w
1
Mw
2
en
ajoutant, la feuille tiquete par M, n feuilles tiquetes respectivement par
1
, . . . ,
n
.
On en dduit la proprit fondamentale suivante :
Thorme 7.14 tant donne une grammaire G = (V
t
, V
n
, S, R), un mot u V

t
appartient
Lang(G) si et seulement sil possde un arbre de drivation dans la grammaire G.
On remarque facilement que des drivations qui schangent par des permutations adquates ont
le mme arbre de drivation. On peut donc reformuler notre dnition dambigut de la manire
suivante :
Dnition 7.15 Une grammaire G est ambigu sil existe un mot u Lang(G) qui possde deux
arbres de drivation distincts dans la grammaire G.
La gure 7.3 conrme que notre premire grammaire des expressions arithmtiques tait ambi-
gu, comme cela est toujours le cas avec des oprateurs binaires inxes, comme + et , moins
dinclure les rgles de priorit des oprateurs dans la grammaire, lorsquil y en a. Dans ce cas, la
grammaire ambigue peut toujours tre transforme en une grammaire non ambige comme nous
lavons fait pour la grammaire des expressions arithmtiques.
J.-P. Jouannaud Universit Paris Sud
40 Grammaires formelles
7.7 Exercices
Exercice 7.2 On considre la grammaire suivante :
G = (0, 1, N, N, N 11 [ 1001 [ N0 [ NN)
1. Dessiner les arbres de drivation pour les mots 11011 et 11110.
2. Est-ce que la grammaire est ambigu ?
3. On regarde larbre syntaxique suivant :
N
N
N
1 1
0
N
N
1 0 0 1
N
1 1
Donner la drivation gauche et la drivation droite pour cet arbre.
Exercice 7.3 On considre le langage des expressions arithmtiques avec addition, oprateur inxe
not +, soustraction, oprateur inxe not , oppos, oprateur unaire prxe not , multiplica-
tion, oprateur binaire not , division, oprateur binaire inxe not /, et exponentiation, oprateur
binaire not . Les oprateurs binaires associent tous gauche sauf lexponentiation qui associe
droite, et lordre de priorit est > (oppos) > , / > +, (soustraction).
1. Donner le bon parenthsage des mots 3 2 1 et 2 3 4.
2. Donner le bon parenthsage du mot x +y 2 3 x.
3. Donner une grammaire non-ambigu dcrivant ce langage.
Exercice 7.4 1. Spcier un type abstrait arbre de syntaxe , avec ses fonctions de construc-
tion et daccs.
2. Spcier puis raliser une fonction de parcours gauche et une fonction de parcours droit.
3. Coder ce type abstrait et ces fonctions de parcours en CAML puis en PASCAL.
Exercice 7.5 1. Construire larbre de drivation du mot Id+CteCte+(Id+Id) dans la gram-
maire ambigu des expressions arithmtiques, correspondant au parenthsage ((x + (2.5
4)) + (y +z)).
2. Construire larbre de drivation correspondant la drivation gauche du mot Id+CteCte+
(Id + Id) dans la grammaire dsambiguse des expressions arithmtiques.
Exercice 7.6 Un palindrome non trivial est un mot de longueur au moins deux sur lalphabet a z
qui se lit aussi bien de droite gauche que de gauche droite. Par exemple, eve, anna, otto sont
des palindromes. Une suite-palindrome sera un mot sur ce mme alphabet obtenu en concatnant
plusieurs palindrmes, comme par exemple annaeveotto.
1. Donner une grammaire pour les suites-palindrome.
2. Dessiner les arbres de drivation des mots annaeveotto et aaaa
3. Est-ce que la grammaire est ambigu ?
4. Peut-on trouver une grammaire non ambigu pour le langage ?
J.-P. Jouannaud Universit Paris Sud
41
Chapitre 8
Automates pile
Ce sont les machines utilises pour la reconnaissance des langages hors-contexte.
8.1 Langages reconnaissables par automates pile
Un automate pile est une machine munie dune bande de lecture, dune bande de travail orga-
nise en pile, et dun contrle comme indiqu la gure 8.1.
FIG. 8.1 Lautomate pile.
Dnition 8.1 Un automate pile non-dterministe / est un quadruplet (V
t
, Q, V
P
, T) o
1. V
t
est le vocabulaire de lautomate ;
2. Q est lensemble des tats de lautomate ;
3. V
P
est le vocabulaire de pile de lautomate ;
4. T : Q(V
t
) V
P
T(V

P
Q) est la fonction de transition de lautomate.
Lautomate sera dit dterministe sil vrie la condition :
q Q X V
P
a V
t
, [T(q, , X) T(q, a, X)[ 1 ;
Lautomate sera dit complet sil vrie la condition :
q Q, X V
P
, a V
t
, [T(q, , X) T(q, a, X)[ 1 ;
On notera q
a,X,
q

pour q

T(q, a, X) avec X V
P
, V

P
et a (V
t
).
Lexicographie : on utilisera autant que faire se peut les lettres a, b, c, . . . pour les lettres de V
t
,
les lettres u, v, w, . . . pour les mots de V

t
, les lettres X, Y, Z pour les lettres de V
P
et les lettres
, , , . . . pour les mots de V

P
. Il arrivera toutefois dans les exemples que lon utilise les mme
lettres pour V
t
et V
P
.
La notion de calcul pose un petit problme : celui de faire tomber la pile gauche ou droite.
Dans ce cours, on la fera gnralement tomber droite, et on crira donc le mot (non vide) de pile
sous la forme X, mais on ne sinterdira pas de la faire tomber gauche lorsque cela se rvlera
plus commode, en lcrivant sous la forme X. La diffrence restera bien sr invisible lorsque lon
ne fait pas apparare explicitement le sommet de pile.
Dnition 8.2 tant donn un automate / = (V
t
, Q, V
P
, T), on appelle conguration toute paire
(q, ) forme dun tat q Q de lautomate et dun mot de pile V

P
, et transition de lautomate
la relation entre congurations note (q, )
a,X,
(q

), o a V
t
, X V
P
, V

t
, telle que (i)
(q

, ) T(q, a, X), (ii) = X, et (iii)

=
J.-P. Jouannaud Universit Paris Sud
42 Automates pile
Dans le cas o lon fait tomber la pile gauche, on crira une transition sous la forme
(q, )
a,X,
(q

), la condition (ii) devenant (ii) = X, et la condition (iii) devenant

= .
Dnition 8.3 tant donn un automate / = (V
t
, Q, V
P
, T), on appelle calcul dorigine (q
0

Q,
0
V
+
t
), toute suite (q
0
,
0
)
a
1
,X
1
,
1
(q
1
,
1
) . . . (q
n1
,
n1
)
a
n
,X
n
,
n
(q
n
,
n
) ventuelle-
ment vide de transitions.
Lentier n est la longueur du calcul et a
0
a
1
. . . a
n
est le mot lu par le calcul, ce que lon notera en
criture abrge sous la forme (q
0
,
0
)
a
0
...a
n
(q
n
,
n
).
Il sera parfois commode de noter un calcul sous une forme un peu diffrente, le contenu de pile
apparaissant au dessus de la che gurant la transition, une transition reliant alors des tats plutt
que des congurations :
q
0
a
1
,
1
X
1
,
1
q
1
. . . . . . q
n1
a
n
,
n
X
n
,
n
q
n
.
Dans le cas o lon fait tomber la pile gauche, cette criture commode devient
q
0
a
1
,X
1

1
,
1
q
1
. . . . . . q
n1
a
n
,X
n

n
,
n
q
n
.
On peut maintenant passer la notion de reconnaissance. En fait, il y en a plusieurs, toutes
quivalentes, qui utilisent diffrentes conditions dacceptation.
Dnition 8.4 On dit que le mot u = u
1
. . . u
n
est reconnu par lautomate /
F
i,
=
(V
t
, Q, i, F, V
P
, , T), o V
P
est appell fond de pile de lautomate, i est son tat initial et
F Q est lensemble des tats acceptants, sil existe un calcul (i, )
u
1
...u
n
(q
n
,
n
) dorigine
(i, ) tel que :
1. reconnaissance par tat nal : q
n
F ;
2. reconnaissance par pile vide :
n
= ;
On note par Lang(/) le langage des mots reconnus par lautomate /
F
i,
qui sera souvent not
simplement A.
On peut galement combiner les deux conditions dacceptation ce qui fournit 3 conditions dac-
ceptation diffrentes. Notons aussi limportance du symbole de fond de pile : la premire transition
de lautomate ncessite la lecture dun symbole dans la pile, qui est donc initialise avec .
Exemple 8.5 L = a
n
b
m
a
n
[ n, m 1 a
m
b
n
a
n
[ n, m 1 Lautomate reconnaissant ce
langage par pile vide est reprsent la gure 8.2.
FIG. 8.2 Automate non dterministe reconnaissant le langage a
n
b
n
a
m
[ n, m 1 a
n
b
m
a
n
[
n, m 1 par pile vide.
Lautomate reprsent la gure 8.3 reconnait ce mme langage par tat nal seul.
FIG. 8.3 Automate non dterministe reconnaissant le langage a
n
b
n
a
m
[ n, m 1 a
n
b
m
a
n
[
n, m 1 par tat nal et fond de pile.
Notons quil est toujours possible de supposer que le symbole de fond de pile se trouve en per-
manence en fond de pile (sauf ventuellement tout la n en cas de reconnaissance par pile vide) et
jamais ailleurs. En effet, tant donn un automate / = (V
t
, Q, i, F, V
P
, , T), on construit aisment
un automate /

= (V
t
, Q i

, i

, F, V
P

, T

) qui a la proprit tout en reconnaissant le


mme langage. On dnit T

comme suit :
T

(i

, ,

) = (i,

)
q Q a V
t
X V
P
T

(q, a, X) = T(q, a, X)
q Q T

(q, ,

) = (q, ) si reconnaissance par pile vide


J.-P. Jouannaud Universit Paris Sud
8.2 Automates pile et grammaires hors-contexte 43
Thorme 8.6 Les modes de reconnaissance sont quivalents pour les automates non dterministes.
On note par /lg la classe des langages reconnaissables par un automate pile.
On choisit la reconnaissance par tat nal pour les automates dterministes.
Preuve: Soit / = (V
t
, Q, i, F, V
P
, , T) un automate pile reconnaissant par tat nal. On construit
aisment un automate reconnaissant la fois par tat nal et pile vide : il suft pour cela dajouter
de nouvelles transitions en tat nal de manire vider la pile. Toutefois, cette transformation ne
prserve pas le dterminisme.
Soit maintenant / = (V
t
, Q, i, F, V
P
, , T) un automate pile reconnaissant par pile vide. On
construit aisment un automate reconnaissant la fois par tat nal et pile vide, en ajoutant un nouvel
tat f, un nouveau symbole de fond de pile comme prcdemment, puis les transitions :
(i) T

(i,

) = (i,

) ;
(ii) q Q a V
t
X V
P
T

(q, a, X) = T(q, a, X) ;
(iii) q Q T

(q,

) = (f, ).
Notons que ces transformations conservent le dterminisme.
Comme le dterminisme est conserv en passant de la reconnaissance par pile vide celle par
tat acceptant, la bonne notion de reconnaissance par un automate dterministe, cest--dire celle
qui qui autorise la plus grande classe de langages reconnus, est base sur la reconnaissance par tat
nal.
8.2 Automates pile et grammaires hors-contexte
Thorme 8.7 Un langage est hors-contexte si et seulement si il est reconnaissable par un automate
pile.
An de bien comprendre la correspondance entre la gnration par une grammaire et la recon-
naissance par un automate, nous allons tudier un exemple. On se donne tout dabord une grammaire
en forme normale de Chomsky qui engendre le langage a
n
b
n
[ n 0, par exemple la grammaire
G = (a, b, S, A, B, C, S, S , S AC, C SB, A a, B b)
et nous allons construire une drivation qui engendre le mot a
3
b
3
:
S AC aC aSB aACB aaCB
aaSBB aaACBB aaaCBB aaaSBBB
aaaBBB aaabBB aaabbB aaabbb
Pour reconnaitre le langage engendr, lide est de construire un automate pile non-dterministe
qui calque le calcul fait par la grammaire : chaque tape, par exemple ltape qui termine la
premire ligne de notre drivation, le prxe maximal v V

t
du mot engendr cette tape, dans
notre cas le mot a
3
, sera trs exactement le prxe dja reconnu cette tape du mot u reconnaitre,
dans notre exemple le mot a
3
b
3
, alors que le reste w V

n
du mot, dans notre cas le mot CBB, sera
le contenu de pile cette tape de la reconnaissance. Notre automate, en adoptant la convention de
la pile qui tombe gauche, sera donc
/ = (a, b, q, q, S, A, B, C, S, q
,S,
q, q
,S,AC
q, q
,C,SB
q, q
a,A,
q, q
b,B,
q).
et la reconnaissance du mot a
3
b
3
donnera les calculs suivants :
(q, S)
,S,AC
(q, AC)
a,A,
(q, C)
,C,SB
(q, SB)
,S,AC
(q, ACB)
a,A,
(q, CB)
,C,SB
(q, SBB)
,S,AC
(q, ACBB)
a,A,
(q, CBB)
,C,SB
(q, SBBB)
,S,
(q, BBB)
b,B,
(q, BB)
b,B,
(q, B)
b,B,
(q, )
J.-P. Jouannaud Universit Paris Sud
44 Automates pile
Notons quil nest pas utile de choisir la grammaire de dpart en forme normale de Chomsky, on
peut faire le mme raisonnement avec une grammaire quelconque, dans laquelle les ocurrences des
symboles terminaux des membres droits de rgles sont transformes en non-terminaux, lexception
de loccurrence du terminal par lequel dbute venrtuellement le membre droit.
G = (a, b, S, B, S, S , S aSB, B b)
S aSB aaSBB aaaSBBB aaaBBB
aaabBB aaabbB aaabbb
/ = (a, b, q, q, S, S, q
,S,
q, q
a,S,SB
q, q
b,B,
q).
(q, S)
a,S,aSB
(q, SB)
a,S,aSB
(q, SBB)
a,S,aSB
(q, SBBB)
,S,
(q, BBB)
b,B,
(q, BB)
b,B,
(q, B)
b,B,
(q, )
On peut maintenant faire la preuve qu toute grammaire hors-contexte correspond un automate
pile qui reconnait le mme langage. Cet automate a un unique tat duquel partent et auquel arrivent
toutes les transitions, que lon appellera lautomate marguerite.
Preuve: On suppose tout dabord donne la grammaire G = (V
t
, V
n
, S, R), et nous allons construire
un automate pile / = (V
t
, Q = q, q, V
n
, S, T) qui reconnait par pile vide le langage des mots
engendrs par la grammaire.
toute rgle de la forme N , on fait correspondre la transition
,N,
.
toute rgle de la forme N a, on fait correspondre la transition
a,N,
.
toute rgle de la forme N X, on fait correspondre la transition
,N,X
.
Lautomate obtenu reconnait bien le langage L(G). Il a sa pile qui est tombe gauche. Une
rcurrence simple montre que les drivations dans la grammaire correspondre trs exactement aux
calculs de lautomate.
La transformation est plus complexe dans le sens inverse, et sans intrt pratique : nous lomet-
trons.
8.3 Exercices
Exercice 8.1 Peut-on complter un automate non dterministe sans changer le langage reconnu ?
un automate dterministe ? lautomate obtenu dans ce cas est-il encore dterministe ?
Exercice 8.2 Montrer que pour tout automate / reconnaissant par pile vide et tat nal en mme
temps, il existe un automate /

possdant un unique tat nal qui reconnait le mme langage par


pile vide et tat nal en mme temps.
J.-P. Jouannaud Universit Paris Sud
45
Chapitre 9
Proprits de clture des langages
algbriques
9.1 Vide et nitude des langages algbriques
On opre partir des grammaires hors-contexte associes, pour lesquelles le problme a dja t
abord.
Lemme 9.1 Le langage reconnu par un automate pile / est non vide ssi la grammaire associe
mise sous forme propre est non vide.
Preuve: Cest une consquence du thorme 8.7 et du Corollaire 7.10.
9.2 Pompage des langage algbriques
9.2.1 Proprit de pompage des algbriques
Revenons notre grammaire de rgles S , S aSb engendrant les mots de la forme a
n
b
n
,
et considrons larbre syntaxique du mot ab :
Le long du chemin central, le non-terminal S apparait deux fois. On peut donc obtenir de nou-
veaux arbres syntaxiques pour la mme grammaire en supprimant, ou en rpetant un nombre arbi-
traire de fois le motif central S(a, , b), par exemple
On en dduit alors que le mot a
2
b
2
appartient au langage.
Thorme 9.2 Si L est algbrique, alors il satisfait la proprit
P
alg
(L)
def
= n N tel que m L [m[ n = u, x, v, y, w V

t
tel que les proprits
suivantes soit satisfaites
1. m = uxvyw
2. [xy[ > 0
3. [xvy[ < n
4. i 0 ux
i
vy
i
w L
Preuve: Contrairement ce que nous avons fait pour lexemple, nous alons choisir une grammaire
G = (V
t
, V
n
, S, R) en forme normale de Chomsky qui engendre le langage L.
Soit N le nombre de non-terminaux dans la grammaire. Sachant que pour un arbre syntaxique
de hauteur h, le mot des feuilles est de longueur 2
h
au plus
J.-P. Jouannaud Universit Paris Sud
46 Proprits de clture des langages algbriques
Comme toujours, les proprits de pompage ne sont pas caractristiques dune classe de langage.
Il existe donc des langages non-algbriques qui satisfont la proprit de pompage prcdente. Il
est bien-sr possible dlaborer des proprits de pompage plus complexes, que des langages non-
algbriques ont plus de difcults satisfaire, cela fait lobjet dexercices.
9.2.2 Un peu de logique
Lutilisation essentielle dune proprit de pompage est de montrer que certains langages ne sont
pas algbriques. Puisque tout langage algbrique L satisfait la proprit P
alg
(L), un langage qui ne
la satisfait pas ne peut pas tre algbrique.
Ce raisonnement, dit par contraposition, utilise la proprit logique suivante :
A = B si et seulement si B = A
Et donc, le thorme de pompage peut galement sexprimer sous la forme quivalente :
Si le langage L satisfait la proprit P
alg
(L), alors il nest pas algbrique.
Il nous faut donc calculer la proprit P
alg
(L), comme nous lavions fait pour les langages
reconnaissables. Pour cela, nous utiliserons plusieurs quivalences logiques lmentaires, qui per-
mettent en particulier de pousser les ngations vers lintrieur dune formule :
A = B B (A)
A A
(A B) (A) (B)
(A B) (A) (B)
(A = B) A (B)
A A
A A
Ces quivalences permettent de driver deux autres quivalences simples qui interviennent de ma-
nire cruciale dans le calcul qui nous intresse :
(A B = C) A = (B = C)
(A B C D) A B C = (D)
Notons
A
def
= (m = uxvyw)
B
def
= ([xy[ > 0)
C
def
= ([xvy[ < n)
D
def
= (iM)
M
def
= N = O
N
def
= (i 0)
O
def
= ux
i
vy
i
w L
E
def
= (A B C D)
F
def
= (u, x, v, y, w V

t
E)
G
def
= (m L)
H
def
= ([m[ n)
I
def
= (G H)
J
def
= m(I = F)
K
def
= (n N)
P
alg
(L)
def
= n (K = J)
J.-P. Jouannaud Universit Paris Sud
9.3 Proprits de clture 47
Nous sommes maintenant arms pour calculer P
alg
(L) :
P
alg
(L) = n (K = J)
= n K (J)
(J) = m(I = F)
= m I (F)
(F) = (u, x, v, y, w V

t
(E))
(E) = (A B C) = (D)
On peut maintenant calculer la proprit P
alg
(L) :
P
alg
(L) = (n (n N) (m I (u, x, v, y, w V

t
(A B C) = (D))))
= (n (n N) = (m I = (u, x, v, y, w V

t
(A B C) = (D))))
Do nallement :
P
alg
(L) = (n (n N) = (m (m L [m[ n) = (u, x, v, y, w V

t
((m =
uxvyw) ([xy[ > 0) ([xvy[ < N)) = (i 0 ux
i
vy
i
w , L))))
ce qui se rcrit de la manire suivante :
P
alg
(L) = n N m L tel que [m[ n = (u, x, v, y, w V

t
tel que m =
uxvyw [xy[ > 0 [xvy[ < n, i 0 tel que ux
i
vy
i
w , L)
Pour prouver quun langage nest pas algbrique, il suft donc de prouver quil satisfait la pro-
prit P
alg
(L). Cest ce que nous allons faire pour le langage L = a
i
b
i
c
i
[ i 0, dont nous
allons prouver quil satisfait la proprit P
alg
(L) :
Soit n un entier positif arbitraire, m = a
n
b
n
c
n
et m = uxvyw un dcoupage de m tel que
[xy[ > 0 et [xvy[ < n. La condition [xvy[ < n implique que xvy = a
k
b
l
(ou bien, symtriquement,
b
k
c
l
), avec 0 k, 0 l et 0 < k+l < n, et donc, comme [xy[ > 0, v = a
k

b
l

avec k

+l

< k +l.
Prenons alors i = 0 : le mot ux
0
vy
0
w = uvw = a
nk+k

b
nl+l

c
n
nappartient pas L car si
k

= k, alors l

< l. Donc, L satisfait la proprit P


alg
(L), et nest donc pas algbrique.
9.3 Proprits de clture
Nous allons regrouper ces proprits en plusieurs catgories :
Union, produit et toile de Kleene. Comme les rationels, les algbriques sont clos par ces trois
proprits, les preuves travaillant cette fois sur les grammaires.
Thorme 9.3 Les langages algbriques sont clos par union.
Preuve: On se donne un langage L
1
engendr par la grammaire hors-contexte G
1
=
(V
t
, V
1
n
, S
1
, R
1
) et un langage L
2
engendr par la grammaire hors-contexte G
2
= (V
t
, V
2
n
, S
2
, R
2
).
On suposera, au prix dun renommage ventuel des non-terminaux de G
2
que V
1
n
V
2
n
= , et que
S , (V
1
n
V
2
n
).
On dnit alors la grammaire G = (V
t
, V
1
n
V
2
n
S, S, R
1
R
2
S S
1
, S S
2
),
pour laquelle il est immdiat de montrer quelle engendre le langage union de L
1
et L
2
.
Thorme 9.4 Les langages algbriques sont clos par produit.
Preuve: On se donne un langage L
1
engendr par la grammaire hors-contexte G
1
=
(V
t
, V
1
n
, S
1
, R
1
) et un langage L
2
engendr par la grammaire hors-contexte G
2
= (V
t
, V
2
n
, S
2
, R
2
).
On suposera, au prix dun renommage ventuel des non-terminaux de G
2
que V
1
n
V
2
n
= , et que
S , (V
1
n
V
2
n
).
On dnit alors la grammaire G = (V
t
, V
1
n
V
2
n
S, S, R
1
R
2
S S
1
S
2
), pour
laquelle il est immdiat de montrer quelle engendre le langage produit de L
1
par L
2
.
J.-P. Jouannaud Universit Paris Sud
48 Proprits de clture des langages algbriques
Thorme 9.5 Les langages algbriques sont clos par toile.
Preuve: On se donne un langage L
1
engendr par la grammaire hors-contexte G
1
=
(V
t
, V
1
n
, S
1
, R
1
). On suposera, au prix dun renommage ventuel des non-terminaux de G
1
que
S , (V
1
n
V
2
n
).
On dnit alors la grammaire G = (V
t
, V
1
n
S, S, R
1
S , S S
1
S), pour laquelle
il est immdiat de montrer quelle engendre litr de Kleene L

1
du langage L
1
.
Intersection et complmentation. linverse des rationels, les algbriques ne sont clos ni par in-
tersection, ni par complmentation. Seraient-ils clos par lune de ces deux oprations quils seraient
clos par lautre, puisquils sont clos par union, et quunion, complmentation et intersection sont
lies par la clbre loi de Morgan rappelle plus loin.
Thorme 9.6 Les langages algbriques ne sont pas clos par intersection ni par complmentation.
Preuve: On montre la non-clture par intersection. Pour cela, on considre les deux langages L
1
=
a
i
b
j
c
j
[ i, j 0 et L
2
= a
i
b
i
c
j
[ i, j 0 dont lintersection est le langage L = a
i
b
i
c
i
[ i
0 dont a vu au paragraphe 9.2 quil ntait pas algbrique.
Il nous suft donc de montrer que les langages L
1
et L
2
sont algbriques, ce qui a dja t fait.
Supposons maintenant (cest un raisonnement par labsurde) que les algbriques soient clos
par complmentation. Alors, tant donns deux langages algbriques quelconques L
1
et L
2
(par
exemple, les deux langages prcdents), leurs complmentaires L
1
et L
2
le seraient galement, et
donc, par application de la clture par union et de la loi de De Morgan
L
1
L
2
= L
1
L
2
le langage L
1
L
2
le serait galement. Par application de notre hypothse, son complmentaire
L
1
L
2
= L
1
L
2
le serait aussi, ce qui contredit le rsultat prcdent.
Par contre,
Thorme 9.7 Les langages algbriques sont clos par intersection avec un rationel.
Preuve: La preuve est trs similaire celle faite pour lintersection de deux rationnels : tant donns
un automate pile A
1
= (V
t
, Q
1
, i
1
, F
1
, V
P
, , T
1
) reconnaissant par tat nal, et un automate ni
A
2
= (V
t
, Q
2
, i
2
, F
2
, T
2
) sur le mme alphabet V
t
, on construit lautomate pile produit
A = (V
t
, Q
1
Q
2
, (i
1
, i
2
), F F

, T) o T((q
1
, q
2
), a, X) = (T(q
1
, a, X), T(q
2
, a)
Notons que lautomate produit a pour effet de synchroniser les transitions, donc les calculs des
automates de dpart, il reconnait Lang(A
F
q
0
) Lang(A
F

0
).
9.3.1 Substitution et homomorphisme
Thorme 9.8 Les langages algbriques sur un alphabet V
t
sont clos par substitution des lettres de
lalphabet V
t
par des langages algbriques, chaque lettre a V
t
tant remplace par un langage
albbrique L
a
sur un alphabet V
a
t
.
Preuve: La preuve se fait aisment sur les grammaires.
On en dduit le corollaire :
Thorme 9.9 Les langages algbriques sont clos par homophisme.
J.-P. Jouannaud Universit Paris Sud
9.4 Exercices 49
9.3.2 Homomorphisme inverse
Thorme 9.10 Les langages algbriques sont clos par homomorphisme inverse.
Preuve: La peuve a cette fois lieu sur les automates.
9.3.3 Applications
Comme pour les rationnels, les proprits de clture servent tout autant montrer que certains
langages sont algbriques sans avoir en donner une grammaire les engendrant ou un automate
pile les reconnaissant, qu montrer que certains langages sont ne sont pas algbriques alors mme
quils satisfont le Lemme de la pompe.
9.4 Exercices
J.-P. Jouannaud Universit Paris Sud
50 Analyse syntaxique
Chapitre 10
Analyse syntaxique
Le but de ce chapitre est de continuer ltude entreprise dans le chapitre prcdent,
concernant le passage, appel analyse syntaxique, dune grammaire hors-contexte un
automate qui reconnait le langage engendr.
Plus prcisment lobjectif est dintroduire le lecteur aux techniques danalyse syn-
taxique et lutilisation du logiciel YACC. Lanalyse syntaxique est un processus tech-
niquement plus complexe que lanalyse lexicale, dont les objets mathmatiques sous-
jacents sont les automates pile.
Il existe en fait deux faons bien diffrentes de concevoir lanalyse syntaxique dun mot dun
langage dcrit par une grammaire hors contexte. Lors de la lecture du mot (de la gauche vers la
droite), larbre syntaxique peut tre construit de haut en bas, ou de bas en haut, conformment
la gure 10.1. Dans le premier cas, lanalyse conctruit des arbres de syntaxe de racine S dont les
feuilles sont tiquettes par les symboles de V . Dans le second, elle engendre des suites darbres de
syntaxe dont les racines sont des mots sur V et les feuilles des mots sur V T.
Nous allons maintenant illustrer ces deux mthodes sur des exemples et en tirer de mthodes
gnrales.
10.1 Analyse syntaxique descendante
Exemple 10.1 Considrons la grammaire de Dick :
S [ (S)S
Lanalyse descendante correspond une drivation gauche. Par exemple, pour le mot ((()())()),
la drivation gauche est la suivante :
S (S)S ((S)S)S (((S)S)S)S ((()S)S)S ((()(S)S)S)S ((()()S)S)S
((()())S)S ((()())(S)S)S ((()())()S)S ((()())())S ((()())())
Lanalyse syntaxique descendante va construire la suite des arbres danalyse correspondant
cette drivation, reprsente la gure 10.2.
FIG. 10.1 Mthodes danalyse syntaxique
J.-P. Jouannaud Universit Paris Sud
10.1 Analyse syntaxique descendante 51
FIG. 10.2 Analyse syntaxique descendante
10.1.1 Analyse descendante non-dterministe
Il sagit en fait de construire lautomate dj vu qui transforme une grammaire hors-contexte en
un automate pile non-dterministe, lautomate marguerite. Nous renvoyons donc au chapitre qui
prcde.
10.1.2 Analyse descendante dterministe
Lautomate marguerite est dterministe en de rares occasions : si toutes les rgles de membre
gauche N V
P
sont de la forme N ou N a avec la condition que pour chaque N V
n
et a V
t
, il existe au plus une rgle de membre gauche N et dont le membre droit est vide ou
commence par la lettre a.
Cette condition tant trop restrictive, on va essayer de prdire le bon choix chaque tape de
lanalyse, cest pourquoi la mthode que nous allons discuter est aussi appelle analyse descendante
prdictive.
Le choix entre plusieurs rgles applicables peut se faire grce la connaissance du prochain
caractre devant tre engendr, appel le caractre davance. Au dpart, pour notre example, ce
caractre est la parenthse ouvrante, et la premire rgle appliquer doit donc engendrer une paren-
thse ouvrante. Il se trouve que la seconde rgle engendre une parenthse ouvrante, et ce sera donc
elle que lon appliquera chaque fois quune parenthse ouvrante devra tre engendre. De son cot,
la premire rgle fait disparatre le non-terminal S. Or, dans le membre droit de la seconde rgle, la
premire occurrence du non-terminal S est place devant une parenthse fermante. Lapplication de
la premire rgle une telle occurrence de S engendre donc indirectement une parenthse fermante.
Il en est de mme de la seconde occurrence de S (il faut pour sen rendre compte regarder les arbres
syntaxiques) sauf dans le cas o il sagit de la dernire telle occurrence de S remplacer avant de
terminer (et alors il faut ne rien engendrer du tout, car le mot lire est entirement lu). Le choix de
lapplication dune rgle est donc entirement dtermin par la connaissance du caractre davance.
Une telle grammaire est dite LL(1), le premier L tant linitiale du mot anglais Left, qui indique
que la lecture du mot analyser se fait de gauche droite, le second L, initiale du mme mot an-
glais, indiquant que lon construit une drivation gauche, et le 1 indiquant lutilisation dun unique
caractre davance. Toutes les grammaires ne sont pas LL(1), certaines peuvent tre LL(2), sans tre
LL(1), mais seul le cas LL(1) est utilis en pratique. Se rendre compte quune grammaire est LL(1)
demande le calcul des premiers caractres engendrs par lutilisation de chaque rgle. Par exemple,
dans la grammaire de Dick, le premier caractre engendr par lutilisation de la seconde rgle est
la parenthse ouvrante. Notons quune grammaire LL(1) est ncessairement non-ambigu, puisque
le choix dune rgle lors de lanalyse est entirement dtermin par la connaissance du caractre
davance.
An dobtenir un traitement uniforme de tous les cas, il est utile daugmenter la grammaire
considre G = (V
t
, V
n
, S, T) par un nouveau terminal f et un nouveau non-terminal S

qui devient
la source de la grammaire augmente
G

= (V

t
= V
t
f, V

n
= V
n
S

, S

, T

= T S

Sf)
Dnition 10.2 Soit S

g
u

g
uav une drivation gauche telle que u V

t
, V

, a
V

t
, et v V

t
. Alors a est appell caractre davance de la sous-drivation

g
av.
Notons tout dabord que le caractre davance existe toujours, puisque nous avons pris la pr-
caution de prendre S

Sf comme origine de la drivation et que u V

t
. Ce caractre davance
a plusieurs origines possibles :
J.-P. Jouannaud Universit Paris Sud
52 Analyse syntaxique
- si = a avec a V

t
, le caractre davance a est le premier caractre de la chane ;
- si = N avec N V
n
et N

g
a, le caractre davance est engendr par N ;
- si = N avec N V
n
, N

g
et

g
a, le caractre davance est engendr par .
Do les dnitions :
Dnition 10.3 On dnit les ensembles suivants :
First(N V

) = a V

t
[ V

g
a
First( V

) = a V

t
[ V

g
a
Follow(N V ) = a V

t
[ P N et a First(), ou

et a Follow(P)
On peut bien sr calculer aisment First(N) comme un point xe sur lensemble ni V

t
. On
peut ensuite en dduire First() pour tout , et donc pour tout ensemble ni de mots. On peut donc
nalement galement calculer Follow(N) ou Follow(a) nouveau comme des points xes sur V

t
.
Ces calculs utilisent un algorithme pour dcider si un mot V

peut engendrer le mot vide.


Ce sont l les diffrentes briques de base de lanalyse descendante dterministe. Les mthodes de
calcul par point xes qui sont ncssaires leur obtention seront vues en exercice, on les supposera
connues.
Le lemme qui suit justie les notions prcdentes :
Lemme 10.4 Soit S

g
Sf

g
uN

g
uav une drivation gauche de S

vers uav V

t
.
Alors a First(N) ou sinon a Follow(N).
Ce lemme eprime que lchec est assur si le caractre davance a , (First(N) Follow(N)).
La preuve est faire en exercice. Il permet danticiper un chec de lanalyse, mais ne prjuge pas de
la possibilit de russir lanalyse de manire dterministe. Pour cela, nous devrons nous assurer que
la drivation qui engendre le caractre lavance est de la forme N w

av o w est unique.
Exemple 10.5 On considre la grammaire
S

Sf
S aSaTb [ bT [ c
T dTK [ bKc [ a
K SS
Construisons la drivation gauche (on rcrit donc en permanence le non-terminal le plus gauche)
du mot abdbcccbbccccaabf :
S

Sf aSaTbf abTaTbf abdTKaTbf abdbKcKaTbf


abdbSSKaTbf abdbcScKaTbf abdbcccKaTbf abdbcccSSaTbf
abdbcccbTSaTbf abdbcccbbKcSaTbf abdbcccbbSScSaTbf abdbcccbbcScSaTbf
abdbcccbbcccSaTbf abdbcccbbccccaTbf abdbcccbbccccaabf
On voit que la reconnaissance du mot u est rendue dterministe par la connaissance du caractre
davance. Revenons notre automate non-dterministe. Le choix de la rgle appliquer lorsque le
non-terminal N est en sommet de pile va donc se faire par le caractre davance, cest--dire le
premier caractre de u
Notons que First(aSaTb) = a, First(bT) = b, First(c) = c, First(a) =
a, First(bKc) = b, First(dTK) = d et First(SS) = a, b, c. La dterminisation de
la procdure initiale a pu avoir lieu parce que les initiales de deux membres droits distincts de rgles
de mme membre gauche avaient une intersection vide. Si ce ntait pas le cas, la mme dmarche
produirait un analyseur qui resterait partiellement non-dterministe.
J.-P. Jouannaud Universit Paris Sud
10.1 Analyse syntaxique descendante 53
Nous terminons ce paragraphe par un dernier exemple contenant des productions vides. Nous
adopterons un mcanisme plus systmatique que prcedemment, consistant empiler lintgralit
des membres droits. Ne pas empiler le premier caractre du membre droit dans le cas o il sagit
dun terminal apparat alors comme une optimisation.
Exemple 10.6 On considre la grammaire
S UaTb [ b
U c [
T Y U [ aTe
Y d [
pour laquelle on obtient les calculs suivants :
First(UaTb) = c, a, First(Y U) = d, c, First(aTe) = a, First(x) = x pour x V
t
Follow(U) = a, e, b, Follow(T) = b, e, Follow(Y ) = c, b, e
La dnition prcise de lautomate est laiss au lecteur.
10.1.3 Automate danalyse prdictive descendante
Lutilisation dune pile suggre que le programme danalyse descendante est en fait un automate
pile. On peut construire cet automate de manire systmatique dans la mesure o lon accepte
des transitions conditionnes par la lecture du caractre davance dans le cas de transitions vides
(cela revient dire que la lecture ne fait pas toujours avancer la tte de lecture sur la bande de
lautomate). La justication du fait que lon peut coder ces automates pile augments par de
simples automates pile au prix dune augmentation du vocabulaire de pile (qui devient form de
couples (a, X) o a V
t
et X V
P
) est laisse au lecteur. On notera par
q
a,a

,X,
q

une transition de lautomate de ltat q vers ltat q

avec a comme caractre davance, a

a,
comme symbole lu, X comme symbole de sommet de pile, et enn comme mot empil. Les
transitions vides laissent donc le caractre davance inchang, le caractre lu dans ce cas tant de
la forme (, a), alors que les transitions normales consomment le caractre davance, le caractre
lu dans ce cas tant donc de la forme (a, a).
tant donne une grammaire G = (V
t
, V
n
, S, T), on dnit la condition dapplication dune
rgle arbitraire comme suit :
Trediction(N ) =

First() Follow(N) si

First() sinon
en notant que First() = .
On construit alors lautomate pile
/ = (V
t
f, V
t
V
n
S

, f, S

, 1, 2, 1, 2, T)
qui reconnait L(G) avec deux tats, 1 tant initial et 2 nal (ce dernier tat nest pas ncessaire si
lon dcide de reconnatre par pile vide), o lensemble T des transitions est dni comme suit :
toute rgle M de la grammaire originelle, on associe les transitions :
1
aPrediction(MX),,M,X
1 encore notes M
Prediction(X),,M,X
X
Aux terminaux a V
t
et f, on associe les transitions respectives :
1
a,a,a,
1 et 1
f,f,f,
2
J.-P. Jouannaud Universit Paris Sud
54 Analyse syntaxique
Le lecteur aura avantage dessiner lautomate des exemples 10.5 et 10.6. Notons que de nom-
breuses variantes sont possibles, qui permettent en pratique doptimiser les constructions donnes
ci-dessus. Notons galement que cette construction est trs proche de celle donne pour passer dune
grammaire un automate, la diffrence prs du caractre davance. Notons enn que la construc-
tion de lautomate de prsuppose pas que la grammaire soit ffectivement LL(1).
Il se peut bien sr que lautomate obtenu soit non-dterministe. Il sera en fait dterministe si la
grammaire considre satisfait les conditions de dterminisme nonces ci-aprs.
10.1.4 Condition de dterminisme
On peut maintenant donner formellement les conditions de dterminisme pour lanalyse prdic-
tive descendante dune grammaire G.
Dnition 10.7 Une grammaire est dite LL(1) si elle satisfait la condition :
Pour chaque paire de rgles N [ , Trediction(N ) Trediction(N ) = .
La condition implique bien sr quune seule rgle de membre gauche N peut driver le mot vide.
10.1.5 Factorisation des membres droits
Il sera parfois possible de transformer la grammaire an de procder une analyse descendante
dterministe. Ainsi, la grammaire
S aSaTb [ aSadT [ dT [ c
T dTK [ bKc [ a
K SS
ne conduit pas une analyse dterministe, car First(aSaTb) = First(aSadT) = a. Il est
toutefois trs simple de la transformer en mettant en facteur la partie commune des deux membres
droits concerns, do la grammaire :
S aSaL [ dT [ c
T dTK [ bKc [ a
K SS
L Tb [ dT
Un problme identique apparait maintenant avec les rgles L TB [ dT puisque la rgle
T dTK engendre un d, et donc First(dT) First(Tb) = d. On va liminer cette nou-
velle ambiguit par une nouvelle transformation : on recopie tout dabord les membres droits de la
rgle de membre gauche T la place de T dans Tb, ce qui donne :
L dTKb [ bKcb [ ab [ dT
puis on factorise nouveau le membre gauche dT qui est prxe commun deux rgles, do la
grammaire nale :
S aSaL [ dT [ c
T dTK [ bKc [ a
K SS
L dTM [ bKcb [ ab
M Kb [
Le lecteur vriera que la mme mthode que prcdemment permet danalyser la grammaire obte-
nue de manire dterministe.
J.-P. Jouannaud Universit Paris Sud
10.2 Analyse syntaxique ascendante 55
Cette transformation ne permet pas toujours de se ramener une grammaire pour laquelle une
analyse dterministe est possible. Le cas pathologique est celui des rgles rcursives gauches, cest-
-dire de la forme S Sv. Supposons en effet que lon ait les rgles
S Sv [ w
o v, w sont des mots non vides dans V
+
, nayant aucune occurrence de S pour simplier. Les autres
rgles de la grammaire G sont quelconques ne contenant pas doccurrence de S. On aura plusieurs
cas suivant que v, w

G
ou pas.
1. Si w ,

, alors Sv ,

et donc :
Trediction(S w) = First(w)
Trediction(S Sv) = First(Sv) = First(w)
2. Si w

et v ,

, alors Sv ,

et donc :
Trediction(S w) = First(w) Follow(S) = First(w) First(v)
Trediction(S Sv) = First(Sv) = First(S) First(v) = First(w) First(v)
3. Si v, w

, alors Sv

et donc :
Trediction(S w) = First(w) Follow(S) = First(w) First(v)
Trediction(S Sv) = First(Sv) FollowS = First(w) First(v) Follow(S) =
First(w) First(v)
Dans tous les cas, lensemble des caractres davance sont identiques pour les deux rgles. Lanalyse
descendante nest donc pas adapte aux grammaires comportant des rgles rcursives gauches : il
faudrait tout dabord transformer la grammaire an de les liminer. Quoiquune telle transformation
existe, elle est peu utilise en pratique car on lui prferre dans ce cas une analyse ascendante qui na
pas le mme inconvnient.
10.2 Analyse syntaxique ascendante
Lanalyse descendante est trs simple mettre en uvre, puisquil sagit tout simplement de
construire une drivation gauche. Le fait quelle choue chaque fois que la grammaire est rcursive
gauche en est la grande faiblesse dans la mesure o de telles rgles sont frquentes en pratique.
Considrons par exemple la grammaire dsambiguse des expressions arithmtiques :
E E +T [ T
T T F [ F
F (E) [ Id [ Cte
Les rgles E E +T et T T F sont rcursives gauches. De plus, la technique prcdente ne
permettrait visiblement pas de choisir entre les rgles E E+T et E T qui admettent le mme
ensemble de caractres davance. Lanalyse ascendante que nous allons voir maintenant na pas cet
inconvnient, mais elle est dune mise en uvre plus complexe. Le principe est de construire une
drivation droite lenvers. La construction dune drivation droite lendroit ncessiterait en effet
une lecture de droite gauche du mot analyser. La lecture de gauche droite est donc responsable
de cette construction lenvers de la drivation. Ce mode opratoire a pour consquence, on la dj
not, que les objets manipuls au cours de lanalyse ne sont pas des arbres de syntaxe, mais des
squences darbres de syntaxe appeles forts. Une fort a pour racine la squence des racines des
arbres qui la composent, cest--dire un mot sur lalphabet V
t
V
n
de la grammaire. Par exemple,
pour le mot Id Id +Cte, la suite des forts construites est reprsente la gure 10.3. La suite des
racines de ces forts est la suite de mots Id, F, T, T, T Id, T F, E, E+, E+Id, E+F, E+T, E.
J.-P. Jouannaud Universit Paris Sud
56 Analyse syntaxique
FIG. 10.3 Analyse syntaxique ascendante
FIG. 10.4 Shift et Reduce
10.2.1 Automate non-dterministe danalyse ascendante
Les oprations effectues au cours de lanalyse ascendante, comme on peut le remarquer sur la
gure 10.3, sont de deux sortes :
(i) la lecture dun caractre, opration appele shift.
(ii) lenracinement dune rgle, opration appele reduce. Cette opration consiste crire la fort
courante g sous la forme de la juxtaposition de deux forts ff

, puis construire une nouvelle


fort en juxtaposant la fort f avec larbre de syntaxe de racine N, membre gauche dune rgle
N racine(f

), et dont f

est la suite des sous-arbres.


Ces oprations sont dcrites sur la gure 10.4.
La reconnaissance dun mot du langage par une suite de shift et reduce va bien-sr se faire
laide dun automate pile. An den faciliter la description, nous allons nous autoriser lire
plusieurs caractres dun coup dans la pile, de manire faciliter lopration reduce. On sautorise
galement lire zro caractres dans la pile, de manire faciliter lopration shift. Il aura un unique
tat, et reconnaitra par pile vide et tat nal la fois. Soit G = (V
t
, V
n
, S, R) la grammaire hors-
contexte qui nous intresse, et qui est cette fois augmente de la rgle S

dSf. La raison de cette


nouvelle rgle initiale est que la pile doit tre initialise par un caractre, toujours le mme, qui ne
peut donc tre le premier caractre du mot reconnaitre comme cela devrait tre dans une analyse
ascendante. On force donc ce caractre tre toujours le mme, ici d. On fait bien sr lhy[pothse
que d, f , V
t
.
/ = (V
t
d, f, V
n
S

, d, 1, 2, 2, T), o la fonctiopn de transition T est dnie comme


suit :
shift : 1
a,,a
1 est une transition de lautomate pour tout a V
t
.
reduce : 1
,w,N
1 est une transition de lautomate pour toute rgle N w R
succs : 1
,S

,
2.
Notons quil est facile de transformer cet automate pile non conforme la dnition en un
automate pile conforme la dnition, cest--dire qui lise exactement un caractre de pile
chaque transition. Pour cela, il suft dintroduire de nouveaux tats dont le rle est de mmoriser
la progression des membres droits de rgles sur la pile. Une alternative permettant de mmoriser la
progression des membres droits de rgles sur la pile est de considrer un nouveau vocabulaire de
pile, enrichi des membres droits de rgles et de leurs prxes. Nous nous autoriserons par la suite
utiliser la forme tendue dautomates.
Lautomate pile obtenu est bien sr non-dterministe puisque shift et reduce sont deux opra-
tions en gnral non-dterministes. On parle ce propos de conit shift-reduce, et de conit reduce-
reduce, car il se peut quil y ait plusieurs dcoupages f
1
f

1
et f
2
f

2
de f tels que les racines de f

1
et f

2
soient des membres droits de rgles, de mme quil peut y avoir plusieurs rgles de mme membre
droit.
Il ne peut tre dterministe quen labsence de tels conits.
Labsence de conit reduce-reduce impose que 2 membres droits de rgles ne puissent coexister
en sommet de pile, cest--dire, quaucun membre droit de rgle ne soit sufxe dun autre membre
droit de rgle. Dans le cas de la grammaire des expressions arithmtiques, par exemple, cette condi-
tion nest pas vrie cause des rgles comme E E +T [ T. Elle nest bien sr jamais vrie
en prsence de rgles de la forme N .
J.-P. Jouannaud Universit Paris Sud
10.2 Analyse syntaxique ascendante 57
Labsence de coni shift-reduce est plus gnante puisquun shift est toujours possible. Contrai-
rement au cas de lanalyse descendante, lautomate obtenu ne peut donc jamais tre dterministe.
10.2.2 Dterminisation de lanalyse ascendante
Nous allons donc le dterminiser grce la lecture dun caractre davance. Lorsquil est possible
de rsoudre le non-dterminisme par la lecture dun caractre davance, on dit que la grammaire
est LR(1). Le premier L a la mme signication que prcdemment, il correspond la lecture de
gauche droite. Initiale du mot anglais Right, R correspond la drivation droite (faite lenvers),
et le 1 au nombre de caractres davance. Dans notre exemple, nous avons rencontr de nombreux
problmes de choix shift-reduce. Par exemple, aprs la lecture du premier token Id du mot
analyser, nous avons effectu une rduction alors que nous aurions pu tout aussi bien faire une
nouvelle lecture. Dans ce cas, il naurait plus jamais t possible dobtenir un arbre syntaxique dont
le premier caractre lu soit Id . Par contre, lors de la troisime tape, cest un shift qui a t prfr
un enracinement : il aurait t possible denraciner avec la rgle E T, mais il naurait jamais
t possible denraciner ultrieurement E, qui napparat pas dans un membre droit de rgle. Des
conits reduce-reduce se prsentent galement, chaque fois que la racine de la fort courante se
termine par E +T ou T F. On peut alors enraciner avec les rgles E T et E E +T dans le
premier cas, et avec les rgles T F et T T F dans le second. Dans les deux cas, on prfrera
la rgle de plus long membre droit, cest dire E E + T ou T T F. De nouveau, le choix
contraire interdirait lenracinement ultrieur de +E dans le premier cas et de T dans le second.
Comme il est possible de rsoudre tous les conits, la grammaire des expressions arithmtiques est
LR(1). Notons l-encore quune grammaire LR(1) est non-ambigu.
10.2.3 Principes dune analyse ascendante prdictive
Dans un premier temps, nous allons rduire le non-dterminisme par une mthode comparable
ce que nous avons fait pour lanalyse ascendante. La dcision du choix entre un shift et un reduce,
ou entre plusieurs reduce concurrents se fera en comparant le caractre en sommet de pile avec le
caractre davance.
Dans le cas dun shift, larbre syntaxique doit avoir la forme indique la gure 10.5, ce qui
implique lexistence dune rgle P X telle que a First(). On notera dans ce cas
a Follow
0
(X). Notons que la toute premire action lors dune analyse consiste lire le pre-
mier caractre du mot analyser, qui est en mme temps le caractre davance. Il est galement
important de remarquer que le calcul de First() de fait pas intervenir les rgles N , mme si
la grammaire en contient. En effet, le membre droit de la rgle tout entier doit se trouver sur la pile
au moment dune rduction. Prenons lexemple de la grammaire de Dick dordre 1, avec les rgles
S [ S(S)
Lorsque la pile contient une parenthse ouvrante en son sommet -par exemple, la pile vaut dS(-,
alors il ne faut pas faire un shift, puisque cela amnerait une seconde parenthse ouvrante sur la pile
au dessus de la premire, ce qui interdirait toute rduction ultrieure. Il faut au contraire faire une
rduction avec la rgle S .
Dans le cas dun reduce, larbre syntaxique doit avoir la forme indique la gure 10.6, ce qui
implique la relation habituelle a Follow(N
1
), ce que nous noterons a Follow
+
(X) pour ne
faire rfrence quau symbole de sommet de pile. Notons que cette notation nest pas idale, dans le
cas o coexistent plusieurs rgles ayant des membres droits se terminant par le mme symbole X et
des membres gauches distincts. Dans ce cas, on utilisera la version plus prcise a Follow(N
1
).
Notons que les relations Follow
0
(X) et Follow
+
(X) sont trs proches. Ce qui les diffrencie
est que dans le second cas on soblige repasser par le membre gauche N de la rgle N X
candidate pour une rduction (et peut-tre galement par dautres membres gauches succesivement),
alors que dans le premier on sinterdit ce passage par un tel membre gauche de rgle.
J.-P. Jouannaud Universit Paris Sud
58 Analyse syntaxique
P

e
e
e
e
e
e
r
r
r
r
r
r
r
r
r
r
r
r

X
fort dj construite

e
e
e
e
e
e
e
e
e
e
e
e
a
fort en devenir
dernier enracinement
FIG. 10.5 Russite dun shift
N
1
.
.
.
N
p
P
... ...

e
e
e
e
e
e
e
e
e
e
e
e

... X
fort dj construite

e
e
e
e
e
e
e
e
e
e
e
e
a
fort en devenir
dernier enracinement
FIG. 10.6 Russite dun reduce
Plutt que de donner lautomate danalyse ascendante prdictive pour la grammaire des expres-
sions arithmtiques sous sa forme habituelle, nous allons donner le programme danalyse ascendante
dterministe qui code cet automate :
Proc Analyse-Ascendante-Deterministe(u)
u:= uf ; r := d ;
Tantque r = rX et u=av Faire
Cas X = d Alors Empiler(a) ; u := v
X = E Alors Si a {+,),f} Alors Empiler(a) ; u := v
Sinon Retourner(echec)
Fin Si
X = T Alors Cas a = * Alors Empiler(a) ; u := v
a {+,),f} Alors Cas r = rE+T Alors r := rE
J.-P. Jouannaud Universit Paris Sud
10.2 Analyse syntaxique ascendante 59
r = rT Alors r := rE
Fin Cas
Sinon Retourner(echec)
Fin Cas
X = F Alors Si a {+,*,),f} Alors Cas r = rT*F Alors r := rT
r = rF Alors r := rT
Fin Cas
Sinon Retourner(echec)
Fin Si
X = ( Alors Si a {(,Id,Cte} Alors Empiler(a) ; u:=v
Sinon Retourner(echec)
Fin Si
X = * Alors Si a {(,Id,Cte} Alors Empiler(a) ; u:=v
Sinon Retourner(echec)
Fin Si
X = + Alors Si a {(,Id,Cte} Alors Empiler(a) ; u:=v
Sinon Retourner(echec)
Fin Si
X = ) Alors Si a {+,*,),f} Alors Si r = r(E) Alors r := rF
Sinon Retourner(echec)
Fin Si
Sinon Retourner(echec)
Fin Si
X = Id Alors Si a {+,*,),f} Alors r := rF Fin Si
Sinon Retourner(echec)
Fin Si
X = Cte Alors Cas a {+,*,),f} Alors r := rF Fin Si
Sinon Retourner(echec)
Fin Si
Sinon Retourner(echec)
Fin Cas
Fin Tantque
Si r=dEf Alors Retourner(succes) Sinon Retourner(echec)
Fin Proc
Conditions de dterminisme Elles expriment limpossibilit dun conit shift-reduce (condition
(i)) comme dun conit reduce-reduce (conditions (ii) et (iii)) pour la grammaire G analyser :
(i) Si la pile est de la forme r = X o N X est une rgle de G, alors labsence de conit
shift-reduce est exprim par la condition :
Follow
0
(X) Follow(N) =
(ii) Si N et M sont deux rgles de G avec M ,= N, alors labsence de conit
reduce-reduce est exprim par la condition :
Follow(N) Follow(M) =
(iii) Si N et N K sont deux rgles de G, alors une condition sufsante dabsence
de conit reduce-reduce est exprim par la condition suivante, qui interdit dempiler N au dessus de
K :
N , Follow
0
(K)
On pourrait choisir une condition plus gnrale, mais celle-ci nous sufra dans un premier temps.
J.-P. Jouannaud Universit Paris Sud
60 Analyse syntaxique
On peut vrier que les conditions de dterminisme sont satisfaites pour la grammaire G des
expressions arithmtiques dsambigues.
Notons que cette mthode danalyse revient construire un automate pile possdant un unique
tat, les transitions tant entirement dtermines par le symbole en sommet de pile et le caractre
davance.
10.2.4 Automate SLR danalyse ascendante
Lanalyse que nous venons dffectuer a de nombreuses limitations, car la connaissance du som-
met de pile nest pas sufsante pour en caractriser ltat. Elle ne permet donc pas danticiper cer-
tains checs, et aboutit des conits shift/reduce dans des cas o un shift (ou un reduce) ne peut
manifestement pas conduire une analyse russie. Considrons lexemple suivant dun fragment de
grammaire pour lequel nous avons dj ffectu lanalyse descendante prdictive :
S

dSf
S aSa [ bT [ c
K SS
Supposons que S est en sommet de pile. Nous ferons
un shift si a Follow
0
(S) = a, b, c, f ;
un reduce avec la rgle S SS si a Follow
+
(S) = c.
Le non-dterminisme na donc pas t rsolu. Il pourrait toutefois ltre grce une analyse un tout
petit peu plus prcise. En effet, supposons que le caractre davance soit c et que le sommet de pile
contienne :
1. bS : dans ce cas, on ne peut rduire avec SS qui ne gure pas dans la pile. Il faut faire un shift,
la pile contient alors bSc, ce qui permet de rduire avec S c, puis avec k SS et la pile
contiendra alors bK ce qui permet de poursuivre lanalyse, par exemple si le nouveau caratre
davance est c.
2. bSS : dans ce cas, un shift amnerait bSSc en sommet de pile, puis bSSS, puis bSK, ce qui
conduit ncessairement un chec. Au contraire, un reduce donne bK en sommet de pile, puis
bKc par shift, ce qui amne la nouvelle rduction avec t bKc, permettant de poursuivre
lanalyse.
Nous allons donc rafner notre analyse en mmorisant plus dinformation sur ltat de la pile.
Pour cela, nous pouvons nous appuyer sur une proprit fondamentale de lanalyse ascendante : le
langage des mots de pile obtenus au cours des analyses (non-dterministes) russies des mots de
L(G) est reconnaissable.
Lide est de construire un automate dont les tats dcrivent la progression dans lanalyse en
cours des membres droits de rgles possibles. Ces tats vont tre constitus dun ensemble ditems,
o un item est une rgle dont le membre droit est dcor par une marque adquate, on utilise g-
nralement un point. Par exemple, E .E + T, E E. + T, E E + .T, E E + T.
sont des items de la grammaire dsambigue des expressions arithmtiques qui dcrivent les tapes
successives de lanalyse de la rgle E E + T. Un item seul ne suft pas dcrire tous les
calculs possibles un moment donn, car les membres droits de deux rgles diffrentes peuvent
avoir un prxe commun, ne serait-ce que le prxe vide. Tant que ce prxe commun est en
cours danalyse, on ne peut savoir laquelle des deux rgles sappliquera in ne. Les tats seront
donc des ensembles ditems reprsentant les futurs possibles du calcul en cours. Par exemple,
E E + .T, T .T F, T .F, F .(E), F .Id, F .Cte constitue un ensemble
ditems qui dcrivent les volutions possibles de lanalyse lorsque la pile contient E+ en son som-
met. Notons que cet ensemble ditems contient des informations trs prcieuses :
Le sommet de pile E+;
Les caractres qui appartiennent First(T) tout comme ceux qui appartiennent First(F).
Cela est du au fait que T et F gurent droite du point dans lun au moins des items de
lensemble. Il sensuit que le calcul de la relation Follow sera inutile.
J.-P. Jouannaud Universit Paris Sud
10.2 Analyse syntaxique ascendante 61
Dnition 10.8 tant donne une grammaire G dont N est une rgle, la rgle pointe
N . est appelle item ou en-cours. Un ensemble I ditem est
- clos si pour tout item M .N I, alors N . I pour toute rgle N de G;
- compatible si tous les items quil contient ont des prxes compatibles : tant donns deux
items quelconques N . et N

appartenant lensemble,

est sufxe de (ou le


contraire) ;
- terminal sil ne contient que des items terminaux de la forme N ., pour N G.
La clture dun ensemble ditems compatible I est le plus petit ensemble ditems clos contenant I.
Intuitivement, un item N . indique donc que le sommet de pile contient le mot , et que le
calcul peut se continuer par . Cela explique la notion de compatibilit (cohrence de la description
du sommet de pile) et de cloture (prsence de tous les futurs possibles).
Dnition 10.9 tant donne une grammaire G = (V
t
, V
n
, S, T) augmente par la rgle S


dSf, on dnit lautomate ni / = (V
t
V
n
d, f, Q, i, Q, T) dont les tats sont les cltures
des ensembles ditems compatibles, ltat initial est la clture de lensemble S

d.Sf, tous les


tats sont naux, et les transitions sont dnies comme suit :
T(I, a V
t
f, X V
t
V
n
d) = I

o I

est la clture de lensemble N X. [ N .X I.


Remarquons que lensemble ditems initial est compatible et que la compatibilit des ensemble
ditems est conserve par la dnition de la fonction de transition, ce qui assure que I

est bien un
tat de l automate.
Lemme 10.10 Lautomate A reconnait le langage des mots de pile obtenus au cours des analyses
non-dterministes (russies) des mots de L(G).
Calculons les ensembles ditems pour la grammaire des expressions arithmtiques :
I0 = S

.Ef, E .E +T, E .T, T .T F, T .F, F .(E), F .Id, F .Cte


I1 = S

E.f, E E. +T
I2 = E T., T T. F
I3 = T F.
I4 = F (.E), E .E +T, E .T, T .T F, , T .F, F .(E), F .Id, F .Cte
I5 = F Id.
I6 = F Cte.
I7 = S

Ef.
I8 = E E +.T, T .T F, T .F, F .(E), F .Id, F .Cte
I9 = T T .F, F .(E), F .Id, F .Cte
I10 = F (E.), E E. +T
I11 = E E +T., T T. F
I12 = T T F.
I13 = F (E).
Lautomate obtenu dans le cas des expressions arithmtiques est donn la gure 10.7, o il est
reprsent sous forme dune table dont les lignes sont indexes par les noms dtats, et les colonnes
par les lettres du vocabulaire.
Notons quil ny a pas de transitions sortante depuis les tats constitus ditems tous terminaux,
ce qui est parfaitement normal, puisque tous les items tant terminaux dans un tel tat, continuer
lanalyse est devenu impossible.
On peut transformer cet automate en un automate pile reconnaissant les mots de L(G) :
1. Les tats de lautomate restent les mme. Toutefois, ltat I7 correspondant la n dune
analyse russie sera limin ;
J.-P. Jouannaud Universit Paris Sud
62 Analyse syntaxique
tat Shift/Reduce Transitions vides
f + ( ) Id Cte E T F
I0 I4 I5 I6 I1 I2 I3
I1 I7 I8
I2 I9
I3
I4 I4 I5 I6 I10 I2 I3
I5
I6
I7
I8 I4 I5 I6 I11
I9 I4 I5 I6 I12
I10 I8 I13
I11 I12
I12
I13
FIG. 10.7 Automate danalyse des mots de pile engendrs au cours des analyses ascendantes
russies des expressions arithmtiques
2. Les transitions tiquettes par une lettre de V
t
sont des shifts, ils provoquent la lecture dun
caractre du mot analyser. On notera S Ik pour indiquer que le shift (cest--dire lempi-
lement du caractre lu) est suivi dune transition dans ltat Ik.
3. Les transitions tiquettes par une lettre X V
n
correspondent un changement dtat induit
par lempilement dun membre gauche de rgle suite une rduction ;
4. Les tats contenant des items de la forme N . deviennent source dune transition au
cours de laquelle est dpil et N est empil. Cette rduction a bien sr lieu au cas o le
caractre davance appartient Follow(N). Ltat darriv doit donc tre calcul en fonction
de la rduction effectue et de ltat de la pile. Par exemple, si la pile contient le mot dE +T
et quil faut faire la rduction E E + T, alors elle contiendra ensuite le mot dE et lon
devra donc tre dans ltat I1. Mais si la pile contenait le mot d(E + T, la mme rduction
aboutira au mot de pile d(E, et lon devra tre dans ltat I10. Chaque conguration de la
pile correspondant un tatd e l automate, on peut stocker dans la pile (en plus du caractre
de pile) ltat courant atteint au moment de cet empilement. Une rduction consistera alors
dpiler un nombre de fois gal la taille du membre droit de le rgle utlise dans la rduction,
puis empiler le membre gauche ainsi que le nouvel tat atteint (obtenu en lisant la table de
transition de lautomate danalyse des mots de pile, ltat de dpart tant stock dans la pile,
et le caractre lu tant le membre gauche de la rgle utilise).
5. On considrera que la pile est initialise avec le symbole d de manire ne pas tre vide, mais
en fait ce symbole ne jouera aucun rle. La gure 10.8 exprime cet automate en indiquant,
lorsquune rduction doit tre ffectue, quelle rgle sapplique, les rgles tant numrotes
partir de 0, numro de la rgle S dSf.
On en dduit que les tats contenant un item terminal et des items non-terminaux sont sources de
conits shift-reduce potentiels. En cas dabsence de tel tat, on est assur de pas avoir de tel conit.
De mme, les tats contenant plusieurs items terminaux sont sources de conits reduce-reduce
potentiels. En cas dabsence de tel tat, on est assur de pas avoir de tel conit.
Le cas de la grammaire des expressions arithmtiques trait la gure 10.8 montre un exemple
dautomate dterministe qui possde des tats pouvant engendrer les deux catgories de conit. Le
caractre davance permet toutefois dans cet exemple de rsoudre les conits potentiels.
J.-P. Jouannaud Universit Paris Sud
10.2 Analyse syntaxique ascendante 63
tat Shift/Reduce Transitions vides
f + ( ) Id Cte E T F
I0 S I4 S I5 S I6 I1 I2 I3
I1 succs S I8
I2 R2 R2 S I9 R2
I3 R4 R4 R4 R4
I4 S I4 S I5 S I6 I10 I2 I3
I5 R6 R6 R6 R6
I6 R7 R7 R7 R7
I8 S I4 S I5 S I6 I11
I9 S I4 S I5 S I6 I12
I10 S I8 S I13
I11 R1 R1 S I12 R1
I12 R3 R3 R3 R3
I13 R5 R5 R5 R5
FIG. 10.8 Automate danalyse ascendante des expressions arithmtiques
Pile Input tat Action
d Id * Id + Id f I0 S-I5
d Id * Id + Id f I5 R-6
d F * Id + Id f I3 R-4
d T * Id + Id f I2 S-I9
d T * Id + Id f I9 S-I5
d T * Id + Id f I5 R-6
d T * F + Id f I12 R-3
d T + Id f I2 R-2
d E + Id f I1 S-I8
d E + Id f I8 S-I5
d E + Id f I5 R6
d E + F f I3 R4
d E + T f I11 R1
d E f I1 succs
FIG. 10.9 Exemple danalyse ascendante dterministe
Cet automate est appell automate SLR de la grammaire des expressions arithmtiques. Un
exemple danalyse avec lautomate SLR est donn la gure 10.9.
Le lecteur pourra utilement modier les dnitions prcdentes de manire effectivement sto-
cker les tats dans la pile de manire pouvoir calculer automatiquement ltat atteint en cas de
rduction.
Variantes On peut amliorer la mthode SLR, en enrichissant les items SLR (aussi appells items
LR(0)) comme suit :
Dnition 10.11 On appellera item LR(1) les couples (N ., a) forms dun item SLR et dun
caractre du vocabulaire terminal tels que a First()a appell caractre de retour de litem. Un
ensemble I ditems LR(1) sera clos si pour tout item (N .X, b) I, pour toute rgle X
J.-P. Jouannaud Universit Paris Sud
64 Analyse syntaxique
et tout terminal a First(b), alors (X ., a) I. Lensemble initial ditems est la clture
de lensemble S

i.Sf, f. Dans cette dnition, le caractre de retour a deviendra le caractre


davance lors de la rduction X , et donc, les caractres de retour sont conservs lors dune
transition de lautomate. Une rduction N ne pourra tre ffectue dans un tat I en prsence
du caractre davance a, qu la condition que I contienne litem terminal (N ., a).
Une ultime variante, appelle LALR(1), a pour objectif de rduire le nombre dtats en re-
groupant les tats LR(1) similaires, cest--dire qui contiennent des items identiques, au caractre
davance prs. Cette mthode risque de faire apparatre des conits inexistants dans la mthode LR,
mais elle est en pratique celle qui est implmente dans les gnrateurs danalyseurs.
Une dernire variation de la mthode consiste ne pas dsambiguer la grammaire, mais donner
les rgles de prcdences ou dassociativit permettant de mener cette dsambiguation bien auto-
matiquement lors du calcul de lautomate LR(1) ou LALR (sans transformer la grammaire priori).
Les gnrateurs danalyseurs daujourdhui permettent ce type de dsambiguation.
10.2.5 Gnration danalyseurs syntaxiques avec YACC
On dispose aujourdhui doutils qui permettent la gnration danalyseurs syntaxiques partir
de grammaires hors-contextes, dont le plus connu est YACC. tant donne une grammaire, YACC
essaye de trouver une stratgie pour une analyse ascendante en utilisant la mthode LALR (1) dcrite
dans la section prcdente. En fait, YACC accepte comme donnes des grammaires qui peuvent tre
ambigus (donc ne sont exactement pas LALR), pourvu quelles soient accompagnes des rgles
de dsambigusation adquates qui prcisent les priorits respectives des diffrents oprateurs. Cette
facilit permet de garder des grammaires simples, mais son utilisation ncessite une bonne compr-
hension du fonctionnement du logiciel.
Dans la section prcdente, nous avons dcrit le principe de lanalyse ascendante comme une
construction explicite de larbre de drivation. Pour la ralisation dun tel algorithme il nest pas
du tout ncessaire de garder toutes les forts construites : comme toutes les actions de lanaly-
seur dpendent seulement du prochain caractre lu et des racines des forts construites, YACC va
conomiser lutilisation de la mmoire et stocker seulement les racines des forts. Autrement dit,
lanalyseur engendr par YACC par dfaut fournit seulement une fonction disant si un mot donn est
dans le langage engendr par la grammaire ou pas. Cependant, lanalyse syntaxique nest en prin-
cipe quun premier pas dans un logiciel plus complexe, et on a donc gnralement besoin dobtenir
un rsultat plus informatif. Dans ce but, YACC permet dassocier aux rgles de la grammaire des
expressions permettant de construire le rsultat souhait de lanalyse syntaxique, arbre de syntaxe,
rsultat dvaluation, etc. Ces expressions prennent des valeurs dans une domaine dni dans le
langage de programmation, et utilisent des opration prdnies (ou dnies par le programmeur)
dans ce langage. Lexemple ci-dessous dcrit une grammaire des expressions arithmtiques, ainsi
que lvaluation des expressions reconnues (notre syntaxe drive de la syntaxe relle de YACC,
trouver dans un manuel de rfrence) :
Non-terminaux : E, T
Axiome : E
Tokens : Cte avec valeur de type entier, +, (, )
E E + T E +T
[ T T
T (E) E
[ Cte val(Cte)
On fournit donc YACC les informations concernant la grammaire dune part, cest--dire la
liste des non-terminaux, laxiome, la liste des tokens, celle des rgles, et dautre part un mcanisme
dvaluation donn sous la forme dexpressions accolles aux rgles. Lexpression E+T accolle
la rgle E E + T spcie un calcul effectuer sur larbre de syntaxe. La rgle E E + T
J.-P. Jouannaud Universit Paris Sud
10.3 Exercices 65
signie que larbre de syntaxe de racine E est form dun arbre de racine E (le E du membre gauche
de rgle), dont les trois sous-arbres ont pour racines respectives E (le E du membre droit de rgle),
+ et T. Notons par A
1
et A
2
les deux sous-arbres de syntaxe dont les racines E et T sont des
non-terminaux. Supposons (cest notre hypothse de rcurrence) calcules les valeurs v
1
et v
2
des
sous-arbres A
1
et A
2
. Le calcul de la valeur de larbre tout entier sexprime comme une fonction,
qui ne dpend que de la rgle E E + T, dont les arguments sont v
1
et v
2
. Dans le cas prsent,
ce sera la fonction qui calcule la somme v
1
+v
2
. Quand il y a plusieurs occurrences du mme token
ou non-terminal dans le membre droit dune rgle de la grammaire, on doit les numroter pour les
distinguer, comme dans lexemple suivant, qui calcule le nombre de paires de parenthses dans un
mot de la grammaire de Dick une parenthse :
Non-terminaux : S
Axiome : S
Tokens : (, )
S 0
[ (S)S S
1
+S
2
+ 1
Ce mcanisme est utilis de manire systmatique pour calculer une reprsentation compacte de
larbre de drivation, comme expliqu dans le chapitre 11.
YACC est disponible dans un grand nombre dimplantations de langages de programmation,
que ce soit C (la version originelle de YACC), OCaml ou JAVA. Chaque implantation possde ses
particularits. En particulier, le langage dexpressions utilis par YACC dans ces implantations est
le langage de programmation hte.
10.3 Exercices
Exercice 10.1 On considre le langage des expressions arithmtiques avec addition, soustraction,
oppos, multiplication, division, et exponentiation (note ) :
E E +E [ E E [ E [ E E [ E/E [ E E [ (E) [ Int
Int [0 9]
+
Cette grammaire tant ambigu, on adopte les rgles de dsambigusation suivantes : les oprateurs
binaires associent gauche sauf lexponentiation qui associe droite, et lordre de priorit dcrois-
sant est lexponentiation, puis loppos, puis la multiplication et la division, puis laddition et la
soustraction.
1. Donner le parenthsage implicite correct du mot 1 3 4 +5 2.
2. Dnir une grammaire non-ambigu dcrivant ce langage, respectant les rgles de dsambi-
gusation. On utilisera un nouveau non-terminal par niveau de priorit.
3. Associer chaque rgle de cette grammaire un calcul permettant de dterminer le nombre
doprateurs de lexpression reconnue.
4. Associer chaque rgle de la grammaire non ambigu un calcul permettant dvaluer lex-
pression reconnue.
5. Donner un algorithme danalyse ascendante non-dterministe de cette grammaire.
6. Le dterminiser.
Exercice 10.2 On se pose le problme dafcher un texte sur un terminal dont le nombre de colonnes
est x C, de manire ce quaucun mot ne soit cheval sur deux lignes. On veut aussi compresser
le texte en supprimant les occurrences conscutives des sparateurs (caractres blancs et passages
la ligne, nots respectivement _ et / ci-dessous). Ainsi un texte source peut tre :
J.-P. Jouannaud Universit Paris Sud
66 Analyse syntaxique
qui___veut__voyager_loin__/_menage_sa__monture
La sortie dun tel texte sur 20 colonnes doit tre
qui_veut_voyager/loin_menage_sa/monture
Pour cela, on commence par donner une grammaire pour le texte source :
Phrase Mot [ Phrase Sep Phrase
Mot Car [ Mot Mot
Car a [ [ z
Sep _ [ / [ Sep Sep
1. Montrer que cette grammaire est ambigu.
2. Dnir une grammaire non-ambigu engendrant le mme langage.
3. Faire lanalyse ascendante non-dterministe puis dterministe de cette grammaire.
Exercice 10.3 On veut piloter un traceur graphique au moyen de mots sur lalphabet , , , .
Le langage accept est donn par la grammaire suivante :
L LL [ [ [ [ [
Le traceur est situ initialement en position (0, 0). Chaque mouvement le dplace de 1mm.
1. Donnez une grammaire non ambigu pour ce langage dont les rgles soient rcursives droites.
2. Dterminer les calculs effectus lors de lanalyse ascendante gauche du mot . On
dessinera au pralable larbre de drivation et lon effectuera les calculs en remontant dans
cet arbre, puis on montrera comment ces calculs sont effectus par lanalyse ascendante en
crivant chaque tape les racines des arbres de drivation intermdiaires.
3. Faire lanalyse ascendante de cette grammaire, dabord non-dterministe, puis dterministe
si possible.
4. Donnez une grammaire non ambigu pour ce langage dont les rgles soient rcursives
gauches.
5. Dterminer les calculs effectus lors de lanalyse ascendante gauche du mot . On
dessinera au pralable larbre de drivation et lon effectuera les calculs en remontant dans
cet arbre, puis on montrera comment ces calculs sont effectus par lanalyse ascendante en
crivant chaque tape les racines des arbres de drivation intermdiaires.
6. Faire lanalyse ascendante de cette grammaire, dabord non-dterministe, puis dterministe
si possible.
7. Donnez les expressions associes cette grammaire pour calculer la position du pointeur en
n de lecture du mot. Ces expressions seront de type enregistrement x : int; y : int.
8. Dterminer les calculs effectus lors de lanalyse ascendante gauche du mot . On
dessinera au pralable larbre de drivation et lon effectuera les calculs en remontant dans
cet arbre, puis on montrera comment ces calculs sont effectus par lanalyse ascendante en
crivant chaque tape les racines des arbres de drivation intermdiaires.
Exercice 10.4 Les deux grammaires suivantes engendrent le langage L
s
des squences didenti-
cateurs :
S [ Id S
S [ S Id
J.-P. Jouannaud Universit Paris Sud
10.3 Exercices 67
1. Laquelle de ces deux grammaires permet-elle une analyse descendante du langage L
s
?
2. Supposons quon veuille raliser une analyse ascendante pour le langage L
s
avec un outil
comme YACC. Laquelle des deux grammaires est prfrable si on veut conomiser la consom-
mation de mmoire ?
Exercice 10.5 Dans le chier YACC des expressions arithmtiques, ajouter des expressions pour
calculer :
1. le nombre doprateurs ;
2. lensemble des identicateurs utiliss ;
3. larbre de drivation.
Dans chaque cas, spcier dabord les oprations auxiliaires ncessaires.
J.-P. Jouannaud Universit Paris Sud
68 Syntaxe abstraite des langages
Chapitre 11
Syntaxe abstraite des langages
Lobjectif de ce chapitre est de dnir une structure de donnes permettant de reprsen-
ter le rsultat de lanalyse syntaxique sous une forme adapte lanalyse smantique.
Le type et la signication dune phrase dun langage sont calculs partir de son arbre de syn-
taxe. Mais la syntaxe (dite concrte) dun langage est souvent encombre de complications nces-
saires lanalyse syntaxique (visant en particulier traiter les problmes dambigut), mais nui-
sibles la comprhension, donc la dnition de sa smantique. Cela rend ncessaire la dnition
dun niveau intermdiaire, celui de la syntaxe abstraite, dont le but est dliminer de larbre de dri-
vation les dtails devenus inutiles ce stade. Plus prcisment, la construction dun arbre de syntaxe
abstraite a trois objectifs :
viter les ambiguts inhrentes aux grammaires en construisant une structure ncessairement
non-ambigu ;
liminer les complications inutiles introduites dans les arbres de drivations par labondance
de mots cls et de symboles de ponctuation ;
runir en une seule notion les arbres de drivation dcrivant la structure dune phrase du lan-
gage et les valeurs associes aux tokens de cette phrase.
Dans le cas des expressions arithmtiques, les expressions de syntaxe abstraite que lon souhaite
obtenir sont de la forme +(Cte, (Cte, Cte)). Ces expressions se prtent en effet particulirement
bien une valuation, car elles correspondent des arbres dont les nuds sont tiquets par des op-
ration arithmtiques. Une valuation revient donc propager les calculs doprations arithmtiques
dans larbre.
11.1 Grammaires abstraites
Dnition 11.1 Soit T un ensemble (ni ou inni) appel ensemble des tiquettes abstraites et soit
V
t
le vocabulaire form par T augment des parenthses et de la virgule. Une grammaire G sur le
vocabulaire terminal V
t
est dite abstraite si
1. toutes les rgles sont de la forme N t ou bien N t(N
1
, . . . , N
n
) (n 1) o les N
i
sont
des non-terminaux et t T ;
2. une tiquette t donne napparat quune seule fois dans lensemble des rgles.
Un mot engendr par une grammaire abstraite sappelle une expression de syntaxe abstraite ou, plus
simplement, expression abstraite.
Par exemple, si T = +, , Cte alors la grammaire
E +(E, E) [ (E, E) [ Cte
J.-P. Jouannaud Universit Paris Sud
11.2 Arbres de syntaxe abstraite 69
sera notre grammaire abstraite des expressions arithmtiques formes dadditions, de multiplications
et de constantes.
Grce la proprit quune tiquette t donne napparat quune seule fois dans lensemble des
rgles, on a la proprit fondamentale suivante :
Proposition 11.2 Une grammaire abstraite est non-ambigu.
Notre premier objectif est donc atteint.
11.2 Arbres de syntaxe abstraite
Nous allons maintenant donner une reprsentation arborescente des expressions abstraites. Cela
est possible grce la forme N t(N
1
, . . . , N
k
) des rgles dune grammaire abstraite. Une ex-
pression engendre par le non-terminal N de cette rgle sera reprsente par larbre
t
a
1
. . . a
k
o a
i
est, rcursivement, larbre associ lexpression abstraite e
i
engendre par le non-terminal N
i
.
On dira alors que cet arbre est de sorte N. Do la dnition :
Dnition 11.3 tant donne une grammaire abstraite G = (V
t
, V
n
, S, R), un arbre de syntaxe
abstraite de sorte N V
n
(ou plus simplement arbre abstrait) est un arbre A dont les nuds sont
tiquets par des symboles t T, tel que :
soit il existe une rgle N t R et A est rduit une feuille tiquete par t ;
soit il existe une rgle N t(N
1
, . . . N
n
) telle que
(i) la racine de A soit tiquete par t ;
(ii) A ait exactement n ls qui soient, rcursivement, des arbres de syntaxe abstraite de
sortes respectives N
1
,. . .,N
n
.
Pour la grammaire abstraite prcdente, on a par exemple les arbres de syntaxe abstraite suivants :

Cte Cte
+
Cte
Cte Cte
Il existe une correspondance biunivoque entre ces arbres et les mots reconnu par la grammaire
abstraite : le parcours gauche dun arbre de syntaxe abstraite permet de construire le mot correspon-
dant. Ainsi, les exemples darbres prcdents correspondent aux mots
(Cte, Cte) +(Cte, (Cte, Cte))
Rciproquement, on associe chaque mot engendr par la grammaire abstraite un arbre de syntaxe
abstraite par une construction analogue la construction rcursive labore au paragraphe 7.6 :
un mot engendr par une rgle N t on associe larbre rduit une feuille tiquete par t ;
un mot engendr par une rgle N t(N
1
, . . . , N
n
) on associe larbre dont la racine est
tiquete par t et dont les ls sont, dans cet ordre, les arbres associs aux mots engendrs par
N
1
,. . ., N
n
.
Si lon compare les arbres de syntaxe abstraite des mots exemples prcdents avec leurs arbres
de drivation dans la grammaire concrte non-ambigu du langage des expressions arithmtiques :
J.-P. Jouannaud Universit Paris Sud
70 Syntaxe abstraite des langages
E
E
T
F
Cte
T
F
Cte
E
E
T
F
Cte
+ E
E
T
F
Cte
T
F
Cte
on constate que lon a atteint notre deuxime objectif : les non-terminaux introduits pour dsambi-
guser ont t limins. Remarquons aussi que si lexpression originale contenait des parenthses,
celles-ci ne sont plus prsentes dans larbre : cest la structure de larbre qui donne le parenthsage.
11.3 Reprsentation des valeurs des tokens dans larbre
Il nous reste reprsenter les valeurs des tokens dans larbre de syntaxe abstraite lui-mme.
Pour ce faire, il nest pas ncessaire de changer la notion darbre : il suft dutiliser la possibilit
davoir un ensemble inni dtiquettes abstraites. Cet ensemble sera donc en fait un langage rgulier
(les entiers, les chanes de caractres, etc.) aussi cet ensemble dtiquettes abstraites sera souvent
informellement donn en extension avec des points de suspension, ou encore sous forme dune
expression rationnelle.
Ainsi, pour reprsenter les expressions arithmtiques avec les valeurs des constantes, il suft de
prendre T = +, , Cte N et la grammaire abstraite suivante :
E +(E, E) [ (E, E) [ Cte(Nat)
Nat (0 [ 1 [ [ 9)
+
Le langage dni par cette grammaire contiendra donc par exemple (Cte(1), Cte(2)) et
+(Cte(1), (Cte(2), Cte(3))).
Pour rsumer, la gure 11.1 montre un tableau donnant deux exemples dexpressions arithm-
tiques, accompagnes de leur arbre de drivation et leur arbre abstrait associ, o lon constate
nouveau la simplicit et la concision apporte par la notion darbre abstrait. Nous avons donc atteint
notre dernier objectif.
11.4 Calcul des arbres de syntaxe abstraite
Le dernier point qui reste traiter dans ce chapitre est la faon dassocier chaque mot dun
langage son arbre abstrait. Cela se fait facilement dans le cadre du logiciel YACC comme expliqu
au paragraphe 10.2.5. Ainsi, si lon poursuit notre exemple des expressions arithmtiques, on aura :
E E +T +(E
1
, T
1
)
E T T
1

T T F (T
1
, F
1
)
T F F
1

F Nat Cte(val(Nat
1
))
F (E) E
1

Noter lutilisation de la fonction val pour accder lunit lexicale reprsente par le token Nat. Par
ailleurs, la notation +(E
1
, T
1
) reprsente ici la construction dun arbre de syntaxe dont la racine est
tiquette par le symbole +, et les sous-arbres proviennent rcursivement de lvaluation de E
1
et
T
1
.
J.-P. Jouannaud Universit Paris Sud
11.4 Calcul des arbres de syntaxe abstraite 71
syntaxe syntaxe arbre arbre de
utilisateur concrte de drivation syntaxe abstraite
1+3*2 Nat + Nat Nat
E
E
T
F
Nat
+ T
T
F
Nat
F
Nat
+
Cte
1

Cte
3
Cte
2
val(Nat
1
) = 1
val(Nat
2
) = 3
val(Nat
3
) = 2
(1+3)*2 (Nat + Nat) Nat
E
T
T
F
( E
E
T
F
Nat
+ T
F
Nat
)
F
Nat

+
Cte
1
Cte
3
Cte
2
val(Nat
1
) = 1
val(Nat
2
) = 3
val(Nat
3
) = 2
FIG. 11.1 Comparaison des syntaxes abstraites et concrtes
J.-P. Jouannaud Universit Paris Sud
72 Syntaxe abstraite des langages
11.5 Codages des arbres de syntaxe abstraite
Nous terminons ce chapitre par quelques indications sur la mthode que lon peut utiliser pour
programmer ces arbres de syntaxe abstraite.
Dans le langage CAML, ce codage est immdiat en utilisant des types sommes. Ainsi, on dnira
le type des expressions arithmtiques par :
type expr =
Cte of int
| Plus of expr * expr
| Mult of expr * expr
Dune manire gnrale, il y aura autant de types dnir que de sortes darbres de syntaxe abs-
traite, et il y aura autant de constructeurs que de rgles de grammaire abstraite. Les ensembles innis
dtiquettes abstraites comme les entiers ou les identicateurs seront cods simplement par le type
de base correspondant : int ou string. Cela est notre seule faon de coder des ensembles in-
nis dtiquettes abstraites. Nous imposerons donc que tout ensemble inni dtiquettes abstraites
corresponde lun des types de base parmi int, string, et real.
Dans un langage comme PASCAL ou C noffrant pas cette possibilit des types sommes et
dallocation automatique de mmoire, il est ncessaire de coder ces arbres laide de pointeurs
sur des enregistrements, contenant un champ pour ltiquette abstraite et des champs pour les sous-
arbres. Dans un langage avec objets comme C++ ou JAVA, on aura avantage coder les arbres par
des classes, la construction et la destruction de ces arbres en seront facilites.
11.6 Exercices
Exercice 11.1 1. crire une grammaire abstraite pour les expressions boolennes formes avec
les oprations ou , et et non , et les constantes vrai et faux .
2. Donner une grammaire concrte non-ambigu pour le langage des expressions boolennes
avec toutes les oprations ci-dessus, et donner les rgles de calcul de la syntaxe abstraite
associes.
3. Donner un type CAML reprsentant cette syntaxe abstraite.
4. crire une fonction CAML permettant de transformer une chaine de caractres reprsentant
une expression boolenne en une expression abstraite, en utilisant loutil CAMLYACC.
Exercice 11.2 1. crire une grammaire abstraite pour les expressions arithmtiques sur laddi-
tion, la multiplication, la soustraction, la division, loppos, lexponentiation, les constantes
entires ou relles et les variables. (On ne distinguera pas les constantes entires, on les co-
dera par des rels.)
2. Donner une grammaire concrte non-ambigu pour le langage des expressions ci-dessus, et
donner les rgles de calcul de la syntaxe abstraite associes.
3. Donner un type CAML reprsentant cette syntaxe abstraite.
4. crire une fonction CAML permettant de transformer une chane de caractres reprsentant
une expression arithmtique en une expression abstraite, en utilisant loutil CAMLYACC.
J.-P. Jouannaud Universit Paris Sud
73
Chapitre 12
Machines de Turing
Conformment la gure 12.1, les machines de Turing considres sont dotes :
1. dune bande de lecture bi-innie, sur laquelle la donne, mot sur le vocabulaire V
t
, sera crite
entoure linni de caractres blancs, considr comme notre caractre spcial not _ nap-
partenant pas V
t
;
2. dun nombre ni de bandes de travail qui peuvent stocker des mots entours linni de blancs
sur les vocabulaires respectifs V
1
, . . . , V
n
ne contenant pas le caractre blanc ;
3. dun contrle matrialis par un ensemble ni Q dtats ;
4. dun tat initial q
0
;
5. dun ensemble F Q dtats acceptants ;
6. et dune fonction de transition T, qui est une application de QV
t
V
1
. . . V
n
dans
QL, R L, R . . . L, R si la machine est dterministe,
et T(QL, R L, R . . . L, R) si la machine est non dterministe.
Lors de chaque transition, la machine de Turing lit un mot sur chaque bande, ffectue une transi-
tion dtat accompagne du dplacement du lecteur de chaque bande conformment la fonction T.
La notion de reconnaissance est ici un peu diffrente de celle que lon a vue pour les automates : il
suft daccder un tat acceptant sans quil soit ncssaire davoir lu le mot reconnaitre en entier.
La reconnaissance dun mot arbitraire peut donc sffectuer en zro transition, il suft de dclarer
que q
0
est acceptant. Cette machine, bien sr, ne vrie mme pas que le mot est form de lettres
appartenant lalphabet autoris pour la bande entre.
On peut bien sr prendre une autre dnition o lon force la lecture des donnes, mais ce
modle prsente quelques inconvnients du point de vue de la thorie de la complexit, en particulier
labsence de complexit sub-linaire.
12.1 Exercices
FIG. 12.1 La machine de Turing.
J.-P. Jouannaud Universit Paris Sud
74 Complexit en temps et en espace
Chapitre 13
Complexit en temps et en espace
On dnit la complexit des langages relativement un modle de calcul particulier, les machines
de Turing. Cela peut sembler limiter la porte des constructions, mais on saperoit vite que ce
modle rsiste de nombreuses variations, et que tous les modles de la calculabilit connus donnent
peu ou prou les mmes notions de complexit.
On peut se demander si la notion de langage est bien celle qui convient, puisque lon est en
gnral intress par des problmes, et non des langages. En fait, tout problme peut se coder sous la
forme dun langage sur un alphabet nio, la prcision est dimportance, par un codage appopri des
donnes et rsultats du problme. On pourra donc parler indiffremment de langage ou de problme.
13.1 Classes de complexit
On dira quune machine de Turing M est borne en temps par la fonction T(n) si elle ne fait pas
plus de T(n) transitions pour une donne de taille n. On sintressera tout particulirement au cas
o T est un polynme. Dans ce cas, on dira que M travaille en espace polynomial.
On dira quune machine de Turing M est borne en espace par la fonction S(n) si elle ne balaie
pas plus de S(n) cellules sur chaque bande pour une donne de taille n. On sintressera tout parti-
culirement au cas o S est un polynme. Dans ce cas, on dira que M travaille en temps polynomial.
Ces notions servent classier les langages suivant le temps -ou lespace- ncssaire pour
reconnaitre les mots qui en font partie. On dira ainsi quun langage L appartient la classe
DTIME(T(n)) sil existe une machine de Turing dterministe M qui reconnait un mot u L
en temps au plus T([ u [), et la classe NTIME(T(n)) sil existe une machine de Turing non
dterministe M qui reconnait un mot u L en temps au plus T([ u [). La dnition des classes
DSPACE(S(n)) et NSPACE(S(n)) est similaire.
Finallement, on dira quun langage L appartient la classe P (respectivement NP) sil
existe un polynme P(n) tel que L soit reconnu en temps DTIME(P(n) (respectivement,
NTIME(P(n))). La dnition des classes PSPACE et NPSPACE est similaire.
De nombreuses autre classes jouent un rle important, en particulier les classes logarithmiques en
espace, LOGSPACE qui est dterministe, et NLOGSPSACE qui est non dterministe -lespace
autoris est une puissance quelconque du logarithme de la taille de lentre-, ainsi que les classes
exponentielles en temps EXPTIME et NEXPTIME. Enn, la classe de complexit lmen-
taire (en temps) caractrise les langages dont la reconnaissance est borne en temps par une hauteur
arbitraire dexponentielles emboites, comme n
n
n
, de hauteur 3. On ne parle dans ce cas que de
complexit dterministe. Cette classes interviendra par la suite.
Le nombre de bandes utilises na gure dimportance pour les classes de complexit
P, NP, PSPACE, NPSPACE : on peut le rduire 2 en passant de DTIME(T(n))
DTIME(T(n)logT(n)), et mme un en passant de DTIME(T(n)) DTIME(T(n)
2
).
J.-P. Jouannaud Universit Paris Sud
13.2 Comparaisons entre mesures de complexit 75
Le tableau qui suit rcapitule les classes de complexit que nous venons de dcrire.
MT dterministe MT non dterministe
Temps T(n) DTIME(T(n)) NTIME(T(n))
Temps polynomial P NP
Temps exponentiel EXP NEXP
Temps lmentaire
Temps non lmentaire
Espace S(n) DSPACE(S(n)) NSPACE(S(n))
Espace logarithmique LOGSPACE NLOGSPACE
Espace polynomial PSPACE NPSPACE
Une dernire classe importante est CoNP. On dit quun langage L V

est dans CoNP ssi


son complmentaire L est dans NP. Cette dnition est plus subtile quil ny parait premire vue :
pour reconnaitre u L avec la machine non dterministe M reconnaissant L, il est ncssaire de
rejeter u, cest--dire dessayer toutes les faons possibles de reconnaitre u avec M pour vrier
quelles chouent toutes. Peut-on reconnaitre u avec une machine de Turing non-dterministe M ?
On nen sait rien, le problme est ouvert.
13.2 Comparaisons entre mesures de complexit
Tout dabord, notons que
DTIME(T(n)) DSPACE(T(n))
puisque il faut au moins n transition pour visiter n cases dds bandes mmoires.
Pour donner une rciproque, il faut dabord sassurer que borner lespace implique un temps
born. Cela revient montrer que si la machine M travaille en espace born, alors il existe une
machine de Turing M

qui reconnait le mme langage, et travaille en espace et en temps born la


fois. Plus prcisment, on peut montrer que
DSPACE(S(n)) DTIME(c
S(n)
)
o la constante c dpend de la machine M. On montre une relation similaire entre temps dterministe
et non dterministe :
NTIME(T(n)) DTIME(c
T(n)
)
o, nouveau, la constante c dpend de la machine M. Par contre, la relation entre espace dtermi-
niste et non dterministe est bien diffrente, cest le thorme de Savitch :
NSPACE(S(n)) DSPACE(S(n)
2
)
ce qui implique que
NPSPACE = PSPACE
et
NLOGSPACE = LOGSPACE.
Les ingalits connues entre classes de complexit sont les suivantes :
DSPACE(log n) P NP, CoNP PSPACE,
DSPACE(log n) PSPACE,
LOGSPACE PSPACE
J.-P. Jouannaud Universit Paris Sud
76 Complexit en temps et en espace
FIG. 13.1 Inclusions (au sens large) essentielles.
et
P ,= LOGSPACE.
On voit que la pluspart de ces ingalits ne sont pas strictes ; par ailleurs, on ne sait pas si
lune des classes P et LOGSPACE est incluse dans lautre. La thorie de la complexit savre
plus riche de questions que de rponses. La question de savoir si P = NP ou pas et considre
comme lune des grandes questions actuelles non seulement de linformatique, mais de lensemble
des mathmatiques.
Les inclusions les plus importantes sont reprsentes la gure 13.1.
13.3 Langages complets
De nombreux langages sont dans NP pour lesquels aucune solution polynomiale nest connue.
Le but de ce paragraphe et didentier parmi eux ceux qui sont difciles, en ce sens que si lun deux
devait tre polynomial, alors les classes P et NP coincideraient. La notion qui permet de comparer
la difcult de deux langages diffrents fait lobjet du paragraphe qui suit. Elle a une porte gnrale,
qui dpasse le problme de comparer P et NP.
13.3.1 Rductions et compltude
Dnition 13.1 Le langage L

est rductible au langage L en temps polynomial, on dit aussi poly-


nomialement rductible en temps, par la machine de Turing M : L

L si :
1. M fonctionne en temps polynomialement born en fonction de la taille de son entre ;
2. M(x) L ssi x L

.
Dnition 13.2 Le langage L

est rductible au langage L en espace logarithmique, on dit aussi


logarithmiquement rductible en espace, par la machine de Turing M : L

L si :
1. M fonctionne en espace logarithmiquement born en fonction de la taille de son entre ;
2. M(x) L ssi x L

.
Lemme 13.3 Supposons que L

soit polynomialement rductible en temps L. Alors,


1. L NP = L

NP ;
2. L P = L

P.
Lemme 13.4 Supposons que L

soit logarithmiquement rductible en espace L. Alors,


1. L P = L

P ;
2. L LOGSPACE = L

LOGSPACE.
Ce sont les rductions qui vont nous permettre de comparer les langages entre eux :
Dnition 13.5 Soit ( une classe de complexit. On dit que L est complet pour ( vis--vis de la
rduction polynomiale en temps (respectivement la rduction logarithmique en espace) si
1. L ( ((-difcult) ;
2. tout langage L

( est polynomialement rductible en temps (respectivement, logarithmique-


ment rductible en espace) L
J.-P. Jouannaud Universit Paris Sud
13.3 Langages complets 77
13.3.2 NP-compltude
On connait un grand nombre de problmes NP complets, cest le cas de la pluspart de pro-
blmes de nature combinatoire. On connait mme des problmes qui sont dans NP mais dont on
sait pas sils sont dans P, ni sils sont complets. Cest le cas du test de primalit dun entier.
Le problme paradigmatique de la classe NP est SAT : il sagit de savoir si une formule pro-
positionnelle donne est satisable ou pas.
On considre le langage des formules logiques propositionnelles, cest--dire baties laide dun
ensemble donn Trop de symboles (ou variables) propositionnels pouvant pendre les deux valeurs
0, 1 et des connecteurs logiques true, false, , , . Une formule propositionnelle est dite satis-
able sil existe une application de Trop dans 0, 1 telle quelle svalue en 1, true, false tant
des constantes logiques svaluant respectivement en 0 et 1.
Le problme SAT consiste dterminer lexistence dune telle application pour une formule
donne, , arbitraire.
On peut reprsenter le problme SAT comme le langage L
SAT
construit comme suit : sil y a n
variables, la ime sera reprsente par le mot form de la lettre x suivie du code binaire de i. Notre
alphabet sera donc , , , (, ), x, 0, 1, permettant de coder une formule de longueur n par un mot
de longueur (larrondi suprieur de) n log n. En effet, il y a au plus n/2 variables diffrentes dans
une formule de taille n, et donc le code de chacune dentre elles ne ncssite pas plus de (larrondi
suprieur de) 1 + log n lettres du vocabulaire. Comme nous allons utiliser une rduction en espace
logarithmique, on va pouvoir faire comme si une formule de taille n tait code par un mot de mme
taille n, car log(n log n) log n
2
= 2 log n, et que toutes ls quantites sont une constante
multiplicative prs.
Lemme 13.6 SAT est dans NP.
Preuve: Pour cela, il suft de construire de manire non-dterministe des valeurs de vrit pour
toutes les variables, puis dvaluer la formule, ce qui se fait en temps linaire en la taille de la
formule.
Dune manire gnrale, les preuves dappartenance NP se dcomposent en deux phases :
1. la premire consiste construire un arbre de choix de hauteur polynomiale, qui gure len-
semble de tous les cas devant tre examins, en temps (non-dterministe) proportionnel sa
hauteur en utilisant le non-dterminisme des machine de Turing. Dans notre exemple, il sagit
de construire toutes les possibilits daffecter des valeurs de vrit pour les variables ;
2. pour chaque choix, un calcul polynomial avec une machine dterministe. Lors de cette se-
conde phase, il sagit de vrier une proprit ; dans notre exemple, il sagit de vrier que les
valeurs de vrit affectes aux variables rendent la formule vraie. Cest l une caractristique
essentielle des problmes NP.
Il suft pour terminer de collecter les rsultats aux feuilles an de vrier sil existe un choix daf-
fectation de valeurs de vrit aux variables qui rende la formule vraie, ce qui est fait par la dnition
de lacceptation pour les machines non-dterministes.
Thorme 13.7 SAT est NP-complet.
Preuve: Il nous reste montrer que tout problme de la classe NP est rductible L
SAT
en espace
logarithmique en la taille de la donne. Pour cela, tant donne une machine de Turing non dtermi-
niste M -dont nous supposerons quelle possde une bande unique innie droite seulement pour
plus de facilit- qui reconnait son entre x = x
1
. . . x
n
de taille n en temps born par un polynme
p(n), nous allons dnir un algorithme qui travaille en espace logarithmique pour construire une for-
mule propositionnelle M
x
qui est satisable ssi M accepte x. Cet algorithme pourra tre facilement
dcrit sous la forme dune machine de Turing prenant en entre une description du calcul de M pour
J.-P. Jouannaud Universit Paris Sud
78 Complexit en temps et en espace
sa donne x, et crivant la formule M
x
sur sa bande de sortie, et utilisant par ailleurs des bandes de
travail pour ffectuer ses calculs.
Soit #m
0
#m
1
. . . #m
p(n)
la description dun calcul de M form de p(n) transitions. Si la
machine M accepte avant la p(n)me transition, on rptera une transition vide sur ltat acceptant
-ce qui ne change pas le langage reconnu de M ni le polynme p(n)- de manire ce quil y
ait exactement p(n) transitions et donc (p(n) + 1)
2
caractres au total. Les p(n) + 1 mots m
i
de
longueur p(n) dcrivent la conguration de la machine M aprs exactement i transitions. Ils sont de
la forme
i
(q
i
, a
i
, b
i
, D
i
, q
i+1
)
i
, o
- q
i
dsigne ltat courant,
i
est le mot crit sur la bande depuis lextrmit gauche jusqu la
tte de lecture non comprise,
- a
i
est le caractre lu,
- b
i
est le caractre crit lors de la transition venir (choisi arbitrairement pour i = p(n)),
- D
i
est la direction de dplacement de la tte de lecture lors de la transition venir (choisie
arbitrairement pour i = p(n)),
- q
i+1
dsigne ltat atteint dans la transition venir (choisi arbitrairement pour i = p(n)),
-
i
est le mot crit sur la bande partir de la tte de lecture non-comprise jusquau premier blanc
rencontr, et complt si ncssaire par des blancs de manire ce que le mot
i
a
i

i
ait exactement
p(n) caractres.
Chaque mot #(q, a, b, D, q

) est appell une description instantane, o les quintuplets


(q, a, b, D, q

) sont considrs comme les lettres dun alphabet ni particulier W dont le sous-
ensemble form des quintuplets (f F, a, b, D) est not W
F
. On utilisera la notation pointe de la
programmation par objets pour rcuprer les composantes des lments de W. Notons par ailleurs
que peut tre une squence (ventuellement vide) forme de blancs uniquement si la tte de lecture
pointe sur un blanc.
chaque caractre X qui peut gurer dans la descrition dun calcul, on associe une variable
propositionnelle c
i,j,X
qui servira indiquer si le (j + 1)me caractre (on commence avec j = 0)
de la ime description instantane est un X. Lexpression M
x
cherche doit assurer les proprits
suivantes :
1. Mot : les variables c
i,j,X
dcrivent un mot, et donc lune delle exactement est vraie pour
chaque paire (i, j) ;
2. Init : m
0
dcrit ltat initial de la machine M avec i sur la bande ;
3. Final : m
p(n)
possde un tat acceptant ;
4. Trans : pour chaque i [0, p(n)], m
i+1
dcoule de m
i
par une transition de la machine non
dterministe M.
La formule M
x
cherche est donc la conjonction des formules dcrivant ces quatre proprits. D-
crivons les dans notre langage logique :
Mot =

X
c
i,j,X


X=Y
(c
i,j,X
c
i,j,Y
)

Init = c
0,0,#

XW
c(0, 1, X)

j[1,n]
c
0,j,x
j

j[n+1,p(n)]
c
0,j,_
Final =

XW
F
c
p(n),j,X
Trans =

i[0,p(n)1]

j[0,p(n)]

W, X, Y, Z such
thatf(W, X, Y, Z)
c
i,j2,W
c
i,j1,X
c
i,j,Y
c
i+1,j,Z
J.-P. Jouannaud Universit Paris Sud
13.3 Langages complets 79
o le prdicat de ltrage f(W, X, Y, Z) dcrit la possibilit pour le caractre Z dapparaitre en
position j de la (i+1)me description instantane, sachant que les caractres W, X et Y apparaissent
aux positions respectives j
1
, j et j + 1 de la ime description instantane. Il est important de noter
que ce prdicat doit simplement tre calcul partir de la donne de la machine M, sans quil soit
ncessaire de le construire. Il sert en effet liminer les calculs impossibles de la formule. Il faudrait
au contraire le construire dans notre langage si nous avions dni
Trans =

i[0,p(n)1]

j[0,p(n)]

W,X,Y,Z
f(W, X, Y, Z) = c
i,j2,W
c
i,j1,X
c
i,j,Y
c
i+1,j,Z
Il faut maintenant montrer quil est possible de construire la formule M
x
, ce qui inclue le calcul du
prdicat f, en espace logarithmique. Cela rsulte du fait que la taille de M
x
est de lordre de p(n)
2
,
et quil suft dun espace logarithmique pour compter jusqu une valeur qui sexprime comme un
polynme de n.
Il reste enn montrer que la machine M accepte la donne x si et seulement si la formule M
x
est satisable. Comme tout a t fait pour que ce soit vrai, la preuve en est laise au lecteur.
Les problmes NP-complets sont trs nombreux, comme la programmation linaire en nombres
entiers, le problme du sac dos, le problme du voyageur de commerce, ou comme la recherche
dans un graphe dun circuit hamiltonien, dun chemin de longueur minimale, dun coloriage en 4
couleurs. La recherche dun chemin eulrien, par contre est polynomiale.
On peut se demander o est la frontire entre le polynomial et le polynomial non-dterministe.
Appelons n CNF, la restriction du problme SAT au cas o la formule propositionnelle est
une conjonction de clauses comprenant toutes le mme nombre n de littraux. On peut montrer que
2 CNF est polynomial, alors que 3 CNF est dja NP-complet.
Les problmes NP-complets ont longtemps t considrs comme intractable. Quun problme
soit NP-complet nempche pas de le rsoudre, en gnral, du moins ses instances de taille pas trop
grande. Il existe souvent de nombreuses sous-classes qui sont polynomiales, comme 2 CNF dans
le cas de SAT. La difcult est gnralement concentre sur des problmes trs particuliers, qui
font apparatre des phnomnes de seuils pour certains paramtres : loin du seuil, le problme est
polynomial ; prs du seuil, il devient difcile, mais il peut alors tre possible de trouver une solution
approximative en utilisant des algorithmes probabilistes.
13.3.3 PSPACE-compltude
La classe PSPACE est tout aussi mystrieuse. Le problme PSPACE-complet paradigma-
tique de cette classe est un autre problme de logique, QBF pour Quantied Boolean Formulae, pour
lequel il sagit de dcider si une formule propositionnelle quantie est satisable ou pas. Le langage
est donc cette fois bti partir dun nombre ni de variables propositionnelles, des connecteurs lo-
giques habituels, et des quanticateurs universel et existentiel. Cest lalternance des quanticateurs
qui va nous propulser dans une classe dont on pense quelle et intrinsquemnt plus complexe que la
classe NP. On dit quune variable est libre dans une formule si elle nest pas dans la porte dun
quanticateur.
Lemme 13.8 QBF est dans NP.
Preuve: La preuve utilise llimination des quanticateurs sur un ensemble ni, ici lensemble des
valeurs de vrit. On a en effet les quivalences logiques :
x(x) (0) (1)
x(x) (0) (1)
Le problme est qutant donne une formule de taille n, la formule transforme peut tre de taille
exponentielle en n :

n
x
1
x
2
. . . x
n
est de taille 4n 1
J.-P. Jouannaud Universit Paris Sud
80 Complexit en temps et en espace
FIG. 13.2 La formule transforme de taille exponentielle.
mais sa transforme reprsente la gure 13.2 est de taille 2
n1
1+2
n
(n1) > (n1)
2
2
n
.
On va donc parcourir larbre ci-dessus sans lengendrer, en dnissant une procdure dvalua-
tion rcursive EV ALqui utilise un espace de tavail polynomial dans la pile dexcution pour valuer
:
1. = true : EVAL retourne la valeur true ;
2. =
1

2
: EVAL retourne la conjonction des rsultats obtenus rcursivement pour
1
et

2
;
3. =
1

2
: EVAL retourne la disjonction des rsultats obtenus rcursivement pour
1
et

2
;
4. = : EVAL retourne la ngation du rsultat obtenu rcursivement pour ;
5. = x : EVAL construit les formules
0
et
1
en remplaant respectivement la variable x
par 0 et 1 dans , puis retourne la disjonction des rsultats obtenus rcursivement pour
0
et

1
;
6. = x : EVAL construit les formules
0
et
1
comme prcdemment, puis retourne la
conjonction des rsultats obtenus rcursivement pour
0
et
1
.
Comme le nombre de connecteurs ou quanticateurs est au plus gal la taille n de la formule, la
profondeur de rcursion est au plus n. La taille des donnes stocker dans la pile dexcution tant
linaire en n, on en dduit que lespace occupp dans la pile (pour laquelle on utilisera par exemple
une bande spcique de la machine) est quadratique. Donc QBF est dans PSPACE.
Les preuves dappartenance PSAPCE patissent du fait que NPSPACE = PSPACE. On
pourrait en dduire que le mme schma va nouveau fonctionner, en construisant un arbre de choix
en espace polynomial non-dterministe. En fait, cela nest pas le cas. Les problmes PSPACE,
comme le problme QBF, ne se prtent pas la dcomposition en une premire phase dnumration
non-dterministe qui contient toute la complexit suivie dune phase de vrication polynomiale.
Vrier quun ensemble de valeurs de vrit est une solution dun problme de QBF est tout ausi
difcile que de les trouver.
Thorme 13.9 QBF est PSPACE-complet.
Preuve: Reste rduire tout problme de PSPACE QBF par une rduction que lon choisit poly-
nomiale en temps. La rduction est similaire la rduction prcdente pour NP, en plus complexe.

Nous terminons par un problme qui intervient de manire cruciale en vrication : laccessi-
bilit dans un graphe consiste, tant donns un graphe G et deux sommets a et b, dterminer sil
existe un chemin allant de a b.
Thorme 13.10 Laccessibilit dans un graphe est NSPACE(log n)-complet pour les rductions
en espace logarithmique.
Preuve: Le codage du problme comme un langage sur un alphabet ni est laiss au lecteur. Notons
toutefois que le codage dun noeud du graphe prendra log n bits sil y a n sommets.
On montre tout dabord que le problme est dans la classe NSPACE(log n). Pour cela, on
va engendrer tous les chemins grce au non-dterminisme, de sorte que la mmoire occuppe soit
de taille logarithmique en n pour chacun deux. Pour cela, on va chaque tape (il y aura au plus
n tapes) engendrer tous les sommets et vrier que lon construit bien un chemin dune part, et
J.-P. Jouannaud Universit Paris Sud
13.4 Exercices 81
si le sommet engendr est le sommet voulu dautre part. Cela suppose de mmoriser pour chaque
chemin partiel le sommet qui vient dtre engendr plus le sommet prcdent, ce qui se fait en espace
logarithmique. On ne conserve donc pas le chemin.
Il reste rduire tout problme de NSPACE(log n) au problme daccessibilit par une ma-
chine de Turing dterministe fonctionnant en espace logarithmique. La rduction est esquisse, les
dtails sont laisss au lecteur.
Soit M une machine de Tring non-dterministe fonctionnant en espace logarithmique de la
taille de son entre, et x une donne de taille n. La description de la machine un moment donn se
fait avec log n bits, puisquelle fonctionne en espace logarithmique. Nous allons contruire un graphe
M
x
qui va coder le fonctionnement de la machine et aura un chemin du premier noeud au dernier ssi
la machine M reconnait x. Les noeuds du graphe seront les descriptions instantanes de la machine
plus un dernier pour lacceptance. Le premier noeud est la description initiale. il y aura un arc dun
noeud un autre si la transition correspondante est posible. Ce graphe rpond bien la question, et
il faut montrer quon peut lengendrer avec une machine qui travaille en espace logarithmique. Cela
est du au fait que chaque description instantane est code sur approximativement log n bits.
Cette preuve est intressante car elle mle la gnration alatoire incrmentale dun objet (ici,
un chemin dans un graphe) avec le test que cette gnration construit bien lobjet en question. Cela
est ncssit par le besoin de rduire la taille occuppe lincrment de lobjet, lobjet lui-mme
prenant trop de place.
13.4 Exercices
Exercice 13.1 Montrer que le problme de satisabilit pour CNF est NP complet.
Exercice 13.2 Montrer que le problme de satisabilit pour 3 CNF est NP complet.
Pour montrer la compltude, on rduira le problme SAT au problme 3 CNF. On pourra
dans un premier temps se dbarasser des ngations internes en les faisant descendre aux feuilles en
utilisant pour ce faire un espace de travail logarithmique. Dans un second temps, il faudra crer la
formule 3 CNF partir de la formule obtenue lissue de la premire passe. La seconde passe
consiste engendrer les disjonctions de la clause les unes aprs les autres en montrant quil suft
de n clauses et dun espace logarithmique pour les construire une par une.
Exercice 13.3 Montrer que le problme de satisabilit pour 2 CNF est dans P. Est-il complet
pour P ?
Exercice 13.4 On appelle couverture dun graphe G un sous ensemble A de ses sommets tel que
pour toute arte a, b, a A ou b A.
Montrer que le problme, tant donn un graphe G et un nombre k, de dterminer si G a une
couverture de taille k est NP-complet.
Exercice 13.5 Montrer que le problme du coloriage dun graphe avec un nombre de couleurs
minimal est NP-complet.
Exercice 13.6 On appelle circuit hamiltonien dun graphe Gun circuit passant une fois et une seule
par tout sommet de G.
Montrer que le problme, tant donn un graphe G, de dterminer sil possde un circuit hamil-
tonien est NP-complet.
Exercice 13.7 On appelle circuit eulerien dun graphe G un circuit passant une fois et une seule
par tout arc de G.
Montrer que le problme, tant donn un graphe G, de dterminer sil possde un circuit eulerien
est dans P.
Exercice 13.8 Montrer que le problme, tant donn un entier n, de dterminer sil est premier est
dans NP.
J.-P. Jouannaud Universit Paris Sud
82 BIBLIOGRAPHIE
Bibliographie
[1] Batrice Brard, Michel Bidoit, Franois Laroussinie, Antoine Petit et Philippe Schnoebelen
Vrication de logiciels : Techniques et Outils du model-checking, 1999. Vuibert Informatique.
Philippe Schnoebelen, coordinateur.
[2] John E. Hopcroft et Jeffrey D. Ullman. Introduction to Automata Theory, Languages and
Computation, 1979. Addison Wesley.
J.-P. Jouannaud Universit Paris Sud

Vous aimerez peut-être aussi