Objectifs : À la fin de cette unité vous connaîtrez : Le rôle du langage machine.

23
©Pierre Marchand, 2001 1 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. Unité 4a: Architecture logicielle

description

Unité 4a: Architecture logicielle. 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. - PowerPoint PPT Presentation

Transcript of Objectifs : À la fin de cette unité vous connaîtrez : Le rôle du langage machine.

Page 1: Objectifs : À la fin de cette unité vous connaîtrez : Le rôle du langage machine.

©Pierre Marchand, 2001 1

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.

Unité 4a: Architecture logicielle

Page 2: Objectifs : À la fin de cette unité vous connaîtrez : Le rôle du langage machine.

©Pierre Marchand, 2001 2

13.1 Langage machine

Le langage machine est une séquence de bits constituant des instructions directement exécutables par le processeur.

Le langage d’assemblage ou assembleur est un langage qui permet au programmeur d’utiliser des codes mnémoniques (ADD, DIV, SUB, MOV, etc.) au lieu de ces séquences de bits. Ces mnémoniques sont traduits en langage machine par un programme appelé assembleur. Les adresses des instructions et des variables peuvent aussi être données sous forme symbolique. Historiquement, l’assembleur a été le premier langage de programmation.

Il y a généralement une instruction assembleur par instruction machine.

Il y a un langage d’assemblage différent pour chaque type de machine ou processeur : Pentium, PowerPC, Alpha, Sparc, etc. L’assembleur n’est donc pas un langage portable.

Unité 4a: Architecture logicielle

Page 3: Objectifs : À la fin de cette unité vous connaîtrez : Le rôle du langage machine.

©Pierre Marchand, 2001 3

13.2 Traduction et interprétation

Les langages évolués tels que Pascal, C, FORTRAN, COBOL, BASIC, APL, PL/1, ADA, Java, etc. convertissent des instructions de haut niveau en langage machine. Ces langages sont plus portables que l’assembleur au niveau du code source.

Cette conversion peut s’effectuer de deux façons : la traduction ou l’interprétation.

La traduction consiste à générer, dans le langage binaire de la machine cible, un programme ayant les fonctionnalités définies dans le pro-gramme source. Ce programme exécutable est ensuite chargé en mémoire pour être exécuté.

Le programme traducteur s’appelle compilateur. L’assembleur est aussi un compilateur. Autres membres de cette catégorie : Pascal, C / C++, FORTRAN, COBOL, Algol, etc.

Unité 4a: Architecture logicielle

Page 4: Objectifs : À la fin de cette unité vous connaîtrez : Le rôle du langage machine.

©Pierre Marchand, 2001 4

13.2 Traduction et interprétation

Dans le cas de l’interprétation, le travail de traduction s’effectue au moment de l’exécution. L’interprète doit donc se trouver dans la machine cible au moment de l’exécution. Exemples : BASIC, APL, Smalltalk. Chaque instruction de code source est convertie en une ou plusieurs instructions en langage machine. L’exécution commence tout de suite, contrairement au cas de la traduction, mais est plus lente.

Dans le cas du langage Java, on obtient une excellente portabilité en utilisant une approche mixte. On utilise un compilateur pour convertir le code source en code intermédiaire, indépendant de la plate-forme, appelé byte-codes. Ces byte-codes sont ensuite interprétés par la machine cible au moyen d’un interprète appelé machine virtuelle qui convertit au fur et à mesure les byte-codes en langage machine.

Unité 4a: Architecture logicielle

Page 5: Objectifs : À la fin de cette unité vous connaîtrez : Le rôle du langage machine.

©Pierre Marchand, 2001 5

13.3 Langage d’assemblageNous verrons en détail l’assembleur du Pentium III un peu plus loin.

13.4 Fonctionnement de l’assembleurL’assembleur est un programme qui traduit en langage machine le programme source écrit en langage d’assemblage.

13.4.1 Macroassembleur et cross-assembleur

Une macro-instruction ou macro est une séquence d’instructions à laquelle on attribue un nom. Ensuite, chaque fois qu’on utilise ce nom dans le programme, l’assembleur le remplace par la séquence d’instructions en question. Un assembleur qui autorise l’utilisation de macros est appelé un macro-assembleur.

Unité 4a: Architecture logicielle

Page 6: Objectifs : À la fin de cette unité vous connaîtrez : Le rôle du langage machine.

©Pierre Marchand, 2001 6

13.4 Fonctionnement de l’assembleur13.4.1 Macroassembleur et cross-assembleur

