jean-jacques.levy@inria.fr
21 janvier 1998
Les supports de cours sont enhttp://www.polytechnique.fr/poly/edu/informatique/ http://www.polytechnique.fr/poly/~levy/
Livres:
Introduction
Langages
Soit un alphabet (fini) donné,
un mot est une chaîne de caractères de ,
le mot vide a une longueur nulle,
est l'ensemble des mots sur
,
est l'ensemble des mots non vides sur
.
On appelle langage tout sous-ensemble L de .
uv est le mot obtenu en concaténant u et v,
et
(uv)w = u(vw).
Exemples de langages
Prenons et notons wR l'image miroir de w:
Algorithmes et semi-algorithmes
Attention: ici récursif est dans le sens de Kleene, donc différent de celui de la programmation. On dit aussi que l'appartenance à un langage récursif est décidable.
Grammaire
On cherche une description finie d'un langage (éventuellement infini). Chomsky a inventé la notion de grammaire formelle.
Une grammaire G est un quadruplet où:
est l'alphabet des terminaux (ou tokens),
VN est l'alphabet des non-terminaux, ,
est l'axiome,
est un ensemble fini de règles de production de la forme
avec
,
,
Dérivations
Une grammaire génère les mots d'un langage en dérivant l'axiome.
Si est une règle de production, on peut dériver
le mot
en
. On écrit
.
On pose si
, où
(fermeture transitive de
).
Le langage généré par G est défini par
C'est donc l'ensemble des mots de l'alphabet terminal que l'on peut dériver depuis l'axiome.
Exemples de grammaire
![]() ![]() |
|
![]() |
|
![]() |
|
![]() |
|
![]() |
|
![]() |
|
![]() |
|
![]() |
![]() ![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
Classification de Chomsky
4 types de grammaires selon la forme des règles de production.
type 0: quelconque
type 1: avec
(context sensitive)
type 2: ,
(context free - algébrique)
type 3:
![]() |
|
![]() |
avec ,
,
Un langage est de type i s'il existe une grammaire de type i qui le génère: langages réguliers, context-free, ou context-sensitifs.
Autres exemples de grammaires
![]() ![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() ![]() |
|
![]() |
|
![]() |
|
![]() |
|
![]() |
|
![]() |
|
![]() |
|
![]() |
|
![]() |
|
![]() |
|
![]() |
La chaîne vide
Seuls les langages de type 0 contiennent le mot vide
. Pourtant, on voudrait que
soit de
type i, si L est de type i.
On change la classification de Chomsky en autorisant la règle à chaque type de grammaire, pourvu que S ne soit pas
utilisé dans les parties droites des règles de production. La règle
ne peut donc être utilisée que pour ajouter
dans le langage généré.
Lemme 1 Si G est de type i, il existe G1 de type i telle que L(G) = L(G1) et G1 n'utilise pas son axiome dans les parties droites de ses règles.
La démonstration est laissée en exercice.
Théorème 1 Si L est de type i, alors et
sont de type i.
Exercices
On note le nombre de a que contient le mot x. Trouver
des grammaires générants les langages suivants:
Montrer que les langages réguliers sont aussi engendrés par des
grammaires dont les productions sont de la forme:
où
Montrer qu'il existe un algorithme pour reconnaître tout langage context-sensitif.
Montrer qu'il existe un semi-algorithme pour reconnaître tout langage de type 0.