Automate
Automate
Automate
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/𝜀}
1 2
P: S ⟶aSbT / 𝑐𝑈
3 4
T ⟶ cT / 𝑐
5 6
U ⟶ Uc / 𝑐
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 𝐴 → 𝑤 /𝑤 ∈ 𝑇 ∗
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 :
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 𝑆𝑛′ ∈ ℱ𝑝
ℱ = {𝑆𝑓 }
𝑆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
𝑆𝑖 ⊢𝐴𝜔 𝑆𝑗 ⟺ 𝑆𝑖 →𝐺 𝜔𝑆𝑗
𝑃:
𝑆𝑓 ∈ ℱ ⟺ 𝑆𝑓 →𝐺 𝜀
↑↓
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 𝑆𝑗
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 ∈ 𝐿.
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
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
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)
( 𝛼, 𝑆𝑝 , 𝑎 , 𝜀, 𝑆𝑗 ) ⟹ lire 𝑎 et dépiler 𝛼.
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 .
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:
𝑆 → 𝑎𝑆𝑏|𝜀
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:
𝑆 → 𝐴𝐵/ 𝐵/ 𝑎𝑆 𝑆 → 𝑎𝐴𝑏/ 𝜀
𝐴 → 𝑎𝐴/𝑏𝑆 𝐴 → 𝑎𝐴𝑏/𝑎𝑏
𝐵 → 𝐵𝑏 /𝑐
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.