Vous êtes sur la page 1sur 30

Introduction aux grammaires et aux automates

Introduction
La linguistique mathématique s'intéresse aux langages formels; le problème de définir un
modèle pour des langages formels est primordial, dans le cas des langages finis, la solution est simple,
puisqu'il suffit d'énumérer tous les mots du langage; par contre dans le cas des langages infinis, il est
nécessaire d'avoir des résultats plus évolués. Dans ce contexte, il existe deux classes de méthodes, à
savoir les grammaires formelles et les automates.
I. Grammaire formelle
Une grammaire est un système de substitution ou un système de réécriture ou un système de
remplacement (Elles permettent de remplacer certains sous-mots par d'autres sous-mots). Un système
de substitution est un ensemble de règles qui permettent de remplacer certains sous-mots par d'autres
sous-mots.
La notion de Grammaire et de Classification des langages a été introduite par Naom Chomsky
en 1956.
a) Définition d'une grammaire formelle
Une grammaire formelle est un quadruplet G=<T, N, S, P> où
T : représente un ensemble fini non vide appelé alphabet terminal.
N : représente un ensemble fini non vide appelé alphabet non-terminal. T et N doivent être
disjoints.
S : est un symbole particulier appelé axiome. 𝑆 ∈ 𝑁.
+ ∗
P : est un ensemble de production. 𝑃 ⊂ 𝑇⋃𝑁 × 𝑇⋃𝑁
Remarques:
- Les éléments de T sont appelés lettres terminales. Ils sont désignés par des lettres minuscules
de l'alphabet latin.
- Les éléments de N sont appelés lettres non-terminales. Ils sont désignés par des lettres
majuscule de l'alphabet latin.
- Les éléments de P sont appelés règles de production (ou règles de réécriture). Une règle de
production est un couple (𝛼, 𝛽) ∈ 𝑇⋃𝑁 + × 𝑇⋃𝑁 ∗ . Il existe plusieurs manières de noter une règle
de production:
(𝛼, 𝛽) ∈ 𝑃 est exprimé par 𝛼 ⟶ 𝛽 (𝛼 est appelé prédécesseur et 𝛽 est appelé successeur) ou
par < 𝛼 >∷=< 𝛽 > (notation BNF (Backus-Naur) utilisée dans les langages de programmation).
b) Définition
+
Soit une grammaire G=<T,N,S,P>; soit 𝜋1 ∈ 𝑇⋃𝑁 . On dit que 𝜋1 produit de manière directe
un mot 𝜋2 ∈ 𝑇⋃𝑁 ∗ si et seulement si :
∃ 𝛼 ′ , 𝛼 ′′ , 𝜔 ∈ 𝑇⋃𝑁 ∗ , 𝜇 ∈ 𝑇⋃𝑁 +
/ 𝜋1 = 𝛼 ′ 𝜇 𝛼 ′′ ; 𝜋2 = 𝛼 ′ 𝜔 𝛼 ′′ et on a la règle de production
𝜇 ⟶ 𝜔.
Exemple:
Soient les deux règles de production { 𝑎𝐵 ⟶ 𝑎𝑏𝑏 , 𝑎𝐴𝑐 ⟶ 𝑐𝑎 } :
𝜋1 = 𝑐𝑎𝐵𝑏𝑎𝐴𝑐𝐴𝑐 ⊢ 𝜋2 = 𝑐𝑎𝑏𝑏𝑏𝑎𝐴𝑐𝐴𝑐 ⊢ 𝑐𝑎𝑏𝑏𝑏𝑐𝑎𝐴𝑐 ⊢ 𝜋𝑛 = 𝑐𝑎𝑏𝑏𝑏𝑐𝑐𝑎
𝜋1 ⊢ 𝜋2 (directe).
𝜋1 ⊢∗𝐺 𝜋𝑛 (indirecte).
c) Dérivation indirecte
Soit une grammaire G=<T,N,S,P>. Un mot 𝜋0 ∈ 𝑇⋃𝑁 + produit d'une manière indirecte
𝜋𝑛 ∈ 𝑇⋃𝑁 ∗ si et seulement s'il existe une séquence finie de mots 𝜋1 , 𝜋2 , … 𝜋𝑛−1 tel que ∀ 𝑖 ∈
0,1, . . , 𝑛 − 1 𝜋𝑖 ⊢ 𝜋𝑖+1 .
𝜋0 ⊢ 𝜋1 ⊢ 𝜋2 ⊢. . … . ⊢ 𝜋𝑛 et on note 𝜋0 ⊢∗ 𝜋𝑛 .
La séquence 𝜋0 , 𝜋1 . . 𝜋𝑛 est appelée dérivation du mot 𝜋𝑛 et n est la longueur de la dérivation.
Remarque:

Par définition, nous disons que tout mot 𝜋 ∈ 𝑇⋃𝑁 produit le même mot 𝜋 par une dérivation
de longueur nulle.
d) Définition du langage engendré par une grammaire
Soit G=<T,N,S,P> une grammaire. Le langage engendré (généré) par la grammaire G est :
𝐿 𝐺 = {𝜔 ∈ 𝑇 ∗ /𝑆 ⊢∗𝐺 𝜔}
Le langage engendré par G est l'ensemble des mots terminaux dérivés indirectement à partir de
l'axiome S.
Exemple:
Soit G=<T,N,S,P> tels que: 𝑇 = {𝑎, 𝑏} , 𝑁 = {𝑆}, 𝑃 = {𝑆 ⟶ 𝑎𝑆𝑎 , 𝑆 ⟶ 𝑏𝑆𝑏, 𝑆 ⟶ 𝜀}
Est-ce que 𝑎𝑏𝑏𝑏𝑎 ∈ 𝐿(𝐺)? 𝑎𝑏𝑎𝑎 ∈ 𝐿(𝐺)? 𝑎𝑏𝑏𝑎 ∈ 𝐿(𝐺)?
Solution:
1) 𝑆 ⊢ 𝑎𝑆𝑎 ⊢ 𝑎𝑏𝑆𝑏𝑎 ⊢ 𝑎𝑏𝑏𝑆𝑏𝑏𝑎 ⊢ 𝑎𝑏𝑏𝑏𝑏𝑎; d'ou 𝑎𝑏𝑏𝑏𝑎 ∉ 𝐿(𝐺)
2) 𝑆 ⊢ 𝑎𝑆𝑎 ⊢ 𝑎𝑏𝑆𝑏𝑎 ⊢ 𝑎𝑏𝑏𝑎; d'ou 𝑎𝑏𝑎𝑎 ∉ 𝐿(𝐺)
3) 𝑆 ⊢ 𝑎𝑆𝑎 ⊢ 𝑎𝑏𝑆𝑏𝑎 ⊢ 𝑎𝑏𝑏𝑎; d'ou 𝑎𝑏𝑏𝑎 ∈ 𝐿(𝐺)
Le langage engendré par cette grammaire est 𝐿 𝐺 = {𝜔𝜔𝑅 / 𝜔 ∈ 𝑇 ∗ }.
e) Définition
Deux grammaires G et G' sont équivalente si et seulement si elles génèrent le même langage :
𝐺 ≡ 𝐺 ′ ⟺ 𝐿 𝐺 = 𝐿(𝐺 ′ )
Exemple 1:
𝐺 =< 0,1 , 𝑆, 𝐴 , 𝑆, {𝑆 ⟶ 0𝑆/1𝐴, 𝐴 ⟶ 1𝐴/1} 𝐺′ =< 0,1 , 𝑆 ′ , 𝐴 , 𝑆′, {𝑆′ ⟶ 𝑆 ′ 1/𝐴1, 𝐴 ⟶
𝑆 ⊢ 0𝑆 ⊢ 00𝑆 ⊢ 0 … 0𝑆 ⊢ 0 … 01𝐴 ⊢ 0 … 01. .1 𝐴0/𝜀}

Donc 𝐿 𝐺 = {0𝑖 1𝑗 / i≥0 et j>1} 𝑆 ′ ⊢ 𝑆 ′ 1 ⊢ 𝑆 ′ 11 ⊢ 𝑆 ′ 1. .1 ⊢ 𝐴1. .1 ⊢ 𝐴01. .1 ⊢


𝐴001. .1 ⊢ 0. .01. .1
Donc 𝐿 𝐺′ = {0𝑖 1𝑗 / i≥0 et j≥1}
D'où G et G' ne sont pas équivalente.
Exemple 2:
𝐺 =< 𝑎, 𝑏 , 𝑆 , 𝑆, {𝑆 ⟶ 𝑎𝑏𝑆/𝜀} 𝐺′ =< 𝑎, 𝑏 , 𝑆 ′ , 𝑆′, {𝑆′ ⟶ 𝑆 ′ ab/𝜀}
𝑆 ⊢ 𝑎𝑏𝑆 ⊢ 𝑎𝑏𝑎𝑏𝑆 ⊢ 𝑎𝑏 … 𝑎𝑏𝑆 ⊢ 𝑎𝑏 … 𝑎𝑏 𝑆 ′ ⊢ 𝑆 ′ 𝑎𝑏 ⊢ 𝑆 ′ 𝑎𝑏𝑎𝑏 ⊢ 𝑆 ′ 𝑎𝑏. . 𝑎𝑏 ⊢ 𝑎𝑏. . . 𝑎𝑏
Donc 𝐿 𝐺 = {(𝑎𝑏)𝑛 / n≥0 } Donc 𝐿 𝐺′ = {(𝑎𝑏)𝑛 / n≥0 }
D'où G et G' sont équivalente.
Exercice d'application
a)Trouver tous les mots qui se dérivent à partir de l'axiome S à un ordre 3 dans la grammaire
G =< T = a, b , N = S , S, P = S ⟶ aSb/ε > .

b) Soit G =< a, b, c , S, T, U , S, P >, telle que

1 2
P: S ⟶aSbT / 𝑐𝑈

3 4
T ⟶ cT / 𝑐

5 6
U ⟶ Uc / 𝑐

b-1. Trouver deux différentes dérivations selon cette grammaire de TU en ccc.


b-2. Trouver une dérivation selon cette grammaire de S à aaaSbcbcbccc.
b-3. Écrire tous les mots appartenant à T* qui se dérivent selon G à un ordre <=5.

c) Donner les grammaires qui génèrent les langages suivants:


𝐿1 = {𝑎∗ 𝑏 ∗ }={𝑎𝑖 𝑏 𝑗 / i,j≥0 }
𝐿2 = {𝜔 ∈ 0,1 ∗ / 𝜔 ≡ 0[2]}
𝐿3 = {𝜔 ∈ 𝑎, 𝑏 ∗ / 𝜔 𝑎 = 2𝑝 + 1 , 𝜔 𝑏 = 2𝑝 }

