Compilateur - Définition et Explications

Source: Wikipédia sous licence CC-BY-SA 3.0.
La liste des auteurs de cet article est disponible ici.

Introduction

Schéma de compilation multi-source multi-cible

Un compilateur est un programme informatique qui traduit un langage, le langage source, en un autre, appelé le langage cible (ou langage objet), en préservant la signification du texte source. Ce schéma général décrit un grand nombre (La notion de nombre en linguistique est traitée à l’article « Nombre...) de programmes différents ; et ce que l'on entend par « signification du texte source » dépend du rôle du compilateur (Un compilateur est un programme informatique qui traduit un langage, le langage source, en un...). Lorsque l'on parle de compilateur, on suppose aussi en général que le langage source est, pour l'application envisagée, de plus haut niveau que le langage cible, c'est-à-dire qu'il présente un niveau d'abstraction ( En philosophie, l'abstraction désigne à la fois une opération qui consiste a isoler par la...) supérieur.

En pratique, un compilateur sert le plus souvent à traduire un code source écrit dans un langage de programmation (Un langage de programmation est un langage informatique, permettant à un être humain...) en un autre langage, habituellement un langage d'assemblage ou un langage machine (Le langage machine est la suite de bits qui est interprétée par le processeur de l'ordinateur...). Le programme en langage machine produit par un compilateur est appelé code objet (En informatique (développement), un fichier objet est un fichier intermédiaire...).

Le premier compilateur, A-0 System, a été écrit en 1951 par Grace Hopper (Grace Murray Hopper (9 décembre 1906 - 1er janvier 1992) est une...).

Structure et phases d'un compilateur

La tâche principale d'un compilateur est de produire du code objet (De manière générale, le mot objet (du latin objectum, 1361) désigne une entité définie dans...) correct. La plupart des compilateurs permettent d'optimiser le code (le code objet optimisé s'exécutera plus rapidement, ou aura une occupation mémoire (D'une manière générale, la mémoire est le stockage de l'information. C'est aussi le souvenir...) moindre).

Un compilateur fonctionne par analyse-synthèse, c'est-à-dire qu'au lieu de remplacer chaque construction du langage source par une suite équivalente de constructions du langage cible, il commence par analyser le texte source pour en construire une représentation intermédiaire qu'il traduit à son tour en langage cible.

Il est donc naturel de séparer — au moins conceptuellement, mais aussi en pratique — le compilateur en une partie avant (ou frontale), parfois appelée « souche », qui lit le texte source et produit la représentation intermédiaire, et une partie arrière (ou finale), qui parcourt cette représentation pour produire le texte cible. Dans un compilateur idéal (En mathématiques, un idéal est une structure algébrique définie dans un anneau....), la partie avant est indépendante du langage cible, tandis que la partie arrière est indépendante du langage source. Certains compilateurs effectuent de plus sur la forme intermédiaire des traitements substantiels, que l'on peut regrouper en une partie centrale, indépendante à la fois du langage source et de la machine cible. On peut ainsi écrire des compilateurs pour toute une gamme de langages et d'architectures en partageant la partie centrale, à laquelle on attache une partie avant par langage et une partie arrière par architecture (Architectures est une série documentaire proposée par Frédéric Campain et Richard Copans,...).

Les étapes de la compilation incluent :

  • l'analyse lexicale (L'analyse lexicale est la transformation d’un flot de caractères en un flot de lexèmes ou...), qui coupe le texte du code source en petits morceaux appelés jetons (tokens).

