Vous êtes sur la page 1sur 35

CHAPITRE 2

RAPPEL SUR LA THEORIE DES LANGAGES

1
1. Les langages formels
La théorie des langages (formels) forme une des parties les plus
importantes de l’informatique d’aujourd’hui. Les principales
applications des langages formels sont :
- L’étude de la calculabilité,
- La compilation,
- l’étude des langages naturels (traitement automatique),
- l’étude des systèmes formels en mathématiques et
- les automates à états finis.

2
1.1 Définitions générales
Définition 1 :
Un alphabet est un ensemble fini non vide que nous noterons . Les
éléments de  sont appelés symboles ou lettres.
Exemple :{0,1}, ASCII,…
Définition 2 :
Un mot sur un alphabet  est une suite de n symboles de , avec n0.
Le mot composé de 0 symboles est appelé le mot vide et est noté .

3
Définition 3 :
L’opération de concaténation consiste à placer deux mots m et m’ côte à
côte pour former le mot noté m.m’ constitué de la suite des symboles de
m suivi de la suite des symboles de m’. Le . est parfois omis. On notera
mi le résultat de la concaténation de i mots, tous égaux à m.
Définition 4 :
On appelle langage engendré par l’alphabet  l’ensemble de tous les
mots sur . On notera cet ensemble *. On notera + l’ensemble * privé
de mot vide  (+=*- {}).

4
Définition 5 :
Les langages formels sur l’alphabet  sont les sous–ensembles de * (on
parlera simplement de langages sur ).
Définition 6 :
L’alphabet d’un langage L, noté (L), est le plus petit ensemble  tel
que L est un langage sur .
Définition 7 :
Soit  et  deux alphabets. Un morphisme de langage f est une
application définie de * dans * vérifiant la propriété :
 m*,  m’*, f(m.m’)=f(m)f(m’)

5
Exemples
 Soit ={a,b} alors * est l’ensemble de mots ne contenant que des a
et des b. Le langage L={ab, b, bba, bbbbaba} est un langage sur ,
fini. Le langage L’={apbq, p0, q0} est un autre langage sur ,
infini.
 L’alphabet du langage L={a, ba} est ={a, b}. L’alphabet du
langage L’={a, aaaa, aa} est {a}. On peut cependant remarquer que
L’ est aussi un langage sur .
 La concaténation des mots m=aabaab et m’=abb donne le mot
mm’=aabaababb.

6
Propriétés :
 x. = .x = x l’élément neutre.
 x.(y.z) = (x.y).z l’associativité.
Remarque :
On dit que * possède une structure de monoïde pour. car * est muni
d’une loi de composition interne ., dont  est l’ensemble neutre et qui
est associative.

2.1 Opérateurs ensemblistes


Les langages les plus simples sont les langages finis, parmi eux, se
trouve le langage vide  et le langage {} réduit au seul mot vide.
7
* *
L ={u | u  u  L},L =  \L.

Les opérateurs ensemblistes consistent simplement en l’union  (noté


parfois +), en l’intersection , et en la différence ensembliste \.

L1  L2 = {u | uL1  u  L2}
L1  L2 = {u | uL1  u  L2}

8
Remarque :
Toutes les propriétés des opérations ensemblistes sont évidemment
valables dans le cas des langages.

2.2 Produit et itération

Soit L et L’ des langages sur . On appelle produit de L et de L’ le


langage, noté LL’, défini par :
LL’={uu’ * | uL et u’L’}

9
On appelle itéré de L le langage noté L* (étoile de Kleene), défini par le
schéma d’induction : Pour tout entier k et pour tout langage L nous
pouvons définir L* de la manière suivante :
L° ={} et pour k1 Lk = Lk-1.L
Cela permet de montrer aisément que L* =  Lk
k0

L’itération, notée * (étoile de Kleene) :


Si L est une partie de *, posons
L0 = {}
L1 = L
.
10
.
.
Li+1 = L.Li
et L* = 
i0
Li

Nous noterons aussi L+ l’ensemble 


