Plus facile à lire avec un fond crème, une teinte, plus de contraste ou un texte plus grand ? Choisissez vos couleurs et votre texte, une fois pour toutes les pages.

Leçon gratuite

Compilateur et interpréteur : deux façons de traduire

Après cette leçon: Je peux expliquer en quoi un compilateur et un interpréteur diffèrent.

Leçon de 50 min9 commandesLab de compilation et d’architecture : gcc, flex, bison et RISC-V dans une VM

Un jeu écrit en mots, joué en nombres

Un jeu de console est écrit par des gens, avec des mots qu'ils savent lire. Le processeur de la console ne lit pas ces mots. Il n'exécute que ses propres instructions, qui sont des nombres.

Il faut donc traduire le jeu. Il existe deux grandes façons de le faire, et ta machine du lab sait faire les deux.

À la fin de cette leçon

Remarque

Je peux expliquer en quoi un compilateur et un interpréteur diffèrent.

Mots clés

MotCe que ça veut direExemple
Code sourceun programme tel que les gens l'écriventhello.c
Code machinedes instructions en nombres que le processeur exécute
Traducteurun programme qui change le code source en quelque chose d'exécutable
Compilateurun traducteur qui change tout le programme en code machine avant qu'il tourne
Interpréteurun traducteur qui lit et exécute le programme une instruction à la fois
Lexèmeun mot du programme : un nom, un nombre ou un signe

Les cellules que les étudiants remplissent restent vides dans cet aperçu.

Trois sortes de traducteurs

Un assembleur change l'assembleur en code machine, une instruction par ligne.

Un compilateur lit d'abord tout le programme. S'il trouve une faute, il s'arrête et la signale : rien ne tourne. Si tout va bien, il écrit un fichier de code machine qu'on peut lancer autant de fois qu'on veut.

Un interpréteur lit une instruction, l'exécute, puis lit la suivante.

Compilateur et interpréteur côte à côte

QuestionCompilateurInterpréteur
Quand le programme est-il traduit ?En entier, avant de tournerUne instruction à la fois, pendant qu'il tourne
Un fichier programme est-il créé ?Oui, il tourne ensuite sans compilateurNon, il faut l'interpréteur à chaque fois
Quand une faute est-elle trouvée ?Avant que rien ne tourneQuand la ligne est atteinte
Lequel va le plus vite ?En général le programme compiléEn général plus lent
Dans le labgccpython3

Les cellules que les étudiants remplissent restent vides dans cet aperçu.

Avant de commencer

Remarque

Appuie sur Start the lab dans la barre en haut et attends que la machine soit prête. Chaque bouton Run tape sa commande dans le terminal, l'une après l'autre.

Va dans le dossier compiler

Commande
cd ~/compiler

Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.

Compile hello.c en programme

Commande
gcc hello.c -o hello

Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.

Lance le programme créé par gcc

Commande
./hello

Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.

Compile un programme qui a une faute

Commande
gcc -Wall -c scope.c

Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.

Un interpréteur trouve la faute tard

gcc a lu tout scope.c et l'a refusé. Il n'a créé aucun programme.

Écris maintenant un fichier Python de deux lignes. La première affiche un mot. La seconde utilise un nom, total, qui n'a jamais reçu de valeur. Regarde ce que fait Python.

Écris un fichier Python de deux lignes

Commande
printf 'print("debut")\nprint(total)\n' > tard.py

Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.

Lance-le avec l'interpréteur

Commande
python3 tard.py

Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.

Un compilateur travaille par étapes

L'analyse lexicale découpe les caractères en lexèmes et jette les espaces et les commentaires.

L'analyse syntaxique vérifie les lexèmes avec la grammaire du langage et construit un arbre du programme. La génération de code change l'arbre en code machine, et l'optimisation le rend plus petit ou plus rapide.

Écris une ligne de Python

Commande
echo 'print(6 * 8)' > calcul.py

Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.

Découpe-la en lexèmes

Commande
python3 -m tokenize calcul.py

Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.

Une erreur fréquente

Attention

Beaucoup pensent qu'un interpréteur ne traduit rien. Python change d'abord ton fichier en bytecode, des instructions simples pour sa propre machine. Le Run suivant le montre. Cherche 48 : Python a calculé 6 × 8 avant de lancer quoi que ce soit.

Affiche le bytecode

Commande
python3 -m dis calcul.py

Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.

Pour aller plus loin : la calculatrice du lab

Le programme calc du lab est une calculatrice. Son analyseur lexical est fait par flex et son analyseur syntaxique par bison. Appuie sur Open terminal, tape make, puis echo "4 $ 4" | ./calc.

Elle affiche deux lignes. Laquelle vient de l'analyseur lexical, et laquelle de l'analyseur syntaxique ? Comment le sais-tu ?

À propos de ce labo et de sa source: Lab de compilation et d’architecture : gcc, flex, bison et RISC-V dans une VM

Vous enseignez à une classe ? Proposez ce module à vos étudiants avec un guide de l'enseignant, des devoirs corrigés et un laboratoire pour chaque étudiant.