Centre Universitaire de Mila Informatique – Semestre 5
Institut des sciences et de la technologie COMPILATION – TD N° 01
Exercice 1.
Quelles sont les phases de construction d'un compilateur?
Citer deux différences principales entre les deux langages C++ et Java.
Solution:
Les phases de construction d'un compilateur:
programme source
Analyse
lexicale
Analyse
syntaxique
Analyse
sémantique
Tables des gestion des
symboles erreurs
Code
Intermédiaire
Optimisation
de code
Génération de
code
programme objet
Les différences entre C++ et Java:
Les deux différences principales en termes de compilation entre les deux langages C++ et Java sont :
C++ dépend de la plate-forme, et Java est indépendante de la plate-forme.
C++ utilise uniquement le compilateur (C++ est compilé et exécuté à l’aide du compilateur qui
convertit le code source en code machine). JAVA utilise à la fois un compilateur et un interpréteur.
Le code source JAVA est converti en bytecode au moment de la compilation. L’interpréteur exécute
ce bytecode au moment de l’exécution et génère une sortie.
Exercice 2.
Faire correspondre les notions et les définitions.
1) Langage source a) Programme qui permet de construire un analyseur
lexical.
2) Langage Assembleur b) Traducteur qui exécute les instructions du programme
source l'une après l'autre.
3) Générateur lexical c) Langage de programmation de haut niveau.
4) Analyse Lexicale d) Le langage dans lequel on écrit le programme original
5) Interprète e) Une représentation symbolique du langage machine
6) C/C++, JAVA, PHP,… f) Regroupe le flot de caractères d'entrée groupé en
unités lexicales.
1/2 2020-2021
Solution:
1) d) 2) e) 3) a) 4) f) 5) b) 6) c)
Exercice 3.
Faire correspondre les notions et les définitions.
1) GCC a) Langage de balisage
2) Motorola 68000 b) Langage Assembleur
3) Le Langage OCaml c) Interprète
4) Quadruplets d) Compilateur
5) HTML e) Langage intermédiaire
Solution:
1) d) 2) b) 3) c) 4) e) 5) a)
Exercice 4.
Traduire les mots suivant en Français:
Anglais Français Anglais Français
compiler compilateur linker éditeur de lien
scanner analyseur lexical loader chargeur
token unité lexicale parser analyseur syntaxique
push down automata automate à pile target program programme cible
bytecode code à trois adresses syntax tree arbre syntaxique
Exercice 5.
Pour le code à structure de blocs en langage C suivant, indiquer quelles valeurs sont affectées à w, x, y et z.
int w, x, y, z; int w, x, y, z;
int i = 4; int j = 5; int i = 3; int j = 4;
{ int j = 7; { int i = 5;
i = 6; w = i + j;
w = i + j; }
} x=i+j;
x = i + j; { int j = 6;
{ int i = 8; i = 7;
y = i + j; y = i + j;
} }
z = i + j; z = i + j;
Programme (a) Programme (b)
Solution:
Programme (a) Programme (b)
w w=i+j=6+7=13 w w=i+j=5+4=9
x x=i+j=6+5=11 x x=i+j=3+4=7
y y=i+j=8+5=13 y y=i+j=7+6=13
z z=i+j=6+5=11 z z=i+j=7+4=11
2/2 2020-2021
3/2 2020-2021