Quelquun peut-il fournir un exemple de code court de démarrage du compilateur? [fermé]

Fermé . Cette question doit être plus ciblée . Il naccepte pas les réponses actuellement.

Commentaires

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.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *