Introduction

Compiler Analysis and Synthesis

Le Backend

Le Backend est la partie du compilateur qui s'occupe de générer le code objet. C'est-à-dire que c'est lui qui va transformer le code source en un code objet.

Un exemple

Imaginons que nous ayons un code source écrit en C. Le Backend va transformer ce code source en un code objet écrit en langage machine (binaire). Ce code objet pourra ensuite être exécuté par une machine.

Les étapes du Backend

Le Backend est composé de plusieurs étapes. Voici les principales:

Les outils du Backend

Pour réaliser ces étapes, le Backend utilise plusieurs outils. Parmi eux, on peut citer:

LLVM

LLVM est un projet open-source qui fournit une suite de compilateurs modulaires et réutilisables. Il est utilisé par de nombreux langages de programmation pour générer du code objet.

Pour en savoir plus sur LLVM, voici leur site web: llvm.org

Exemple plus concis

Si nous reprenons l'AST genere par le Frontend sur la page précédente, nous pouvons continuer à le transformer pour obtenir un code objet. Exemple:

        
          #include <stdio.h>

          int main() {
            printf("Hello, World!\n");
            return 0;
          }
        
      

exemple de code assembleur

Exemple de code assembleur, Wikipedia

Etant donne que ce code est vraiment simple, nous allons l'abstraire pour le convertir en assembleur ARM:

        
.text                         ;; section de code (text) executable
.global _start                ;; point d'entree du programme pointant sur _start
_start:                       ;; etiquette _start    
    mov r0, #1                ;; code de sortie
    ldr r1, =message          ;; adresse du message
    ldr r2, =len              ;; longueur du message
    mov r7, #4                ;; appel systeme pour ecrire le message
    swi 0                     ;; interruption logicielle   

    mov r7, #1                ;; appel systeme pour terminer le programme
    swi 0                     ;; interruption logicielle (fin du programme)

.data                         ;; section de donnees (data) lisibles et modifiables
message:                      ;; etiquette message  
    .asciz "hello world\n"    ;; message
len = .-message               ;; longueur du message
        
      

Conclusion

Le Backend est la partie du compilateur qui s'occupe de générer le code objet. C'est-à-dire que c'est lui qui va transformer le code source en un code objet. Pour cela, il utilise plusieurs étapes et outils, dont la génération de code intermédiaire, l'optimisation du code intermédiaire et la génération de code objet.

Références


Précedant: Frontend