Arbre de dérivation
Soit G=<T,N,S,P>
T={a, b} ; N={S, T}
P={

1 2
S ⟶abT / baT

3 4
T ⟶ bT / 𝜀
}

f, g, h sont des mots ∈ 𝑎, 𝑏 / 𝑓 = 𝜖; 𝑔 = 𝑎𝑏𝑏; 𝑕 = 𝑏𝑎𝑎𝑏
1) 𝑓, 𝑔, 𝑕 ∈? 𝐿(𝐺)
*) Pour 𝑓 = 𝜖; impossible car il n’existe pas de règle qui donne le mot vide à partir de S, d’où
𝑓 ∉ 𝐿(𝐺)
*) pour g=abb ; 𝑆 ⊢1 𝑎𝑏𝑇 ⊢3 𝑎𝑏𝑏𝑇 ⊢4 𝑎𝑏𝑏 ⇒ 𝑆 ⊢∗𝐺 𝑎𝑏𝑏 𝑑′ 𝑜ù 𝑔 ∈ 𝐿(𝐺)
On peut travailler avec les dérivations successives ou par la construction de l’arbre de
dérivation :
Les symboles terminaux regroupés forment le mot g, donc
𝑔 ∈ 𝐿(𝐺)

*) pour h=baab
a) par dérivation successive b) par construction de l’arbre de dérivation
𝑆 ⊢2 𝑎𝑏𝑇 ⊢? 𝑎𝑏?
On n’arrive pas à construire
Blocage, donc 𝑕 ∉ 𝐿(𝐺) l’arbre.

Remarque :
- On ne peut conclure qu’un mot n’appartient pas au langage engendré par une grammaire
qu’après avoir parcouru toutes les règles de production.
- Un mot est dit ambigu s’il existe plusieurs arbres de dérivation pour ce mot.
- Une grammaire est dite ambigüe s’il existe au moins un mot ambigu engendré par cette
grammaire.
Exemple :
Soit G=<T,N,S,P> tel que T={a, b} ; N={S, T} et
P={ 𝑆 ⟶ 𝑆𝑏𝑆/𝑆𝑐𝑆/𝑎 }
Construisons une arbre de dérivation pour le mot acaba

Le mot 𝑎𝑐𝑎𝑏𝑎 ∈ 𝐿(𝐺) et il a plusieurs arbres de dérivation, donc il est ambigu, d’où G est
ambigüe.
II. Classification des grammaires et des langages par Chamsky

Définition

1. Grammaire de type 0: Les règles de production ne font l'objet d'aucune restriction, cette
grammaire est dite de type 0.
2. Grammaire de type 1: Toute production dans P est de la forme :
𝑠 → 𝜀 𝑜𝑢 𝛾 ′ 𝐴 𝛾 ′′ → 𝛾 ′ 𝑤 𝛾 ′′ 𝑎𝑣𝑒𝑐 𝛾 ′ , 𝛾 ′′ ∈ (𝑇 ∪ 𝑁)∗ , 𝐴 ∈ 𝑁 , 𝑤 ∈ (𝑇 ∪ 𝑁)∗
alors cette grammaire est dite sensible au contexte ou à contexte lié ou de type 1
3. Grammaire de type 2: toute production de P est de la forme:
𝐴 → 𝑤 𝑜𝑢 𝐴 ∈ 𝑁 𝑒𝑡 𝑤 ∈ (𝑇 ∪ 𝑁) ∗ Cette grammaire est appelé grammaire à contexte
libre ou algébrique ou de type 2
4. Grammaire de type 3 : toute production de P est de la forme

𝐴 → 𝑤𝐵/𝑤 𝑜𝑢 𝐴 → 𝐵𝑤/𝑤 𝑎𝑣𝑒𝑐 𝐴, 𝐵 ∈ 𝑁 𝑒𝑡 𝑤 ∈ 𝑇 ∗

Remarque:
 G est appelée régulière à droite si 𝐴 → 𝑤𝐵/𝑤
 G est appelée régulière à gauche si 𝐴 → 𝐵𝑤/𝑤

Exemple

1) G: 𝑎𝐴 → 𝐴𝑎 type 0.
2) G: 𝑎𝑐𝐴𝑏 → 𝑎𝑐𝑐𝐴𝑏 𝑎𝑣𝑒𝑐 𝛾 = 𝑎𝑐, 𝛾 ′′ = 𝑏, 𝑤 = 𝑐𝐴 ∈ (𝑇 ∪ 𝑁)∗ type1
3) 𝑆 → 𝑎𝐶𝑏 type 2 𝐴 → 𝑤 /𝑤 ∈ (𝑇 ∪ 𝑁) ∗
4) 𝐴 → 𝑎𝑏𝐶 type3 𝐴 → 𝑤 /𝑤 ∈ 𝑇 ∗

De quel type est cette grammaire ?

Cette grammaire est de type 0 car aucune grammaire de type 1 ne comprend la règle 1, aucune
grammaire de type 2 ne peut comprendre les productions 2 et 1 et aucune grammaire de type 3
ne peut comprendre la règle 3.

Conclusion:

a) En général, toute règle de production admise dans les grammaires de type i=1,2,3 est
aussi admise dans les grammaires de type i-1, d'une exception que les grammaires à
contexte libre (type 2) peuvent comprendre les production de type 𝐴 → 𝜀 (type 1), par
contre les grammaire de type 1(liées) n'admettent qu'une seule règle de production de
la forme 𝑠 → 𝜀
b) Un langage engendré par une grammaire de type i est appelé langage de type i

Exercice:
a) trouver la grammaire qui génère le langage suivant 𝐿𝐿 𝐺 = 𝑎𝑖 𝑏 2𝑖 𝑐 𝑘 /𝑖 ≥ 0, 𝑘 ≥ 0
1. 𝑠 → 𝐴𝐵
2. 𝐴 → 𝑎𝐴𝑏𝑏/𝜀𝜀
3. 𝐵 → 𝑐𝐵/𝜀
b) Trouver la grammaire qui génère le langage 𝐿1 = 𝑤 ∈ {0,1}∗ /𝑤 = 2𝑝 (w est divisible par
2)

𝐺 = 𝑇, 𝑁, 𝑆, 𝑃 / 𝑇 = 0,1 ; 𝑁 = {𝑆, 𝐴}

𝑆 → 1𝐴/0

𝐴 → 1𝐴/0/0𝐴
Le système de reconnaissance de langages ( les automates )
Introduction
Un système de Reconnaissance est une machine qui permet de lire un mot à travers ses
différentes manipulations. Cette machine appelée "automate" permet donc par extension des mots de
reconnaitre un langage.
I. Définition formelle d'un automate
Un automate comprend au minimum :
 Un alphabet en entrée noté 𝕍;
 Un ensemble d'états noté 𝑆;
 Un état initial noté 𝑆0 ;
 Une fonction de transition notée 𝛿 (Ensemble d'instructions);
 Un ensemble d'états finals noté ℱ.
Remarque:
Pour chaque automate on définit le domaine et le codomaine de la fonction de transition 𝛿 qui
permet d'exprimer la transition d'un état vers un autre en lisant une lettre de 𝕍.
Notation:
Un automate est noté par : 𝒜 < 𝕍, 𝑆 , 𝑆0 , 𝛿, ℱ >.
II. Langage et Automate
Soit A un automate. Le langage reconnu par un automate, noté LL(A), est l'ensemble des mots
reconnus par cet automate.
III. Classification des automates
À chaque type de grammaire, donc de langage, dans la hiérarchie de Chomsky correspond un
type d'automate comme système de reconnaissance du langage.
Remarque:
𝒜 𝑒𝑠𝑡 é𝑞𝑢𝑖𝑣𝑎𝑙𝑒𝑛𝑡 à 𝒜 ′ ⟺ 𝐿𝐿 𝒜 = 𝐿𝐿(𝒜 ′ ).
 Type 3 : L'automate qui reconnait les langages de type 3 (rationnels) est l'automate
d'état fini (AEF).
 Type 2 : L'automate qui reconnait les langages de type 2 (algébriques) est l'automate à
pile de mémoire (APM).
 Type 1 : L'automate qui reconnait les langages de type 1 (contextuels) est l'automate à
borne linéaire (ABL).
 Type 0 : L'automate qui reconnait les langages de type 0 est la machine de Turing
(MT).
Les automates d'états finis ( les langages réguliers )
I. Automate de Rabin-Scott
Définition:
Un automate de Rabin-Scott (simple et non déterministe) est un système quintuplet:
𝒜 < 𝕍, 𝑆 , ℱ, 𝑆0 , 𝛿 >
 𝕍: alphabet (lettres du langage);
 𝑆: ensemble d'états;
 ℱ ⊆ 𝑆: ensemble d'états finals.
 𝑆0 ∈ 𝑆: l'état initial;
 𝛿 ⊆ 𝕍 × 𝑆 × 𝑆 : ensemble des instructions;
Les automates de Rabin-Scott sont souvent représentés par des graphes orientés dont les
sommets correspondent aux états et les arcs aux instructions :

- L'état initial est représenté par

- Les états finals sont représentés par


- L'arc ayant comme extrémité initial 𝑆𝑖 et final 𝑆𝑘 et étiqueté par 𝑎 ∈ 𝕍 représente l'instruction
(𝑎, 𝑆𝑖 , 𝑆𝑘 )

Exemple: 𝒜 < 𝕍, 𝑆 , ℱ, 𝑆0 , 𝛿 >


𝕍 = {𝑎, 𝑏}
𝑆 = {𝑆0 , 𝑆1 , 𝑆2 , 𝑆3 , 𝑆4 , 𝑆5 }
ℱ = {𝑆0 , 𝑆1 , 𝑆3 }
𝛿
= { 𝑏, 𝑆0 , 𝑆0 , 𝑎, 𝑆0 , 𝑆1 , 𝑎, 𝑆0 , 𝑆3 , 𝑏, 𝑆1 , 𝑆1 ,
𝑏, 𝑆1 , 𝑆2 , 𝑏, 𝑆2 , 𝑆3 , 𝑎, 𝑆0 , 𝑆3 , 𝑎, 𝑆4 , 𝑆5 }

Les états 4 et 5 sont inaccessibles.


𝑎, 𝑆0 , 𝑆1 ∈ 𝛿 ⇔ 𝑆0 ⊢𝐴𝑎 𝑆1 : Signifie que la lettre a fait passer l'automate A de manière directe
de l'état S0 à l'état S1. Elle est appelée relation de transition directe et elle se prolonge facilement sur
l'ensemble des mots d'entrées.
On dit que le mot 𝜔 = 𝑎1 𝑎2 … . 𝑎𝑛 fait passer l'automate A d'une manière indirecte de l'état Si
vers l'état Sk (𝑆𝑖 ⊢𝐴𝜔∗ 𝑆𝑘 ) en n pas s'il existe une séquence d'états S1,S2,...Sk tel que:
𝑎 𝑎 𝑎
𝑆𝑖 ⊢𝐴 1 𝑆1 ⊢𝐴 2 𝑆2 … … . ⊢𝐴 𝑛 𝑆𝑘
Cas particulier: 𝑆𝑖 ⊢𝐴𝜖 ∗ 𝑆𝑖
II. Langage accepté par un automate Rabin-Scott
Soit l'automate < 𝑉, 𝑆 , ℱ, 𝑆0 , 𝛿 > . Le langage accepté par l'automate A est l'ensemble
𝐿𝐿 𝒜 = {𝜔 ∈ 𝕍∗ /𝑆0 ⊢𝐴𝜔∗ 𝑆𝑘 𝑒𝑡 𝑆𝑘 ∈ ℱ}
Exemple:
Le langage accepté par l'automate de l'exemple précédent :
𝐿𝐿 𝐴 = {𝑏 𝑖 𝑎𝑏 𝑗 𝑏𝑏⋃𝑏 𝑖 𝑎⋃𝑏 𝑖 ⋃𝑏 𝑖 𝑎𝑏 𝑗 /𝑖, 𝑗 ≥ 0}
Est-ce que 𝑏𝑎𝑏 ∈ 𝐿𝐿(𝐴)?
𝑆0 ⊢𝑏 𝑆0 ⊢𝑎 𝑆1 ⊢𝑏 𝑆1 𝑒𝑡 𝑆1 ∈ ℱ ⟹ 𝑏𝑎𝑏 ∈ 𝐿𝐿(𝐴)
L'automate accepte tous les mots qui le font passer de l'état initial à l'un des états finals.
Exercice:

- Est-ce que 𝑏𝑎𝑏 ∈ 𝐿𝐿(𝐴)?


- Déterminer LL(A).
III. Déterminisation d'un automate R-S:
Définition 1: Deux automates A et B sont dits équivalent si et seulement si ils reconnaissent le
même langage. 𝒜 ≡ 𝐵 ⟺ 𝐿𝐿 𝒜 = 𝐿𝐿(𝐵).
Définition 2: L'automate R-S est dit déterministe lorsque son ensemble d'instructions est une
application fonctionnelle (fonction) de 𝕍 × 𝑆 ⟶ 𝑆.( cad il n'y a pas de choix).
Exemple: L'automate précédent est non-déterministe car il y a un choix où par exemple si on
est dans l'état S1 et on lait la lettre a alors on peut soit rester dans le même état, soit passer à l'état S2.
Proposition: Pour tout automate de Rabin-Scott il existe un autre automate déterministe
équivalent:
L'automate déterministe équivalent à 𝒜 < 𝕍, 𝑆 , ℱ, 𝑆0 , 𝛿 > est l'automate
𝒜′ < 𝕍, 𝑆′ , ℱ′, 𝑆0 , 𝛿′ > tels que:
a) 𝑆 ′ = ℙ(𝑆); (|𝑆 ′ | = 2|𝑆| )
b) ℱ ′ = {𝐸 ∈ 𝑆 ′ / 𝐸⋂ℱ ≠ ∅}
c) 𝛿 ′ = 𝑎, 𝑆1′ , 𝑆2′ / 𝑎∈𝕍, 𝑆1′ ∈𝑆 ′ 𝑒𝑡 𝑆2′ ={ 𝑠2 ∈𝑆 / ∃ 𝑠1 ∈𝑆1′ 𝑒𝑡 𝑎, 𝑠1 , 𝑠2 ∈ 𝛿 }
Exemple:
Rendre les deux automates précédents déterministes (étape1: simplification - étape 2: table de
transitions).

