0% ont trouvé ce document utile (0 vote)
61 vues25 pages

Introduction aux interpréteurs et compilateurs

Transféré par

Ghaffari Walid
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
61 vues25 pages

Introduction aux interpréteurs et compilateurs

Transféré par

Ghaffari Walid
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd

Suite du cours de compilation

1
Interpréteurs
 Un interprète, ou interpréteur, est un outil ayant pour
tâche d'analyser, de traduire et d'exécuter les programmes
écrits dans un langage informatique. On qualifie les langages
dont les programmes sont généralement exécutés par un
interpréteur de langages interprétés.
 Un interpréteur se distingue d’un compilateur par le fait que,
pour exécuter un programme, les opérations d’analyse et de
traductions sont réalisées à chaque exécution instruction par
instruction du programme (par un interpréteur) plutôt
qu’une fois pour toutes (par un compilateur).

2
Interpréteurs
 On différencie un programme dit script, d'un programme
dit compilé, par:
- Un programme script est exécuté à partir du fichier source via un
interpréteur de script ;
- Un programme compilé est exécuté à partir d'un bloc en langage
machine issu de la traduction du fichier source.
 Le cycle d'un interprète est le suivant :
- lire et analyser une instruction (ou expression) ;
- si l'instruction est syntaxiquement correcte, l'exécuter (ou
évaluer l'expression) ;
- passer à l'instruction suivante.

3
Interpréteurs
 Certains traducteurs ne possèdent pas de phase de génération
de code en langage machine.
 Ils s’arrêtent à la production de code intermédiaire(on peut
penser par exemple à java qui produit un fichier binaire dans
un format propriétaire avec l’extension .class).
 L’exécution du programme source consiste en une
interprétation du code intermédiaire par un programme
appelé interprète ou interpréteur.
 Dans le cas où le code interprété est de type binaire, on parle
alors de runtime ou environnement d’exécution.

4
Interpréteurs
 Pour l’exemple de Java: un programme en java est d’abord
traduit en code intermédiaire (.class) par un traducteur et
puis interprété par une machine java virtuelle (JVM).Le code
(.class) intermédiaire est indépendant de la machine, il peut
être interprété sur n’importe quelle machine disposant d’une
JVM.

5 17/05/2024
Différents types de traducteurs
 Assembleurs: le langage source des assembleurs utilise une
représentation symbolique des instructions machine. Un
assembleur traduit une instruction symbolique en une
instruction machine.
 Compilateurs: le langage source des compilateurs est de haut
niveau. Une instruction du langage source est souvent
traduite en un nombre important d’instructions du langage
objet de bas niveau. Lorsque le langage produit n'est pas
destiné à la machine sur laquelle tourne le compilateur, on
parle de cross-compilateur.

6 17/05/2024
Différents types de traducteurs
 Préprocesseur: est un programme qui procède à des
transformations sur un code source, avant l'étape de
traduction proprement dite (compilation ou interprétation).
Le nom de préprocesseur s’explique par le fait que le rôle est
d’effectuer un pré-traitement dont le résultat est destiné à un
autre traducteur.
- Le langage source et langage objet sont de haut niveau
- Il y a 2 types de préprocesseurs:

7 17/05/2024
Différents types de traducteurs
1. Il y a ceux qui fournissent à l’utilisateur un sur-ensemble
d’un langage donné en ajoutant certaines fonctionnalités
absentes du langage. C’est le cas par exemple des
préprocesseurs TBL, EQN et PIC utilisés avec le formateur
TROFF sous Unix. Ils sont destinés à traduire des macro-
instructions de pré-traitement et leurs arguments en code
source troff standard. Le programme tbl est un
préprocesseur de tableaux, eqn gère les équations et les
mathématiques en général, et enfin pic est un préprocesseur
d'images

8 17/05/2024
Différents types de traducteurs
2. Il y a ceux qui agissent en tant qu’outils de macro-expansion,
comme avec le cas de TEX, C, postscript.
- Le mécanisme des macros est fréquemment utilisé en C
pour définir de petits extraits de code qui seront réutilisés à
divers endroits du programme.
 Décompilateurs et désasembleur: le langage source des
désasembleurs est de plus bas niveau que le langage objet. En
général, ces outils servent à regénérer un prog source à partir
d’un prog objet. Ils sont utilisés par exemple pour l’étude
des virus dans la recherche de leur signature et leurs
mécanismes d’activation

9 17/05/2024
Compilateurs & interpréteurs

Langage Cible O
Langage Source S Traducteur
ou objet

Langage hôte ou
d’implémentation

T-diagramme pour un traducteur

10 17/05/2024
Compilateurs & interpréteurs
 On caractérise un traducteur par 3 langages:
1. Le langage source S qu’il traduit
2. Le langage cible ou objet vers lequel produit le code
3. Le langage hôte dans lequel il se présente
On représente ces 3 langages dans un diagramme en T appelé T-
diagramme en raison de sa forme.

11 17/05/2024
Compilateurs & interpréteurs
 Un T-diagramme est noté aussi par:

S traducteur O
I

T-diagramme pour un traducteur

12 17/05/2024
Compilateurs & interpréteurs
 Exemple: La compilation C de test.c sur une machine SUN3
avec un processeur 68000 sera notée par le T-diagramme:

Test.c C CC code 68000 [Link]


code
68000

T-diagramme pour un traducteur

13 17/05/2024
Auto-amorçage ou Bootstrapping
 Les compilateurs C sous linux sont écrit en C. ceci soulève 2
questions:
 Comment fut compilé le 1er compilateur?
 Comment coder un compilateur d’un langage donné dans
son propre langage?

14 17/05/2024
Auto-amorçage ou Bootstrapping
 Le fait de coder un compilateur dans son propre langage est
connu sous le nom « bootstrapping » ou « auto-amorçage ».
Les techniques et idées sont connues depuis le milieu des
années 50.
 Les avantages de l’auto-amorçage:
- Démonstration de force pour un nouveau langage qui
constitue son utilisation pour générer son propre
compilateur
- La portabilité entre différents environnements: le même
programme se compile correctement et fait la même chose
sur différents types de machines

15 17/05/2024
Auto-amorçage ou Bootstrapping
 Exemple de Pascal: Prenons l’exemple du 1er compilateur Pascal
(1962) sur une machine CDC (Control data) par WIRTH,
créateur du langage. il a commencé par écrire un compilateur
d’un sous ensemble de Pascal que nous appellerons ici Pascal 1 en
code CDC produisant du code CDC.
 Question: Ecrire le T-diagramme associé.

Pascal1 compilateur PAS1 code CDC

code
CDC

16 17/05/2024
Auto-amorçage ou Bootstrapping
 Il développa, ensuite, plus facilement un compilateur en
langage Pascal1, qui en plus de ce qu’il faisait son 1er
compilateur PAS1, incluait des fonctionnalités absentes du
Pascal1.
 La compilation de ce nouveau programme par son 1er
compilateur PAS1 donna un nouveau compilateur plus
performant en respectant l’équation:

LSM + SNP = LPM (à detailler)

17 17/05/2024
Détail de l’exemple
 Ecriture d’un programme Pascal qui faisait la même chose
que son premier compilateur. De plus, il inclua dans son
programme des fonctionnalités absentes de Pascal-1. La
compilation de ce programme par son premier compilateur
donna un nouveau compilateur plus performant

18 17/05/2024
Détail de l’exemple:
Donner la chaîne notée par l'imbrication des T-diagrammes.

19 17/05/2024
Compilateurs croisés: cross-compiler
 Lorsque WIRTH voulu porter son compilateur sur une
machine ICL, il a réécrit sur une machine CDC un
Compilateurs

compilateur en Pascal générant du code [Link] travail


n’était pas très difficile puisqu’il l’avait fait pour les machines
CDC. En le compilant avec le compilateur Pascal du CDC, il
a construit un compilateur croisé ou (cross-compiler)
 Question: produire le compilateur croisé pour des machines
ICL
 Faites une dernière compilation qui produit un compilateur
fonctionnant sur des machine ICL et produisant du code ICL

20 17/05/2024
Compilateurs croisés: cross-compiler

Question 1: produire le compilateur croisé pour des machines ICL

21 17/05/2024
Compilateurs croisés: cross-compiler
 Faites une dernière compilation qui produit un compilateur
fonctionnant sur des machine ICL et produisant du code ICL

22 17/05/2024
Structure d’un compilateur
 La structure général d’un compilateur se compose de:
 Analyse lexicale
 Analyse syntaxique
 Analyse sémantique
 Génération du code intermédiaire (pseudo code)
 Génération du code final

23 17/05/2024
Structure d’un compilateur
 Un compilteur est un prog complexe divisé en phases. On
peut imaginer que chaque phase communique avec les phases
précédentes et suivantes d’une façon appropriée.
 On peut mettre en évidence les phases suivantes:
La phase frontale ou « analyse ». Elle comprend:
- Analyse lexicale (ou linéaire): son rôle est de reconnaitre dans
le flux de caractères formant le programme source, les mots
élémentaires du langage appelés unité lexicales ou tokens tels
que les identificateurs, les mots clés, les opérateurs,…Les
mots reconnu sont présentés à la phase suivante.

24 17/05/2024
Structure d’un compilateur
- Analyse syntaxique ou hiérarchique ou grammaticale: son rôle
est de reconnaitre le flux de tokens fourni par l’analyseur
lexical et le regrouper en une collection imbriquée ayant une
signification collective. C’est une phase qui vérifie la syntaxe
du langage et elle fournit en résultat une représentation en
arbre de vérification ou arbre de syntaxe qui sera utilisé par
les phases suivantes.

25 17/05/2024

Vous aimerez peut-être aussi