Académique Documents
Professionnel Documents
Culture Documents
Partie 1
2
Grammaires et
Langages hors-contexte
➢
Grammaires hors-contexte
➢
Forme normale pour les grammaires
hors-contexte
➢
Arbres syntaxiques
➢
Forme normale pour les grammaires
hors-contexte
➢
Lemme de l'étoile pour les langages
hors-contexte
3
Grammaires hors-contexte
●
Formalisme
●
Dérivations
●
Forme de Backus-Naur
●
Dérivations à gauche et à droite
4
Fondements linguistique
● Chomsky (1959): linguiste travaillant sur les
langues naturelles
● Exemple : Pour construire une phrase
● ADJECTIF→DIFFICILE | AGREABLE |
DELICIEUSES
5
Fondements linguistiques
● On peut construire par des substitutions
successives des phrases telles que :
ou
● MADOU MANGE DES BANANES DELICIEUSES
6
Grammaire hors-contexte (GHC)
● Une grammaire hors-contexte (algébrique)
est une notation pour la description des
langages
● Elle utilise des « variables » pour
axiome de la grammaire. S ⊂ Σ1 8
Productions et dérivations
● A, B, C,... sont des variables.
● a, b, c,... sont des terminaux.
variables.
● ..., w, x, y, z sont uniquement des chaînes de
terminaux.
●
α, β, γ, ... sont des chaînes de terminaux
et/ou de variables.
9
Productions et dérivations
● Soit la grammaire hors contexte G = (Σ 1, Σ2, P, S)
où Σ1 = {S, A} et Σ2 = {a, b}.
●
On dit que αSβ→αγβ est une dérivation dans G si
S →γ est une production de G.
● Exemple :
●
Cas de base: α →* α pour toute chaîne α.
●
Cas d'induction: si α→* β et β→γ, alors α→* γ.
● Exemple:
✔ S→01; S→0S1.
✔ S→0S1→00S11→000111.
11
Formes déclaratives
● Toute chaîne de variables et/ou de terminaux
dérivée du symbole de départ est appelée une
forme déclarative.
●
Formellement, α est une forme déclarative si
S →* α.
● Remarque : une forme déclarative d'une une
12
Langages hors contexte (LHC)
13
Langage hors contexte (LHC)
● Définition: un langage L est dit hors
contexte s’il existe une grammaire hors
contexte G = (Σ1, Σ2, P, S) telle que L = L(G).
●
Si u ∈L(G) alors u est une chaîne terminale
● G et H sont équivalentes si elles génèrent le
● Exemple:
✔ S::= 0S1 | 01 est un raccourci pour
S→ 0S1 et S→01.
18
Notation BFN – fermeture de Kleene
● Le symbole ... est utilisé pour “un ou plusieurs.”
● Exemple: <digit> ::= 0|1|2|3|4|5|6|7|8|9
expressions régulières
●
Translation: Remplace α... par une nouvelle
variable B et des productions suivantes: B→Bα| α.
● Exemple: la grammaire pour les entiers peut être
remplacée par:
✔ A ::= AB | B
✔ B ::= 0|1|2|3|4|5|6|7|8|9
19
Notation BNF : Éléments Optionnels
● Mettre un ou plusieurs symboles dans […] pour les
rendre optionnels.
● Exemple: <déclaration> ::= if <condition> then
●
Translation: remplacer [α] par une nouvelle
variable A avec des productions A→α | ε.
● Exemple: la grammaire pour if-then-else peut être
remplacée par:
S→iCtSA
A→;eS | ε
20
Notation BNF – groupage
● Utiliser { … } pour entourer une séquence de symboles qui nécessitent d'être traités
comme un tout. Les symboles sont suivis par ... pour “un ou plusieurs.”
● Exemple:
<liste de déclarations> ::= <déclaration>
[{;<statement>}...]
21
Translation : groupage
●
Il est possible de créer une nouvelle variable A pour {α}.
✔
une production pour A: A→α.
✔
utiliser A à la place de {α}.
● Exemple :
L→S [{;S}...]
● Remplacer par L→S [A …], A →;S
✔ A donne {;S}.
✔ C donne A ...
22
Dérivations de gauche et
dérivations de droite
● Les dérivations permettent de remplacer toutes les
variables dans une chaîne. Une même chaîne
peut avoir plusieurs dérivations différentes.
● Dérivations à gauche :
✔ Soit uAα→ uβα si u est une chaîne de terminaux
g
uniquement et A→β est une production.
✔ Aussi, α→ * β si α devient β par une séquence de
g
0 ou plusieurs étapes →g.
23
Exemple : dérivations de gauche
● Grammaire des parenthèses bien fermées:
S →SS | (S) | ()
24
Dérivations de droite
● αAu →d αβu si u est une chaîne de terminaux
uniquement et A→β est une production.
● Ainsi, α →* β si α devient β par une suite de 0 ou
d
plusieurs étapes de →d.
26
Arbres syntaxiques
● Les arbres syntaxiques sont des arbres
étiquetés par des symboles d'une grammaire
GHC.
● Feuilles : étiquetées par un terminal ou ε.
● Nœuds Intérieurs: étiquetés par une variable.
✔ Les fils sont étiquetés par le côté droit d'une
production du parent.
● Racine: doit être étiquetée par le symbole initial.
● A une dérivation correspond un arbre syntaxique
● A un arbre syntaxique correspond une ou
plusieurs dérivations.
27
Exemple : Arbre syntaxique
S
● S→SS | (S) | ()
S S
( S ) ( )
( )
28
Production d'un arbre syntaxique
● La concaténation des étiquettes des feuilles de
gauche à droite est appelée la production de
l'arbre syntaxique.
● Exemple :
30
Arbre syntaxique : dérivations à
gauche et à droite
● Pour tout arbre syntaxique, il y a une unique
dérivation à gauche et une unique dérivation à
droite.
●Preuve:
1) S'il y a un arbre syntaxique avec une racine
étiquetée A et une production u, alors A→*g u.
2) Si A →*gu, alors il y a un arbre d'analyse de
racine A et de production u.
32
Grammaires ambiguës
● Une GHC est ambiguë s'il y a une chaîne dans le
langage qui est la production de plusieurs arbres
syntaxiques.
33
Grammaire ambiguë
Définition: Une GHC est ambiguë s'il y a une chaîne dans
le langage qui est la production de plusieurs arbres.
On parle de grammaire ambiguë et non de langage ambigu
Exemple: S →SS | (S) | ()
35
Ambiguïté
● Nous avons vu que la grammaire donnée pour le
langage des parenthèses bien fermées est
ambiguë : S→SS | (S) | ().
● Il y a une possibilité pour lever cette ambiguïté
● S→(AS | ε
● A→) | (AA
37
Processus d'analyse
● chaîne restante: ● Étapes de dérivation
(())() de gauche :
S
Prochain symbole
46
Classification des grammaires :
hiérarchie de Chomsky
Une grammaire G = (∑1, ∑2, P, S) est dite de :
1. type 0, en général. Aucune restriction n'est
imposée.
2. type 1 ou contextuel,si toutes les règles sont de la
forme : αΑβ →αγβ ∈P, Α →γ on a : |γ| ≠ 0. On parle
de sensibilité au contexte : α et β.
3. type 2 ou hors-contexte, si toutes les règles sont
de la forme S→α.
4. type 3 ou linéaire (à gauche ou à droite), si toutes
les règles sont de la forme : S → Aa, S → a
ou S → aA, S → a. 47
Relation entre grammaires de types
différents
● Si G est de type 1, elle est aussi de type 0
● Si G est de type 2, elle est aussi de type 1
● Si G est de type 3, elle est aussi de type 2
48
Types de langage
49
Types de langage
● Définition : Un langage L ⊆ ∑2* est de type i,
s’il existe une grammaire G = (∑1, ∑2, P, S) de
type i avec L = L(G).
●
Exemple: {anbncn | n ∈Ν} est de type 1.
✔ S→abc | aAbc
✔ Ac → Bbcc
✔ aB → aaA | aa
✔ Ab → bA
✔ bB → Bb
50
Types de langage
●
{anbn| n ∈N} est de type 2 (déjà vu).
●
{anbm | n, m ∈N} est de type 3.
✔ S→aS | bB | b | ε
✔ B→bB | b
51
Équivalence de modèles
52
Équivalence de modèles
● Théorème: le langage L est linéaire (type 3)
ssi il est régulier.
53
Équivalence de modèles
● Démonstration:
● Étape 1: Soit G = (∑1, ∑2, P, S) une grammaire
linéaire telle que L = L(G). On définit l’automate
A = (∑2 ∪ {f}, ∑2, S, δ, F) tel que:
✔
(A, a, B) ssi A → aB ∈P.
✔
(A, a, f ) ssi A → a ∈P.
✔
F = {f} ∪ {S | S → ε ∈P}.
54
Équivalence de modèles
● Démonstration:
● Étape 2: Soit A = (Q, Σ, q0, δ, F) un ADEF qui
reconnaît L. On définit la grammaire
G = (Q, Σ, P, q0) avec:
●
q→ a ∈P ssi δ(q, a) ∈ F .
●
q→ aq′ ∈P ssi δ(q, a) = q′ .
● q0→ ε ∈ P ssi q0 ∈F .
55
Exemple :
● On considère la grammaire G donnée par: {a nbm |
n, m ∈N} est de type 3.
● S →aS | bB | b | ε
● B →bB | b a
b
S f
b b
b
56
Forme normale pour les
grammaires hors-contexte
●
Élimination des variables inutiles
●
Suppression de epsilon
●
Suppression des productions unitaires
●
Forme normale de Chomsky
57
Les variables qui ne dérivent rien
● Soit la grammaire G avec les productions
suivantes:
S→AB, A→aA | a, B→AB
58
Une variable dérive t-elle une chaîne
terminale ?
● Cas de base: s'il y a une production A→u, où u n'a
aucune variable, alors A dérive une chaîne terminale.
●
Cas d'induction: s'il y a une production A→α, où α est
constitué uniquement de terminaux et de variables qui
dérivent des chaînes terminales, alors A dérive une
chaîne terminale.
59
Élimination des variables qui ne
dérivent rien
Algorithme :
1.Identifier toutes les variables qui dérivent des
chaînes terminales.
2.Pour toutes les autres variables, supprimer toutes
les productions dans lesquelles elles
apparaissent soit à gauche, soit à droite.
60
Exemple de suppression des
variables qui ne dérivent rien
Soit la grammaire G avec les productions
suivantes :
S→AB | C, A→aA | a, B→bB, C→c
62
Les symboles inaccessibles
● Lorsque tous les symboles accessibles ont été
identifiés, alors ceux qui n'en font pas partie sont
dits inaccessibles.
● Seuls les symboles accessibles doivent
demeurer dans les productions de G, donc des
dérivations de S.
● Algorithme: il consiste à supprimer de la
grammaire tous les symboles non découverts à
partir de S ainsi que toutes les productions dans
lesquelles ils apparaissent.
63
Symboles utiles versus
symboles inutiles
● Un symbole est utile s'il apparaît dans une
dérivation d'un chaîne terminale depuis l'axiome.
Autrement, il est inutile.
64
Exemple
Soit la grammaire G avec ces productions :
S→A, A→C, C→c, B→bB
● Si nous éliminons d'abord les symboles
inaccessibles, nous allons trouver tout ce qui est
accessible :
✔ B est inaccessible,
✔ A, C, et c sont accessible et ne seront pas
éliminés.
65
Epsilon Productions
● Un symbole est ε-productif s'il est sous la forme
A→ε.
● ε ne sera pas dans la grammaire d'un langage qui
n'a aucune ε-production.
● Théorème: Si L est un LHC, alors L-{ε} a une
GHC sans ε-productions.
66
Suppression des symboles ε-
productifs
● Pour éliminer les ε-productions, il faut d'abord
identifier les variables qui dérivent ε. Il s'agit de
toutes les variables A telles que : A→* ε.
● Cas de base: s'il y a une production A→ε, alors
A est ε-productif.
●
Cas d'induction: s'il y a une production A→α, et
tous les symboles de α dérivent ε, alors A est ε-
productif.
67
Exemple
Soit la grammaire G avec ces productions :
S→AB, A→aA | ε, B→bB | A
68
Élimination des ε-Productions
● Idée: identifier toutes les variables dont ε est
dérivable.
● But : Soit une grammaire G = (Σ1, Σ2, P, S).
Déterminer l’ensemble Σ1-ε = {X ∈Σ1/ X →* ε}.
● Méthode: Définit un sous-ensemble Σk de Σ1 par :
✔ cas de base : {X ∈Σ1; X →ε ∈P} pour k = 1;
✔ cas inductif : Σk = Σk−1∪ {X ∈Σ1/(∃ u ∈Σ1*)
(X→u ∈P)} pour k≥2.
● Alors on a Σ1-ε = Σl, où l est le plus petit indice
vérifiant Σl+1 = Σl.
69
Élimination des ε-Productions
● Il s'agit de créer une grammaire G' à partir de G=
(Σ1, Σ2, P, S) qui ne contient pas de production ε :
L(G') = L(G') - {ε}
● Algorithme: soit G = (Σ1, Σ2, P, S) ; déterminer
Σ1-ε= {X ∈Σ1/ X→ε ∈P} à l’aide de l’algorithme
précédent; former G' à partir de G en supprimant
toutes les ε−productions et en ajoutant, pour
chaque production X→u de G avec u ≠ ε, toutes les
productions X→u' où u' est un mot non vide obtenu
à partir de u en supprimant des occurrences de
variables dans Σ1-ε.
●
70
Exemple: Élimination des ε-
Productions
Soit la grammaire G avec ces productions : S→ABC, A →
aA | ε, B → bB | ε, C → ε
● A, B, C, et S dérivent tous ε.
● Nouvelle grammaire G':
✔ S → ABC | AB | AC | BC | A | B | C
✔ A → aA | a
✔ B → bB | b
● C est devenu inutile, ses productions doivent être
éliminées. Donc G' donne ces productions :
✔ S → AB | AB | A | B | A | B
✔ A → aA | a
✔ B → bB | b 71
Productions unitaires
● Une production unité est celle dont le côté droit
est constitué exactement d'une variable.
● Ces productions peuvent être éliminées.
● idée: si A→* B par des séries de productions
unitaires, et B→α est une production non
unitaire, alors A →α est une production unitaire.
● Puis supprimer toutes productions unitaires.
72
Productions unitaires
● Trouver tous les couples (A, B) tels que A→* B
par une séquence de productions unitaires
uniquement.
● Cas de base: (A, A) car A→* A.
● Cas d'induction: si nous avons trouvé (A, B), et
B→C est une production unitaire, alors (A, C) est
aussi une production unitaire.
73
Suppression des productions
unitaires
● Il s'agit de partir d'une grammaire G sans cycle et
construire une grammaire équivalente à G nommée
G' sans production-unitaire.
● Algorithme: Supposons G = (Σ1, Σ2, P, S). Choisir
une variable X0 telle qu’il existe au moins une
production-unitaire du type X→* X0, mais pas de
production-unitaire de type X0→X (G aurait un
cycle). On définit G' à partir de G en supprimant les
productions unitaires X→ X0 et en ajoutant, pour
chacune d’elles, toutes les productions X→u telles
que X0→u ∈P. Itérer jusqu’à ce qu’il ne reste plus
de production-unité. 74
Exemple: suppression des
productions unités
● Soit la grammaire G avec ces productions :
S→A| ε, A→Aa| Ab| a| b
● La grammaire G' (sans production unitaire) donne les
productions suivantes :
75
Nettoyage d'une grammaire
● Théorème: si L est un LHC, alors il y a une
grammaire GHC pour L – {ε} qui n'a:
● Aucun symbole inutile.
● Aucune ε-production.
● Aucune production unité.
● C'est-à-dire, tout côté droit d'une règle est soit un
terminal, soit de longueur > 2.
76
Forme normal de Chomsky
77
Forme normal de Chomsky
● Une GHC est dite en forme normale de Chomsky si
toute production est sous l'une de ces formes :
1. A→BC (le côté droit a deux variables).
2. A→ a (le côté droit est un symbole terminal).
81
Bibliograbphie
1. J. Hopcroft, R. Motwani, J. Ullman : « Introduction to Automata
Theory, Languages and Computation », 2nd edition,
Addison-Wesley, 2001.
2. Yassine Lakhnech : « Automates et langages ».
3. Anne Fouilloux : « langages », année 2012-2013.
82