Conception du compilateur - Présentation
Les ordinateurs sont un mélange équilibré de logiciels et de matériel. Le matériel n'est qu'un appareil mécanique et ses fonctions sont contrôlées par un logiciel compatible. Le matériel comprend les instructions sous forme de charge électronique, qui est le pendant du langage binaire dans la programmation logicielle. Le langage binaire n'a que deux alphabets, 0 et 1. Pour instruire, les codes matériels doivent être écrits au format binaire, qui est simplement une série de 1 et de 0. Ce serait une tâche difficile et lourde pour les programmeurs informatiques d'écrire de tels codes, c'est pourquoi nous avons des compilateurs pour écrire de tels codes.
Système de traitement du langage
Nous avons appris que tout système informatique est composé de matériel et de logiciels. Le matériel comprend un langage que les humains ne peuvent pas comprendre. Nous écrivons donc des programmes dans un langage de haut niveau, ce qui est plus facile à comprendre et à retenir pour nous. Ces programmes sont ensuite introduits dans une série d'outils et de composants OS pour obtenir le code souhaité pouvant être utilisé par la machine. Ceci est connu sous le nom de système de traitement du langage.
Le langage de haut niveau est converti en langage binaire en différentes phases. UNEcompilerest un programme qui convertit un langage de haut niveau en langage d'assemblage. De même, unassembler est un programme qui convertit le langage d'assemblage en langage de niveau machine.
Voyons d'abord comment un programme, utilisant le compilateur C, est exécuté sur une machine hôte.
L'utilisateur écrit un programme en langage C (langage de haut niveau).
Le compilateur C, compile le programme et le traduit en programme d'assemblage (langage de bas niveau).
Un assembleur traduit ensuite le programme d'assemblage en code machine (objet).
Un outil de liaison est utilisé pour relier toutes les parties du programme ensemble pour exécution (code machine exécutable).
Un chargeur les charge tous en mémoire, puis le programme est exécuté.
Avant de plonger directement dans les concepts des compilateurs, nous devons comprendre quelques autres outils qui travaillent en étroite collaboration avec les compilateurs.
Préprocesseur
Un préprocesseur, généralement considéré comme faisant partie du compilateur, est un outil qui produit des entrées pour les compilateurs. Il traite du macro-traitement, de l'augmentation, de l'inclusion de fichiers, de l'extension de langue, etc.
Interprète
Un interpréteur, comme un compilateur, traduit un langage de haut niveau en langage machine de bas niveau. La différence réside dans la façon dont ils lisent le code source ou l'entrée. Un compilateur lit tout le code source à la fois, crée des jetons, vérifie la sémantique, génère du code intermédiaire, exécute l'ensemble du programme et peut impliquer de nombreuses passes. En revanche, un interpréteur lit une instruction à partir de l'entrée, la convertit en code intermédiaire, l'exécute, puis prend l'instruction suivante dans l'ordre. Si une erreur se produit, un interpréteur arrête l'exécution et la signale. alors qu'un compilateur lit l'ensemble du programme même s'il rencontre plusieurs erreurs.
Assembleur
Un assembleur traduit des programmes en langage assembleur en code machine. La sortie d'un assembleur est appelée un fichier objet, qui contient une combinaison d'instructions machine ainsi que les données nécessaires pour placer ces instructions en mémoire.
Éditeur de liens
Linker est un programme informatique qui relie et fusionne divers fichiers objets afin de créer un fichier exécutable. Tous ces fichiers peuvent avoir été compilés par des assembleurs distincts. La tâche principale d'un éditeur de liens est de rechercher et de localiser des modules / routines référencés dans un programme et de déterminer l'emplacement de mémoire où ces codes seront chargés, faisant que l'instruction du programme ait des références absolues.
Chargeur
Loader fait partie du système d'exploitation et est responsable du chargement des fichiers exécutables en mémoire et de leur exécution. Il calcule la taille d'un programme (instructions et données) et crée de l'espace mémoire pour celui-ci. Il initialise divers registres pour lancer l'exécution.
Compilateur croisé
Un compilateur qui s'exécute sur la plateforme (A) et est capable de générer du code exécutable pour la plateforme (B) est appelé un compilateur croisé.
Compilateur source-source
Un compilateur qui prend le code source d'un langage de programmation et le traduit dans le code source d'un autre langage de programmation est appelé un compilateur source-source.