Commentaires
- Consultez les articles Wikipédia sur Auto-hébergement et Amorçage du compilateur .
- Voir aussi programmers.stackexchange.com/questions/167277
- Ils ne fournissent quune vue densemble, je connais le programme damorçage et dauto-hébergement mais je veux jeter un œil à quelques exemples simples
- rano. org / bcompiler.html
- voir aussi: Pourquoi les compilateurs auto-hébergés sont-ils considérés comme un rite de passage pour les nouvelles langues?
Réponse
Disons que vous écrivez un nouveau langage de programmation nommé « XYZ ». La première étape consiste à écrire un compilateur pour ce langage. Puisque ce nouveau langage nexiste pas encore, vous écrivez le compilateur en … disons java. Nous lappellerons jxyz. Faire ce processus est une classe typique de au collège .
Vous avez maintenant un programme java (jxyz) qui prend un fichier source XYZ et produit un exécutable. Il est alors possible dentreprendre lécriture dun compilateur pour XYZ dans XYZ qui est respecté par jxyz.
À ce stade, vous avez un complicateur pour XYZ qui est conforme à jxyz. Eh bien, appelez ce programme « xyzFromJ ».
« xyzFromJ » devrait pouvoir se prendre comme une entrée et se compiler en supprimant complètement tout ce qui a été créé par jxyz des dépendances et de la définition du langage. À partir de ce moment, toute modification du langage XYZ peut être effectuée sur le compilateur écrit en XYZ et compilé en utilisant lui-même.
Réponse
Étape 1. Écrivez votre compilateur dans un autre langage.
Étape 2. Compilez le code de létape 1.
Étape 3. Écrivez votre compilateur dans le même langage.
Étape 4. Compilez le code à partir de étape 3.
Répétez les étapes 3 à 4 pour toute mise à jour ultérieure de votre compilateur.
Notez que les étapes 1 et 3 peuvent se produire simultanément ou dans un ordre différent.
Jadmets que cest vraiment une simplification excessive.
Commentaires
- @RobertHarvey: À létape 4, je nai pas spécifié quel compilateur utiliser volontairement pour que " Répétez les étapes 3 à 4 " ait plus de sens.
- Gagné ' t létape 4 ne fonctionne que si vous utilisez un compilateur qui reconnaît la nouvelle langue?
- @RobertHarvey: Oui, mais je nai délibérément pas ' t specif y pour que " Répétez les étapes 3 à 4 " ne signifie pas que " utilise le compilateur de létape 1 ", car cela irait à lencontre du but de lexercice. Jai supposé quil allait sans dire que vous devriez utiliser le compilateur de létape 1 lors de la première itération (il ' est le seul compilateur que vous avez) et le compilateur généré à partir de litération précédente de létape 3 à chaque itération supplémentaire.
Réponse
Contrairement à dautres réponses qui suggèrent décrire le compilateur dans un autre langage (présumée qui fonctionne sur la même machine que vous ciblez), il est également possible (en fait préférable) décrire le compilateur dans la langue cible depuis le début.
Disons que vous voulez écrire un compilateur pour C pour un processeur ARM. Vous disposez déjà dun compilateur C fonctionnant sous Windows (architecture Intel). Vous écrivez votre nouveau compilateur en C, à la fois le front-end (analyse lexicale et parsing) et le back-end (génération de code). Le back-end bien sûr est écrit pour générer du code pour ARM, pas Intel.
Vous compilez ensuite les sources du nouveau compilateur avec le compilateur existant. Une fois que vous êtes satisfait que le compilateur génère du code valide pour lARM, vous prenez le code ARM compilé et lexécutez sur larchitecture ARM cible. Vous avez maintenant la source du nouveau compilateur, qui peut être modifiée et introduite dans son exécutable et générer une nouvelle version.
Ce processus sappelle la compilation croisée. Lavantage est que vous navez que pour écrire une fois le compilateur.
Réponse
dune autre réponse:
Step 1. Write your compiler in a different language. Step 2. Compile the code from Step 1. Step 3. Write your compiler in the same language. Step 4. Compile the code from step 3.
Les étapes 1 et 2 ne sont nécessaires que pour le « tout premier » compilateur dun nouveau langage. Il existe de nombreuses variantes sur les étapes 3 et 4, donc par exemple, vous pouvez écrire le générateur de code pour une nouvelle architecture, cross compile, puis exécutez le même compilateur sur une nouvelle machine.Ou vous pouvez étendre votre compilateur pour gérer la nouvelle syntaxe et les constructions sans utiliser aucune des extensions, puis réécrire le compilateur pour utiliser les extensions et se compiler lui-même.