Exemple 2 : -Donner le langage reconnu par l'automate suivant.


- Rendre l'automate déterministe.
- Retrouver le langage accepté par l'automate déterministe équivalent.
- le mot aba appartient-t-il au langage reconnu par cet automate?

Proposition 2: Soit l'automate 𝒜′ défini dans la proposition précédente.


∀𝜔 ∈ 𝕍∗ 𝑜𝑛 𝑎: 𝑆0 ⊢𝐴𝜔′ ∗ 𝑆𝑘′ ⟺ 𝑆𝑘′ = {𝑆𝑘 ∈ 𝑆 /𝑆0 ⊢𝐴𝜔∗ 𝑆𝑘 }
Preuve: Par récurrence sur |𝜔|.
 pour 𝑛 = 0 ⟹ 𝜔 = 𝜀 :
𝑆0 ⊢𝐴𝜀 ′ ∗ 𝑆𝑘′ ⟺ 𝑆𝑘′ = 𝑆0 ⟺ 𝑆𝑘′ = {𝑆𝑘 ∈ 𝑆 /𝑆0 ⊢𝐴𝜀 ∗ 𝑆𝑘 }
 supposons la proposition est vraie à l'ordre n et démontrons la à l'ordre n+1
𝜔𝑎 𝑎𝑣𝑒𝑐 𝜔 = 𝑛
𝑆0 ⊢𝐴𝜔𝑎 ′ ′ ′ 𝜔 ′ 𝑎 ′
′ ∗ 𝑆𝑘 ⟺ ∃𝑆𝑗 ∈ 𝑆 / 𝑆0 ⊢𝐴′ ∗ 𝑆𝑗 ⊢𝐴′ 𝑆𝑘

⟺ ∃𝑆𝑗′ ∈ 𝑆 ′ / 𝑆𝑗′ = 𝑆𝑗 ∈ 𝑆 /𝑆0 ⊢𝐴𝜔∗ 𝑆𝑗 𝑒𝑡 𝑆𝑘′ = {𝑆𝑘 ∈ 𝑆 /∃ 𝑠𝑗 ∈𝑆𝑗′ , 𝑒𝑡 𝑠𝑗 ⊢𝐴𝑎 𝑆𝑘 }


⟺ 𝑆𝑘′ = {𝑆𝑘 ∈ 𝑆 /∃ 𝑆𝑗 ∈𝑆, 𝑒𝑡 𝑆0 ⊢𝐴𝜔∗ 𝑆𝑗 ⊢𝐴𝑎 𝑆𝑘 } ⟺ 𝑆𝑘′ = {𝑆𝑘 ∈ 𝑆 /𝑆0 ⊢𝐴𝜔𝑎
∗ 𝑆𝑘 }
Remarque: L'automate 𝒜′ est déterministe par construction. En plus les automates 𝒜 et 𝒜′
sont équivalents.
Preuve d'équivalence:
𝜔 ∈ 𝐿𝐿 𝒜 ′ ⟺ 𝑆0 ⊢𝐴𝜔′ ∗ 𝑆𝑘′ 𝑒𝑡 𝑆𝑘′ ∈ ℱ ′ ⟺ [𝑆𝑘′ = 𝑆𝑘 ∈ 𝑆 /𝑆0 ⊢𝐴𝜔∗ 𝑆𝑘 𝑒𝑡 𝑆𝑘′ ∩ ℱ ≠ ∅]
⟺ ∃𝑆𝑘 ∈ ℱ 𝑒𝑡 𝑆0 ⊢𝐴𝜔∗ 𝑆𝑘 ⟺ 𝜔 ∈ 𝐿𝐿 𝒜

III. Automate généralisé de R-S


Définition: Un automate généralisé de R-S est un quintuplet : 𝒜𝑔 < 𝑉, 𝑆𝑔 , ℱ𝑔 , 𝑆0 , 𝛿𝑔 >

 𝕍: alphabet (lettres du langage);


 𝑆𝑔 : ensemble d'états;
 ℱ𝑔 ⊆ 𝑆𝑔 : ensemble d'états finals.
 𝑆0 ∈ 𝑆𝑔 : l'état initial;
 𝛿𝑔 ⊆ 𝕍∗ × 𝑆𝑔 × 𝑆𝑔 : ensemble des instructions;
Dans un automate simple toute transition directe est causée par une lettre. Pour un automate
généralisé les transitions peuvent être causées par des mots. Les transitions causées par le mot vide
sont dites spontanées.
Exemple:

Proposition : Pour tout automate généralisé de R-S 𝒜𝑔 < 𝑉, 𝑆𝑔 , ℱ𝑔 , 𝑆0 , 𝛿𝑔 > il existe un


automate simple 𝒜 < 𝕍, 𝑆 , ℱ, 𝑆0 , 𝛿 > équivalent.
a) Eliminer les transitions causées par un mot non vide :
Pour toute transition de type 𝑆𝑖 ⊢𝐴𝜔𝑔 𝑆𝑘 avec 𝜔 > 1, 𝜔 = 𝑎1 𝑎2 … 𝑎𝑛
𝑎 𝑎 𝑎 𝑎
On ajoute les états 𝑆1′ , 𝑆2′ , … 𝑆𝑛−1

∉ 𝑆𝑔 et les transitions 𝑆𝑖 ⊢𝐴 1 𝑆1′ ⊢𝐴 2 𝑆2′ ⊢𝐴 3 … ⊢𝐴 𝑛 𝑆𝑘
On répète cette opération pour toutes les transitions causées par des mots. L’automate obtenu est
équivalent à l’automate généralisé et toutes ces transitions sont causées que par des lettres ou par le
mot vide. Cet automate est appelé partiellement généralisé.
Exemple : Soit l’automate généralisé suivant. Trouver un automate partiellement généralisé
équivalent.

Automate généralisé
Automate partiellement généralisé
b) Eliminer les transitions spontanées :
A partir de l’automate partiellement généralisé 𝒜𝑝 < 𝑉, 𝑆𝑝 , ℱ𝑝 , 𝑆0 , 𝛿𝑝 > on construit
l’automate simple 𝒜 < 𝕍, 𝑆 , ℱ, 𝑆0 , 𝛿 > :
 𝑆𝑖 ∈ ℱ ⟺ (𝑆𝑖 ⊢𝐴𝜀 𝑝 𝑆𝑘 𝑒𝑡 𝑆𝑘 ∈ ℱ𝑝 )
 𝑆𝑖 ⊢𝐴𝑎 𝑆𝑘 ∈ 𝛿 ⟺ ( 𝑆𝑖 ⊢𝐴𝑎𝑝 𝑆𝑘 ∈ 𝛿𝑝 𝑜𝑢 ∃𝑆𝑗 ∈ 𝑆 / 𝑆𝑖 ⊢𝐴𝜀 𝑝 𝑆𝑗 ⊢𝐴𝑎𝑝 𝑆𝑘 ∈ 𝛿𝑝 )

