M1

Introduction à la compilation

Il existe deux grands types de langages : les langages de haut niveau, se rapprochant le plus du langage naturel et les langages de bas niveau, se rapprochant le plus du langage machine.

Justification

La justification est la distance qu'il y a entre le langage machine et le langage symbolique / évolué. Cette distance entre les langages de bas niveau et ceux de plus haut niveau implique :

Définitions

Notations

+----------------------------------+
| Langage source     Langage objet |
+-----+                       +----+
      | Langage du traducteur |
      +-----------------------+

A l'extrémité gauche, on retrouve le langage dans lequel le code est écrit, en bas le langage dans lequel le traducteur est écrit et à l'extrémité droite le langage que le traducteur produit.

+----+
| L  | Langage du texte source
|    |
|    |
|    |
| LM | Langage de l'interpréteur
+----+

Compilation et édition de liens (reliure)

Traduction du texte source vers le langage machine avec une étape intermédiaire qui est le texte objet (en binaire translatable). Le compilateur ne traduit pas immédiatement du texte source vers le langage machine : texte source -> texte objet (binaire) -> texte machine.

L'acceptation se fait entre le langage source et le langage objet.

L'édition de liens se fait entre le langage objet et le texte en langage machine.

Remarques

Traduction vs Interprétation

Les inconvénients de la traduction sont les avantages de l'interprétation.

Note : Il existe des langages seulement compilés, des langages purement interprétés et des langages interprétés et compilés.

Description des étapes de compilation

Analyse du code source

L'analyse consiste à :

Cela dépend du lexique, de la syntaxe (règles de grammaire) et de la sémantique du langage.

Le noyau de l'analyse est un analyseur syntaxique. On utilise donc une construction dirigée par la syntaxe.

Les actions sémantiques sont associées aux règles de la grammaire qui sont au nombre de deux :

L'analyseur lexicale utilise un flot de caractères en entrée. Il effectue une lecture caractère par caractère jusqu'à rencontrer un séparateur (espace, opérateur ou délimiteur). L'analyseur lexicale prend en charge tous les éléments relatifs à la forme externe du texte source (commentaires, espaces, décalages, tabulations, retour à la ligne). Il décharge certaines contraintes liées à la pagination pour simplifier le travail de l'analyseur syntaxique.

Syntaxe du texte objet

¯\_(ツ)_/¯