Tutoriel sur la conception de compilateurs : Qu’est-ce que c’est, types, outils, exemple

Qu’est-ce qu’un compilateur ?

Un compilateur est un programme informatique qui vous aide à transformer le code source écrit dans un langage de haut niveau en langage machine de bas niveau. Il traduit le code écrit dans un langage de programmation vers un autre langage sans changer le sens du code. Le compilateur rend également le code final efficace qui est optimisé pour le temps d’exécution et l’espace mémoire.

Le processus de compilation comprend les mécanismes de traduction de base et la détection des erreurs. Le processus de compilation passe par une analyse lexicale, syntaxique et sémantique en amont, et par la génération et l’optimisation du code en aval.

Dans ce tutoriel de conception de compilateur, vous apprendrez

  • Qu’est-ce qu’un compilateur ?
  • Features of Compilers
  • Types of Compiler
  • Tasks of Compiler
  • History of Compiler
  • Steps for Language processing systems
  • Compiler Construction Tools
  • Why use a Compiler?
  • Application of Compilers

Features of Compilers

  • Correctness
  • Speed of compilation
  • Preserve the correct the meaning of the code
  • The speed of the target code
  • Recognize legal and illegal program constructs
  • Good error reporting/handling
  • Code debugging help

Types of Compiler

Following are the different types of Compiler:

  • Single Pass Compilers
  • Two Pass Compilers
  • Multipass Compilers

Single Pass Compiler

Single Pass Compiler
Single Pass Compiler

In single pass Compiler source code directly transforms into machine code. For example, Pascal language.

Two Pass Compiler

Two Pass Compiler
Two Pass Compiler

Two pass Compiler is divided into two sections, viz.

  1. Front end: It maps legal code into Intermediate Representation (IR).
  2. Back end: It maps IR onto the target machine

The Two pass compiler method also simplifies the retargeting process. It also allows multiple front ends.

Multipass Compilers

Multipass Compilers
Multipass Compilateurs

Le compilateur multipass traite plusieurs fois le code source ou l’arbre syntaxique d’un programme. Il divise un gros programme en plusieurs petits programmes et les traite. Il élabore de multiples codes intermédiaires. Tous ces multipass prennent en entrée la sortie de la phase précédente. Il nécessite donc moins de mémoire. Il est également connu sous le nom de  » compilateur large « .

Tâches du compilateur

Les principales tâches effectuées par le compilateur sont :

  • Briser le jusqu’au programme source en morceaux et leur imposer une structure grammaticale
  • Permettre de construire le programme cible souhaité à partir de la représentation intermédiaire et également de créer la table des symboles
  • Compiler le code source et y détecter les erreurs
  • Gérer le stockage de toutes les variables et de tous les codes.
  • Support de la compilation séparée
  • Lire, analyser le programme entier et le traduire en équivalent sémantique
  • Transcrire le code source en code objet selon le type de machine

Histoire du compilateur

Les points de repère importants de l’histoire du compilateur sont les suivants :

  • Le mot « compilateur » a été utilisé pour la première fois au début des années 1950 par Grace Murray Hopper
  • Le premier compilateur a été construit par John Backum et son groupe entre 1954 et 1957 chez IBM
  • COBOL a été le premier langage de programmation qui a été compilé… sur plusieurs plateformes en 1960
  • L’étude des problèmes de balayage et d’analyse syntaxique ont été poursuivis dans les années 1960 et 1970 afin de fournir une solution complète

Étapes pour les systèmes de traitement des langues

Avant de connaître le concept de compilateurs, vous devez d’abord comprendre quelques autres outils qui fonctionnent avec les compilateurs.