i0
Li. On a donc

L+ = L.L* = L*.L et L* = {} + L+


Propriétés
 L = L = L et L = L = 
 L(L’L’’) = (LL’)L’’

L(iLi) = i (LLi) et de même (iLi)L = i (LiL)

11
 L’  L’’  LL’  LL’’ et L’L  L’’L
 * = 
 L* =   LL*

(L*)* = L*

L*L* = L*
 L1  L2 = L2  L1 commutativité
L=L neutre
 L1  (L2  L3) = (L1  L2)  L3 associativité
LL=L idempotent
 L.(L1  L2) = L.L1  L.L2 distributivité

12
 (L1  L2).L = L1L  L2L distributivité
 L1.(L2.L3) = (L1.L2).L3 associativité

Autre définition
Soit u  *.
|u| la longueur de u, || = 0.
|u|a le nombre d’occurrences des symboles a dans u.
Exemple
Soit = {a, b}, u =ab et v=abaa. Alors :
|u|=2, |v|=4. |u|a=1, |v|a=3.

13
2. Les grammaires formelles
Le but d’une grammaire est la production d’un langage à partir d’un
alphabet et de règles de production.

2.1 Systèmes de réécriture


Définition 2.1 :
Un système de réécriture est un triplet R =(, P,) où  est un alphabet,
P est un ensemble fini de couples (u,v), où u et v sont des mots sur  et
 est la relation de production directe. Les couples (u,v) sont appelés
règles de production, on les note également uv.

14
Définition 2.2 :
x 
R y ssi il existe des mots w1, w2 et une règle de production uv
tels que x = w1uw2 et y = w1vw2. On dit alors que y est produit
directement par x en accord avec R.
n
x 
R y ssi il existe des mots u0, u1,…,un avec x=u0, ui 
R ui+1 fini
i<n, un=y.
n
x 
* y ssi  n  0 avec x 
R y.
R
Alors u0  u1  …  un est une dérivation de un à partir de u0. Si R
est connu, nous pouvons omettre R.

* est appelée relation de dérivation. On dit que y dérive x.

15
Exemple :
T = (, P,→) avec  = {a,b,c}, P = {ba→ ab, ca→ ac, bc→ a, cb→ a}.
Une dérivation est par exemple :
bbccaba  bacaba
*
 abcaba  aaaba  aaaab
On a donc l’hypothèse : u  *  i, j 0 : u  aibj ou u  aicj

2.2 Grammaire de chomsky


Définition 2.3 :
Une grammaire (grammaire de Chomsky) est définie par un quadruplet
G = (N, , P, S) où :
N est un ensemble fini appelé l’alphabet non terminal,
16
 est un ensemble fini appelé l’alphabet (terminal) avec N   =,
