Académique Documents
Professionnel Documents
Culture Documents
Programme
Programme Compilateur cible
source
Messages d'erreur
Ones Sidhom 5
Processeurs de langages
Interpréteur
programme qui assure l’analyse et l’exécution du programme source (instruction
par instruction).
Un langage interprété est un langage dans lequel chaque ligne d’instruction est lue
et traduite pour être exécutée. Pour que cela fonctionne, l’interpréteur doit avoir
accès au code source.
Exemples de langages interprétés: Javascript, PHP,Python.
Données
Ones Sidhom 7
Phases et structure d’un compilateur
Les différentes phases d’une compilation
On distingue deux catégories :
Phase d’analyse : reconnait les variables, les instructions et les opérateurs et
vérifie la correction syntaxique et sémantique. Elle produit une représentation
intermédiaire.
Phases de synthèse: construit le programme cible a partir de la présentation
intermédiaire.
Ones Sidhom 9
Phases et structure d’un compilateur
La table des
symboles
contient des
informations sur
les différents
symboles et les
Ones Sidhom attributs associes. 10
Phase d'analyse d’un compilateur
1. Analyse lexicale
1. L’identificateur position ;
2. Le symbole d’affectation = ;
3. L’identificateur initiale ;
4. Le signe + ;
5. L’identificateur vitesse;
6. Le signe *;
7. Le nombre 60
Ones Sidhom 12
Phase d'analyse d’un compilateur
Exemple
Ones Sidhom 13
Phase d'analyse d’un compilateur
2. Analyse syntaxique
Ones Sidhom 15
Phase d'analyse d’un compilateur
3. Analyse sémantique
Arbre de syntaxe Arbre de syntaxe
Analyse sémantique
abstraite abstraite enrichi
Ones Sidhom 17
Phase d'analyse d’un compilateur
Exemple Position initiale + vitesse *
= 60
Ones Sidhom 19
Phases de synthèse d’un compilateur
1. Génération de code intermédiaire
Arbre de syntaxe Génération de code code
abstraite enrichi intermédiaire intermédiaire
Ones Sidhom 20
Phases d'analyse d’un compilateur
Code source
Position = initiale + vitesse * 60
Code intermédiaire
T1 = inttofloat (60)
T2 = id3 * T1
T3 = id2 + T2
Ones Sidhom
id1= T3 21
Phases de synthèse d’un compilateur
2. Optimisation de code
Objectifs:
Réduire la taille du code
Améliorer la performance du code
L’optimisation peut se faire à deux niveaux:
Code intermédiaire: optimisation indépendante de la machine
(élimination des calculs inutiles, propagation des constantes,
mettre certaines instructions hors des boucles, ...)
Code objet: optimisation dépendante de la machine (remplacer
certaines instructions par d’autres plus efficaces et plus rapides,
Ones Sidhom
utilisation optimale des boucles, ...) 22
Phases d'analyse d’un compilateur
Code intermédiaire
T1 = inttofloat (60)
T2 = id3 * T1
T3 = id2 + T2
id1= T3
Code optimisé
T1 = id3 * 60.0
id1 = id2 + T1
Ones Sidhom 23
Phases de synthèse d’un compilateur
3. Génération de code
Traduire le code écrit en langage intermédiaire en un code
écrit en langage cible
Si le langage cible est le langage machine, le générateur de
code choisit des emplacements mémoire pour les variables
en leur faisant correspondre un registre ou une adresse
mémoire.
Ones Sidhom 24
Phases parallèles
Gestion de la table des symboles
La table des symboles contient des informations sur les différents
symboles et les attributs associes (type, emplacement mémoire...)
Chaque entrée de la table représente un identificateur du
programme source (créée lors de l’analyse lexicale)
A chaque fois qu’une unité lexicale id est trouvée par l’analyse
lexicale, le lexème associé est inséré dans la table des symboles s’il
n’a pas été déjà inséré et l’analyse lexicale retourne id et un pointeur
vers une entrée de la table des symboles.
Elle permet un accès rapide aux informations liées aux
Ones Sidhom identificateurs. 25
Phases parallèles
Gestion des erreurs
Détecter les erreurs à chaque phase de la compilation
Informer, le plus précisément possible, l’utilisateur
Traiter les erreurs pour que le compilateur puisse continuer et
détecter d’autres erreurs
Certaines erreurs ne peuvent être traités et engendre l’arrêt du
compilateur
Ones Sidhom 26