Vous êtes sur la page 1sur 12

Compilation

Compilation : traduction d’un programme d’un langage source


en un programme d’un langage cible.
Analyse Syntaxique et Compilation
Compilateur : programme assurant la compilation.
Licence Informatique
Jean-Marc TALBOT Programme en
Programme C GCC
talbot@lifl.fr langage machine

Bâtiment M3 - bureau 334

Programme en
Programme JAVA JavaC
Byte-Code

– p.1/48 Analyse syntaxique et compilation - Généralités – p.2/48

Compilation Plan du cours


1. Analyses Lexicale et Syntaxique
(a) Langages réguliers (Rappel)
Programme Programme
Compilateur (b) Langages algébriques
source cible (c) Analyse Syntaxique
i. Analyse descendante
ii. Analyse ascendante
2. Traduction dirigée par la syntaxe
Messages d’erreurs
(a) Grammaires attribuées
erreurs lexicales : caractères accentués dans les identificateurs C (b) Analyse + Traduction
erreurs syntaxiques : int 1234; <– identifier expected 3. Production de code
erreurs sémantiques : boolean b; (a) Code intermédiaire
... (b) Optimisation

b = b + 2; <– Incompatible type for +.


...} Can’t convert boolean to int.

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)

déterminant adjectif nom verbe déterminant nom


A un mot unique peut correspondre plusieurs unités lexicales.
exemple : (petit,adjectif) (petit,nom)
Analyses lexicale et syntaxique – p.5/48 Analyses lexicale et syntaxique – p.6/48

Analyse lexicale d’un programme Analyse lexicale d’un programme

Pour les entiers (en SCHEME),
















’+’ ’-’ ’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.

Analyses lexicale et syntaxique – p.7/48 Analyses lexicale et syntaxique – p.8/48


Langages réguliers Analyse syntaxique

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.


Phrase Groupe_Nominal Groupe_Verbal


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

NomAdj nom nom adjectif adjectif nom


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

Analyse syntaxique Grammaires Algébriques

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 , ,...
 

 


est un ensemble fini de variables (ou non-terminaux),


Il faut autant de parenthèses ouvrantes que de parenthèses


est un élément distingué de , appelé axiome,


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 .
















 
 
 




















Grammaires Algébriques – p.13/48 Grammaires Algébriques – p.14/48

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é


( (
" 




















)))


dérivation (de à ). Cette dérivation est de longueur .

!



















Un mot se dérive en un mot (noté ) s’il existe un




 




"
entier naturel tel que .



Remarque : pour dériver un mot , deux sources de choix


(non-déterminisme) : Remarque : la relation est la clôture réflexive et transitive de

 
choix d’un non-terminal dans , la relation .


 


choix d’une règle de production de membre gauche .




Grammaires Algébriques – p.15/48 Grammaires Algébriques – p.16/48


Dérivations Dérivations
Proposition 2: Pour toute grammaire algébrique , pour tout

    

    
  

   

  

  
 
























   "

"
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

Dérivations Langage engendré


Remarque : pour une grammaire d’axiome , on parle de


Le langage engendré par la grammaire , noté est



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











ssi il existe une dérivation pour le mot .


Pour le mot ,



Un langage est dit algébrique ssi il existe une grammaire


algébrique engendrant ( ).












Deux grammaires algébriques et sont équivalentes ssi





 



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

Lemme fondamental des “algébriques” Expressivité

Le langage n’est pas un langage régulier (cf.


 "  "

!  "

 "

"

 !%  "


% %

 !%   %

%
Donc et , i.e. avec















lemme de l’étoile) mais c’est un langage algébrique car il est





 !%

 !%

et avec .
!










engendré par la grammaire avec






Or, on a






%
  %
%








 !%
 !%

 !%
 !%

.
!
!

!
!

!








Une dérivation pour le mot :




Montrons que est bien engendré par G.


Grammaires Algébriques – p.23/48 Grammaires Algébriques – p.24/48
Expressivité Expressivité

Preuve : Posons . Comme , on a et et donc

!

  % 





 "
. 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 ,


 "

. Par le lemme fondamental, avec












et , on peut trouver et tels




Par récurrence sur :


!
!











 "

 "
que et ! , et .

!
!



pour : donc .




#



















Grammaires Algébriques – p.25/48 Grammaires Algébriques – p.26/48

Expressivité Expressivité

Supposons la propriété vraie pour . Pour , par





Q : Existe-t-il des langages réguliers qui ne sont pas des


hypothèse de récurrence, , donc on a



. Par la Proposition 2, . Or, langages algébriques ?









R : NON (voir plus loin).






, donc .




Q : Existe-t-il des langages qui ne sont pas des langages


il existe des langages algébriques qui ne sont pas réguliers.


algébriques ?

R : OUI, le langage n’est pas algébrique.




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

Grammaires Algébriques – p.29/48 Grammaires Algébriques – p.30/48

Propriétés de clôture Grammaires régulières


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

 

est une grammaire régulière.






Intersection Oui Non

n’est pas une grammaire








Complémentaire Oui Non 


régulière.


n’est pas une grammaire








régulière.

Grammaires Algébriques – p.31/48 Grammaires Algébriques – p.32/48


Grammaires régulières Grammaires régulières


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

Un langage est régulier ssi il est engendré par une




grammaire régulière.

Grammaires Algébriques – p.33/48 Grammaires Algébriques – p.34/48

Grammaires Formelles Limitations des algébriques


Une grammaire formelle est donnée par avec Avec une grammaire algébrique, on ne peut pas spécifier par






. exemple en JAVA:











que la méthode appelée sur un objet est bien une


Hiérarchie de Chomsky : méthode de la classe de l’objet .


Pour ,




que la méthode appelée sur un objet est bien appelée





avec le bon nombre de paramètres.

Grammaire arbitraire






 

Grammaire contextuelle et






Ceci nécessiterait une grammaire contextuelle ...







Grammaire algébrique







 


Pourquoi ne pas utiliser une grammaire contextuelle ?




Grammaire régulière





Pour des raisons d’efficacité. On ne connait pas en général


On a pour les grammaires les inclusions strictes : d’algorithme polynomial pour tester qu’un mot (programme) est
Régulière Algébrique Contextuelle Arbitraire effectivement engendré par une grammaire contextuelle.


Grammaires Formelles – p.35/48 Grammaires Formelles – p.36/48


Arbres de dérivation Arbres de dérivation

 


 


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.

Grammaires Algébriques – p.37/48 Grammaires Algébriques – p.38/48

Arbres de dérivation Arbres de dérivation


Un arbre de dérivation est un arbre dont les nœuds sont Construction d’un arbre de dérivation à partir d’une dérivation:


étiquetés par des symboles de et dont les fils de tout







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 ,


que la dérivation remplace dans par produisant . Si


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,












Grammaires Algébriques – p.39/48 Grammaires Algébriques – p.40/48


Arbres de dérivation Arbres de dérivation
Pour la dérivation Pour la dérivation

 

 




























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

Arbres de dérivation Arbres de dérivation


En revanche, pour les dérivations Une même dérivation peut avoir plusieurs arbres de dérivation
différents (qui dépendent des multiples façons de construire
cette dérivation)





























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

Dérivations gauches Dérivations gauches

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


la construction de l’arbre, on étend celui-ci au niveau de ce






















non-terminal (feuille la plus à gauche étiquetée par un


non-terminal).


















Grammaires Algébriques – p.47/48 Grammaires Algébriques – p.48/48