Académique Documents
Professionnel Documents
Culture Documents
Objectifs :
À la fin de cette unité vous connaîtrez :
• Le rôle du langage machine.
• La différence entre compilation et intreprétation.
• Le rôle d’un assembleur, d’un éditeur de liens et d’un chargeur.
• Les grandes lignes du fonctionnement d’un compilateur.
• La définition d’un langage informatique.
1
Unité 4a: Architecture logicielle
2
Unité 4a: Architecture logicielle
3
Unité 4a: Architecture logicielle
4
Unité 4a: Architecture logicielle
13.5.3 Chargeur
5
Unité 4a: Architecture logicielle
13.5.4 Débogueur
6
Unité 4a: Architecture logicielle
<lettre> ::= a | b | c | d …. y | z
<chiffre> ::= 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9
<identificateur> ::= <lettre> | <identificateur><lettre>
| <identificateur><chiffre>
<entier> ::= <chiffre> | <entier><chiffre>
<terme> ::= <entier> | <identificater>
<opérateur> ::= + | - | * | /
<expression> ::= <terme> | <terme><opérateur><expression>
<affectation> ::= <identificateur> = <expression>
entier chiffre
entier
terme
identificateur
7
Unité 4a: Architecture logicielle
expression terme
opérateur
14.3 Compilation
14.3.1 Structure d’un compilateur
Programme en
code source
Table des Arbre
Analyse lexicale syntaxique
symboles
Analyse syntaxique
Analyse sémantique
Génération de code
intermédiaire
Optimisation du code
Programme en
code objet
©Pierre Marchand, 2001 16
8
Unité 4a: Architecture logicielle
14.3 Compilation
14.3.2 Analyse lexicale
C’est la première phase de la compilation. Elle consiste à lire la
séquence de caractères constituant le programme source et à
produire une séquence d’éléments syntaxiques du langage
(tokens) traités ensuite par l’analyseur syntaxique : nombres,
identificateurs, opérateurs, mots réservés, séparateurs, etc.
Les identificateurs, tels que les noms des variables et des
procédures, ainsi que leurs attributs, sont stockés dans la table
des symboles. Les commentaires sont éliminés.
L’analyseur lexical détecte les erreurs telles que :
• identificateurs trop longs ou illégaux
• caractères ou nombres illégaux.
14.3 Compilation
14.3.3 Analyse syntaxique
L’analyseur syntaxique reçoit une liste d’éléments syntaxiques de
l’analyseur lexical. Il vérifie si cette liste est correcte par rapport à
la syntaxe du langage. À partir ce ces éléments, il génère l’arbre
syntaxique du programme.
Il y a deux approches pour étabir cet arbre. L’approche ascen-
dante et l’approche descendante.
L’approche ascendante consiste à partir des éléments constituant
la phrase à traiter pour trouver toutes les règles qui permettent de
remonter jusqu’à la racine.
L’approche descendante consiste à p a r t i r de l a r a c i n e et à
appliquer les règles qui permettent d’arriver à la phrase désirée.
9
Unité 4a: Architecture logicielle
14.3 Compilation
val := val + 20;
14.3.3 Analyse syntaxique if good then val := 0;
<programme>
<suite d’instructions>
<instruction> ; <instruction> ;
<affectation> <conditionnelle>
2 0
14.3 Compilation
14.3.3 Analyse syntaxique
Dans cette phase on détecte des erreurs telles que :
• Parenthèses non fermées,
• Structures de blocs ou instructions mal construites,
• Manque de délimiteurs.
10
Unité 4a: Architecture logicielle
14.3 Compilation
14.3.4 Analyse sémantique
L’analyseur sémantique s ’occupe du sens et de la signification
des phrases du langage. Il utilise l’arbre syntaxique pour identifier
les opérateurs et les opérandes des instructions. Il vérifie principa-
lement la correspondance des types à l’aide des informations de
la table des symboles.
Il détecte des erreurs telles que :
• identificateurs non déclarés ou déclarés plus d’une fois,
• Incompatibilité de type entre opérateur et opérandes.
14.3 Compilation
14.3.5 Génération de code intermédiaire
Le compilateur génère ici un code intermédiaire à partir de l’arbre
syntaxique. Ce code est le code d’une machine abstraite.
11
Unité 4a: Architecture logicielle
14.3 Compilation
14.3.7 Génération de code objet
La génération de code objet est la phase finale de la compilation;
elle génère du code objet relogeable, i.e. relatif à l’origine 0. Elle
traduit chaque instruction du code intermédiaire en langage
machine de l’ordinateur cible.
12