𝜔 ∈ 𝐿𝐿(𝒜𝑝 ) si et seulement s’il existe une suite de transitions dans 𝒜𝑝 de la forme suivante :
𝑎 𝑎 𝑎
𝑆0 ⊢𝐴𝜀 𝑝 𝑆1′ ⊢𝐴𝑝1 𝑆1 ⊢𝐴𝜀 𝑝 𝑆2′ ⊢𝐴𝑝2 𝑆2 … ⊢𝐴𝑝𝑛 𝑆𝑛 ⊢𝐴𝜀 𝑝 𝑆𝑛′ et 𝑆𝑛′ ∈ ℱ𝑝

D’où, on peut en faire correspondre la suite de transitions suivante :


𝑎 𝑎 𝑎
𝑆0 ⊢𝐴 1 𝑆1 ⊢𝐴 2 𝑆2 … ⊢𝐴 𝑛 𝑆𝑛 et 𝑆𝑛 ∈ ℱ , donc 𝜔 ∈ 𝐿𝐿(𝒜)
D’où 𝒜𝑔 ≃ 𝒜𝑝 ≃ 𝒜
Exemple : Soit l’automate partiellement généralisé précédent. Trouver un automate simple
équivalent.

Automate partiellement généralisé


Automate simple
IV. Automate de R-S et grammaire régulière à droite
Proposition : Pour toute grammaire régulière à droite 𝐺 < 𝒯, 𝒩, 𝒮, 𝒫 >, il existe un automate
généralisé de R-S 𝒜 < 𝕍, 𝕊, ℱ, 𝑆0 , 𝛿 > équivalent.
𝕍= 𝒯
𝕊 = 𝒩 ∪ {𝑆𝑓 }

ℱ = {𝑆𝑓 }

𝑆0 = 𝒮
𝐴 →𝐺 𝜔𝐵 ⟺ 𝐴 ⊢𝐴𝜔 𝐵
𝛿:
𝐴 →𝐺 𝜔 ⟺ 𝐴 ⊢𝐴𝜔 𝑆𝑓
Exemple : Soit 𝐺 < 𝒯, 𝒩, 𝒮, 𝒫 > avec 𝒫 = { 𝒮 ⟶ 𝑎𝑏𝐴; 𝐴 ⟶ 𝑐𝒮; 𝐴 ⟶ 𝑐𝑏|𝐵; 𝐵 ⟶ 𝜀 }
Chercher un automate équivalent à cette grammaire.
Solution : 𝒜 < 𝕍, 𝕊, ℱ, 𝑆0 , 𝛿 > tels que
𝕍 = {𝑎, 𝑏, 𝑐}
𝕊 = {𝒮, 𝐴, 𝐵, 𝑆𝑓 }

ℱ = {𝑆𝑓 }

𝑆0 = 𝒮
𝛿 = { 𝑆0 ⊢𝑎𝑏 𝑐 𝑐𝑏 𝜀 𝜀
𝒜 𝐴; 𝐴 ⊢𝒜 𝑆0 ; 𝐴 ⊢𝒜 𝑆𝑓 ; 𝐴 ⊢𝒜 𝐵; 𝐵 ⊢𝒜 𝑆𝑓 }

Proposition : Pour tout automate généralisé de R-S 𝒜 < 𝕍, 𝕊, ℱ, 𝑆0 , 𝛿 > , il existe une
grammaire régulière à droite 𝐺 < 𝒯, 𝒩, 𝒮, 𝒫 > équivalente.
𝒯=𝕍
𝒩=𝕊
𝒮 = 𝑆0
𝑆𝑖 ⊢𝐴𝜔 𝑆𝑗 ⟺ 𝑆𝑖 →𝐺 𝜔𝑆𝑗
𝑃:
𝑆𝑓 ∈ ℱ ⟺ 𝑆𝑓 →𝐺 𝜀

Exercice : Soit 𝒜 < 𝕍, 𝕊, ℱ, 𝑆0 , 𝛿 > suivant :

Chercher une grammaire équivalente à cet automate.


Conclusion : La classe des langages générés par les grammaires régulières à droite est égale à la
classe des langages reconnus par les automates de R-S.

Automate généralisé ⇆ Grammaire régulière à droite

↑↓
Automate de R-S ⇆ Grammaire régulière à droite simple

Remarque : Une grammaire régulière à droite simple a toutes les productions sous la forme de
𝐴 →𝐺 𝑎𝐵|𝑎 𝑎𝑣𝑒𝑐 𝐴, 𝐵 ∈ 𝒩 𝑒𝑡 𝑎 ∈ 𝒯.
V. Propriété de la fermeture de la classe des langages réguliers
Proposition : la classe des langages réguliers est fermée par rapport à :
 La concaténation ;
 L’union ;
 La complémentation ;
 L’intersection ;
 L’opération miroir ;
 L’itération et l’itération positive ;
 Homomorphisme.
Critères de régularité des langages
I. Langage régulier
Définition:
Soient un langage 𝐿 ∈ 𝕍∗ et un mot 𝜔 ∈ 𝕍∗ . Une dérivée à droite du langage 𝐿 par rapport au
mot 𝜔 est le langage:
𝐿//𝜔 = {𝑧 ∈ 𝕍∗ /𝜔𝑧 ∈ 𝐿}

Exemple:
 𝐿1 = {0011, 0111, 0001, 1000}
𝐿1//0 = {011, 111, 001} 𝐿1//1 = {000}
𝐿1//01 = {11} 𝐿1//11 = { }
 𝐿2 = {0, 001, 1, 1001, 11001, 010}
𝐿2//0 = {𝜀, 01, 10} 𝐿2//1 = {𝜀, 001, 1001}
𝐿2//01 = {0} 𝐿2//011 = { }
 𝐿3 = {𝑎𝑖 𝑏 𝑗 / 𝑖, 𝑗 ≥ 0}
𝐿3//𝑎 = {𝑎𝑖 𝑏 𝑗 / 𝑖, 𝑗 ≥ 0} 𝐿3//𝑏 = {𝑏 𝑗 / 𝑗 ≥ 0}
𝐿3//𝑎𝑏 = {𝑏 𝑗 / 𝑖, 𝑗 ≥ 0} 𝐿3//ba = { }
Propriétés:
La dérivation des langages par rapport aux mots vérifie les propriétés suivantes:
{𝜀} 𝑠𝑖 𝑎𝑖 = 𝑎𝑗
a. {𝑎𝑖 }//𝑎𝑗 =
∅ 𝑠𝑖𝑛𝑜𝑛
b. (∪𝑛𝑖=1 𝐿𝑖 )//𝑎 =∪𝑛𝑖=1 (𝐿𝑖 //𝑎 )
{𝜀} 𝑠𝑖 𝜀 ∈ 𝐿1
c. (𝐿1 . 𝐿2 )//𝑎 = 𝐿1 //𝑎 . 𝐿2 ∪ 𝜑 𝐿1 . 𝐿2 //𝑎 𝑜ù 𝜑 𝐿1 =
∅ 𝑠𝑖𝑛𝑜𝑛
d. (𝐿∗ )//𝑎 = 𝐿//𝑎 . 𝐿∗
e. 𝐿//(𝜔 1 .𝜔 2 ) = (𝐿//𝜔 1 )//𝜔 2

Proposition:
Pour tout langage régulier 𝐿 ∈ 𝕍∗ , le nombre de ses dérivées par rapport aux mots de 𝕍∗ est
fini.
Démonstration:
On a 𝐿 ∈ 𝑟é𝑔∗ ⟺ ∃ 𝒜 < 𝕍, 𝑆 , ℱ, 𝑆0 , 𝛿 >, 𝑢𝑛 𝑎𝑢𝑡𝑜𝑚𝑎𝑡𝑒 𝑑𝑒 𝑅 − 𝑆 𝑑é𝑡𝑒𝑟𝑚𝑖𝑛𝑖𝑠𝑡𝑒 / 𝐿 𝒜 = 𝐿
Soient
𝜔

𝑆0 ⊢𝐴∗1 𝑆𝑗 𝜔 𝑧 𝜔 𝑧
𝜔1 , 𝜔2 ∈ 𝕍 / ∃ 𝑆𝑗 ∈ 𝑆 𝑒𝑡 𝜔 ⟹ ∀𝑧 ∈ 𝕍∗ ∶ 𝑆0 ⊢𝐴∗1 𝑆𝑘 ⟺ 𝑆0 ⊢𝐴∗2 𝑆𝑘 , 𝑎𝑣𝑒𝑐 𝑆𝑘 ∈ ℱ.
𝑆0 ⊢𝐴∗1 𝑆𝑗

Donc 𝜔1 𝑧 ∈ 𝐿 ⟺ 𝜔2 𝑧 ∈ 𝐿 ⟺ 𝑧 ∈ 𝐿//𝜔 1 ⟺ 𝑧 ∈ 𝐿//𝜔 2 ⟺ 𝐿//𝜔 1 = 𝐿//𝜔 2


