et aux interpréteurs - Département d`informatique

publicité
Chapitre 1
Introduction aux compilateurs
(et aux interpréteurs)
Jean Privat
Université du Québec à Montréal
INF5000 — Théorie et construction des compilateurs
Automne 2013
Jean Privat (UQAM)
01—Introduction aux compilateurs
INF5000 — Automne 2013
1 / 19
Programmation
Problème de communication
Bonjour !
Jean Privat (UQAM)
0110010 ?
01—Introduction aux compilateurs
INF5000 — Automne 2013
2 / 19
Langages de programmation
Permettre l’écriture de code source de programme par un
humain
Distinct du code machine inadapté pour les humains
Quelques langages de programmation
Assembleur, C, Python, Prolog
Évolution
Les langages de programmation ont évolués
(et évoluent toujours)
Jean Privat (UQAM)
01—Introduction aux compilateurs
INF5000 — Automne 2013
3 / 19
Exécution d’un programme
Un microprocesseur ne peut pas en soit exécuter directement
le code source d’un programme
Il ne comprend que son propre langage machine
Le code source doit être traité pour pouvoir être exécuté par
une machine
Transformé (compilation)
Évalué (interprétation)
Jean Privat (UQAM)
01—Introduction aux compilateurs
INF5000 — Automne 2013
4 / 19
Exécution d’un programme
Données
Idée
Programmeur
Code source
« Écriture »
Exécution
« Traitement »
Ordinateur
Résultats
Jean Privat (UQAM)
01—Introduction aux compilateurs
INF5000 — Automne 2013
5 / 19
Compilateur
Programme qui transforme du code source en du code
exécutable par une machine
La compilation à lieu avant l’exécution
01100100100
11101110110111
10110010110001
10000011010110
FOR A = 1 TO 9
B=B+A
NEXT A
Jean Privat (UQAM)
Code source
Compilateur
Données
Exécutable
Exécutable
01—Introduction aux compilateurs
Résultats
INF5000 — Automne 2013
6 / 19
Compilateurs
Compilateurs traditionnels
C
Java
Compilateurs source-à-source
Préprocesseur
Générateurs de code
Décompilateurs
Travail inverse
Outil de rétro-ingénierie
Compilateur au sens large
Extraction, transformation, génération
Jean Privat (UQAM)
01—Introduction aux compilateurs
INF5000 — Automne 2013
7 / 19
Compilateur C
*.h
fichier.c
*.o
préprocesseur
compilateur C
éditeur de liens
assembleur
fichier.o
Jean Privat (UQAM)
programme.exe
01—Introduction aux compilateurs
INF5000 — Automne 2013
8 / 19
Interpréteur
Programme qui prends un programme en entrée et l’exécute
directement
Souvent interactifs
Souvent réflexifs
Code source
FOR A = 1 TO 9
B=B+A
NEXT A
Interpréteur
Résultats
Données
Jean Privat (UQAM)
01—Introduction aux compilateurs
INF5000 — Automne 2013
9 / 19
Interpréteurs
Interpréteurs traditionnels
Ruby
Shells
Machines virtuelles
Java
Émulateurs
Interpréteurs au sens large
Description de comportement
Jean Privat (UQAM)
01—Introduction aux compilateurs
INF5000 — Automne 2013
10 / 19
Compilateurs optimisants
Interpréteurs hybrides
Compilateurs vs. interpréteurs
Vitesse d’exécution
Souplesse
Facilité de développement
Hybridation
Machine virtuelle
Compilateur juste-à-temps
Jean Privat (UQAM)
01—Introduction aux compilateurs
INF5000 — Automne 2013
11 / 19
Problème de l’amorçage (bootstrap)
Question rhétorique
Question de l’œuf et de la poule
Problème fréquent en informatique
Question pratique
Compilateurs autogènes
Compilateurs croisés
Jean Privat (UQAM)
01—Introduction aux compilateurs
INF5000 — Automne 2013
12 / 19
Structure d’un compilateur
Source texte
Source structuré
Analyseur lexical
Structures
de
données
Analyseur syntaxique
Analyseur sémantique
Générateur de code
Compilateur
Code destination
Jean Privat (UQAM)
01—Introduction aux compilateurs
INF5000 — Automne 2013
13 / 19
Analyse lexicale
Rôle
Extraire les mots (lexèmes, jetons) du flot de caractères qu’est le
code source
Exemple : for i = 1 to 10 do print i
Mot clé for Identifiant i Symbole égal
Entier 1 Mot clé to etc.
Jean Privat (UQAM)
01—Introduction aux compilateurs
INF5000 — Automne 2013
14 / 19
Analyse syntaxique
Rôle
Reconstruire la structure syntaxique à partir des lexèmes
Exemple :
le chat dort.
le
chat
dort
article
définit
nom
commun
verbe
groupe
nominal
groupe
verbal
.
point
phrase
Jean Privat (UQAM)
01—Introduction aux compilateurs
INF5000 — Automne 2013
15 / 19
Analyse sémantique
Objectifs multiples
Extraire le sens du code
Vérifier sa cohérence
Calculer des informations additionnelles
Exemple
Le crayon mange une pomme.
Syntaxe : OK
Sens : pas OK
Jean Privat (UQAM)
01—Introduction aux compilateurs
INF5000 — Automne 2013
16 / 19
Génération de code
Générer du code en langage cible
Utilisation des informations calculées aux étapes précédentes
Peut être fait en plusieurs étapes
(langages intermédiaires)
Si le langage source est très distant du langage cible
Si le compilateur est optimisant
Jean Privat (UQAM)
01—Introduction aux compilateurs
INF5000 — Automne 2013
17 / 19
Structure d’un interpréteur
Données
Source texte
Source structuré
Analyseur lexical
Structures
de
données
Analyseur syntaxique
Analyseur sémantique
Exécuteur de code
Interpréteur
Résultats
Jean Privat (UQAM)
01—Introduction aux compilateurs
INF5000 — Automne 2013
18 / 19
Exécution du code
Exécuter du code au fur et à mesure
Utilisation des informations calculées aux étapes précédentes
Maintient de structures de données additionnelles pour
représenter l’état d’exécution du programme
Interpréteur mixte
Interprète une représentation intermédiaire
Invoque un compilateur juste-à-temps
Jean Privat (UQAM)
01—Introduction aux compilateurs
INF5000 — Automne 2013
19 / 19
Téléchargement