Commentaires
- Trop large, au moins le " Comment ça marche " partie. Il y a des livres entiers écrits sur ce sujet.
- en.wikipedia.org/wiki/Compiler serait le lien Wikipédia qui est trivial pour trouver, que vous demandez-vous précisément? La question est suffisamment large pour que je ' être tenté de donner la réponse intelligente de lalec, " Les compilateurs traduisent le code dune langue à une autre , " car cest lidée générale qui a beaucoup de nuances une fois que lon commence à regarder ce que cela implique vraiment.
- Oui et je pense il a été répondu assez bien.
- Toute explication sur le fonctionnement dun compilateur sera soit trop large, soit trop compliquée. Cest ' un sujet compliqué, et les cours de compilation ont été les cours informatiques les plus difficiles que jai jamais suivis.
- @David Bien sûr, les compilateurs sont compliqués, et vous ne pouvez pas expliquez ici tous les détails de leur fonctionnement. Cependant, je suis sûr que vous aviez une compréhension de base de haut niveau de ce quest un compilateur ou de son fonctionnement avant de suivre votre cours de compilation.
Réponse
Un compilateur est un programme qui traduit le code source dun autre programme dun langage de programmation en code exécutable.
Le code source est généralement dans un langage de programmation de haut niveau (par exemple Pascal, C, C ++, Java, Perl, C #, etc.). Le code exécutable peut être une séquence dinstructions machine qui peuvent être exécutées directement par le CPU, ou il peut être une représentation intermédiaire qui est interprétée par une machine virtuelle (par exemple du code doctet Java).
En bref, un compilateur convertit un programme dun format lisible par lhomme en un format lisible par machine.
Quant au fonctionnement dun compilateur, cest en effet compliqué. Il existe des livres et des cours universitaires sur le sujet. Je vais essayer de décrire brièvement les principales étapes du processus, mais ce sera un aperçu très rapide.
- Lexing – diviser le texte du programme en «jetons». Les jetons sont les « mots » du langage de programmation, tels que les identifiants (mots-clés, noms de variables, noms de fonctions, etc.) ou les opérateurs (=, *, &, etc.) .
- Analyse – convertit la séquence de jetons en un arbre danalyse, qui est une structure de données représentant diverses constructions de langage: déclarations de type, déclarations de variables, définitions de fonctions, boucles, conditionnelles, expressions, etc.
- Optimisation – évaluer les expressions constantes, optimiser les variables inutilisées ou le code inaccessible, dérouler les boucles si possible, etc.
- Traduire larborescence danalyse en instructions machine (ou code doctet JVM).
Encore une fois, je souligne quil sagit dune très brève description. Les compilateurs modernes sont très intelligents et, par conséquent, très compliqués.
Commentaires
- En fait, ils transforment un langage en un autre. Le premier compilateur C ++ a compilé en C. Il en va de même pour le compilateur Vala. Le compilateur Java se compile en bytecode qui nest pas un ' t exécutable sans un compilateur JIT de '.
- @deadalnix IMHO , le fait est que vous passez du code non exécutable au code exécutable. Je dirais que C-front nétait pas un compilateur mais un front-end du compilateur C. Ou une étape dans le processus de compilation, si vous voulez. Les machines virtuelles brouillent la frontière entre " exécutable " et " non exécutable ", bien sûr. Ici, je considérerais simplement le code exécutable comme tout ce qui entre dans la machine virtuelle, comme le code doctet, et résumerais tout ce qui se passe à lintérieur de la machine virtuelle, comme JIT.
- @Dima, cela ne fonctionne pas ' t doivent être du code non exécutable au code exécutable. Par exemple, vous ne pouvez pas exécuter le code doctet JVM directement sur les machines Windows.
- @Thorbj ø rn Ravn Andersen: mais le code doctet est exécutable par la JVM. Est-ce que ' t le point entier dune " machine virtuelle " pour ressembler à un réel machine au programmeur?
- Je dirais que traditionnellement, un compilateur convertissait un programme dun format lisible par lhomme en un format lisible par machine, tout comme Dima la dit. Des variantes telles que Cfront convertissant C ++ en C ou javac convertissant Java en bytecode sont des sujets plus avancés qui devraient probablement être laissés jusquà ce quaprès avoir expliqué le concept de base traditionnel à quelquun qui ne le connaît pas.
Réponse
Un compilateur est un programme informatique (ou un ensemble dinstructions) qui transforme un code source écrit dans un langage de programmation (le langage source) en un autre langage informatique (le langage cible, ayant souvent une forme binaire appelée code objet). La raison la plus courante de vouloir transformer le code source est de créer un programme exécutable.
Les compilateurs relient les programmes source dans les langages de haut niveau avec le matériel sous-jacent. Un compilateur nécessite:
- Déterminer lexactitude de la syntaxe des programmes
- Générer un code objet correct et efficace
- Organisation dexécution
- Formatage de la sortie selon les conventions de lassembleur et / ou de léditeur de liens.