Conclusion: Les dérivées d'un langage régulier par rapport à tous les mots différents qui font
passer l'automate déterministe acceptant ce langage de l'état initial vers le même état 𝑆𝑗 sont égales.
𝑆𝑗 peut parcourir chacun des états de l'automate. Donc le nombre de dérivées, au plus, est égal
au nombre des états et donc il est fini.
Proposition: (Réciproque)
Tout langage 𝐿 ⊆ 𝕍∗ avec un nombre fini de dérivées par rapport aux mots de 𝕍∗ est régulier.
Démonstration:
Soit 𝒜 < 𝕍, 𝑆 , ℱ, 𝑆0 , 𝛿 > où
 𝑆 = {𝐿//𝜔 , 𝜔 ∈ 𝕍∗ };
 ℱ = {𝑠 ∈ 𝑆 / 𝜀 ∈ 𝑠};
 𝑆0 = 𝐿;
 𝛿: 𝑆𝑖 ⊢𝐴𝑎 𝑆𝑗 ⇔ 𝑆𝑗 = 𝑆𝑖 //𝑎 .

Exemple: 𝐿 = {𝑎𝑖 𝑏 𝑗 / 𝑖, 𝑗 ≥ 0}
Théorème de Nerode
Un langage 𝐿 ⊆ 𝕍∗ est régulier si et seulement si le nombre de ses dérivées par rapport aux
mots de 𝕍∗ est fini.
Exemple: 𝐿 = {𝑎𝑖 𝑏 𝑖 / 𝑖 ≥ 0} est-il régulier?
Démonstration: Par l'absurde
Supposons que L est régulier. Donc le nombre de ses dérivées est fini selon le théorème de
Nerode ⟺ ∃ 𝑖1 , 𝑖2 /𝑖1 ≠ 𝑖2 𝑒𝑡 𝐿//𝑎 𝑖 1 = 𝐿//𝑎 𝑖 2 ⟺ 𝑏 𝑖1 ∈ 𝐿//𝑎 𝑖 2 𝑐𝑎𝑟 𝑏 𝑖1 ∈ 𝐿//𝑎 𝑖 1 ⟺ 𝑎𝑖2 𝑏 𝑖1 ∈ 𝐿.

Absurdité, donc 𝐿 = {𝑎𝑖 𝑏 𝑖 / 𝑖 ≥ 0} n'est pas régulier.


II. Les expressions régulières
Elles sont introduites par Kleen en 1956. C'est la première notation qui a été utilisée pour définir
les langages réguliers.
Définition 1:
Soit un alphabet 𝕍 et soient les symboles ∅ et 𝜀. On appelle expression régulière toute forme
obtenue par l'application d'un nombre fini des opérations union, concaténation et itération.
Exemple: 𝐸1 = 𝑎 , 𝐸2 = 𝑎∗ ∪ 𝑎𝑏 ∗ , 𝐸3 = 𝑎𝑏𝑐 .
Remarque: L'ordre des priorités des opérations est le suivant: itération, concaténation et union.

Définition 2 :
Soit un alphabet 𝕍 et soit 𝕍′ = {𝜀, ∅}. On appelle expression régulière (E-R) tout mot P sur

𝕍 ∪ 𝕍 défini par :
 P est une lettre de 𝕍 ∪ 𝕍′ .
 P est de la forme : 𝑄 ∗ , 𝑄. 𝑅 , 𝑄 ∪ 𝑅 où 𝑄, 𝑅 sont des E-R.
Remarque : 𝜀, ∅ 𝑒𝑡 𝑎 ∈ 𝕍 sont des langages rationnels et la classe des langages rationnels est
fermée par rapport à l’union, la concaténation et l’itération.
- L’expression régulière 𝑎 dénote le langage {𝑎}.
- L’expression régulière ∅ dénote le langage vide { }.
- L’expression régulière 𝜀 dénote le langage {𝜀}.
- Les expressions 𝑄 ∗ , 𝑄. 𝑅 𝑒𝑡 𝑄 ∪ 𝑅 dénotent respectivement l’itération, concaténation et
l’union des langages dénotés par 𝑄 𝑒𝑡 𝑅.
Les écritures des E-R peuvent être simplifiées en supprimant les parenthèses en se basant sur la
hiérarchie des opérateurs.
Deux expressions régulières sont équivalentes si et seulement si elles dénotent le même langage.
Egalité entre expressions régulières
1) 𝑃 ∪ 𝑄 = 𝑄 ∪ 𝑃 8) 𝑃∗ = (𝑃 ∪ 𝜀)∗
2) 𝑃 ∪ 𝑄 ∪ 𝑅 = (𝑃 ∪ 𝑅) ∪ 𝑄 9) 𝑃∗ = 𝑃∗ . 𝑃∗
𝑃 . 𝑄. 𝑅 = 𝑃 . 𝑅 . 𝑄
3) 𝑃 . 𝑄 ∪ 𝑅 = 𝑃. 𝑄 ∪ 𝑃. 𝑅 10) 𝑃∗ = 𝑃𝑃∗ ∪ 𝜀
𝑃 ∪ 𝑄 . 𝑅 = 𝑃. 𝑅 ∪ 𝑄. 𝑅
4) 𝑃 ∪ ∅ = ∅ ∪ 𝑃 = 𝑃 11) (𝑃∗ )∗ = 𝑃∗
𝑃 .∅ = ∅ .𝑃 = ∅
5) 𝑃 . 𝜀 = 𝜀 . 𝑃 = 𝑃 12) 𝑃∗ ∪ 𝑄 ∗ ∗
= 𝑃∪𝑄 ∗
= (𝑃∗ . 𝑄 ∗ )∗
6) 𝑃 ∪ 𝑃 = 𝑃
7) 𝑃 . 𝑃∗ = 𝑃∗ . 𝑃

Théorie de Kleene
Toute expression régulière dénote un langage régulier .
Démonstration: ∅ , 𝜀 et toute lettre d'un alphabet 𝕍 dénote un langage régulier, de plus la classe des
langages réguliers est fermée par rapport : *, ., ∪ et toute expression régulière (E-R) est obtenue par
l'application d'un nombre fini des opérations précédentes à partir de 𝕍 , donc E-R dénote un langage
régulier.
Synthèse d'un automate a partir d'une expression régulière
comment construire un automate de R-S acceptant le langage dénoté par les E-R?
Méthode 1: méthode directe
Exemple: soit E-R= 𝑎𝑎∗ ⋃ 𝑏𝑏
on peut exploiter les opérations sur les automates correspondant à la réunion, concaténation et
l'itération.
Méthode 2 : méthode des dérivées

On construit l'automate en calculant successivement les dérivées des langages dénotés par les
expressions régulières par rapport aux lettres de 𝕍.
 𝑎𝑎∗ ∪ 𝑏𝑏 = 𝑆0 = 𝐿𝐿 𝑜𝑢 𝑛𝑜𝑡é 𝑆0
 𝐿//𝑎 = 𝑎𝑎∗ ∪ 𝑏𝑏 = (𝑎𝑎∗ )//𝑎 ∪ (𝑏𝑏)//𝑎
𝑎∗ ∪ ∅ = 𝑎∗ = 𝑆1 = 𝑆1 / 𝐿𝐿∗ //𝑎 = (𝐿𝐿//𝑎 ). 𝐿𝐿∗
 𝐿𝐿//𝑏 = ( 𝑎𝑎∗ ∪ 𝑏𝑏)//𝑏 = 𝑏 = 𝑆2 = 𝑆2
 𝑆1 //𝑎 = 𝑎∗ //𝑎 = (𝜀 ∪ 𝑎𝑎∗ )//𝑎 = 𝜀//𝑎 ∪ (𝑎𝑎∗ )//𝑎 = 𝑎∗ =𝑆1 (on utilise 𝑝∗ = 𝜀 ∪ 𝑝𝑝∗ )
 𝑆1 //𝑏 = 𝑎∗ //𝑏 = ∅
 𝑆2 //𝑎 = 𝑏//𝑎 = ∅ = 𝑆4
 𝑆2 //𝑏 = 𝑏//𝑏 = 𝜀 =𝑆3
 𝑆3 //𝑎 = 𝜀//𝑎 = ∅ = 𝑆4
 𝑆3 //𝑏 = 𝜀//𝑏 = ∅ = 𝑆4
 𝑆4 //𝑎 = ∅//𝑎 = 𝑆4
 𝑆4 //𝑏 = ∅//𝑏 = 𝑆4

L'automate simplifié équivalent est


Proposition: Pour tout langage régulier LL, il existe une expression régulière qui le dénote.
Démonstration: Soit 𝒜 < 𝕍, S , ℱ, S0 , I > L'automate R-S qui accepte LL, nous allons
associer à tout état Si le langage dénoté Pi composé de tous les mots qui font passer 𝒜 de l'état Si aux
états finals:
𝑎
𝑆𝑖 ⊢𝐴 1 𝑆1
𝑎
𝑆𝑖 ⊢𝐴 2 𝑆2 ⟹ P = 𝑎 P ∪ 𝑎 P ∪. .∪ 𝑎 P ∪ 𝜑 P 𝑜ù 𝜑 P = {𝜀} 𝑠𝑖 𝑆𝑖 ∈ ℱ
i 1 1 2 2 𝑛 n i i
∶ ∅ 𝑠𝑖𝑛𝑜𝑛
𝑎𝑛
𝑆𝑖 ⊢𝐴 𝑆𝑛

On obtient ainsi un système d'équations dont le nombre est égale le nombre d'états de 𝒜.
L'expression régulière dénotant le langage accepté par 𝒜 est l'équation P0 .
Remarque: La résolution du système d'équations fait appel au théorème de Arden dont la
solution minimale de l'équation 𝐿𝐿 = 𝐴. 𝐿𝐿 ∪ 𝐵 est 𝐿𝐿 = 𝐴∗ 𝐵.
La solution de l'équation ne fait appel qu'aux opérations réunion, concaténation et itération. Ce
qui implique que tous les langages Pi sont réguliers et dénotés par des E-R.
Exemple 1:

𝑆0 = 𝑎𝑆1 ∪ 𝜀
⟹ 𝑆0 = 𝑎𝑏𝑆0 ∪ 𝜀 ⟹ 𝑆0 = 𝑎𝑏 ∗ . 𝜀 = 𝑎𝑏 ∗
𝑆1 = 𝑏𝑆0
Exercice:
Trouver une expression régulière qui dénote le langage accepté par l'automate suivant:

Conclusion
La classe des langages dénotés par les expressions régulières est égale à la classe des langages
réguliers.
La classe des langages réguliers est fermée par rapport à l'union, la concaténation et l'itération.
Langages à Contexte libre
I. Grammaire à contexte libre
Une grammaire 𝐺 =< 𝑇, 𝑁, 𝑆, 𝑃 > est dite à contexte libre si toutes ses productions sont de la
forme 𝐴 ⟶ 𝜔 / 𝐴 ∈ 𝑁, 𝜔 ∈ (𝑇 ∪ 𝑁)∗ .
Exemple:
𝐺 =< 𝑇 = 𝑎, 𝑏 , 𝑁 = 𝑆 , 𝑆, 𝑃 = {𝑆 ⟶ 𝑎𝑆𝑏|𝑎𝑏} >.
arbre de dérivation pour le mot aabb

1°) Chaque nœud a une étiquette qui est un symbole de (𝑇 ∪ 𝑁)∗.


2°) L'étiquette de la racine est S.
3°) Si un nœud est interne alors il est étiqueté par un non terminal.
4°) Si le nœud n est étiqueté par 𝐴 et a K noeuds (K fils) de l'arbre de dérivation à partir de la
gauche 𝑥1 , 𝑥2 , … . , 𝑥𝑛 alors 𝐴 ⟶ 𝑥1 𝑥2 … . 𝑥𝑛 doit être une règle de production.
Définition:
On appelle S-arbre un arbre de dérivation dont la racine est l'axiome.
On appelle Sous-arbre un arbre dont la racine est un nœud quelconque.
II. Automate à pile de mémoire (APM)
Il a en plus de l'automate de R-S, une mémoire de stockage

