Académique Documents
Professionnel Documents
Culture Documents
Programme en
Programme JAVA JavaC
Byte-Code
Analyse syntaxique et compilation - généralités – p.3/48 Analyse syntaxique et compilation - Plan du cours – p.4/48
Analyse d’un texte Analyse lexicale
Le compilateur vérifie avant tout que le programme est L’analyse lexicale lit les mots caractère par caractère, vérifie que
syntaxiquement correct. les mots sont bien formés et “remplace” chaque mot par une
unité lexicale.
les mots utilisés doivent être corrects (analyse lexicale)
En français,
les mots doivent formés des phrases correctes (analyse
Le petit chat mange la souris
syntaxique)
puis, le typage est vérifié et finalement le code est produit. Analyseur Lexical
(= dictionnaire)
’+’ ’-’ ’0’ ’9’
Analyseur Lexical
Pour les identificateurs (en JAVA),
ident ins_affect int op_mul ident op_plus int ’a’ ’z’’A’ ’Z’ ’_’ ’a’ ’z’’A’ ’Z’’0’ ’9’ ’_’
les entiers,
Analyseur lexical Automate
les flottants,
les identificateurs, En général, à un mot ne correspond qu’une seule unité lexicale
(notion de mots-clés réservés).
... sont des langages réguliers.
Un langage sur un alphabet est dit régulier s’il peut être : En français, les phrases syntaxiquement correctes sont définies
engendré sur l’alphabet , le mot vide et le langage vide à l’aide d’une grammaire.
par union, concaténation et étoile.
décrit par une expression régulière.
Groupe_Verbal verbe Groupe_Nominal
reconnu par un automate d’états finis. Groupe_Nominal déterminant NomAdj
Les langages réguliers sont clos par
Phrase
intersection, union et complémentaire Groupe_Nominal Groupe_Verbal
concaténation et étoile
NomAdj Groupe_Nominal
morphisme
NomAdj
déterminant adjectif nom verbe déterminant nom
Analyses lexicale et syntaxique – p.9/48 Analyses lexicale et syntaxique – p.10/48
Les programmes (en Java, en C, ...) sont-ils des langages Une grammaire algébrique (ou hors-contexte) est définie par un
réguliers ? quadruplet où :
est un ensemble fini de terminaux,
doit être une expression arithmétique correcte, mais
également , ,...
Il faut autant de parenthèses ouvrantes que de parenthèses
fermantes (similaire à avec ).
est un ensemble fini de règles de
Les langages réguliers sont donc insuffisants. On va présenter production.
une classe de langages plus large: les langages algébriques
Remarque : on suppose ; est l’ensemble des
(ou hors-contexte).
mots écrits sur l’alphabet .
Pour décrire un langage algébrique, on utilise une
Notation : on note souvent comme .
grammaire algébrique.
Analyses lexicale et syntaxique – p.11/48 Grammaires Algébriques – p.12/48
Un exemple Dérivations
avec Soient une grammaire algébrique et deux
mots de ,
Un mot se dérive en un pas en un mot par G si
il existe une règle de ,
une décomposition de ,
une décomposition de
Notation : on note si se dérive en un pas en par .
Noté de manière plus concise,
Proposition 1: Pour toute grammaire algébrique , pour tout
, si alors .
Dérivations Dérivations
"
Un mot se dérive en pas en un mot (noté ) si
!
# #
et ,
$! !
'&"
%
%
%
et il existe un mot tel que et .
"
Le séquence est appelé
( (
"
)))
!
"
entier naturel tel que .
Remarque : pour dériver un mot , deux sources de choix
choix d’un non-terminal dans , la relation .
"
"
pour tout entier , si alors .
!
si alors .
Voici une dérivation de à :
Preuve : Par récurrence sur en utilisant la Proposition 1.
!
Lemme : Pour toute grammaire algébrique , pour tout
et .
!
!
"
"
"
Si et alors avec .
!
" !
!
"
Preuve : Puisque , par la Proposition 2, .
Cette dérivation est de longueur 8.
"
"
Puisque , par la Proposition 2, . Donc,
"
"
.
Grammaires Algébriques – p.17/48 Grammaires Algébriques – p.18/48
Remarque : pour une grammaire d’axiome , on parle de
l’ensemble et .
dérivation pour le mot pour désigner une dérivation de à .
Le langage étendu engendré par la grammaire , noté
Remarque :pour une grammaire , un mot peut avoir plusieurs
est l’ensemble et .
dérivations et de longueurs différentes.
Remarque : le mot appartient au langage (étendu) engendré
avec
Pour le mot ,
algébrique engendrant ( ).
elles engendrent le même langage ( ).
Grammaires Algébriques – p.19/48 Grammaires Algébriques – p.20/48
Lemme fondamental des “algébriques” Lemme fondamental des “algébriques”
% %
%
Lemme : Soit une grammaire algébrique. Soient si alors il existe et dans
!
%
%
% %
et . tels que et .
!
"
Si alors il existe et tels que
!
!
%
%
%
Si est dans , alors et . On
%
% %
choisit , , et .
!
! !
#
,
%
%
"
%
%
! %
Si est dans , alors et . On
"
, et .
!
!
!
choisit , , et .
!
#
si , on suppose que le théorème est vrai pour . Pour
!
Preuve : par récurrence sur l’entier :
!
?
!
si , alors . On choisit , ,
!
" !
!
#
#
"
"
%
On a . Par hypothèse de récurrence, il
!
. On a bien
et .
"
"
existe et tels que , ,
!
et .
!
% !
!
% %
% !%
!% !%
!% %
%
Puisque , il existe et tels que
"
"
%
%
, , et .
Grammaires Algébriques – p.21/48 Grammaires Algébriques – p.22/48
! "
"
"
!% "
% %
!% %
%
Donc et , i.e. avec
!%
!%
et avec .
!
engendré par la grammaire avec
Or, on a
%
%
%
!%
!%
!%
!%
.
!
!
!
!
!
Grammaires Algébriques – p.23/48 Grammaires Algébriques – p.24/48
Expressivité Expressivité
!
%
"
. Maintenant, par le lemme fondamental pour
pour tout mot de , pour un
%
!%
!%
%
%
et , on peut trouver et tels que
certain .
"
"
%
%
%
%
!%
!%
%
%
et , et .
!
"
Si alors il existe tel que . Notons que
!
"
%
%
!%
%
Comme , on a et et donc .
% #
!
"&
est impossible. Montrons que pour tout , si
!
" #
Par hypothèse de recurrence, on a .
"&
alors . Par récurrence sur l’entier .
!
"&
"&
"
"
""
"" %
Comme de plus , on a . Or
"
, donc .
si alors comme , nécessairement .
!
supposons la propriété vraie pour . Pour , on a
!
!
pour tout ,
"
!
!
"
"
que et ! , et .
!
!
pour : donc .
#
Grammaires Algébriques – p.25/48 Grammaires Algébriques – p.26/48
Expressivité Expressivité
, donc .
algébriques ?
Grammaires Algébriques – p.27/48 Grammaires Algébriques – p.28/48
Propriétés de clôture Propriétés de clôture
Les langages algébriques sont clos par : Les langages algébriques ne sont clos pas par :
%
union : si sont algébriques, alors est un
%
intersection : il existe deux algébriques tels que
algébrique. n’est pas un algébrique.
%
concaténation : si sont algébriques, alors est un
complémentaire : il existe un algébrique tel que n’est
)
algébrique. pas un algébrique.
étoile : si est algébrique, alors est un
Preuve : en TD
algébrique.
Preuve : en TD
Récapitulatif : Une grammaire est dite régulière si toute règle
de production de est
langages réguliers langages algébriques
soit de la forme avec et ,
soit de la forme .
Union Oui Oui
Concaténation Oui Oui
Exemple :
Etoile Oui Oui
Intersection Oui Non
Complémentaire Oui Non
régulière.
régulière.
Théorème : Soit une grammaire régulière, le ATTENTION :
langage est régulier. Toute grammaire régulière engendre un langage régulier mais ...
Preuve : en TD il existe des grammaires non-régulières qui engendrent des
Théorème : Soit un langage régulier. Il existe une grammaire langages réguliers
régulière telle que .
La grammaire avec
engendre le langage qui est bien un langage régulier.
Preuve : en TD
grammaire régulière.
Une grammaire formelle est donnée par avec Avec une grammaire algébrique, on ne peut pas spécifier par
. exemple en JAVA:
Hiérarchie de Chomsky : méthode de la classe de l’objet .
Pour ,
avec le bon nombre de paramètres.
Grammaire arbitraire
Grammaire contextuelle et
Grammaire algébrique
Grammaire régulière
Considérons avec Les deux dérivations
Les deux dérivations
ne sont pas “équivalentes”.
Dans la première, l’axiome se dérive en tandis que
sont “équivalentes”. dans la seconde l’axiome se dérive en .
Dans les deux dérivations, les mêmes non-terminaux sont Il nous faut une structure plus riche pour pouvoir distinguer les
dérivés avec la même règle de production. Seul l’ordre dans dérivations “équivalentes” de celles qui ne le sont pas; cette
lequel se font ces pas de dérivation varie. structure est l’arbre de dérivation.
nœud interne sont ordonnés. De plus, il vérifie que : On part d’un arbre n’ayant qu’un seul nœud, la racine
la racine est étiquetée par l’axiome de la grammaire, étiquetée par l’axiome.
les nœuds internes sont étiquetés par des non-terminaux, pour une dérivation en un pas , il existe un
non-terminal dans et une production dans tels
les feuilles sont étiquetées par des terminaux ou ,
un nœud interne et ses fils correspondent à une règle de est le ième symbole de , alors on étend l’arbre ajoutant à
production. sa ième feuille les fils correspondant à la règle .
Par exemple,
On a On a
)))
)))
Pour ces deux dérivations, les arbres sont différents.
Grammaires Algébriques – p.41/48 Grammaires Algébriques – p.42/48
Pour :
l’arbre construit est le même :
Grammaires Algébriques – p.43/48 Grammaires Algébriques – p.44/48
Arbres de dérivation Arbres de dérivation
Pour construire une dérivation : à chaque pas, Proposition : Un mot de appartient à ssi il existe un
choix d’un non-terminal dans , arbre de dérivation dont les feuilles lues de gauche à droite
forme le mot .
choix d’une règle de production de membre gauche .
Pour construire un arbre de dérivation : Un arbre de dérivation pour le mot :
L’ordre selon lequel les non-terminaux sont choisis n’est
plus important. On n’en retrouve pas trace dans l’arbre de
dérivation.
Seul le choix des règles de production est explicitement
présent dans l’arbre de dérivation.
Grammaires Algébriques – p.45/48 Grammaires Algébriques – p.46/48
Lors de la construction d’une dérivation gauche, à chaque pas, Proposition : Un arbre de dérivation ne correspond qu’à une
on choisit de dériver le non-terminal le plus à gauche. seule dérivation gauche.
Preuve : Parcours “en profondeur et à gauche d’abord” de
l’arbre de dérivation.
On élimine donc le choix du non-terminal à dériver. Mais reste le Proposition : Une dérivation gauche ne correspond qu’à un seul
choix de la règle de production. Donc ... arbre de dérivation.
A un mot peut correspondre plusieurs dérivations gauches : Preuve : A chaque pas de la dérivation, on sait précisément quel
non-terminal a été dérivé (le plus à gauche). A chaque pas dans