Chap I Introduction Aux Compilateurs
Chap I Introduction Aux Compilateurs
Chap I Introduction Aux Compilateurs
I.1 Définitions:
a) Traducteur: est un programme traduisant un programme écrit dans un langage L1 (langage source) en
un programme équivalent écrit en un langage L2 (langage cible).
b) Compilateur : est un traducteur dont le langage source est un langage de haut niveau et langage cible
est le langage machine.
Compilateur
Remarque: Avant la phase finale (Code machine), un langage intermédiaire est produit et mis dans un
Fichier Code, ce dernier est fichier multi-plateforme (qui pourra être utilisé dans n’importe quelle
machine). Exemple: compilateur java, qui crée un fichier code compilé par le programme JVM (Java
Virtual Machine).
c) Préprocesseur (Précompilateur)
Si L1 et L2 sont des langages de haut niveau, le traducteur est appelé un préprocesseur.
d) Interpréteur: est un traducteur ligne par ligne (instruction/instruction) d’un programme écrit dans un
langage de haut niveau. Exemples: BASIC , LISP , PHP… sont des langages interprétés.
Analyse lexicale
A
na Analyse syntaxique
ly
se
Analyse sémantique
Optimisation du code
intermédiaire Sy
nt
hè
se
Génération du code
machine
Programme en code
machine ( Langage cible)
(exécutable)
La conversion du nombre entier 2 en nombre réel 2.0 doit être effectuée (correction automatique), c’est le
cas de plusieurs compilateurs, ou énoncée comme erreur sémantique.
0.
c) L’étape de synthèse :
c.1) Génération du code intermédiaire :
Exemple1:
MOV hauteur, R1 0001 01 00 00001000 *
DIV #2.0, R1 0101 01 10 00000010
MOV base, R2 0001 10 00 00000100 *
MUL R1, R2 0100 10 01 00000001
MOV R2, aire 0010 10 00 00000000 *
Exemple2:
var_a A0000 ; les adresses des variables
var_i A0001
var_vmax A0002
... ; le code du programme
mov var_i,1
loop:
mov A0, (var_i) ; comparaison i >= vmax
jge A0, (var_vmax), finFor ; si vrai aller en finFor
mov A0, (var_a) ; calcul de a+i
add A0, A0, (var_i)
mov var_a,A0 ; a := a+i
mov A0, (var_i) ; on incrémente i
add A0, A0, 1
mov var_i, 1
jmp loop ; et on continue la boucle
finFor:
...
N.B:
• Table des symboles :
1. Information concernant le type et l'emplacement mémoire des identificateurs.
2. Initialisée par l'analyseur lexical, complétée et utilisée par les autres phases.
• Gestion des erreurs :
1. Erreurs lexicales (symboles ou mots n'appartenant pas au langage source).
2. Erreurs syntaxiques (règles grammaticales non respectées).
3. Erreurs sémantiques (incohérence de types ).
Diverses modes de récupérations d'erreurs possibles, selon la finalité du compilateur :
1. Arrêt à la première erreur ;
2. Resynchronisation sur la prochaine construction correcte ;
3. Tentatives de correction.