Académique Documents
Professionnel Documents
Culture Documents
LES
GRAMMAIRES
PHRASE ------> il conduit un livre (Cette phrase est syntaxiquement correcte mais
sémantiquement incorrect)
α β tel que α ∈ (N ∪ T) + - T+ et β α ∈ (N ∪ T) *
(α ne peut pas avoir seulement des terminaux)
Exemple
Dans l'exemple précident, la grammaire est définie comme suit :
N = {PHRASE, SUJET, VERBE, COD, DETERMIANT}
T = {je, il, lire, conduit, un, la, livre, voiture}
S = {PHRASE}
P = {PHRASE->SUJET VERBE COD, COD->DETERMINANT NOM, SUJET ->je | il, VERBE ->ils | conduit,
DETERMINANT ->un | la, NOM ->livre | voiture
HAYKEL BEN SALEM 6
Convention
Exemple
Soit la grammaire : G =({S}, {a, b}, {S -> aSb, S-> ε}, S), nous avons :
X = {a, b} l'alphabet
N = {S}, T = {a, b}, S = {S}, P = {S -> aSb, S-> ε}
1. aSb dérive directement de S et on écrit : S => aSb car il existe une règle S -> aSb ∈ P telle que :
w= S et w' = aSb.
2. ab dérive directement de aSb et on écrit
aSb => ab car il existe une règle S -> ε telle que :
w = aSb et w' = ab avec u = a et v = b
8
Dérivation au sens général
Un mot w dérive directement d'un mot w qu'on note w -> w', si on applique n fois les règles de G pour passer
de w vers w' tel que n ≥ 0 :
Exemple
Soit la grammaire : G =({S}, {a, b}, {S -> aSb, S-> ε}, S), nous avons :
Sens de dérivation
Un arbre de dérivation pour G (N, Σ, P, S ) est un arbre ordonné et étiqueté dont les étiquettes
appartiennent à l’ensemble N ∪ Σ ∪ { ε } . Si un nœud de l’arbre est étiqueté par le non terminal A
et ses fils sont étiquetés X 1 , X 2 , ..., X n alors la règle A → X 1 , X 2 , ..., X n appartient à P.
ε aSb
ab aaSbb
aabb aaaSbbb
Arbre de dérivation pour G =({S}, {a, b}, {S -> aSb, S -> ε}, S)
Une grammaire G est ambiguë s’il existe au moins un mot m dans L( G ) auquel correspond plus d’un arbre de
dérivation.
Exemple : E → E + E | E ∗ E | a
Un langage engendré par une grammaire G = (N, T, P, S) est l'ensemble des mots obtenus en appliquant des
séquences de dérivations à partir de l'axiome S. On note :
L(G) = { w ∈ T* / S =>*G w}
Exemples
1. Pour la grammaire G = ({S}, {a, b}, {S -> aSb, S -> ε}, S}, nous avons :
• Mot minimal : ε
• La forme générale : L(G) = { anbn/ n≥ 0}
Remarque
Une grammaire définit un seul langage par contre un même langage peut être engendré par plusieurs
grammaires différentes.
Exemple
1. G = ({S, A, B), {a, b}, {S -> aS| ABb, A -> Aa| a, B -> b}, S)
S -> aS -> aABb ->aaBb -> aabb
S -> ABb -> AaBb -> AaaBb -> aaaBb -> aaabb
2. G '= ({S, A, B), {a, b}, {S -> aS| aA, A -> aA| bB, B -> b}, S)
S-> aS-> aaS-> aaaS->aaaaA->aaaabB-> aaaabb
S-> aS->aaA->aabB->aabb
On trouve que L(G) = L(G') = {a kb2 / k ≥ 1}
Hiérarchie de Chomsky
Selon la classification de Chomsky, les grammaires sont regroupées en quatre types en fonction de la forme
de leurs règles de production.
G est dite grammaire de Type 0 dite aussi grammaire sans restriction (grammaire générale) : si toutes ses
règles sont de la forme suivante :
α β avec α ∈ (N ∪ T) + - T+ et β ∈ (N ∪ T)*
(α peut appartenir a (N ∪ T)+ mais pas à T+ seulement c’est-à-dire la règle de gauche ne peut jamais être
un terminal.) (+ , car on ne peut pas avoir Ɛ à gauche aussi)
Exemple
Remarque : La grammaire est dite sans restriction, parce que il n y a pas de règles sur les règles de
productions.
G dite grammaire de Type 1 dite aussi grammaire contextuelle si toutes ses règles sont de la forme :
Exemple
G =({S, R, T}, {a, b, c}, {S -> Ɛ| aRbc| abc, R-> aRTb| aTb, Tb->bT, Tc->cc}, S)
G est dite grammaire de Type 2 dite aussi grammaire Algébrique (hors contexte) : si toutes ses règles sont de la
forme :
A β avec A ∈ N et β ∈ (N ∪ T)*
Dans cette grammaire la partie gauche de la règle ne doit jamais avoir un terminal.
Exemple
1- G = ({S}, (a, b}, {S -> aSb| Ɛ }, S)
Mots : Ɛ, ab, aabb,aaabbb,…............,anbn
2- G = ({S}, {0, 1}, {S-> 0S0| 1S1| Ɛ| 0| 1} ,S)
Mots : 00, 11, 010, 000, 111, 101101,…...
Pour déterminer si une chaine terminale appartient au langage engendré par une grammaire, on établit un
arbre de dérivation dont la racine est l'axiome, les feuilles sont des terminaux formant la chaine donnée et
les nœuds sont des variables décrivant les règles utilisées.
E -> E * E
-> I * E
-> a * (E)
-> a * (E + E) a
-> a * (I + E) *
-> a * (a + E) (
-> a * (a + I) a
-> a * (a + I0) +
-> a * (a + I00) b
-> a * (a + b00) 0
0
)
On commence à faire une dérivation à gauche
.
seulement, jusqu'à rencontrer un symbole terminal
Arbre de dérivation de
a* (a+b00)
HAYKEL BEN SALEM 22
• Dérivation la plus à gauche de : a*(b+a0)
G est dite grammaire de type 3 dite aussi grammaire régulière : si elle est régulière à gauche ou bien à droite.(pas
régulière à gauche et à droite à la fois)
• Une grammaire G est dite régulière à gauche si toutes ses règles sont de la forme :
• Une grammaire G est dite régulière à droite si toutes ses règles sont de la forme :
Exemple :
• G1 = ({S, A}, {a, b}, {S->Sb| Ab, A->Aa|a}, S) grammaire régulière à gauche. (symboles non terminaux se
trouvent à gauche)
• G2 = ({S, A}, {a, b}, {S->aS| aA, A->bA|b}, S) grammaire régulière à droite. (symboles non terminaux se
trouvent à droite)
• G3 = ({S, A}, {a, b}, {S->aS| aA, A->Ab| b}, S) grammaire n'est pas régulière, puisque n'est ni régulière à
gauche ni régulière à droite. (symboles terminaux se trouvent à gauche et à droite)
Remarques
1- On peut trouver que G1 et G2 engendrent le même langage. G1 génère les mots de ce langage de la droite
vers la gauche mais G2 génère les mots de ce langage de la gauche vers la droite.
2- Il y a une relation d'inclusion stricte entre les 4 types des grammaires c’est-à-dire :
Une grammaire de type i est aussi de type inférieur à i (1≤i≤3)
Type 3 ⊂ Type 2 ⊂ Type 1 ⊂ Type 0
3- Le type retenu pour une grammaire est le type maximum de la grammaire qui vérifie ses règles.
La classification des grammaires va permettre de classer les langages selon le type maximum de la
grammaire qui l'engendre (puisqu'un langage peut être engendré par plusieurs grammaires de types
différents). Il y a une relation d'inclusion stricte entre les 4 types des langages.
On dit qu'un langage est de type i s'il est engendré par une grammaire de type i et pas par une
grammaire d'un type supérieur.
– les grammaires de type 0 permettent de générer tous les langages “décidables”, autrement dit, tous les
langages qui peuvent être reconnus en un temps fini par une machine.
Exemples
L = {anbncn | n≥0}
G = ({S, B, W, X}, {a, b, c}, {S-> abc, S -> aSBc, cB->WB, WB-> WX, WX-> BX, BX-> BC, bB->bb}, S}
L = { anbn | n ≥0}
G =({S}, {a, b}, {S -> aSb| ε}, S)
L = { m ∈ {a, b}*}
G =({S}, {a, b}, {S -> aS | bS| ε}, S)
Remarque :
Si un langage peut être généré par une grammaire de type x et pas par une grammaire d’un type supérieur
dans la hiérarchie, est appelé un langage de type x.
• Une grammaire d’un langage L permet de générer tous les mots appartenant à L.
• Un reconnaisseur pour un langage L est un programme qui prend en entrée un mot m et
répond oui si m, appartient à L et non sinon.
• Pour chaque classe de grammaire, il existe une classe de reconnaisseurs qui définit la même
classe de langages.
Définition
Une grammaire régulière, rationnelle ou à états finis est une grammaire qui décrit un langage régulier. Les
grammaires régulières donnent donc une autre possibilité que les expressions rationnelles et les automates
finis pour décrire un langage régulier.
35
Grammaires régulières versus automates finis
Axiome : S
Règles :
S → aS | aaT | bb
T → a | bT | S | bS | Ɛ
Il faut rajouter un état final F → Ɛ et pour toutes les productions quand une partie droite n'a pas de non
terminal on ajout F à la suite. Donc on aura :
S → aS | aaT | bbF
T → aF | bT | S | bS | ƐF
F→Ɛ
Cette grammaire reconnait le même langage que celle d'avant, parce que on a ajouté que F qui prend Ɛ
T→ S n'a
pas de lettre terminale
donc on met Ɛ Pour cette
transition. Même chose pour
T→F
Il faut transformer cet automate en automate classique, quand on a plusieurs lettres il faut ajouter des
états.
Définition (Rappel)
Une grammaire hors contexte dite aussi à contexte libre ou non contextuelle, ou
algébrique, est une grammaire qui ne dépend pas du contexte.
Grammaire propre
40
Calcul des improductifs
Remarque : On obtiendrait une grammaire équivalente à celle de départ en supprimant toutes les
productions contenant un improductif en partie gauche ou droite.
X est productif :
• Ou s'il existe une production X → α avec α ∈ (N ∪ T)* tel que tous les non-
terminaux apparaissant dans α sont productifs.
Procédures de dérivations
Etape 1 : Inclure tous les symboles non terminaux W1 qui dérivent les terminaux et
initialiser i = 1.
Algorithme naïf pour calculer un plus petit point fixe par itérations successives :
46
Pour toute production X = u1X1u2.......Xnun
Tant que X ∉ Prod // X pas encore traité
Et {X1, ….Xn} ⊆ Prod //X Productif
Faire New = New ∪ {X}
Fin Faire
Prod = Prod ∪ New
Fin faire
Définition
Idée
X est accessible si :
C'est l'axiome.
Ou il existe une production Y → αXβ telle que Y est accessible.
Même principe d’itération de point fixe que pour les accessibles mais on cherche
les candidats en partie droite de production.
Etape 2 : inclure dans l'ensemble Yi+1 tous les symboles qui peuvent êtres dérivés
de Yi.
1. S→Y
2. Y→YZ
3. Y→Ya
4. Y→b
5. U→V
6. X→e
7. V→Vd
8. V→d
9. Z→ZX
Acc = {S, Y , Z , X }
En supprimant U et V partout on obtient la grammaire équivalente à G :
G'2 telle que :
1. S → Y
2. Y → YZ
3. Y → Ya
4. Y → b
6. X → e
9. Z → ZX
Dans une grammaire non contextuelle, un symbole non terminal est annullable,
s'il a une production A → ϵ, ou il y a une dérivation qui commence par A et arrive
à ϵ. (A → …......→ ϵ)
Procédure d'élimination :
Pour éliminer A → ϵ il faut voir toutes les productions qui ont un A dans la partie
droite.
Remplacer chaque occurrence de 'A' dans toutes les règles par ϵ.
Ajouter les nouvelles productions à la grammaire.
Exemple
Soit la grammaire définie par : S → AB | aS | A | B | a
A → Ab | b
B → AS | A | S
On a un cycle de variables S, B.
On remplace B par S, puis on supprime B :
S → AS | aS | A | S | a,
A → Ab | b
Grammaire :
1. S →T| U
2. U → aYb| V
3. V → W
4. X → Wa
5. Y → Z
6. Z → c| ϵ
Etapes
• Symboles productifs :
• Symboles accessibles :
• ϵ-productions :
• Productions simples :
Grammaire :
1. S →T| U
2. U → aYb| V
3. V → W
4. X → Wa
5. Y → Z
6. Z → c| ϵ
Etapes
• Symboles productifs : {X; Z; Y; U; S} ⇒ retirer T, V et W
• Symboles accessibles :
• ϵ-productions :
• Productions simples :
Grammaire :
1. S →U
2. U → aYb
4. X → a
5. Y → Z
6. Z → c| ϵ
Etapes
• Symboles productifs : {X, Z, Y, U, S} ⇒ retirer T, V et W
• Symboles accessibles : {Z, Y, U, S} ⇒ retirer X
• ϵ-productions :
• Productions simples :
Grammaire :
1. S →U
2. U → aYb
5. Y → Z
6. Z → c| ϵ
Etapes
• Symboles productifs : {X, Z, Y, U, S} ⇒ retirer T, V et W
• Symboles accessibles : {Z, Y, U, S} ⇒ retirer X
• ϵ-productions : {Z, Y} ⇒ Modifier 6 et 2
• Productions simples :
Définition
une grammaire hors contexte est sous la forme normale de Chomsky si chaque
règle est l'une des formes suivantes :
A → BC
A→a
Avec a est un terminal, A est non terminal, et B et C sont des non terminaux autres
que l'axiome.
Théorème :
Tout langage hors contexte est généré par une grammaire hors contexte.
Preuve constructive :
En supprimant ou en remplaçant tous les règles sous une mauvaise forme.
S1 → S1b| Ab|b
A → aAb| ab
S2 → S2a| Ba| a
B → bBa| ba
79
Propriétés des grammaires hors contextes
Définition
Un langage L est dit hors-contexte, s’il est engendré par une GHC.
formellement, un langage L est hors-contexte, si et seulement, il existe une GHC G
telle que L = L(G ).
Théorème
- La classe des langages hors-contexte est close par opérations régulières, c’est-
à-dire par :
• union.
• concaténation.
• Étoile.
- La classe des langages hors-contexte est close par miroir.
i. S' = S : l’axiome de G .
ii. V' = V.
iii. P' = {X → ᾶ | X → α ∈ P} (Chaque production on fait l'image de son
corps)
Attention :
les langages algébriques ne sont pas clos par intersection et complémentaire.
Exemple
S → ScA|B
A → Aa| ε
B → Bb |d |e
A → βA’
A’ → αA’|ε
Exemple
Sur l'exemple on obtient : S → BS’
S’ → cAS’|ε
S → ScA|B A → A’
A → Aa| ε A’ → aA’|ε
B → Bb |d |e B → dB’|eB’
B’ → bB’|ε
Autre Exemple :
E→ E + T|E * k|C|D
E → CE’|DE’
E’ → +TE’|*KE’|ε
L’idée de base est que pour développer un non-terminal A quand il n'est pas
évident de choisir l'alternative à utiliser (quelle production prendre), on doit réécrire
les productions du A de façon à différer la décision jusqu’à ce que suffisamment de
texte ait été lu pour faire le bon choix.
Exemple :
S→ bacdAbd|bacdBcca
A→ aD
B→ cE
Pour savoir s’il faut choisir S→ bacdAbd ou S→bacdBcca, il faut avoir lu la 5éme
lettre du mot (un a ou un c). On ne peut donc pas dès le départ pour savoir quelle
production prendre.
A → αA’|δ1...|δn
A’ → β1|...|βn
Exemple
S → aEbS|aEbSeB|a
E → bcB|bca
B→ ba
Factorisée à gauche cette grammaire devient :
S→ aEbSS’|a
S’→ eB|ε
E→ bcE’
E’→ B|a
B→ ba