Information Technology Reference
In-Depth Information
3.1.5
Génération du code final
La table des symboles
Tout au long des trois phases d'analyse lexicale, d'analyse syntaxique et d'analyse
sémantique, le compilateur construit une table regroupant toutes les informations
utiles sur les objets apparaissant dans le programme compilé. Cette table qui comprend
une entrée par objet reconnu est appelée la table des symboles . Chaque entrée spécifie
les propriétés de l'objet associé, c'est-à-dire notamment son type, sa taille et son
adresse. Pour pouvoir affecter une adresse à chacun des objets, le compilateur mani-
pule un compteur appelé compteur d'emplacements , initialisé à 0 pour le premier
objet et incrémenté ensuite de la taille de chaque objet rencontré. L'adresse d'un
objet est égale à la valeur du compteur d'emplacements.
Ainsi le tableau 3.1 suivant peut correspondre à la table des symboles construite
lors de la compilation du programme Z.
Ta b l e a u 3 . 1
T ABLE DES SYMBOLES DU PROGRAMME Z.
Nom de l'objet
Ty p e
Taille (octets)
Adresse
A
entier
4
(0) 16
B
entier
4
(4) 16
C2
entier
4
(8) 16
Génération du code et optimisation
La génération du code constitue l'étape ultime de la compilation. Elle consiste à
produire dans un fichier objet le code machine équivalent au code du langage de haut
niveau. Elle se décompose généralement en trois étapes : la génération d'un code inter-
médiaire, l'optimisation de ce code intermédiaire, enfin, la génération du code final.
Le code obtenu à ce niveau est appelé code relogeable , c'est-à-dire que toutes les
adresses des objets figurant dans ce code sont calculées en considérant que l'adresse
du premier octet du code est égale à 0.
Génération d'un code intermédiaire
La génération du code intermédiaire consiste à remplacer les phrases reconnues par
des macros plus aisément manipulables. Les objets sont eux-mêmes remplacés par
l'adresse qui leur a été affectée dans la table des symboles. Les macros ne sont pas
des instructions machine; elles s'en différencient notamment par le fait qu'elles ne
font aucune référence aux registres de la machine et restent donc indépendantes de
l'architecture de celle-ci. Ainsi le programme Z suivant pourra être transformé de
façon à ce que INIT a b soit une macro d'initialisation qui initialise l'objet a avec la
valeur b, la macro DIV a b c correspond à la division de l'objet b par l'objet c avec
stockage du résultat dans l'objet a et enfin la macro ADD a b c représente l'addition
de l'objet b par l'objet c avec stockage du résultat dans l'objet a.
 
 
Search WWH ::




Custom Search