# Compilateur
# Définitions
Compilateur - fr.wikipedia.org
Un compilateur est un programme qui transforme un code source écrit dans un langage de programmation (le langage source) en un autre langage informatique (appelé langage cible)
Pour qu'il puisse être exploité par une machine, le compilateur traduit le code source, écrit dans un langage de haut niveau d'abstraction, facilement compréhensible par l'humain, vers un langage de plus bas niveau, un langage d'assemblage ou langage machine.
Inversement, un programme qui traduit un langage de bas niveau vers un langage de plus haut niveau est un décompilateur.
C'est le langage natif d'un processeur, c'est-à-dire le seul qu'il puisse traiter. Il est composé d'instructions et de données à traiter codées en binaire.
# Présentation générale
Les étapes de la compilation incluent :
- le prétraitement, nécessaire pour certains langages comme C, qui prend en charge la substitution de macro et de la compilation conditionnelle.
- l'analyse lexicale, qui découpe le code source en petits morceaux appelés jetons (tokens).
- l'analyse syntaxique implique l'analyse de la séquence jeton pour identifier la structure syntaxique du programme.
- l'analyse sémantique est la phase durant laquelle le compilateur ajoute des informations sémantiques à l'arbre d'analyse et construit la table des symboles.
- 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 « meilleur » selon son usage (voir infra) ;
- 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 de débogage et d'analyse de l'exécution ;
- l'édition des liens.
# Lever vs Parser
An Overview of Lexing and Parsing - savage.net.au
Same at An Overview of Lexing and Parsing - www.perl.com
lexers vs parsers - stackoverflow.com
Lexer synonyms : tokenizer, scanner, ...
# Compiler vs Transpiler
What is the main difference between Compiler and Transpiler - stackoverflow.com
Compiler - compiles code to a lower level code.
Example:
- "Developer code" -> "Machine code"
- PHP -> C
- Java -> bytecode
Transpiler - compiles code to same level of code/abstraction.
Example:
- "Developer code" -> "Another developer code or version"
- JavaScript ES2015+ -> JavaScript ES5