Etapes pour les systèmes de traitement du langage
Étapes pour les systèmes de traitement du langage

  • Préprocesseur : Le préprocesseur est considéré comme une partie du compilateur. C’est un outil qui produit des entrées pour le Compilateur. Il traite le traitement des macros, l’augmentation, l’extension du langage, etc.
  • Interprète : Un interpréteur est comme le Compilateur qui traduit le langage de haut niveau en langage machine de bas niveau. La principale différence entre les deux est que l’interpréteur lit et transforme le code ligne par ligne. Le compilateur lit l’ensemble du code en une seule fois et crée le code machine.
  • Assembleur : Il traduit le code du langage d’assemblage en langage compréhensible par la machine. Le résultat de sortie de l’assembleur est connu comme un fichier objet qui est une combinaison d’instruction machine ainsi que les données nécessaires pour stocker ces instructions en mémoire.
  • Lieur : L’éditeur de liens vous aide à lier et à fusionner divers fichiers objets pour créer un fichier exécutable. Tous ces fichiers peuvent avoir été compilés avec des assembleurs distincts. La tâche principale d’un linker est de rechercher les modules appelés dans un programme et de trouver l’emplacement mémoire où tous les modules sont stockés.
  • Loader : Le chargeur est une partie du système d’exploitation, qui effectue les tâches de chargement des fichiers exécutables en mémoire et les exécute. Il calcule également la taille d’un programme qui crée un espace mémoire supplémentaire.
  • Compilateur croisé : Un compilateur croisé dans la conception de compilateur est une plate-forme qui vous aide à générer du code exécutable.
  • Compilateur de source à source : Le compilateur source à source est un terme utilisé lorsque le code source d’un langage de programmation est traduit dans le source d’un autre langage.

Outils de construction de compilateurs

Les outils de construction de compilateurs ont été introduits au fur et à mesure que les technologies liées à l’informatique se répandaient dans le monde entier. Ils sont également connus sous le nom de compilateurs, compilateurs-générateurs ou traducteurs.

Ces outils utilisent un langage ou un algorithme spécifique pour spécifier et mettre en œuvre le composant du compilateur. Voici l’exemple d’outils de construction de compilateurs.

  • Générateurs d’analyse : Cet outil prend des expressions régulières comme entrée. Par exemple LEX pour le système d’exploitation Unix.
  • Moteurs de traduction dirigée par la syntaxe : Ces outils logiciels proposent un code intermédiaire en utilisant l’arbre d’analyse. Il a pour objectif d’associer une ou plusieurs traductions à chaque nœud de l’arbre d’analyse syntaxique.
  • Générateurs d’analyseurs : Un générateur d’analyseur prend une grammaire en entrée et génère automatiquement un code source qui peut analyser des flux de caractères à l’aide d’une grammaire.
  • Générateurs de code automatique : Prend le code intermédiaire et les convertit en langage machine
  • Moteurs de flux de données : Cet outil est utile pour l’optimisation du code. Ici, les informations sont fournies par l’utilisateur et le code intermédiaire est comparé pour analyser toute relation. Il est également connu sous le nom d’analyse du flux de données. Il vous aide à découvrir comment les valeurs sont transmises d’une partie du programme à une autre partie.

Pourquoi utiliser un compilateur ?

  • Le compilateur vérifie l’ensemble du programme, il n’y a donc pas d’erreurs de syntaxe ou de sémantique
  • Le fichier exécutable est optimisé par le compilateur, de sorte qu’il s’exécute plus rapidement
  • Permet de créer une structure interne en mémoire
  • Il n’est pas nécessaire d’exécuter le programme sur la même machine qu’il a été construit
  • Traduire le programme entier dans un autre langage
  • Générer des fichiers sur le disque.
  • Lier les fichiers dans un format exécutable
  • Vérifier les erreurs de syntaxe et les types de données
  • Aide à améliorer votre compréhension de la sémantique du langage
  • Aide à gérer les problèmes de performance du langage
  • Opportunité d’un projet de programmation nontrivial programming project
  • The techniques used for constructing a compiler can be useful for other purposes as well

Application of Compilers

  • Compiler design helps full implementation Of High-Level Programming Languages
  • Support optimization for Computer Architecture Parallelism
  • Design of New Memory Hierarchies of Machines
  • Widely used for Translating Programs
  • Used with other Software Productivity Tools

Summary

  • A compiler is a computer program which helps you transform source code written in a high-level language into low-level machine language
  • Correctness, vitesse de compilation, préserver le correct le sens du code sont quelques caractéristiques importantes de la conception du compilateur
  • Les compilateurs sont divisés en trois parties 1) Compilateurs à passage unique 2)Compilateurs à deux passages, et 3) Compilateurs à passages multiples
  • Le « compilateur » a été mot utilisé pour la première fois au début des années 1950 par Grace Murray Hopper
  • Les étapes du système de traitement du langage sont : Préprocesseur, Interprète, Assembleur, Linker/Loader
  • Les outils importants de construction de compilateurs sont 1) les générateurs de scanners, 2)les moteurs de traduction dirigée Syntax-3), 4) les générateurs de parseurs, 5) les générateurs de code automatique
  • La tâche principale du compilateur est de vérifier l’ensemble du programme, afin qu’il n’y ait pas d’erreurs de syntaxe ou de sémantique

.