Chaque jeton est une unité atomique unique de la langue (unités lexicales ou lexèmes), par exemple un mot-clé, identifiant (En informatique, on appelle identifiants (également appelé parfois en anglais login) les...) ou nom du symbole. La syntaxe de jeton est généralement un langage régulier, donc un automate (Un automate est un dispositif se comportant de manière automatique, c'est-à-dire sans...) à états finis construits à partir d'une expression régulière peut être utilisé pour le reconnaître. Cette phase (Le mot phase peut avoir plusieurs significations, il employé dans plusieurs domaines et...) est aussi appelée lexing ou à balayage, et le logiciel (En informatique, un logiciel est un ensemble d'informations relatives à des traitements...) qui effectue une analyse lexicale est appelé un analyseur lexical ou un scanner (Un scanneur, ou numériseur à balayage est l'équivalent du terme anglais scanner, qui vient du...) (lex, flex (Flex peut désigner :) par exemples).

  • le prétraitement, phase nécessaire pour certaines langues, par exemple, C, qui prend en charge (La charge utile (payload en anglais ; la charge payante) représente ce qui est effectivement...) la substitution de macro et de la compilation conditionnelle.

Généralement, la phase de prétraitement se produit avant que l'analyse syntaxique ou sémantique, par exemple dans le cas de C, le préprocesseur (En informatique, un préprocesseur est un programme qui procède à des transformations sur un code...) manipule les symboles lexicaux plutôt que des formes syntaxiques.

  • l'analyse syntaxique implique l'analyse de la séquence jeton pour identifier la structure syntaxique du programme.

Cette phase s'appuie généralement sur un arbre (Un arbre est une plante terrestre capable de se développer par elle-même en hauteur, en...) d'analyse, qui remplace la séquence linéaire de jetons avec une structure en arbre construit selon les règles d'une grammaire formelle qui définit la syntaxe du langage. L'arbre d'analyse est souvent analysé, augmenté et transformé par des phases plus tard dans le compilateur. Yacc et Bison (Les bisons forment un genre de grands bovidés ruminants dont il existe deux espèces...) sont les analyseurs syntaxiques les plus utilisés.

  • l'analyse sémantique, qui est la phase durant laquelle le compilateur ajoute des informations sémantiques à l'arbre d'analyse et construit la table des symboles.

Cette phase effectue des vérifications sémantiques comme la vérification de type (vérification des erreurs de type), ou objet de liaison (associant variables et des références de fonction avec leurs définitions), ou tâche définie (nécessitant toutes les variables locales doivent être initialisées avant utilisation), le rejet des programmes incorrects ou l'émission d'avertissements. L'analyse sémantique nécessite habituellement un arbre d'analyse complet, ce qui signifie que cette phase est la conséquence logique (La logique (du grec logikê, dérivé de logos (λόγος),...) de la phase d'analyse, et précède logiquement la phase de génération de code, mais il est souvent possible de replier les phases multiples dans une passe sur le code dans une mise en œuvre de compilateur.

  • la transformation du code source en code intermédiaire ;
  • l'application de techniques d'optimisation sur le code intermédiaire : c'est à dire rendre le programme plus rapide, tout (Le tout compris comme ensemble de ce qui existe est souvent interprété comme le monde ou...) en gardant des délais de compilation raisonnables.

Le but de cette phase est de générer un code réduit, permises par des passes de compilation qui se greffent par dessus un compilateur existant. C’est un domaine de recherche (La recherche scientifique désigne en premier lieu l’ensemble des actions entreprises en vue...) continuel !

  • la génération de code avec l'allocation de registres et la traduction du code intermédiaire en code objet, avec éventuellement l'insertion de données (Dans les technologies de l'information (TI), une donnée est une description élémentaire, souvent...) de débogage et d'analyse de l'exécution ;
  • et enfin l'édition des liens.

Ces différentes étapes expliquent que les compilateurs fassent toujours l'objet de recherches, particulièrement dans le domaine de l'optimisation du code produit.

La plupart (mais pas tous) des compilateurs traduisent un fichier ( Un fichier est un endroit où sont rangées des fiches. Cela peut-être un meuble, une pièce,...) source d'un programme écrit dans un langage de programmation (La programmation dans le domaine informatique est l'ensemble des activités qui permettent...) en un fichier objet (ou un exécutable, ou un fichier en assembleur, ou même en un autre langage).

Une implémentation (Le mot implantation peut avoir plusieurs significations :) (réalisation concrète) d'un langage de programmation peut être interprétée ou compilée. C'est cette réalisation qui est un compilateur ou un interpréteur (En informatique, un interprète (parfois appelé, à tort, « interpréteur » par mauvaise...), et un langage de programmation (spécification plus ou moins théorique et formalisée de sa syntaxe et de sa sémantique) peut avoir une implémentation compilée, et une autre interprétée.

Page générée en 0.431 seconde(s) - site hébergé chez Amen
Ce site fait l'objet d'une déclaration à la CNIL sous le numéro de dossier 1037632
Ce site est édité par Techno-Science.net - A propos - Informations légales
Partenaire: HD-Numérique