Un cross-assembleur traduit un programme source en un pro-gramme objet pour une machine autre que celle sur laquelle il effectue la traduction.

Un macroassembleur permet la création et l’utilisation de macros dans le code source. Une macro est un nom qu’on donne à un groupe d’instructions qui revient souvent dans un programme. On peut ensuite remplacer chaque occurrence de ce groupe par son nom, ce qui peut rendre le code source plus lisible.

Unité 4a: Architecture logicielle

Page 7: Objectifs : À la fin de cette unité vous connaîtrez : Le rôle du langage machine.

©Pierre Marchand, 2001 7

13.5 Développement d’un programmeLes outils d’un environnement de développement (IDE) standard sont les suivants : éditeur de texte, traducteur (compilateur, assembleur), éditeur de liens, chargeur et débogueur.

13.5.1 Éditeur de texte

Le code source est saisi et édité au moyen d’un éditeur de texte. Idéalement, on utilise un éditeur syntaxique, capable de vérifier la syntaxe des programmes dans un langage donné et de générer automatiquement les structures syntaxiques propres au langage utilisé. Les meilleurs colorent différemment les mots réservés du langage, les chaînes de caractères, les commentaires, etc., ce qui améliore la lisibilité du code.

Unité 4a: Architecture logicielle

Page 8: Objectifs : À la fin de cette unité vous connaîtrez : Le rôle du langage machine.

©Pierre Marchand, 2001 8

13.5 Développement d’un programmeLe traducteur ou compilateur convertit le programme source en programme objet.

L’éditeur de liens combine plusieurs programmes objets pour réaliser un programme exécutable.

Le chargeur place ce programme exécutable en mémoire.

Lors de l’exécution, un débogueur permet de suivre le déroulement du programme ou d ’intervenir en cas d’erreur.

Unité 4a: Architecture logicielle

Page 9: Objectifs : À la fin de cette unité vous connaîtrez : Le rôle du langage machine.

©Pierre Marchand, 2001 9

13.5 Développement d’un programme13.5.2 Éditeur de liens

L’éditeur de liens (linker ou link editor) est un logiciel qui permet de combiner plusieurs programmes objets en un seul.

On structure les gros programmes en modules que l’on traduit indépendamment. Ainsi, un programme peut être constitué de plusieurs fichiers contenant chacun un ou plusieurs sous-program-mes. Tous ces fichiers sont traduits séparément, mais peuvent utiliser les sous-programmes et les variables se trouvant dans les autres fichiers, ce qui donne lieu à des références externes.

L’éditeur prend ces différents morceaux de programme et les groupe pour former un programme complet et exécutable.

Unité 4a: Architecture logicielle

Page 10: Objectifs : À la fin de cette unité vous connaîtrez : Le rôle du langage machine.

©Pierre Marchand, 2001 10

13.5.3 Chargeur

Le programme objet, obtenu après l’édition de liens, doit encore être chargé en mémoire centrale pour être exécuté. Le chargeur s’occupe de cette tâche. Dans les systèmes d’exploitation moder-nes, on décide au dernier moment à quelle adresse charger le programme, puisque plusieurs programmes peuvent résider simul-tanément en mémoire.

Dans les anciens systèmes (comme DOS), on pouvait fixer les adresses à l’avance et charger le programme à l’endroit spécifié. On utilisait donc un chargeur absolu.

Ajourd’hui, les chargeurs s’occupent de reloger les programmes en mémoire centrale. Ce sont des chargeurs relogeables.

Unité 4a: Architecture logicielle

Page 11: Objectifs : À la fin de cette unité vous connaîtrez : Le rôle du langage machine.

©Pierre Marchand, 2001 11

13.5.4 Débogueur

Le débogueur (debugger) est un logiciel qui facilite la mise au point de programmes et la correction des erreurs ou bogues (bugs). Il permet d’examiner le contenu de la mémoire ainsi que celui des différents registres du processeur.

Il permet également de créer des points d’arrêt (breakpoints) lors de l’exécution du programme à mettre au point, et à partir de ces points d’arrêt, d’exécuter le programme pas à pas, i.e. instruction par instruction tout en observant le contenu des registres, des variables et de la mémoire.

Unité 4a: Architecture logicielle

Page 12: Objectifs : À la fin de cette unité vous connaîtrez : Le rôle du langage machine.

©Pierre Marchand, 2001 12

14.2 Langages évolués14.2.1 Définition d’un langage

Un langage informatique comprend :