P est un ensemble des règles de production, sous-ensemble fini de
((N  )+- *)×(N  )*,
S  N est appelé l’axiome ou le symbole de départ. Donc, d’une façon
générale pour chaque règle   , on a (  )*N(N  )*,
(N)*.
P  ((N  )* N (N  )*  (N  )*.
Notons qu’il est de tradition de noter les éléments de N par des lettres
majuscules et les éléments de  par des lettres minuscules. Ainsi, on

17
peut considérer que u, v, w, … des mots sur  et , ,  des mots sur
N.
Remarque :
Chaque grammaire G = (N, , P, S) définit un système de réécriture RG
= (N  , P, ) avec l’axiome S.
n *
Notation : 
G , 
G
, .
G
Définition 2.4 :
Le langage généré par la grammaire G est défini par :
L(G) = {w*S
* w}. (w est dérivable dans G).

18
Définition 2.5 :
Deux grammaires G et G’ sont dites équivalentes si elles génèrent le
même langage c-à-d L(G) = L(G’).
Exemple :
G3 = ({A,S} , {0,1}, P, S) où
P = {S  0, S  1, S  1A, A  0A, A  1A, A  0, A  1}
Notation :
 A  1| 2 pour A  1, A  2
 Pour la partie gauche de la première règle de production, on utilise le
symbole de départ S.

19
Exemples :
G1 : S  abc | aAbc
Ab  bA
Ac  Bbcc
bB  Bb
aB  aaA | aa
G2 : S  aB | bA
A  a | aS | bAA
B  b | bS | aBB

20
G3 : S  0 | 1 | 1A
A  0A | 1A | 0 | 1
Exemple de dérivation
S  1A  11A  110A  1100.
L(G3) est l’ensemble des représentations binaires d’entiers (qui ne
commencent pas par 0).
Hypothèse:
L(G2) = {w  {a,b}* | |w|a = |w|b}.
Dans les mots de L(G2), le nombre d’occurrences de a est égal au
nombre d’occurrences de b.

21
Démonstration par récurrence sur |w|  1
Afin de simplifier la démonstration, nous introduisons ces trois sous
hypothèses :

(1) S 
* w  |w|a = |w|b
(2) A 
* w  |w|a = |w|b + 1
(3) B 
* w  |w|b = |w|a + 1
Avec (1) on a l’hypothèse initiale.
Pour |w| = 1, on a (1) car les deux parties sont fausses. (2), (3) sont
clairs.
Pour |w|=n, nous montrons pour (1) et c’est analogue pour (2) et (3).
Supposons que (1) est vraie pour n démontrons pour n + 1 : |w| = n + 1.
22
‘’ :
On a S 
* w : la dérivation est donc S  aB  … 
* av=w
avec |v| = n (ou bien : S  bA  … 
* bv = w)

B 
* v puisque la propriété (3) est valable pour n :
|v|b = |v|a + 1
Calculons :
|w|a = |av|a=1+ |v|a= |v|b= |a|b+|v|b=|av|b= |w|b
et de même façon on raisonne pour w = bv avec (2).

23
‘’ :
|w|a = |w|b et on a |w| = n + 1, w = av alors |v| = n et |v|b = |v|a + 1 alors
d’après (3) : B 
* v
Nous obtenons la dérivation aB av
* et ensuite
SaB 
* av=w.

Exemple de dérivation pour la grammaire G1 :


 aAbc  abAc  abBbcc  aBbbcc  aaAbbcc
 aabbBbccc  aaBbbbccc  aaabbbccc
Hypothèse : L(G1) = {anbncn | n > 0}

24
Définition 2.6 :
Soit G une grammaire et S son axiome. On dit que G satisfait la
condition d’ ssi  apparaît au plus dans la règle S   et que S
n’apparaît dans aucune partie droite des règles de G. (Alors  est
dérivable avec S ).
Définition 2.7 (Classification de Chomsky des grammaires) :
Une grammaire G = (N, , P, S) est
- de type 0 (ou récursivement énumérable) dans tous les cas,
autrement dit, il s’agit d’une grammaire dont au moins une des

25
règles comprend une partie gauche plus longue que sa partie
droite (   , || > || ).
- de type 1 ou dépendante de contexte : si pour chaque règle
P, ||  || et , (N  )+ (à l’exception de S  ).
- de type 2 ou hors contexte (à contexte libre) si pour toute règle
  dans P, on a N.
- de type 3 ou linéaire droite (respectivement linéaire gauche) ou
régulière, lorsque chaque règle de P est du type A  wB avec A,
B  N et w  * (respectivement A  Bw ou pour linéaire
gauche) ou A  w (w  *) (règle dite terminale).

26
Pour chacun des types 1, 2 et 3, la condition d’ est valable.
Remarques :
- Les grammaires G1, G2 et G3 sont respectivement de types 1, 2 et
3.
- Pour les grammaires, on a :
linéaire droite  hors contexte  dépendante de contexte  type 0
(toute grammaire régulière est à contexte libre).
- Tout langage fini est régulier.
- Le terme de contexte libre signifie que tout symbole non
terminal peut être remplacé par une séquence quelle que soit sa
position par rapport à d’autres symboles. Ainsi, si une des règles

27
de production était aA  ab, le symbole A ne pourrait être
substitué par b que s’il était précédé de a. Ce type de grammaire
n’est pas à contexte libre.

Définition 2.8 :
Un langage L  * est dit régulier, hors-contexte, dépendant de contexte
ou de type 0 s’il est généré respectivement par une grammaire régulière,
hors-contexte, dépendante de contexte ou de type 0.

28
Définition 2.9 :
Une grammaire G = {N, , P, S} est linéaire ssi chaque règle de P est de
forme :
A  uBv ou A  u où A, B  N et u, v  *.
Notation :
REG = {L  * | L régulier}.
CF = {L  * | L à contexte libre}.
CS = {L  * | L dépendant de contexte}.
RE = {L  * | L est de type 0}.
Remarque : REG  CF  CS  RE

29
2.3. Formes normales
Nous avons vu que des grammaires différentes peuvent engendrer le
même langage. La question que l’on peut se poser est la suivante :
existe-t-il pour un langage donné une grammaire « plus simple » que les
autres qui l’engendre ?
Théorème 2.1 (Formes normales des grammaires régulières) :
Soit L un langage régulier. Alors L est généré par une grammaire telle
que chaque règle est soit du type A  aB, soit du type A  a. A, B sont
des symboles non-terminaux et a est un symbole terminal.

30
Théorème 2.2 (Forme normale de Chomsky) :
Soit L un langage à contexte libre tel que   L. Alors, il existe une
grammaire G générant L telle que toutes les règles de production de G
sont de type A  BC ou A  a. Ici A, B, C sont des symboles non-
terminaux et a est un symbole terminal.
Remarque :
Signalons qu’en rajoutant la règle de production A  , nous sommes
en mesure de générer tous les langages à contexte libre.

31
Théorème 2.3 (Forme normale d’une grammaire de type 0) :
Soit L un langage de type 0. Alors, il existe une grammaire G générant L
et telle que toutes les règles de production de G sont du type : A  BC,
AB  CD, A  a ou A   . Ce résultat fournit donc une forme
normale pour toute grammaire.
Nous ne donnerons pas la démonstration de ce théorème. Elle consiste
principalement à supprimer dans la grammaire initiale qui génère le
langage, toutes les règles de production qui n’ont pas une forme
correcte, en ajoutant des symboles non-terminaux dans N pour conserver
la même puissance génératrice au langage.

32
Exemple :
Soit la grammaire G = (N, , P, S)
N = {S, A, B},  = {a, b}, P = {S  AB, AB  BA, A  a, B  b}
Exemple :
S  aSa | bSb | 
2.4 Transformations de grammaires
On définit les conditions suivantes
+
sur une grammaire G à contexte libre
G= (N, , P, S).
+
(1) Sans cycle ; il n’existe pas A  N tel que A  A.
(2) Pas de symbole non-terminal inaccessible.

33
 A  N  x, y  (N  )* : S 
* xAy.

(3) Pas de symbole non-terminal improductive


A  N w  * : A  * w.

(3’) Réduite: si P =  ou  A  N, S * A 


* w pour ,  
(N  )*, w  *
(4) Libre de  :   A  N tel que A 
* 
(5) Sans chaîne :   A, B  N tel que A  B dans P
(6) Réversible : A  x, B  x, dans P  A = B
(7) Forme normale : chaque règle est A   ||  2
(8) Forme opérateur : aucune règle n’a la forme AuBCv avec
B  N, C  N

34
(9) Forme normale de Greibach : chaque règle est A  a
a,   (N  )* (G est libre de ).
Proposition :
(a) Pour chaque grammaire à contexte libre G  G’ grammaire à
contexte libre telle que L(G’) = L(G) et G’ satisfait (1) ou (2) ou
(3) ou (3’) ou (5) ou (6) ou (7) ou (8).
(b) Pour chaque grammaire à contexte libre G,  G’ grammaire à
contexte libre telle que G’ satisfait (4) ou (9) et
L(G’) = L(G) \ {} si   L(G)
L(G’) = L(G) sinon

35

Vous aimerez peut-être aussi