II.7. De la compilation au ciblage du logiciel :
II.7.1 Introduction sur la compilation :
La compilation est un sujet récurrent en informatique
comme en électronique : en effet, pour simplifier les descriptions, il
est préférable d'utiliser des langages de haut niveau, proche
d'un langage naturel. Cependant, ces langages ne peuvent en
général pas être utilisés directement : il est
nécessaire de les traduire dans des formes moins
sympathiques, mais correspondant directement à la réalité
(dans le cas de l'électronique), ou directement utilisables par les
outils ou les machines (dans le cas de l'électronique et de
l'informatique). Cette section est une introduction à ce
mécanisme de traduction appelé compilation.
II.7.1.1. Définitions de la compilation :
La compilation est la traduction automatique d'une description
écrite dans un langage vers un autre langage. Très souvent, ce
terme est restreint à la traduction d'un langage de programmation de
haut niveau tel que le C vers le langage machine du processeur qui devra
exécuter le programme.
Le flot de compilation est décomposé en plusieurs
étapes (passes) consécutives :
- L'analyse lexicale qui produit une suite d'identificateurs
correspondant aux instructions du programme d'entrée. Ces
identificateurs sont appelés unités lexicales ou token
;
- L'analyse syntaxique qui produit un arbre dont chaque noeud
décrit une opération élémentaire, et dont les arcs
indiquent les dépendances de contrôle ;
- L'analyse sémantique qui enrichit cet arbre pour obtenir
un arbre dit « décoré ». Il s'agit d'une étape
de synthèse ;
- La génération de code qui parcourt l'arbre «
décoré » en générant le code du langage cible
correspondant à chaque noeud.
Les trois premières étapes ne dépendent
que du langage d'entrée et sont appelées le frontal du
compilateur. La dernière étape ne dépend que du langage
cible et est appelée le dorsal du compilateur.
REMARQUE :
Très souvent, il y a une étape
supplémentaire entre l'analyse sémantique et la
génération de code : l'étape d'optimisation
indépendante du langage cible. Cette étape se rencontre notamment
avec les compilateurs vers les langages d'assemblage.
L'étape de génération de code peut
être très complexe lorsque des optimisations spécifiques au
langage cible sont entreprises.
Un abus de langage souvent commis est d'inclure
l'édition de liens dans le flot de compilation vers le langage machine
d'un processeur. L'édition de liens consiste à associer une
adresse à chaque objet d'un programme en langage machine pour pouvoir le
charger en mémoire et l'utiliser conjointement avec d'autres
programmes.
|