• un alphabet constitué des symboles élémentaires disponibles,

• des noms ou identificateurs formés de groupes de symboles de l’alphabet,

• des phrases ou instructions constituées de séquences de noms et de symboles de ponctuation.

Les phrases doivent respecter la syntaxe du langage, i.e. la position des symboles les uns par rapport aux autres. Pourreprésenter la syntaxe d’un langage, on utilise la notation BNF (Backus-Naur Form) ou des diagrammes syntaxiques.

Unité 4a: Architecture logicielle

Page 13: Objectifs : À la fin de cette unité vous connaîtrez : Le rôle du langage machine.

©Pierre Marchand, 2001 13

14.2 Langages évolués14.2.1 Définition d’un langage

Syntaxe d’un langage en forme BNF

<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>

Unité 4a: Architecture logicielle

Page 14: Objectifs : À la fin de cette unité vous connaîtrez : Le rôle du langage machine.

©Pierre Marchand, 2001 14

14.2 Langages évolués14.2.1 Définition d’un langage

Syntaxe d’un langage à l’aide de diagrammes syntaxiques

identificateur

entier

terme

Unité 4a: Architecture logicielle

lettre

lettre

chiffre

chiffre

entier

identificateur

Page 15: Objectifs : À la fin de cette unité vous connaîtrez : Le rôle du langage machine.

©Pierre Marchand, 2001 15

14.2 Langages évolués14.2.1 Définition d’un langage

Syntaxe d’un langage à l’aide de diagrammes syntaxiques

opérateur

expression

affectation

Unité 4a: Architecture logicielle

terme

identificateur

+-*/

opérateur

= expression

Page 16: Objectifs : À la fin de cette unité vous connaîtrez : Le rôle du langage machine.

©Pierre Marchand, 2001 16

14.3 Compilation14.3.1 Structure d’un compilateur

Unité 4a: Architecture logicielle

Analyse lexicale

Analyse syntaxique

Analyse sémantique

Génération de codeintermédiaire

Optimisation du code

Génération de code objet

Programme encode source

Programme encode objet

Table dessymboles

Arbresyntaxique

Page 17: Objectifs : À la fin de cette unité vous connaîtrez : Le rôle du langage machine.

©Pierre Marchand, 2001 17

14.3 Compilation14.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.

Unité 4a: Architecture logicielle

Page 18: Objectifs : À la fin de cette unité vous connaîtrez : Le rôle du langage machine.

©Pierre Marchand, 2001 18

14.3 Compilation14.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 à partir de la racine et à appliquer les règles qui permettent d’arriver à la phrase désirée.

Unité 4a: Architecture logicielle

Page 19: Objectifs : À la fin de cette unité vous connaîtrez : Le rôle du langage machine.

©Pierre Marchand, 2001 19

14.3 Compilation

14.3.3 Analyse syntaxique

Unité 4a: Architecture logicielle

<programme>

<suite d’instructions>

<instruction> ; <instruction> ;

<affectation> <conditionnelle>

<ident> ;= <expression> if <booléenne> then <instruction>

val <ident><opérateur> <nombre>

<nombre> <chiffre>

<chiffre> 0

<ident>

val := val + 20;if good then val := 0;

2

good

<affectation>

<ident> ;= <constante>

val <chiffre>

0

val +

Page 20: Objectifs : À la fin de cette unité vous connaîtrez : Le rôle du langage machine.

©Pierre Marchand, 2001 20

14.3 Compilation14.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.

Unité 4a: Architecture logicielle

Page 21: Objectifs : À la fin de cette unité vous connaîtrez : Le rôle du langage machine.

©Pierre Marchand, 2001 21

14.3 Compilation14.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.

Unité 4a: Architecture logicielle

Page 22: Objectifs : À la fin de cette unité vous connaîtrez : Le rôle du langage machine.

©Pierre Marchand, 2001 22

14.3 Compilation14.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.

14.3.6 Optimisation de code

À cette étape, on tente d’améliorer le code pour le rendre plus rapide à l’exécution et/ou moins encombrant en mémoire. On élimine d ’abord les redondances pour minimiser le nombre final d’instructions. On essaye aussi d’évaluer les expressions utilisant des constantes. Cette phase dépend fortement de l’architecture de la machine cible.

Unité 4a: Architecture logicielle

Page 23: Objectifs : À la fin de cette unité vous connaîtrez : Le rôle du langage machine.

©Pierre Marchand, 2001 23

14.3 Compilation14.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.

Unité 4a: Architecture logicielle