ou
Définition :
Un automate à pile est un 7-uplet 𝐴 =< 𝑇, 𝑁, 𝑆, 𝐹, 𝑆0 , 𝐼, # > où
𝑇: représente l'alphabet d'entrée.
𝑁: représente l'alphabet auxiliaire de la pile (alphabet de la pile).
𝑆: représente l'ensemble des états.
𝐹 ⊆ 𝑆: représente l'ensemble des états finals.
𝑆0 ∈ 𝑆: est l'état initial.
# ∉ (𝑇 ∪ 𝑁): marque la fin de la pile.
∗ ∗
𝐼⊆ 𝑇∪𝑁 ×𝑆× 𝑇∪ 𝜀 × 𝑇∪𝑁 × 𝑆 ∪ [{#} × 𝑆 × 𝑇 ∪ {𝜀} ] × [{#} × 𝑇 ∪ 𝑁 × 𝑆] :
ensemble des instructions.
Convention d'écriture:
( 𝛼, 𝑆𝑖 , 𝑎 , 𝜔, 𝑆𝑗 ) ∈ 𝐼 on écrit 𝛼𝑆𝑖 𝑎 ⊢∗ 𝜔𝑆𝑗 (1)

( #, 𝑆𝑖 , 𝑎 , #𝜔, 𝑆𝑗 ) ∈ 𝐼 on écrit #𝑆𝑖 𝑎 ⊢∗ #𝜔𝑆𝑗 (2)


(1) on est dans l'état 𝑆𝑖 , on a 𝛼 dans la pile et 𝑎 en entrée, par dérivations successives on dépile
𝛼 et on empile 𝜔 et on est dans l'état 𝑆𝑗 .
Description informelle
Nous pouvons imaginer l'automate à pile comme étant le dispositif suivant:
- Au début du fonctionnement, l'automate se trouve à l'état initial 𝑆0 et la pile est vide (elle ne
contient que #).
- Les opérations classiques sur la pile (empiler et dépiler) sont décrite à travers la fonction de
transition de la façon suivante:
𝑆𝑝 : état de l'automate, 𝛼: sommet de la pile, a: lettre d'entrée.

( 𝛼, 𝑆𝑝 , 𝑎 , 𝛼𝑎, 𝑆𝑗 ) ⟹ lire 𝑎 et l'empiler.

( 𝛼, 𝑆𝑝 , 𝑎 , 𝜀, 𝑆𝑗 ) ⟹ lire 𝑎 et dépiler 𝛼.

( 𝛼, 𝑆𝑝 , 𝑎 , 𝛼, 𝑆𝑗 ) ⟹ lire 𝑎 en gardant l'état de la pile inchangé.


- On effectue les mouvements lors de la reconnaissance.
Exemple: Soit 𝐴 =< 𝑇 = 0,1 , 𝑁 = ∅, 𝑆 = 𝑆0 , 𝑆1 , 𝑆2 , 𝐹 = {𝑆2 }, 𝑆0 , 𝐼, # >
Et 𝐼 = { # 𝑆0 0 ⊢ # 0 𝑆0 (1) empiler 0
0 𝑆0 0 ⊢ 0 0 𝑆0 (2) empiler 0
0 𝑆0 1 ⊢ # 𝑆1 (3) dépiler 0
0 𝑆1 1 ⊢ 𝑆1 (4) dépiler 0
# 𝑆1 ⊢ # 𝑆2 } (5) pile inchangée
Illustrons le fonctionnement de cet automate avec le mot 𝜔 = 000111 :
Pile État de l'automate Mot en entrée Commande ou instruction
# S0 000111 Empiler (1)
#0 S0 00111 Empiler (2)
#00 S0 0111 Empiler (2)
#000 S0 111 Dépiler (3)
#00 S1 11 Dépiler (4)
#0 S1 1 Dépiler (4)
# S1 Ɛ (5)
# S2 Ɛ Fin

Comme il n'est pas recommandé de représenter le fonctionnement de l'automate par un tableau,


on introduit la notion de configuration : un triplet 𝜔, 𝑆𝑖 , 𝑥 tels que :
𝜔: contenu de la pile.
𝑆𝑖 : état de la pile.
𝑥 : mot en entrée.
Définition 1:
Soit un automate à pile 𝐴 dans l'état 𝑆𝑖 . le contenu de la pile est #𝜔 et il reste le sous mot 𝑥 à
lire. Nous dirons que 𝐴 est dans la configuration #𝜔𝑆𝑖 𝑥.
Définition 2:
La configuration #𝜇𝛼𝑆𝑖 𝑎𝑥 produit d'une manière directe la configuration #𝜇𝜔𝑆𝑗 𝑥, et on note
#𝜇𝛼𝑆𝑖 𝑎𝑥 ⊢ #𝜇𝜔𝑆𝑗 𝑥, si et seulement si (𝛼𝑆𝑖 𝑎 ⊢ 𝜔𝑆𝑗 ) ∈ 𝐼.

Définition 3:
La configuration P0 produit d'une manière indirecte la configuration Pn si il existe une séquence
finie de configurations : P1, P2,...Pn tel que pour tout i Є{0,1,...,n} on a 𝑃𝑖 ⊢ 𝑃𝑖+1 et on note 𝑃0 ⊢∗ 𝑃𝑛 .
Langage reconnu par un APM
Soit 𝐀 =< 𝑇, 𝑁, 𝑆, 𝐹, 𝐒𝟎 , 𝐈, # > un APM.
1) on appelle configuration initiale d'un APM le triplet #, 𝑆0 , 𝜔 .
2) on appelle configuration finale d'un APM le triplet 𝛼, 𝑆𝑓 , 𝜀 / 𝑆𝑓 ∈ 𝐹, 𝛼 ∈ (𝑇 ∪ 𝑁)∗ .
Le langage reconnu par un APM est l'ensemble des mots lus à partir de la configuration initiale
jusqu'à l'obtention d'une configuration finale.
Formellement
𝐿𝐿 𝐴 = {𝜔 ∈ 𝑇 ∗ / #, 𝑆0 , 𝜔 ⊢∗ 𝛼, 𝑆𝑓 , 𝜀 , 𝑆𝑓 ∈ 𝐹, 𝛼 ∈ 𝑇 ∪ 𝑁 ∗ }
Pour la configuration finale d'un APM, le contenu de la pile importe peu. Cependant il y a un
cas particulier où on considère une configuration finale où la pile sera vide (elle contient que #).
L'automate est dit alors automate à pile vide.
Langage reconnu par un APM vide
𝐿𝐿𝜀 𝐴 = {𝜔 ∈ 𝑇 ∗ / #, 𝑆0 , 𝜔 ⊢∗ #, 𝑆𝑓 , 𝜀 , 𝑆𝑓 ∈ 𝐹}
Remarque:
Les automates à pile sont plus puissants que les automates de R-S.
Proposition:
Pour tout automate à pile 𝐀 =< 𝑇, 𝑁, 𝑆, 𝐹, 𝐒𝟎 , 𝐈, # > il existe un automate à pile vide 𝐀′
équivalent 𝐿𝐿 𝐴 = 𝐿𝐿𝜀 𝐴′ .
Démonstration: 𝐀′ =< 𝑇, 𝑁, 𝑆 ∪ {𝐒f }, {𝐒f }, 𝐒𝟎 , 𝐈 ∪ 𝐈 ′ , # > et
I ′ = {𝑎 𝑆𝑘 ⊢ 𝑆𝑓 ∀𝑎 ∈ 𝑇 ∪ 𝑁 , ∀𝑆𝑘 ∈ 𝐹} ∪ {# 𝑆𝑘 ⊢ #𝑆𝑓 ∀𝑆𝑘 ∈ 𝐹} ∪ {𝑎 𝑆𝑓 ⊢ 𝑆𝑓 ∀𝑎 ∈ 𝑇 ∪ 𝑁 }

Exercice d'application:
1- Soit 𝐿1 = {𝑎𝑛 𝑏𝑛 /𝑛 ≥ 0}. Proposer un automate à pile 𝐴1 qui accepte 𝐿1 .
2- 𝑎𝑏, 𝑎𝑏𝑎, 𝑎𝑎𝑏𝑏𝑏 ∈ 𝐿1 ?
3- Soit 𝐿2 = {𝑎𝑖 𝑏 𝑗 /𝑖 > 𝑗}. Proposer un automate à pile 𝐴2 qui accepte 𝐿2 .
4- Proposer un automate à pile vide 𝐴′2 équivalent à 𝐴2 .
5- Soit 𝐿3 = {𝜔𝜔𝑅 /𝜔 ∈ {𝑎, 𝑏}∗ }. Proposer un automate à pile 𝐴3 qui accepte 𝐿3 .

III. Automate à pile et Grammaire à contexte libre


Proposition:
Pour toute grammaire à contexte libre 𝐺 =< 𝑇, 𝑁, 𝑆, 𝑃 > il existe un automate à pile vide
𝐴 =< 𝑇𝐴 , 𝑁𝐴 , 𝑆𝐴 , 𝐹, 𝑆0 𝐴 , 𝐼, # > tel que le langage engendré par la grammaire 𝐺 est le langage accepté
par l'automate 𝐴 et réciproquement.
On a 𝐿𝐿 𝐺 = 𝐿𝐿𝜀 (𝐴).
Démonstration:
Soit l'automate à pile vide 𝐴 =< 𝑇𝐴 , 𝑁𝐴 , 𝑆𝐴 , 𝐹, 𝑆0 , 𝐼, # >
𝑇𝐴 = 𝑇
𝑁𝐴 = 𝑁
𝑆𝐴 = {𝑆0 , 𝑆1 }
𝐹 = { 𝑆1 }
𝐼 est l'ensemble des instructions construit selon les règles de 𝐺:
 #𝑆0 ⊢ #𝑆𝑆1
 ∀ 𝐵 ∈ 𝑁; ∀𝜔 ∈ (𝑇 ∪ 𝑁)∗ 𝑜𝑛 𝑎: 𝐵 →𝐺 𝜔 ⟹ 𝐵𝑆1 ⊢𝐴 𝜔𝑅 𝑆1
𝐼=
 ∀ 𝑎 ∈ 𝑇 𝑎𝑆1 𝑎 ⊢𝐴 𝑆1
 𝑎𝑢𝑐𝑢𝑛𝑒 𝑎𝑢𝑡𝑟𝑒 𝑖𝑛𝑠𝑡𝑟𝑢𝑐𝑡𝑖𝑜𝑛 𝑛′ 𝑎𝑝𝑝𝑎𝑟𝑡𝑖𝑒𝑛𝑡à 𝐼
Exemple:
Soit 𝐺 =< 𝑇 = 𝑎, 𝑏 , 𝑁 = 𝐴, 𝐵, 𝑆 , 𝑆, 𝑃 = {𝑆 → 𝐴𝐵; 𝐴 → 𝑎𝐴𝑏|𝜀; 𝐵 → 𝐵𝑎|𝜀}
a) Trouver un automate à pile correspondant!?
Soit 𝐴 =< 𝑇, 𝑁, 𝑆𝐴 = 𝑆0 , 𝑆1 , 𝐹 = 𝑆1 , 𝑆0 , 𝐼, # > tel que
𝐼 = { #𝑆0 ⊢ #𝑆𝑆1 (𝑠𝑒𝑙𝑜𝑛 )
𝑆𝑆1 ⊢ 𝐵𝐴𝑆1 𝑠𝑒𝑙𝑜𝑛 
𝐴𝑆1 ⊢ 𝑏𝐴𝑎𝑆1 𝑠𝑒𝑙𝑜𝑛 
𝐴𝑆1 ⊢ 𝑆1 𝑠𝑒𝑙𝑜𝑛 
𝐵𝑆1 ⊢ 𝑎𝐵𝑆1 𝑠𝑒𝑙𝑜𝑛 
𝐵𝑆1 ⊢ 𝑆1 𝑠𝑒𝑙𝑜𝑛 
𝑎𝑆1 𝑎 ⊢ 𝑆1 𝑠𝑒𝑙𝑜𝑛 
𝑏𝑆1 𝑏 ⊢ 𝑆1 𝑠𝑒𝑙𝑜𝑛  }
b) 𝜔 = 𝑎𝑎𝑏𝑏𝑎𝑎 ∈? 𝐿𝐿(𝐴)
#𝑆0 𝑎𝑎𝑏𝑏𝑎𝑎 ⊢ #𝑆𝑆1 𝑎𝑎𝑏𝑏𝑎𝑎 ⊢ #𝐵𝐴𝑆1 𝑎𝑎𝑏𝑏𝑎𝑎 ⊢ #𝐵𝑏𝐴𝑎𝑆1 𝑎𝑎𝑏𝑏𝑎𝑎 ⊢ #𝐵𝑏𝐴𝑆1 𝑎𝑏𝑏𝑎𝑎 ⊢
#𝐵𝑏𝑏𝐴𝑎𝑆1 𝑎𝑏𝑏𝑎𝑎 ⊢ #𝐵𝑏𝑏𝐴𝑆1 𝑏𝑏𝑎𝑎 ⊢ #𝐵𝑏𝑏𝑆1 𝑏𝑏𝑎𝑎 ⊢ #𝐵𝑏𝑆1 𝑏𝑎𝑎 ⊢ #𝐵𝑆1 𝑎𝑎 ⊢ #𝑎𝐵𝑆1 𝑎𝑎 ⊢
#𝑎𝑎𝐵𝑆1 𝑎𝑎 ⊢ #𝑎𝑎𝑆1 𝑎𝑎 ⊢ #𝑎𝑆1 𝑎 ⊢ #𝑆1 ⟹ 𝜔 ∈ 𝐿𝐿𝜀 (𝐴)
Lemme:
Soit une dérivation de longueur n dans G, et une dérivation de longueur m dans A. Tant que les
instructions du groupe 2 de l'automate soient appliquées n fois alors:
𝑠𝑖 𝜔 ⟶𝑛𝐺 𝑥 ⇔ #𝜔𝑅 𝑆1 𝑥 ⊢𝐴𝑛 #𝑆1

Démonstration:
Raisonnement par récurrence :
1) pour n=1: 𝜔 ⟶𝐺 𝑥 (𝜔 produit d'une manière directe 𝑥).
∃ 𝐵 ∈ 𝑁, ∃𝑥1 , 𝑥2 ∈ 𝑇 ∗ , ∃𝑣 ∈ (𝑇 ∪ 𝑁)∗ 𝑡𝑞 𝜔 = 𝑥1 𝐵𝑥2 , 𝑥 = 𝑥1 𝑣𝑥2
𝑥1 𝐵𝑥2 ⟶𝐺 𝑥1 𝑣𝑥2 ⟺ 𝐵 ⟶𝐺 𝑣 d'où la configuration #𝜔𝑅 𝑆1 𝑥 s'écrit
# 𝑥1 𝐵𝑥2 𝑅 𝑆1 (𝑥1 𝑣𝑥2 )
  
= #𝑥2𝑅 𝐵𝑥1𝑅 𝑆1 𝑥1 𝑣𝑥2 ⊢𝑠𝑒𝑙𝑜𝑛 #𝑥2𝑅 𝐵𝑆1 𝑣𝑥2 ⊢𝑠𝑒𝑙𝑜 𝑛 #𝑥2𝑅 𝑣 𝑅 𝑆1 𝑣𝑥2 ⊢𝑠𝑒𝑙𝑜𝑛 #𝑥2𝑅 𝑆1 𝑥2 ⊢𝑠𝑒𝑙𝑜𝑛 #𝑆1
2) On suppose la proposition vraie à l'ordre n≥1 et démontrons qu'elle reste vraie pour n+1
𝜔 ⟶𝑛+1
𝐺 𝑥 ⟹ ∃ 𝐵 ∈ 𝑁, ∃𝑥1 , 𝑥2 ∈ 𝑇 ∗ , ∃𝑣, 𝜔2 ∈ (𝑇 ∪ 𝑁)∗ 𝑡𝑞 𝜔 = 𝑥1 𝐵𝜔2 , 𝑥 = 𝑥1 𝑥2
𝜔 ⟶𝑛+1
𝐺 𝑥 ⟹ 𝑥1 𝐵𝜔2 ⟶𝑛+1
𝐺 𝑥1 𝑥2 𝑒𝑡 𝐵 ⟶𝐺 𝑣 , donc 𝑥1 𝐵𝜔2 ⟶𝑛+1
𝐺 𝑥1 𝑥2 ⟹ 𝑣𝜔2 ⟶𝑛𝐺 𝑥2
On doit aboutir #𝜔𝑅 𝑆1 𝑥 ⊢𝐴𝑛+1 #𝑆1 :

#𝜔𝑅 𝑆1 𝑥 = # 𝑥1 𝐵𝜔2 𝑅 𝑆1 𝑥1 𝑥2 = #𝜔2𝑅 𝐵𝑥1𝑅 𝑆1 𝑥1 𝑥2 ⊢𝑠𝑒𝑙𝑜𝑛 #𝜔2𝑅 𝐵𝑆1 𝑥2 ⊢ #𝜔2𝑅 𝑣 𝑅 𝑆1 𝑥2 ⊢
# 𝑣𝜔2 𝑅 𝑆1 𝑥2 (𝑜𝑟 𝑣𝜔2 ⟶𝑛𝐺 𝑥2 ) ⊢ #𝑆1
Conclusion:
à l'aide de ce lemme :
∀ 𝜔, 𝜔 ∈ 𝐿𝐿 𝐺 ⟺ 𝑆 →∗ 𝜔 ⟺ #𝑆𝑆1 𝜔 ⊢∗ #𝑆1 ⟺ #𝑆0 𝜔 ⊢∗ #𝑆1 ⟺ 𝜔 ∈ 𝐿𝐿𝜀 𝐴
Lemme de Bar-Hillel (pompage)
Pour tout langage à contexte libre, il existe deux entiers positifs 𝑝, 𝑞 tel que tout mot 𝜔 ∈ 𝐿 de
longueur > 𝑝 peut être décomposé de la manière suivante:
∀ 𝜔 ∈ 𝐿, 𝜔 > 𝑝 ⟹ (∃𝑣, 𝑣1 , 𝑦1 , 𝑣2 , 𝑦2 / 𝜔 = 𝑣1 𝑦1 𝑣𝑦2 𝑣2 ∧ |𝑦1 𝑣𝑦2 | ≤ 𝑞 ∧ 𝑦1 , 𝑦2 ≠ 𝜀 ∧
∀𝑖 ≥ 0 𝑣1 𝑦1𝑖 𝑣𝑦2𝑖 𝑣2 ∈ 𝐿)
Remarques:
1) On peut expliquer de manière intuitive le lemme de Bar-Hillel: Pour tout mot suffisamment
long, on peut distinguer dans un arbre de dérivation au moins deux sous-arbres imbriqués étiquetés
avec la même lettre non terminale.

2) Ce lemme sert à démontrer qu'un langage n'est pas à contexte libre (Il y a des langages qui ne
sont pas à contexte libre mais ils vérifient ce lemme).
Exemple:
Montrer que le langage 𝐿 = {𝑎𝑖 𝑏 𝑖 𝑐 𝑖 ; 𝑖 > 0} n'est pas à contexte libre.
Supposons que 𝐿 est à contexte libre ⟹ ∃𝑝, 𝑞 ∈ ℕ , les conditions de Bar-Hillel soient
satisfaites pour tout mot de 𝐿.
Soit 𝜔 = 𝑎𝑛 𝑏 𝑛 𝑐 𝑛 ∈ 𝐿 𝑎𝑣𝑒𝑐 𝑛 = max⁡
(𝑝, 𝑞): on a 𝜔 = 3𝑛 > 𝑝.
∀𝑣, 𝑣1 , 𝑦1 , 𝑣2 , 𝑦2 , 𝜔 = 𝑣1 𝑦1 𝑣𝑦2 𝑣2 , 𝑦1 , 𝑦2 ≠ 𝜀 𝑒𝑡 𝑦1 𝑣𝑦2 ≤ 𝑞 ⟹ on a 5 cas :
1- 𝑦1 𝑣𝑦2 = 𝑎𝑘 ∶ 𝑝𝑎𝑟 𝑒𝑥𝑒𝑚𝑝𝑙𝑒 𝑖 = 0, 𝑣1 𝑦10 𝑣𝑦10 𝑣2 = 𝑎𝑛−𝑙 𝑏𝑛 𝑐 𝑛 ∉ 𝐿.
2- 𝑦1 𝑣𝑦2 = 𝑏 𝑘 ∶ 𝑝𝑎𝑟 𝑒𝑥𝑒𝑚𝑝𝑙𝑒 𝑖 = 0, 𝑣1 𝑦10 𝑣𝑦10 𝑣2 = 𝑎𝑛 𝑏 𝑛−𝑙 𝑐 𝑛 ∉ 𝐿.
3- 𝑦1 𝑣𝑦2 = 𝑐 𝑘 ∶ 𝑝𝑎𝑟 𝑒𝑥𝑒𝑚𝑝𝑙𝑒 𝑖 = 0, 𝑣1 𝑦10 𝑣𝑦10 𝑣2 = 𝑎𝑛 𝑏 𝑛 𝑐 𝑛−𝑙 ∉ 𝐿.
4- 𝑦1 𝑣𝑦2 = 𝑎𝑘 𝑏 𝑙 ∶ 𝑝𝑎𝑟 𝑒𝑥𝑒𝑚𝑝𝑙𝑒 𝑖 = 0, 𝑣1 𝑦10 𝑣𝑦10 𝑣2 = 𝑎𝑛−𝑖 𝑏 𝑛−𝑗 𝑐 𝑛 ∉ 𝐿.
5- 𝑦1 𝑣𝑦2 = 𝑏 𝑘 𝑐 𝑙 ∶ 𝑝𝑎𝑟 𝑒𝑥𝑒𝑚𝑝𝑙𝑒 𝑖 = 0, 𝑣1 𝑦10 𝑣𝑦10 𝑣2 = 𝑎𝑛 𝑏 𝑛−𝑖 𝑐 𝑛−𝑗 ∉ 𝐿.
Comme il n'y a aucune autre possibilité, 𝜔 ne satisfait pas les conditions de Bar-Hillel.
Contradiction avec le lemme d'où 𝐿 n'est pas à contexte libre.
Exemple 2:
𝐿 = {𝑎𝑖 𝑏 𝑖 ; 𝑖 ≥ 0} :
∀𝜔 ∈ 𝐿, 𝜔 = 𝑎𝑛 𝑏𝑛 𝑎𝑣𝑒𝑐 |𝜔| ≥ 2.
∃𝑣, 𝑣1 , 𝑦1 , 𝑣2 , 𝑦2 , 𝜔 = 𝑣1 𝑦1 𝑣𝑦2 𝑣2 , 𝑦1 = 𝑎, 𝑦2 = 𝑏, 𝑣 = 𝜀, 𝑣1 = 𝑎𝑛−1 , 𝑣2 = 𝑏 𝑛−1 on a:
∀𝑖 ≥ 0, 𝑣1 𝑦1𝑖 𝑣𝑦1𝑖 𝑣2 = 𝑎𝑛−1+𝑖 𝑏 𝑛−1+𝑖 ∈ 𝐿. donc tous les mots 𝜔 ∈ 𝐿 satisfont les conditions de
Bar-Hille Néanmoins on ne peut rien dire concernant sa nature s'il est à contexte libre.
Ce langage est à contexte libre car il peut être généré par une grammaire à contexte libre:
𝑆 → 𝑎𝑆𝑏|𝜀

IV. Transformation des grammaires de type 2


Remarque 1:
une grammaire à contexte libre G = < T, N, S, P > est dite ambigüe si et seulement si il existe un
mot ∈ LL(G) ayant au minimum deux arbres de dérivation différents.
Remarque 2:
Les mots de langage à contexte libre peuvent être changés de valeurs sémantiques (de
signification).
Exemple: la valeur sémantique du mot 5+5+5 engendré par la grammaire des expressions
arithmétiques est 15. Chomsky a observé que la valeur sémantique d'un mot est liée à son arbre de
dérivation
Exemple:
S → S => S | 0
on a le mot 0 => 0 => 0 ; il est trouvé de deux manières différentes

si 0 représente faux
on a : 0 ⟹ 0 ⟹ 0: F ⟹ F ⟹ 𝐹: 𝑉 ⟹ F: F
0 ⟹ 0 ⟹ 0 : F ⟹ (F ⟹ F): F⟹ V: V
Définition 1
Soit 𝐺 = < 𝑇, 𝑁, 𝑆, 𝑃 > une grammaire algébrique (contexte libre).
un symbole non-terminal A est dit inaccessible s'il n'apparait dans aucune forme sententielle.
Définition 2
Un symbole non terminal A est dit non productif s'il ne produit pas de mot.
Définition 3
une grammaire sans termes inaccessibles et sans termes improductifs est dite réduite.
Exemple:
 𝑆 → 𝐴𝐵/ 𝐶/ 𝑎 B est non productif
𝐴→𝑎
𝐶→𝑏

 𝑆 → 𝐶/ 𝑎 A est inaccessible
𝐴→𝑎
𝐶→𝑏
Remarque: les transformations se font sur les grammaires réduites.
Grammaire Ɛ-libre
Définition:
Une grammaire 𝐺 = < 𝑇, 𝑁, 𝑆, 𝑃 > est Ɛ-libre si P ne contient aucune production de la forme
𝐴 → 𝜀 /𝐴 ∈ 𝑁 . De plus, si 𝑆 → 𝜀 ∈ 𝑃 alors S ne doit pas figurer dans aucun membre droit de
production.
Exemple:
 𝑆 → 𝐴𝐵/ 𝐵/ 𝑎𝑆  𝑆 → 𝑎𝐴𝑏/ 𝜀
𝐴 → 𝑎𝐴/𝑏𝑆 𝐴 → 𝑎𝐴𝑏/𝑎𝑏
𝐵 → 𝐵𝑏 /𝑐

a. Transformation d'une grammaire non Ɛ-libre en Ɛ-libre


Proposition:
Soit 𝐺 = < 𝑇, 𝑁, 𝑆, 𝑃 > une grammaire algébrique (type 2) non Ɛ -libre. Il existe une grammaire
𝐺′ = < 𝑇′, 𝑁′, 𝑆′, 𝑃′ > Ɛ-libre équivalente tel que 𝐿𝐿 𝐺 = 𝐿𝐿(𝐺′).
Démonstration

Exemple
𝑆 → 𝐴𝑏𝐵 𝑆 → 𝑎𝑆𝑏/𝜀
𝐴 → 𝑎𝐴𝑏/𝜀
𝐵 → 𝐵𝑎/𝜀
Forme normale de Chomsky
Proposition: Toute grammaire 𝐺 = < 𝑇, 𝑁, 𝑆, 𝑃 > à contexte libre (algébrique) est dite sous
forme normale de Chomsky (FNC) si ses productions sont de la forme suivante:
𝐴 → 𝐵𝐶
/ 𝐴, 𝐵, 𝐶 ∈ 𝑁, 𝑎 ∈ 𝑇
𝐴→𝑎
Passage d’une grammaire à contexte libre vers une grammaire sous la FNC :

Pour toute production 𝐴 → 𝑤 /𝐴 ∈ 𝑁, 𝑤 ∈ 𝑇 ∪ 𝑁 et 𝑤 = 𝐴1 𝐴2 … . . 𝐴𝑘 𝑎𝐴𝑘+1 … … 𝐴𝑛
 Remplacer "a" par un nouveau symbole non terminal et on ajoute 𝑋 → 𝑎 ∈ 𝑃. Pn obtient
𝐴 → 𝐴1 𝐴2 … . . 𝐴𝑘 𝑋 𝐴𝑘+1 … … 𝐴𝑛
 Refaire le même processus jusqu'à ce qu’on remplace toutes les lettres terminales dans la
partie droite de la production par des lettres non terminales.
Remplacer 𝐴 → 𝐴1 𝐴2 … . . 𝐴𝑘 𝑋 𝐴𝑘+1 … … 𝐴𝑛 par le groupe de productions:
𝐴 → 𝐴1 𝑌1
𝑌1 → 𝐴2 𝑌2

𝑌𝑛−2 → 𝐴𝑛−1 𝐴𝑛
𝑋→𝑎
Mais il faux que G soit Ɛ-libre.
Exemple:
𝐺 = < 𝑇, 𝑁, 𝑆, 𝑃 > 𝑜ù 𝑇 = {𝑝, 𝑞, ˥, ⟹, , }, 𝑁 = 𝑆, 𝐴 , 𝑃 = 𝑆 → 𝐴/ 𝑆 ⟹ 𝑆 /𝑝/𝑞, 𝐴 → ˥𝑆
Elle est Ɛ-libre
Cherchons G' sous FNC. 𝐺 ′ = < 𝑇, 𝑁 ′ , 𝑆, 𝑃′ >; 𝑁 ′ =< 𝑆, 𝐴, ?
Remplacer 𝑆 → 𝐴 . Le remplacer par 𝑆 → ˥𝑆 car 𝐴 → ˥𝑆
Remplaçons 𝑆 → ˥𝑆 par 𝑆 → 𝐵𝑆 𝑜ù 𝐵 → ˥ donc on a 𝑆 → 𝐵𝑆 / 𝑆 → 𝑆 /𝑝/𝑞 et 𝐵 → ˥
Règle 𝑆 → 𝑆 ⟹ 𝑆 on la remplace par :
𝑆 → 𝐶𝑆𝐷𝑆𝐸
𝐶→(
𝐷 →⟹
𝐸 →)
D'où on a 𝑆 → 𝐵𝑆/𝐶𝑆𝐷𝑆𝐸
On a la règle 𝑆 → 𝐶𝑆𝐷𝑆𝐸
𝑆 → 𝐶𝑌1
𝑌1 → 𝑆𝑌2
𝑌2 → 𝐷𝑌3
𝑌3 → 𝑆𝐸
Alors on a : 𝐺 ′ : 𝑆 → 𝐵𝑆/𝐶𝑌1 /𝑝/𝑞
𝐵→ ˥ 𝑌1 → 𝑆𝑌2
𝐶→( 𝑌2 → 𝐷𝑌3
𝐷 →⟹ 𝑌3 → 𝑆𝐸
𝐸 →)
Toutes les règles sont de la forme 𝐴 → 𝐵𝐶/𝑎
Proposition:
La classe des langages à contexte libre est fermée par rapport à:
 réunion
 concaténation
 reflet miroir
 itération
Remarque : La classe des langages à contexte libre n’est pas fermée par rapport à l’intersection
et le complémentaire.
Récursivité à gauche
G de type 2 est récursive à gauche s'il existe dans P une production de type 𝐴 → 𝐴𝛼/𝐴 ∈ 𝑁, 𝛼 ∈
𝑇∪𝑁 ∗
Exemple:
 𝑆 → 𝐴𝐵  𝑆 → 𝐴𝐵
𝐴 → 𝐴𝑎/𝐵𝑏/𝑐 𝐴 → 𝐴𝐴𝑆/𝑎𝑆/𝑏𝑆
𝐵→𝑏 𝐵→𝑏
𝐶 → 𝑎𝑐/𝑎

Proposition
À toute grammaire récursive à gauche il existe une grammaire récursive à droite équivalente.

Si on a 𝐴 → 𝐴𝛼1 / … … . 𝐴𝛼𝑛 /𝐵1 /……𝐵𝑘 / 𝛼𝑖 , 𝐵𝑖 ∈ 𝑇 ∪ 𝑁
alors: 𝐴 → 𝐵1 / … … . 𝐵𝑘 / 𝐵1 A'/ … … ./𝐵𝑘 𝐴′
𝑎𝑣𝑒𝑐 𝐴′ → 𝛼1 𝐴′ /𝛼2 𝐴′ ……./𝛼𝑘 𝐴′ /𝛼1 / … … 𝛼𝑛
Exemple:
𝑆 → 𝐴𝐵/𝑏 𝐴 → 𝑎𝑆/𝑏/𝑎𝑆𝐴′ /𝑏𝐴′

𝐴 → 𝐴𝐴𝑆/𝑎𝑆/𝑏 𝐴′ → 𝐴𝑆𝐴′/𝐴𝑆
Récursivité indirecte
𝐴 → 𝐵𝛼1 /𝛼2

𝐵 → 𝐶𝛽1 /𝛽2

𝐶 → 𝐴𝛾1 /𝛾2
Il suffit d’utiliser la substitution pour retrouver la récursivité directe.

Vous aimerez peut-être aussi