Compilation
De manière abstraite, un compilateur est un programme qui transforme un fichier d’entrée contenant une certaine représentation en un fichier
de sortie contenant une autre représentation.
graph LR;
subgraph fichier d'entrée
A[Représentation A]
end
A[Représentation A] --> C(fa:fa-tools Compilateur)
C --> B
subgraph fichier de sortie
B[Représentation B]
end
Généralement, le fichier d’entrée sera un fichier contenant un langage de programmation (fichier en langage C par exemple) et le fichier de sortie sera un fichier contenant
une représentation exécutable directement par la machine (avec l’aide du système d’exploitation) ou par une machine virtuelle.
Un compilateur va généralement produire plusieurs représentations intermédiaires avant de produire la représentation finale. Le compilateur pourra effectuer, selon le langage source,
de l’analyse statique de types pour essayer de détecter des erreurs avant l’exécution du programme et pourra transformer le programme source, sans changer sa sémantique, en un code
plus efficace que ce que l’utilisateur avait écrit : cette transformation est appelée optimisation.
- Dans la partie MiniJava nous allons étudier une sorte de compilateur qui se nomme transpileur, aussi appelé compilateur source à source, dans lequel la représentation d’entrée
sera un langage de programmation (le langage MiniJava), et la représentation de sortie sera elle aussi un langage de
programmation (le langage C).
Nous pourrons ainsi profiter de l’existence d’un compilateur pour le langage C et nous
concentrer seulement sur l’analyse statique du fichier source et sur la génération en C des éléments liés à l’orientation objet.
Ce premier compilateur nous permettra de rentrer plus en douceur dans le domaine de la compilation tout en montrant une approche très pratique pour écrire plus rapidement un compilateur
sans avoir à se soucier de la difficulté de générer du code machine optimisé pour une architecture particulière.