Les Grammaires
9 Simplification des
5 Grammaires non
grammaires
contextuelles
Introduction
Grammaire
Une grammaire est un formalisme permettant de définir
formellement une syntaxe d’un langage composé d’un ensemble
de mots définis sur un alphabet donné.
Le principe de base des grammaires est de donner un ensemble
de règles qui permettent de générer les mots d’un langage.
Ces règles doivent indiquer qu’une séquence de symboles peut
être remplacée par une autre.
Les mots générés par la grammaire sont obtenus en appliquant
ces règles à partir d’un symbole spécial appelé symbole de
départ.
Exemple
G = ({S, A, B}, {a, b}, {S → A, S → B, B → bB, A → aA, A → ε, B → ε}, S).
Exemple
G = ({S, A, B}, {a, b}, {S → A, S → B, B → bB, A → aA, A → ε, B →
ε}, S).
L(G) = {ω ∈ {a, b}∗ /ω est composé uniquement de a ou uniquement
de b}
L(G) = {ω ∈ {a, b}∗ /ω = an ou ω = bn , n ≥ 0}
Exercice 1 - Corrigé
1 G = (VN , VT , R, S) Où VN = {S} VT = {a, b} et
R = {S → ε, S → aSb}
2 Vérification de la génération des mots ab et aabb par la
grammaire G :
Le mot ab est généré par la grammaire G comme suit :
S ⇒ aSb ⇒ aεb = ab
Le mot aabb est généré par la grammaire G, en effet :
S ⇒ aSb ⇒ aaSbb ⇒ aaεbb = aabb
Yousra Hlaoui (FST-IF4) Les Grammaires 2017-2018 6 / 51
Présentation d’une grammaire
Exercice 2
1 Construire une grammaire G qui génère le langage a+
2 Vérifier que les mots aa et a sont générés par la grammaire
Exercice 2 - Corrigé
1 Une grammaire qui génère {an , n > 0} = a+ , est
G = (VN , VT , R, S) Où VN = {A} VT = {a} et
R = {A → a, A → aA} et S = A
2 Le mot aa est généré par la grammaire G, en effet :
A ⇒ aA ⇒ aa
3 Le mot a est généré par la grammaire G, en effet :
A⇒a
Exercice 3
Soit L l’ensemble des représentations décimales des entiers naturels
non nuls.
1 Donner une expression régulière qui représente le langage L.
2 Construire une grammaire G qui génère le langage L
3 Vérifier que le mot 0129 est généré par la grammaire G.
4 Construire un automate fini qui accepte le langage L
Exercice 3 - Corrigé
1 L’expression régulière est :0∗ (1 + . . . + 9)(0 + 1 + . . . + 9)∗
2 La grammaire est G = (VN , VT , R, S) où
VN = {A, B}
VT = {0, 1, . . . , 9} et
R = {A → 0A|1B|2B| . . . |9B, B → 0B|1B| . . . |9B|ε} et S = A
3 Le mot 0129 est généré par la grammaire G comme suit :
A ⇒ 0A ⇒ 01B ⇒ 012B ⇒ 0129B ⇒ 0129ε = 0129
4
0 0,1,2,3,4,5,6,7,8,9
q0 q1
1,2,3,4,5,6,7,8,9
Exercice 4
Construire une grammaire G qui génère le langage L suivant :
L = {an bm c n /m, n ∈ N}
Exercice 4 - Corrigé
La grammaire G est définie comme suit :
G = (VN , VT , R, S) où
VN = {S, B}
VT = {a, b, c} et
R = {S → aSc, S → B, B → ε|bB}
Types de grammaires
Types de grammaires
Types de grammaires
Grammaire régulière
Définition
Une grammaire régulière est une grammaire avec les restrictions
suivantes :
Le coté gauche de chaque production consiste en un seul
symbole non terminal.
Le coté droit est :
Soit un symbole terminal suivi d’un symbole non terminal
Soit un seul symbole terminal
Soit ε
Théorème
Un langage est régulier ssi il est généré par une grammaire régulière.
Preuve (⇒)
Si un langage est régulier alors il est généré par une grammaire
régulière.
Si L est régulier alors il existe un automate d’états
finisM = (Q, X , δ, i, F ) tel que L = L(M). A l’aide de M on construit une
grammaire régulière G = (VN , VT , R, S) qui génère L. G est définie
par :
VT = X
VN = Q
S = q0
R = {p → xq/δ(p, x) = q} ∪ {q → ε/q ∈ F }
Exercice 5
Soit l’automate fini A = (Q, X , δ, q0 , F ) /Q = {A, B},
X = {a, b},
δ = {(A, a, A), (A, b, B), (B, b, B)},
q0 = A,
F = {A, B}
Construire une grammaire régulière G/L(G) = L(A)
Exercice 5-corrigé
G = (VN , VT , S, R) / VN = Q, VT = X ,
S = q0 ,
R = {A → aA, A → bB, B → bB, A → ε, B → ε}.
Preuve (⇐)
Si un langage est généré par une grammaire régulière alors il est
régulier.
Soit G = (VN , VT , R, S) la grammaire qui génère L. Un automate fini
non déterministe qui accepte L peut être défini comme suit :
Q = VN
X = VT
q0 = S
F = {A/(A → ε) ∈ R}
δ = {(A, a, B)/A → aB ∈ R, a ∈ VT }.
Exercice 6
Construire l’automate qui reconnaı̂t le même langage que L(G) où
G = ({A, B}, {a, b}, R, A) avec R = {A → aA|bB|ε, B → bB|ε}
Exercice 5 - corrigé
L’automate correspondant à G est M = (Q, X , δ, q0 , F ) avec :
Q = {A, B}, X = {a, b}, δ = {(A, a, A), (B, b, B), (A, b, B)}, q0 = A,
F = {A, B}
a b
A b B
M
Exemples
1 Le langage ω.ω R est généré par la grammaire NC dont les
productions sont :
S → aSa
S → bSb
S→ε
2 Le langage an bn , n ≥ 0, est généré par la grammaire NC dont les
productions sont :
S → aSb
S→ε
Définition
Une dérivation à gauche ( resp. à droite) consiste à remplacer le
non-terminal le plus à gauche (resp. le plus à droite) dans la dérivation.
∀i ≥ 0 , wi ⇒ wi+1 est une dérivation gauche ssi wi = ui Ai vi et
G
wi+1 = ui zi vi où Ai → zi ∈ R, ui ∈ VT∗ et vi ∈ (VT ∪ VN )∗ .
∀i ≥ 0 , wi ⇒ wi+1 est une dérivation droite ssi wi = ui Ai vi et
D
wi+1 = ui zi vi où Ai → zi ∈ R, ui ∈ (VT ∪ VN )∗ et vi ∈ VT∗ .
Proposition
Si ω est un mot de L(G) alors il existe une dérivation gauche
permettant de générer ω.
Exemple
Soit G = ({S}, {a, b}, {S → SS; S → aSa; S → bSb; S → ε}, S), G est
NC.
Montrons que aabb ∈ L(G)
S→SS S→aSa S→ε S→bSb S→ε
S =⇒ SS =⇒ aSaS =⇒ aaS =⇒ aabSb =⇒ aabb
G G G G G
Montrons que aabaab ∈ L(G).
S→SS S→aSa S→ε S→bSb S→aSa
S =⇒ SS =⇒ aSaS =⇒ aaS =⇒ aabSb =⇒
G G G G G
S→ε
aabaSab =⇒ aabaab
G
Arbre de dérivation
Arbre de dérivation
Définition
Un arbre de dérivation pour une grammaire NC, G = (VN , VT , R, S),
est un arbre dont chaque nœud est étiqueté par un élément de
VN ∪ VT ∪ {ε} et qui satisfait les conditions suivantes :
La racine est étiquetée par le symbole de départ S.
Chaque nœud intérieur est étiqueté par un non-terminal A ∈ VN
Chaque feuille est étiquetée par un symbole terminal a ∈ VT ∪ {ε}.
Pour tout nœud intérieur, si son étiquette est le non-terminal A et
si ses descendants immédiats sont les nœuds n1 , n2 , . . . , nk ayant
respectivement pour étiquettes X1 X2 . . . Xk alors
A → X1 X2 . . . Xk
doit être une production de G.
Arbre de dérivation
Exemple
G = ({S}, {a, b}, {S → SS; S → aSa; S → bSb; S → ε}, S)
Arbre de dérivation du mot aabaab.
S S
a S a b S b
ε a S a
Arbre de dérivation
Remarque
A chaque dérivation gauche (resp. droite) correspond un est un
seul arbre de dérivation.
Example
G : R = {S → AB, A → a, B → b}
S ⇒ AB ⇒ aB ⇒ ab (dérivation
gauche) S
S ⇒ AB ⇒ Ab ⇒ ab (dérivation
droite) A B
a b
Cet arbre est unique, il correspond aux deux arbres de dérivations
L(G) = {ab}
Dérivation et ambiguı̈té
Définition
Le mot généré par un arbre de dérivation est celui obtenu par la
concaténation des feuilles de l’arbre en les parcourant de gauche à
droite.
Théorème
Étant donnée une grammaire NC, G, un mot ω est généré par
∗
G (S ⇒ ω) ssi il existe un arbre de dérivation de la grammaire G qui
G
génère ω.
Dérivation et ambiguı̈té
Définition (Ambiguı̈té)
Une grammaire est dite ambiguë s’il existe ω ∈ VT∗ pour lequel on peut
construire deux dérivations gauches différentes. Si pour ω dans L(G) il
existe au moins deux arbres de dérivation différents alors G est
ambiguë.
Exemple
R = {S → aAb, S → a, S → abSb; A → bS} ; ω = abab
S ⇒ aAb ⇒ abSb ⇒ abab (dérivation gauche)
S ⇒ abSb ⇒ abab (dérivation gauche)
Donc la grammaire est ambiguë
Théorème
Soit LNC, l’ensemble des langages non contextuels :
1 Si L1 ∈ LNC et L2 ∈ LNC alors
L1 + L2 ∈ LNC et
L1 .L2 ∈ LNC
2 Si L ∈ LNC alors
L∗ ∈ LNC,
L+ ∈ LNC et
LR ∈ LNC.
3 L’ensemble des langages non contextuels n’est pas fermé pour
l’intersection et la complémentation.
4 L’intersection d’un langage non contextuel et d’un langage régulier
est un langage non contextuel.
Preuve du théorème
Si L1 ∈ LNC et L2 ∈ LNC, G1 et G2 deux grammaires NC telles que
L(G1 ) = L1 et L(G2 ) = L2 . S1 est l’axiome de G1 et S2 est l’axiome de
G2 . R1 et R2 sont respectivement les règles de production de G1 et de
G2 .
L1 + L2 = L(G), G aura comme axiome S, et comme règles de production
R1 ∪ R2 ∪ {S → S1 |S2 }
L1 .L2 = L(G), G aura comme axiome S, et comme règles de production
R1 ∪ R2 ∪ {S → S1 .S2 }
L∗1 = L(G), G aura comme axiome S, et comme règles de production
R1 ∪ {S → S1 .S|ε}
L+
1 = L(G), G aura comme axiome S, et comme règles de production
R1 ∪ {S → S1 .S}
LR1 = L(G), G aura les règles de production A → αR pour chaque production
A → α de R1
Exercice 1
Soient les langages L1 et L2 générés respectivement par G1 et G2
L1 = {an bn /n ≥ 0}
L2 = {a2n bn /n ≥ 0}
G1 = ({S1 }, {a, b}, S1 , {S1 → ε|aS1 b})
G2 = ({S2 }, {a, b}, S2 , {S2 → ε|aaS2 b})
Exercice 1 - Corrigé
1 G = ({S1 , S2 , S}, {a, b}, S, {S → S1 |S2 , S1 → ε|aS1 b, S2 →
ε|aaS2 b})
∗
2 Le mot aab est généré par la grammaire G, en effet S ⇒ aab :
G
S→S2 S2 →aaS2 b S2 →ε
S ⇒ S2 ⇒ aaS2 b ⇒ aab, donc aab ∈ L(G)
Exercice 2- Corrigé
1 G/L(G) = L1 .L2 = L+ (L ∪ C)+ , avec :
G = ({S1 , S2 , S}, L ∪ C, S, R1 ∪ R2 ∪ {S → S1 .S2 })
∗
2 Montrons que S ⇒ temp1 :
G
S→S1 .S2 S1 →tS1 S1 →eS1 S1 →mS1 S →p
S ⇒ S1 .S2 ⇒ tS1 S2 ⇒ teS1 S2 ⇒ temS1 S2 1⇒
S →1
tempS2 2⇒ temp1 donc temp1 ∈ L(G)
Exercice 3
Soit la grammaire G1 suivante qui génère le langage et L1 = {a, b} :
G1 = ({S1 }, {a, b}, S1 , {S1 → a|b}}
Exercice 3 - Corrigé
1 G = ({S1 , S}, {a, b}, S, {S → ε, S → S1 .S, S1 → a, S1 → b})
2 Le mot aab est généré par la grammaire G, en effet Mq :
∗
S ⇒ aab :
G
S→S1 .S S→S1 .S S→S1 .S S →a
S ⇒ S1 .S ⇒ S1 .S1 .S ⇒ S1 .S1 .S1 .S 1⇒
S →a S →b S→ε
a.S1 .S1 .S 1⇒ aa.S1 .S 1⇒ aab.S ⇒ aab, donc aab ∈ L(G)
Théorème
Il n’existe pas de grammaire non contextuelle permettant de générer le
langage an bn c n /n ≥ 0
Lemme
Tout langage L hors-contexte tel que ε ∈
/ L peut être engendré par une
grammaire hors-contexte sous forme normale de GREIBACK
Exemple
Le langage an bm /n ≥ 0, m > 0 et m > n est généré par la grammaire
NC dont les règles de production sont :
S → aSS
S → bS
S→b
Définition 1
Soit G = (VN , VT , S, R)
1 Un symbole X de VN est dit inaccessible s’il n’existe pas de
∗
dérivation de la forme S ⇒ αX β, avec α, β ∈ (VN ∪ VT )∗
2 Un symbole A de VN est dit improductif s’il n’existe pas une
∗
dérivation de la forme A ⇒ U, avec U ∈ VT∗
3 Un symbole X de VN est dit inutile, s’il est improductif ou
inaccessible : s’il n’y a pas une dérivation de la forme
∗ ∗
S ⇒ U1 XU2 ⇒ U1 V1 U2 , avec U1 , V1 , U2 ∈ VT∗
Définition 2
Une grammaire non contextuelle est dite sans cycle (cycle free) s’il
+
n’y a pas de dérivation de la forme A ⇒ A
Définition 4
Une grammaire est dite propre si :
1 elle est sans cycle
2 elle est ε-libre
3 elle n’a pas de symbole inutile
Théorème
Si G non contextuelle alors il existe G0 une grammaire non contextuelle
telle que G0 est propre et L(G) = L(G0 ).
Yousra Hlaoui (FST-IF4) Les Grammaires 2017-2018 46 / 51
Simplification des grammaires
Algorithmes de simplification
Ces algorithmes permettent de transformer une grammaire non
contextuelle en une grammaire équivalente plus simple.
1 Élimination des symboles inutiles.
2 Suppression des ε−productions
3 Élimination des productions unitaires
4 Forme normale de Chomsky
On va s’intéresser aux algorithmes 1 et 2 de cette liste.
Illustration
Soit la grammaire G avec les règles de production suivantes :
S → AB|CA A → a B → AB|EA
C → aB|b D → aC E → BA.
1 L’algorithme 1 conserve A et C, puis S et D. Il reste, donc, des règles :
S → CA A → a
C → b D → aC.
2 L’algorithme 2 élimine D, il reste finalement :
S → CA
A→a
C → b.
Principe
1 On limite la forme des productions : seules sont admises les
formes A → BC et A → a.
2 Une telle grammaire est une grammaire normale de Chomsky.
La forme normale de Chomsky a un intérêt essentiellement théorique.