Ch1: Compilation: Introduction
• Comment la machine, qui ne
« comprend/exécute » que le code binaire,
arrive à comprendre/exécuter des
programmes de (très) haut niveau
d’abstraction ?
• La machine réalise cet « exploit » à travers un
programme/logiciel spécifique: le compilateur
Le Compilateur
• Le compilateur: un programme qui traduit des
programmes écrits dans un langage source de
haut niveau en programmes (instructions
exécutables) équivalents écrits dans un
langage cible (généralement de bas niveau)
(généralement langage assembleur).
Compilateur
Programme
source
Programme
cible
LP source
(LP de haut niveau)
LP cible
(LP de bas niveau)
Le cours « Techniques de Compilation »
• Le cours « Techniques de Compilation » est essentiel
dans la formation de tout(e) informaticien(ne)
– En plus de répondre à la question précédente
– Introduit des notions et des techniques fondamentales
(langages, grammaires, automates, programmes qui
manipulent des programmes et qui génèrent des
programmes, etc.)
– Utilise et synthétise différentes connaissances et
techniques: Alg, Structure de Données,
– Un bon exercice en Génie Logiciel
– Une expertise qui peut être utilisée dans différents
domaines (non seulement la compilation)
Le Cycle de Vie d’un Programme
Enoncé d’un Problème
Le développeur/
programmeur
Effectue la
résolution de
Problème
Solution au Problème = Algorithme Programme
Sémantique:
Données + Traitement:
Types + Opérations +
Instr+ Modules + …
Langage de Programmation:
Niveaux lexical, syntaxique,
sémantique, pragmatique
Exprime/
Formule
Compilateur
Code
Cible
Interpréteur
Résultat
• Le développeur/programmeur a besoin de
connaissance sur le langage source
– Connaissance sémantique pour exprimer son
algorithme selon la sémantique du langage (selon
les concepts sémantiques offerts par le langage de
programmation)
– Connaissance lexicale et syntaxique
• Le compilateur a besoin également des
mêmes connaissances sur le langage source
pour compiler/traduire le programme source
en un programme en langage cible
• Il a besoin aussi de connaissance sur le
langage cible
• C’est aussi le cas d’un traducteur humain
(d’une langue humaine source à une langue
humaine cible)
• Le Compilateur doit effectuer le processus
inverse du programmeur:
– Analyser le programme source pour identifier la
sémantique (les concepts sources) du programme
source
– Traduire (reformuler) cette sémantique en terme
du langage cible
Historique
• On programmait en Langage Machine (en
Hexadécimale): 0A 43
• Utilisation de Mnémonique: MOV R1 R2
• Création du Langage Assemblage/Assembleur
(traduction facile en Langage Machine
• Ajout d’étiquettes: de BRANCH 453 à BRANCH
boucle1
• Ensuite utilisation de noms symboliques pour référer
à des places mémoires (au lieu de spécifier leur
adresse en Hexadécimale). La notion de variable est
née
Du Langage Machine aux Langages à Haut
niveau
• Dans les années 50: Développement des Langages de
Haut Niveau indépendants de la Machine:
• Introduit de concepts qui n’existent pas dans
l’assembleur:
– Expression
– Variable locale
– Procédure avec paramètres
– Structures de données
– Etc.
Autres formes de compilation
• Compilation d’un Langage de Haut niveau en un
autre langage de Haut niveau; de Pascal à C, de Java
à C++, etc.
• Compilation inverse (rare): d’un langage de bas
niveau à un langage de haut niveau
• Compilation d’un langage quelconque vers un
langage quelconque: de Word vers Html, de PDF vers
PS, de ACE vers Logique des Prédicats, etc.
Compilateur et Interpréteur
Compilateur
Programme
en L.Source
Programme
en L.Cible
Interpréteur
(Exécution)
Input
Output
Editeur de
liens
Analyse du code
source
Génération du
code cible
Il est crucial de différencier entre les deux processus/programmes
Architecture générale d’un Compilateur
Editeur de Liens
• Après le Compilateur, survient en général «
L’éditeur de Liens » qui lient les codes objets
(entre eux et/ou avec du code externes
comme les librairies)
Exemple
Exemple de compilation :
Exemple #2
Code Source
Résultat de l’Analyse Syntaxique: reconnaissance de la
Structure syntaxique de la séquence en entrée
Fonction de Transformation (des concepts
sources aux concepts cibles)
Transformation de la
« structure source »
en une « structure cible »
Génération
du Code Cible:
Applatir le contenu
de la « structure
cible »
Réalisation du Compilateur
• Le compilateur est constitué logiquement de
différentes étapes et phases, et utilise
différentes structures de données.
• Comment réaliser le Compilateur ?
– Approche manuelle
– Approche (semi-)automatique, en utilisant des
outils de « générateur de compilateurs »,
partiellement ou complètement
Réalisation d’un Compilateur –
Approche manuelle
• Réalisation séquentielle
– phase par phase, et étape par étape,
– en produisant explicitement les résultats
intermédiaires
• Réalisation intégrée
– Toutes les phases et toutes les étapes sont
intégrées
– Au fur et à mesure que le compilateur avance
dans l’analyse du code source, il produit le code
cible associé

Ch1_IntroductionCh1_Introduction2025.ppt

  • 1.
    Ch1: Compilation: Introduction •Comment la machine, qui ne « comprend/exécute » que le code binaire, arrive à comprendre/exécuter des programmes de (très) haut niveau d’abstraction ? • La machine réalise cet « exploit » à travers un programme/logiciel spécifique: le compilateur
  • 2.
    Le Compilateur • Lecompilateur: un programme qui traduit des programmes écrits dans un langage source de haut niveau en programmes (instructions exécutables) équivalents écrits dans un langage cible (généralement de bas niveau) (généralement langage assembleur). Compilateur Programme source Programme cible LP source (LP de haut niveau) LP cible (LP de bas niveau)
  • 3.
    Le cours «Techniques de Compilation » • Le cours « Techniques de Compilation » est essentiel dans la formation de tout(e) informaticien(ne) – En plus de répondre à la question précédente – Introduit des notions et des techniques fondamentales (langages, grammaires, automates, programmes qui manipulent des programmes et qui génèrent des programmes, etc.) – Utilise et synthétise différentes connaissances et techniques: Alg, Structure de Données, – Un bon exercice en Génie Logiciel – Une expertise qui peut être utilisée dans différents domaines (non seulement la compilation)
  • 4.
    Le Cycle deVie d’un Programme Enoncé d’un Problème Le développeur/ programmeur Effectue la résolution de Problème Solution au Problème = Algorithme Programme Sémantique: Données + Traitement: Types + Opérations + Instr+ Modules + … Langage de Programmation: Niveaux lexical, syntaxique, sémantique, pragmatique Exprime/ Formule Compilateur Code Cible Interpréteur Résultat
  • 5.
    • Le développeur/programmeura besoin de connaissance sur le langage source – Connaissance sémantique pour exprimer son algorithme selon la sémantique du langage (selon les concepts sémantiques offerts par le langage de programmation) – Connaissance lexicale et syntaxique
  • 6.
    • Le compilateura besoin également des mêmes connaissances sur le langage source pour compiler/traduire le programme source en un programme en langage cible • Il a besoin aussi de connaissance sur le langage cible • C’est aussi le cas d’un traducteur humain (d’une langue humaine source à une langue humaine cible)
  • 7.
    • Le Compilateurdoit effectuer le processus inverse du programmeur: – Analyser le programme source pour identifier la sémantique (les concepts sources) du programme source – Traduire (reformuler) cette sémantique en terme du langage cible
  • 8.
    Historique • On programmaiten Langage Machine (en Hexadécimale): 0A 43 • Utilisation de Mnémonique: MOV R1 R2 • Création du Langage Assemblage/Assembleur (traduction facile en Langage Machine • Ajout d’étiquettes: de BRANCH 453 à BRANCH boucle1 • Ensuite utilisation de noms symboliques pour référer à des places mémoires (au lieu de spécifier leur adresse en Hexadécimale). La notion de variable est née
  • 9.
    Du Langage Machineaux Langages à Haut niveau • Dans les années 50: Développement des Langages de Haut Niveau indépendants de la Machine: • Introduit de concepts qui n’existent pas dans l’assembleur: – Expression – Variable locale – Procédure avec paramètres – Structures de données – Etc.
  • 10.
    Autres formes decompilation • Compilation d’un Langage de Haut niveau en un autre langage de Haut niveau; de Pascal à C, de Java à C++, etc. • Compilation inverse (rare): d’un langage de bas niveau à un langage de haut niveau • Compilation d’un langage quelconque vers un langage quelconque: de Word vers Html, de PDF vers PS, de ACE vers Logique des Prédicats, etc.
  • 11.
    Compilateur et Interpréteur Compilateur Programme enL.Source Programme en L.Cible Interpréteur (Exécution) Input Output Editeur de liens Analyse du code source Génération du code cible Il est crucial de différencier entre les deux processus/programmes
  • 12.
  • 13.
    Editeur de Liens •Après le Compilateur, survient en général « L’éditeur de Liens » qui lient les codes objets (entre eux et/ou avec du code externes comme les librairies)
  • 14.
  • 15.
  • 16.
    Résultat de l’AnalyseSyntaxique: reconnaissance de la Structure syntaxique de la séquence en entrée
  • 17.
    Fonction de Transformation(des concepts sources aux concepts cibles)
  • 18.
    Transformation de la «structure source » en une « structure cible »
  • 19.
    Génération du Code Cible: Applatirle contenu de la « structure cible »
  • 20.
    Réalisation du Compilateur •Le compilateur est constitué logiquement de différentes étapes et phases, et utilise différentes structures de données. • Comment réaliser le Compilateur ? – Approche manuelle – Approche (semi-)automatique, en utilisant des outils de « générateur de compilateurs », partiellement ou complètement
  • 21.
    Réalisation d’un Compilateur– Approche manuelle • Réalisation séquentielle – phase par phase, et étape par étape, – en produisant explicitement les résultats intermédiaires • Réalisation intégrée – Toutes les phases et toutes les étapes sont intégrées – Au fur et à mesure que le compilateur avance dans l’analyse du code source, il produit le code cible associé